From f272fc93767be3e3e8ad6f5ffd9874933193ded3 Mon Sep 17 00:00:00 2001 From: Dan Vanderkam Date: Tue, 21 Apr 2015 18:02:04 -0400 Subject: [PATCH] Fix and regression test for fast proxy artifacts. See issue #558 --- dygraph-canvas.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/dygraph-canvas.js b/dygraph-canvas.js index 6e503d9..4ec72a4 100644 --- a/dygraph-canvas.js +++ b/dygraph-canvas.js @@ -641,6 +641,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; @@ -719,6 +720,9 @@ DygraphCanvasRenderer._fastCanvasProxy = function(context) { context.moveTo(action[1], action[2]); } } + if (pendingActions.length) { + lastFlushedX = pendingActions[pendingActions.length - 1][1]; + } actionCount += pendingActions.length; pendingActions = []; }; @@ -726,7 +730,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]); @@ -850,7 +859,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); } -- 2.7.4