X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;ds=sidebyside;f=dygraph-canvas.js;h=04280c4946a81efa05e04dc8327683daea52d2ee;hb=1b89e01f33c071af04e0586163fa3c09ac115b09;hp=c2b2e241d0755e4217b281d244d5826b53784366;hpb=423f5ed326c378ef0e06e650d6068edc80214b74;p=dygraphs.git diff --git a/dygraph-canvas.js b/dygraph-canvas.js index c2b2e24..04280c4 100644 --- a/dygraph-canvas.js +++ b/dygraph-canvas.js @@ -2,32 +2,22 @@ // All Rights Reserved. /** - * @fileoverview Based on PlotKit, but modified to meet the needs of dygraphs. + * @fileoverview Based on PlotKit.CanvasRenderer, but modified to meet the + * needs of dygraphs. + * * In particular, support for: * - grid overlays * - error bars * - dygraphs attribute system - * - * High level overview of classes: - * - * - DygraphLayout - * This contains all the data to be charted. - * It uses data coordinates, but also records the chart range (in data - * coordinates) and hence is able to calculate percentage positions ('In - * this view, Point A lies 25% down the x-axis.') - * Two things that it does not do are: - * 1. Record pixel coordinates for anything. - * 2. (oddly) determine anything about the layout of chart elements. - * The naming is a vestige of Dygraph's original PlotKit roots. - * - * - DygraphCanvasRenderer - * This class determines the charting area (in pixel coordinates), maps the - * percentage coordinates in the DygraphLayout to pixels and draws them. - * It's also responsible for creating chart DOM elements, i.e. annotations, - * tick mark labels, the title and the x/y-axis labels. */ /** + * This class determines the charting area (in pixel coordinates), maps the + * percentage coordinates in the DygraphLayout to pixels and draws them. + * It's also responsible for creating chart DOM elements, i.e. annotations, + * tick mark labels, the title and the x/y-axis labels. + * This class is based on PlotKit.CanvasRenderer. + * * Creates a new DygraphLayout object. * @return {Object} The DygraphLayout object */ @@ -70,7 +60,7 @@ DygraphLayout.prototype.setAnnotations = function(ann) { return; } Dygraph.update(a, ann[i]); - if (!a.xval) a.xval = parse(a.x); + if (!a.xval) a.xval = parse(a.x, this.dygraph_); this.annotations.push(a); } }; @@ -281,10 +271,12 @@ DygraphLayout.prototype.unstackPointAtIndex = function(idx) { /** * The DygraphCanvasRenderer class does the actual rendering of the chart onto * a canvas. It's based on PlotKit.CanvasRenderer. +>>>>>>> master * @param {Object} element The canvas to attach to * @param {Object} elementContext The 2d context of the canvas (injected so it * can be mocked for testing.) * @param {Layout} layout The DygraphLayout object for this graph. + * @constructor */ DygraphCanvasRenderer = function(dygraph, element, elementContext, layout) { this.dygraph_ = dygraph; @@ -330,15 +322,26 @@ DygraphCanvasRenderer.prototype.attr_ = function(x) { // Compute the box which the chart should be drawn in. This is the canvas's // box, less space needed for axis and chart labels. +// TODO(danvk): this belongs in DygraphLayout. DygraphCanvasRenderer.prototype.computeArea_ = function() { var area = { // TODO(danvk): per-axis setting. - x: this.attr_('yAxisLabelWidth') + 2 * this.attr_('axisTickSize'), + x: 0, y: 0 }; + if (this.attr_('drawYAxis')) { + area.x = this.attr_('yAxisLabelWidth') + 2 * this.attr_('axisTickSize'); + } + area.w = this.width - area.x - this.attr_('rightGap'); - area.h = this.height - this.attr_('axisLabelFontSize') - - 2 * this.attr_('axisTickSize'); + area.h = this.height; + if (this.attr_('drawXAxis')) { + if (this.attr_('xAxisHeight')) { + area.h -= this.attr_('xAxisHeight'); + } else { + area.h -= this.attr_('axisLabelFontSize') + 2 * this.attr_('axisTickSize'); + } + } // Shrink the drawing area to accomodate additional y-axes. if (this.dygraph_.numAxes() == 2) { @@ -432,6 +435,14 @@ DygraphCanvasRenderer.isSupported = function(canvasName) { }; /** + * @param { [String] } colors Array of color strings. Should have one entry for + * each series to be rendered. + */ +DygraphCanvasRenderer.prototype.setColors = function(colors) { + this.colorScheme_ = colors; +}; + +/** * Draw an X/Y grid on top of the existing plot */ DygraphCanvasRenderer.prototype.render = function() { @@ -451,7 +462,7 @@ DygraphCanvasRenderer.prototype.render = function() { var ticks = this.layout.yticks; ctx.save(); ctx.strokeStyle = this.attr_('gridLineColor'); - ctx.lineWidth = this.attr_('axisLineWidth'); + ctx.lineWidth = this.attr_('gridLineWidth'); for (var i = 0; i < ticks.length; i++) { // TODO(danvk): allow secondary axes to draw a grid, too. if (ticks[i][0] != 0) continue; @@ -469,7 +480,7 @@ DygraphCanvasRenderer.prototype.render = function() { var ticks = this.layout.xticks; ctx.save(); ctx.strokeStyle = this.attr_('gridLineColor'); - ctx.lineWidth = this.attr_('axisLineWidth'); + ctx.lineWidth = this.attr_('gridLineWidth'); for (var i=0; i