From: Jukka Kurkela Date: Tue, 21 Jan 2020 23:30:23 +0000 (+0200) Subject: Filler fix (#6989) X-Git-Tag: v3.0.0-alpha~107 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b76dd46d72fcab01f15d6f828efd1d57a0950e6e;p=thirdparty%2FChart.js.git Filler fix (#6989) * Filler fix * Add an indicator of reference points --- diff --git a/src/plugins/plugin.filler.js b/src/plugins/plugin.filler.js index 2473a6fd2..03ea9dcaa 100644 --- a/src/plugins/plugin.filler.js +++ b/src/plugins/plugin.filler.js @@ -164,11 +164,11 @@ function pointsFromSegments(boundary, line) { const first = linePoints[segment.start]; const last = linePoints[segment.end]; if (y !== null) { - points.push({x: first.x, y}); - points.push({x: last.x, y}); + points.push({x: first.x, y, _prop: 'x', _ref: first}); + points.push({x: last.x, y, _prop: 'x', _ref: last}); } else if (x !== null) { - points.push({x, y: first.y}); - points.push({x, y: last.y}); + points.push({x, y: first.y, _prop: 'y', _ref: first}); + points.push({x, y: last.y, _prop: 'y', _ref: last}); } }); return points; @@ -184,6 +184,7 @@ function getTarget(source) { const boundary = computeBoundary(source); let points = []; let _loop = false; + let _refPoints = false; if (boundary instanceof simpleArc) { return boundary; @@ -194,8 +195,15 @@ function getTarget(source) { points = boundary; } else { points = pointsFromSegments(boundary, line); + _refPoints = true; } - return points.length ? new Line({points, options: {tension: 0}, _loop, _fullLoop: _loop}) : null; + return points.length ? new Line({ + points, + options: {tension: 0}, + _loop, + _fullLoop: _loop, + _refPoints + }) : null; } function resolveTarget(sources, index, propagate) { @@ -264,6 +272,17 @@ function _segments(line, target, property) { const tpoints = target.points; const parts = []; + if (target._refPoints) { + // Update properties from reference points. (In case those points are animating) + for (let i = 0, ilen = tpoints.length; i < ilen; ++i) { + const point = tpoints[i]; + const prop = point._prop; + if (prop) { + point[prop] = point._ref[prop]; + } + } + } + for (let segment of line.segments) { const bounds = getBounds(property, points[segment.start], points[segment.end], segment.loop);