]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Filler fix (#6989)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Tue, 21 Jan 2020 23:30:23 +0000 (01:30 +0200)
committerEvert Timberg <evert.timberg+github@gmail.com>
Tue, 21 Jan 2020 23:30:23 +0000 (18:30 -0500)
* Filler fix
* Add an indicator of reference points

src/plugins/plugin.filler.js

index 2473a6fd2a23c55d65ce96242515185f6a65c331..03ea9dcaa631ab6a1848210615bd52269792f281 100644 (file)
@@ -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);