]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Make sure bezier control points are updated (#7710)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Sat, 15 Aug 2020 21:06:03 +0000 (00:06 +0300)
committerGitHub <noreply@github.com>
Sat, 15 Aug 2020 21:06:03 +0000 (17:06 -0400)
* Make sure bezier control points are updated
* Test

src/controllers/controller.line.js
src/elements/element.line.js
test/specs/controller.line.tests.js

index 53083db0ea34e84e23e390024852efd721a2613e..b7202dca76b5e4588be98ad9b7af0baab19c549f 100644 (file)
@@ -103,6 +103,11 @@ export default class LineController extends DatasetController {
                const lastPoint = data[data.length - 1].size();
                return Math.max(border, firstPoint, lastPoint) / 2;
        }
+
+       draw() {
+               this._cachedMeta.dataset.updateControlPoints(this.chart.chartArea);
+               super.draw();
+       }
 }
 
 LineController.id = 'line';
index 55f3718e97d8f2475168148fa11f7f7c19999d12..d01278d3ef367696dc4511429d4b49ac50a7dd02 100644 (file)
@@ -194,6 +194,7 @@ export default class Line extends Element {
                this._fullLoop = undefined;
                this._points = undefined;
                this._segments = undefined;
+               this._pointsUpdated = false;
 
                if (cfg) {
                        Object.assign(this, cfg);
@@ -203,9 +204,10 @@ export default class Line extends Element {
        updateControlPoints(chartArea) {
                const me = this;
                const options = me.options;
-               if (options.tension && !options.stepped) {
+               if (options.tension && !options.stepped && !me._pointsUpdated) {
                        const loop = options.spanGaps ? me._loop : me._fullLoop;
                        _updateBezierControlPoints(me._points, options, chartArea, loop);
+                       me._pointsUpdated = true;
                }
        }
 
@@ -338,6 +340,8 @@ export default class Line extends Element {
 
                ctx.stroke();
                ctx.restore();
+
+               this._pointsUpdated = false;
        }
 }
 
index e66ed710162318a89a16faf1691b4162442510f2..b709d6d4547dc50f0a5ebf6402e144e02d76e545 100644 (file)
@@ -79,6 +79,7 @@ describe('Chart.controllers.line', function() {
                });
 
                var meta = chart.getDatasetMeta(0);
+               spyOn(meta.dataset, 'updateControlPoints');
                spyOn(meta.dataset, 'draw');
                spyOn(meta.data[0], 'draw');
                spyOn(meta.data[1], 'draw');
@@ -87,6 +88,8 @@ describe('Chart.controllers.line', function() {
 
                chart.update();
 
+               expect(meta.dataset.updateControlPoints.calls.count()).toBeGreaterThanOrEqual(1);
+               expect(meta.dataset.draw.calls.count()).toBe(1);
                expect(meta.data[0].draw.calls.count()).toBe(1);
                expect(meta.data[1].draw.calls.count()).toBe(1);
                expect(meta.data[2].draw.calls.count()).toBe(1);