diff --git a/src/elements/element.line.js b/src/elements/element.line.js index 985fa0b24e9..6cb13703eda 100644 --- a/src/elements/element.line.js +++ b/src/elements/element.line.js @@ -27,7 +27,7 @@ function getLineMethod(options) { return _steppedLineTo; } - if (options.tension) { + if (options.tension || options.cubicInterpolationMode === 'monotone') { return _bezierCurveTo; } @@ -182,7 +182,7 @@ function fastPathSegment(ctx, line, segment, params) { function _getSegmentMethod(line) { const opts = line.options; const borderDash = opts.borderDash && opts.borderDash.length; - const useFastPath = !line._decimated && !line._loop && !opts.tension && !opts.stepped && !borderDash; + const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash; return useFastPath ? fastPathSegment : pathSegment; } @@ -194,7 +194,7 @@ function _getInterpolationMethod(options) { return _steppedInterpolation; } - if (options.tension) { + if (options.tension || options.cubicInterpolationMode === 'monotone') { return _bezierInterpolation; } @@ -260,7 +260,7 @@ export default class LineElement extends Element { updateControlPoints(chartArea) { const me = this; const options = me.options; - if (options.tension && !options.stepped && !me._pointsUpdated) { + if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !me._pointsUpdated) { const loop = options.spanGaps ? me._loop : me._fullLoop; _updateBezierControlPoints(me._points, options, chartArea, loop); me._pointsUpdated = true; diff --git a/test/fixtures/element.line/cubicInterpolationMode/monotone.js b/test/fixtures/element.line/cubicInterpolationMode/monotone.js new file mode 100644 index 00000000000..29f68c95bef --- /dev/null +++ b/test/fixtures/element.line/cubicInterpolationMode/monotone.js @@ -0,0 +1,27 @@ +module.exports = { + config: { + type: 'line', + data: { + datasets: [ + { + data: [{x: 1, y: 10}, {x: 5, y: 0}, {x: 15, y: -10}, {x: 19, y: -5}], + borderColor: 'red', + fill: false, + cubicInterpolationMode: 'monotone' + } + ] + }, + options: { + scales: { + x: {type: 'linear', display: false, min: 0, max: 20}, + y: {display: false, min: -15, max: 15} + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/element.line/cubicInterpolationMode/monotone.png b/test/fixtures/element.line/cubicInterpolationMode/monotone.png new file mode 100644 index 00000000000..6c79efd0780 Binary files /dev/null and b/test/fixtures/element.line/cubicInterpolationMode/monotone.png differ diff --git a/test/fixtures/plugin.filler/line/before-dataset-draw.png b/test/fixtures/plugin.filler/line/before-dataset-draw.png index b69852d2d78..6ed2fe4c076 100644 Binary files a/test/fixtures/plugin.filler/line/before-dataset-draw.png and b/test/fixtures/plugin.filler/line/before-dataset-draw.png differ diff --git a/test/fixtures/plugin.filler/line/before-datasets-draw.png b/test/fixtures/plugin.filler/line/before-datasets-draw.png index 9178b852835..54c9517b85e 100644 Binary files a/test/fixtures/plugin.filler/line/before-datasets-draw.png and b/test/fixtures/plugin.filler/line/before-datasets-draw.png differ diff --git a/test/fixtures/plugin.filler/line/boundary/origin-spline-above.png b/test/fixtures/plugin.filler/line/boundary/origin-spline-above.png index 3b3caff7391..2d875467fb6 100644 Binary files a/test/fixtures/plugin.filler/line/boundary/origin-spline-above.png and b/test/fixtures/plugin.filler/line/boundary/origin-spline-above.png differ diff --git a/test/fixtures/plugin.filler/line/boundary/origin-spline-span.png b/test/fixtures/plugin.filler/line/boundary/origin-spline-span.png index a93784a2a0e..fd54df60cca 100644 Binary files a/test/fixtures/plugin.filler/line/boundary/origin-spline-span.png and b/test/fixtures/plugin.filler/line/boundary/origin-spline-span.png differ diff --git a/test/fixtures/plugin.filler/line/boundary/origin-spline.png b/test/fixtures/plugin.filler/line/boundary/origin-spline.png index 4d67822d5d8..94035713e56 100644 Binary files a/test/fixtures/plugin.filler/line/boundary/origin-spline.png and b/test/fixtures/plugin.filler/line/boundary/origin-spline.png differ diff --git a/test/fixtures/plugin.filler/line/dataset/span-dual.png b/test/fixtures/plugin.filler/line/dataset/span-dual.png index a7b705ced47..158759d3489 100644 Binary files a/test/fixtures/plugin.filler/line/dataset/span-dual.png and b/test/fixtures/plugin.filler/line/dataset/span-dual.png differ diff --git a/test/fixtures/plugin.filler/line/dataset/spline-span-above.png b/test/fixtures/plugin.filler/line/dataset/spline-span-above.png index 48149323171..2c8dbd2a779 100644 Binary files a/test/fixtures/plugin.filler/line/dataset/spline-span-above.png and b/test/fixtures/plugin.filler/line/dataset/spline-span-above.png differ diff --git a/test/fixtures/plugin.filler/line/dataset/spline-span-below.png b/test/fixtures/plugin.filler/line/dataset/spline-span-below.png index 5eb6663b778..68a20e2eeea 100644 Binary files a/test/fixtures/plugin.filler/line/dataset/spline-span-below.png and b/test/fixtures/plugin.filler/line/dataset/spline-span-below.png differ diff --git a/test/fixtures/plugin.filler/line/dataset/spline-span.png b/test/fixtures/plugin.filler/line/dataset/spline-span.png index feb4fefb9a4..07716a2f210 100644 Binary files a/test/fixtures/plugin.filler/line/dataset/spline-span.png and b/test/fixtures/plugin.filler/line/dataset/spline-span.png differ diff --git a/test/fixtures/plugin.filler/line/dataset/spline.png b/test/fixtures/plugin.filler/line/dataset/spline.png index ed02242e339..a66f3564887 100644 Binary files a/test/fixtures/plugin.filler/line/dataset/spline.png and b/test/fixtures/plugin.filler/line/dataset/spline.png differ