Skip to content

Commit 689befa

Browse files
authored
Make sure bezier control points are updated (chartjs#7710)
* Make sure bezier control points are updated * Test
1 parent 6ad17c0 commit 689befa

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

src/controllers/controller.line.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ export default class LineController extends DatasetController {
103103
const lastPoint = data[data.length - 1].size();
104104
return Math.max(border, firstPoint, lastPoint) / 2;
105105
}
106+
107+
draw() {
108+
this._cachedMeta.dataset.updateControlPoints(this.chart.chartArea);
109+
super.draw();
110+
}
106111
}
107112

108113
LineController.id = 'line';

src/elements/element.line.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ export default class Line extends Element {
194194
this._fullLoop = undefined;
195195
this._points = undefined;
196196
this._segments = undefined;
197+
this._pointsUpdated = false;
197198

198199
if (cfg) {
199200
Object.assign(this, cfg);
@@ -203,9 +204,10 @@ export default class Line extends Element {
203204
updateControlPoints(chartArea) {
204205
const me = this;
205206
const options = me.options;
206-
if (options.tension && !options.stepped) {
207+
if (options.tension && !options.stepped && !me._pointsUpdated) {
207208
const loop = options.spanGaps ? me._loop : me._fullLoop;
208209
_updateBezierControlPoints(me._points, options, chartArea, loop);
210+
me._pointsUpdated = true;
209211
}
210212
}
211213

@@ -338,6 +340,8 @@ export default class Line extends Element {
338340

339341
ctx.stroke();
340342
ctx.restore();
343+
344+
this._pointsUpdated = false;
341345
}
342346
}
343347

test/specs/controller.line.tests.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ describe('Chart.controllers.line', function() {
7979
});
8080

8181
var meta = chart.getDatasetMeta(0);
82+
spyOn(meta.dataset, 'updateControlPoints');
8283
spyOn(meta.dataset, 'draw');
8384
spyOn(meta.data[0], 'draw');
8485
spyOn(meta.data[1], 'draw');
@@ -87,6 +88,8 @@ describe('Chart.controllers.line', function() {
8788

8889
chart.update();
8990

91+
expect(meta.dataset.updateControlPoints.calls.count()).toBeGreaterThanOrEqual(1);
92+
expect(meta.dataset.draw.calls.count()).toBe(1);
9093
expect(meta.data[0].draw.calls.count()).toBe(1);
9194
expect(meta.data[1].draw.calls.count()).toBe(1);
9295
expect(meta.data[2].draw.calls.count()).toBe(1);

0 commit comments

Comments
 (0)