X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=src%2Fdygraph-canvas.js;h=aed387bd482c225dcf869187edd61f665857501b;hb=98759508ba47001d531374bf1934232246b4eaf1;hp=a688c43975958639e973715cdcbc5727b18712c9;hpb=3123ca57f71d145bb5bcc4a2f754d3dff3225346;p=dygraphs.git diff --git a/src/dygraph-canvas.js b/src/dygraph-canvas.js index a688c43..aed387b 100644 --- a/src/dygraph-canvas.js +++ b/src/dygraph-canvas.js @@ -548,6 +548,7 @@ DygraphCanvasRenderer._errorPlotter = function(e) { DygraphCanvasRenderer._fastCanvasProxy = function(context) { var pendingActions = []; // array of [type, x, y] tuples var lastRoundedX = null; + var lastFlushedX = null; var LINE_TO = 1, MOVE_TO = 2; @@ -626,6 +627,9 @@ DygraphCanvasRenderer._fastCanvasProxy = function(context) { context.moveTo(action[1], action[2]); } } + if (pendingActions.length) { + lastFlushedX = pendingActions[pendingActions.length - 1][1]; + } actionCount += pendingActions.length; pendingActions = []; }; @@ -633,7 +637,12 @@ DygraphCanvasRenderer._fastCanvasProxy = function(context) { var addAction = function(action, x, y) { var rx = Math.round(x); if (lastRoundedX === null || rx != lastRoundedX) { - flushActions(); + // if there are large gaps on the x-axis, it's essential to keep the + // first and last point as well. + var hasGapOnLeft = (lastRoundedX - lastFlushedX > 1), + hasGapOnRight = (rx - lastRoundedX > 1), + hasGap = hasGapOnLeft || hasGapOnRight; + flushActions(hasGap); lastRoundedX = rx; } pendingActions.push([action, x, y]); @@ -698,7 +707,6 @@ DygraphCanvasRenderer._fillPlotter = function(e) { var sets = e.allSeriesPoints; var setCount = sets.length; - var fillAlpha = g.getNumericOption('fillAlpha'); var stackedGraph = g.getBooleanOption("stackedGraph"); var colors = g.getColors(); @@ -730,6 +738,7 @@ DygraphCanvasRenderer._fillPlotter = function(e) { var setName = setNames[setIdx]; if (!g.getBooleanOption('fillGraph', setName)) continue; + var fillAlpha = g.getNumericOption('fillAlpha', setName); var stepPlot = g.getBooleanOption('stepPlot', setName); var color = colors[setIdx]; var axis = g.axisPropertiesForSeries(setName); @@ -757,7 +766,7 @@ DygraphCanvasRenderer._fillPlotter = function(e) { // If the point density is high enough, dropping segments on their way to // the canvas justifies the overhead of doing so. - if (points.length > 2 * g.width_) { + if (points.length > 2 * g.width_ || Dygraph.FORCE_FAST_PROXY) { ctx = DygraphCanvasRenderer._fastCanvasProxy(ctx); }