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';
this._fullLoop = undefined;
this._points = undefined;
this._segments = undefined;
+ this._pointsUpdated = false;
if (cfg) {
Object.assign(this, cfg);
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;
}
}
ctx.stroke();
ctx.restore();
+
+ this._pointsUpdated = false;
}
}
});
var meta = chart.getDatasetMeta(0);
+ spyOn(meta.dataset, 'updateControlPoints');
spyOn(meta.dataset, 'draw');
spyOn(meta.data[0], 'draw');
spyOn(meta.data[1], 'draw');
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);