From 11ef1e5e8957afefb00da6013ce02bfd178ac7c2 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Mon, 11 Nov 2019 00:41:01 +0200 Subject: [PATCH] Versatile clipping (#6642) Versatile clipping algorithm for different chart types --- docs/charts/bar.md | 3 + docs/charts/bubble.md | 2 + docs/charts/doughnut.md | 8 ++ docs/charts/line.md | 2 + docs/charts/polar.md | 7 ++ docs/charts/radar.md | 2 + src/controllers/controller.bubble.js | 15 ++++ src/controllers/controller.line.js | 27 +++--- src/core/core.controller.js | 13 +++ src/core/core.datasetController.js | 67 +++++++++++++++ src/elements/element.point.js | 7 ++ test/fixtures/controller.bubble/clip.js | 35 ++++++++ test/fixtures/controller.bubble/clip.png | Bin 0 -> 4685 bytes .../controller.bubble/point-style.json | 2 +- .../controller.line/clip/default-x-max.json | 38 +++++++++ .../controller.line/clip/default-x-max.png | Bin 0 -> 13051 bytes .../controller.line/clip/default-x-min.json | 38 +++++++++ .../controller.line/clip/default-x-min.png | Bin 0 -> 13216 bytes .../controller.line/clip/default-x.json | 39 +++++++++ .../controller.line/clip/default-x.png | Bin 0 -> 12199 bytes .../controller.line/clip/default-y-max.json | 38 +++++++++ .../controller.line/clip/default-y-max.png | Bin 0 -> 14541 bytes .../controller.line/clip/default-y-min.json | 38 +++++++++ .../controller.line/clip/default-y-min.png | Bin 0 -> 15057 bytes .../controller.line/clip/default-y.json | 39 +++++++++ .../controller.line/clip/default-y.png | Bin 0 -> 14312 bytes .../controller.line/clip/specified.json | 77 ++++++++++++++++++ .../controller.line/clip/specified.png | Bin 0 -> 26837 bytes 28 files changed, 485 insertions(+), 12 deletions(-) create mode 100644 test/fixtures/controller.bubble/clip.js create mode 100644 test/fixtures/controller.bubble/clip.png create mode 100644 test/fixtures/controller.line/clip/default-x-max.json create mode 100644 test/fixtures/controller.line/clip/default-x-max.png create mode 100644 test/fixtures/controller.line/clip/default-x-min.json create mode 100644 test/fixtures/controller.line/clip/default-x-min.png create mode 100644 test/fixtures/controller.line/clip/default-x.json create mode 100644 test/fixtures/controller.line/clip/default-x.png create mode 100644 test/fixtures/controller.line/clip/default-y-max.json create mode 100644 test/fixtures/controller.line/clip/default-y-max.png create mode 100644 test/fixtures/controller.line/clip/default-y-min.json create mode 100644 test/fixtures/controller.line/clip/default-y-min.png create mode 100644 test/fixtures/controller.line/clip/default-y.json create mode 100644 test/fixtures/controller.line/clip/default-y.png create mode 100644 test/fixtures/controller.line/clip/specified.json create mode 100644 test/fixtures/controller.line/clip/specified.png diff --git a/docs/charts/bar.md b/docs/charts/bar.md index 9bb8e4c8b..f2b0193bd 100644 --- a/docs/charts/bar.md +++ b/docs/charts/bar.md @@ -72,6 +72,7 @@ the color of the bars is generally set this way. | [`borderColor`](#styling) | [`Color`](../general/colors.md) | Yes | Yes | `'rgba(0, 0, 0, 0.1)'` | [`borderSkipped`](#borderskipped) | `string` | Yes | Yes | `'bottom'` | [`borderWidth`](#borderwidth) | number|object | Yes | Yes | `0` +| [`clip`](#general) | number|object | - | - | `undefined` | [`data`](#data-structure) | `object[]` | - | - | **required** | [`hoverBackgroundColor`](#interactions) | [`Color`](../general/colors.md) | - | Yes | `undefined` | [`hoverBorderColor`](#interactions) | [`Color`](../general/colors.md) | - | Yes | `undefined` @@ -85,6 +86,7 @@ the color of the bars is generally set this way. | Name | Description | ---- | ---- +| `clip` | How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. `0` = clip at chartArea. Clipping can also be configured per side: `clip: {left: 5, top: false, right: -2, bottom: 0}` | `label` | The label for the dataset which appears in the legend and tooltips. | `order` | The drawing order of dataset. Also affects order for stacking, tooltip, and legend. | `xAxisID` | The ID of the x axis to plot this dataset on. @@ -100,6 +102,7 @@ The style of each bar can be controlled with the following properties: | `borderColor` | The bar border color. | [`borderSkipped`](#borderskipped) | The edge to skip when drawing bar. | [`borderWidth`](#borderwidth) | The bar border width (in pixels). +| `clip` | How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. `0` = clip at chartArea. Clipping can also be configured per side: `clip: {left: 5, top: false, right: -2, bottom: 0}` All these values, if `undefined`, fallback to the associated [`elements.rectangle.*`](../configuration/elements.md#rectangle-configuration) options. diff --git a/docs/charts/bubble.md b/docs/charts/bubble.md index 6536395c2..d9dd73892 100644 --- a/docs/charts/bubble.md +++ b/docs/charts/bubble.md @@ -43,6 +43,7 @@ The bubble chart allows a number of properties to be specified for each dataset. | [`backgroundColor`](#styling) | [`Color`](../general/colors.md) | Yes | Yes | `'rgba(0, 0, 0, 0.1)'` | [`borderColor`](#styling) | [`Color`](../general/colors.md) | Yes | Yes | `'rgba(0, 0, 0, 0.1)'` | [`borderWidth`](#styling) | `number` | Yes | Yes | `3` +| [`clip`](#general) | number|object | - | - | `undefined` | [`data`](#data-structure) | `object[]` | - | - | **required** | [`hoverBackgroundColor`](#interactions) | [`Color`](../general/colors.md) | Yes | Yes | `undefined` | [`hoverBorderColor`](#interactions) | [`Color`](../general/colors.md) | Yes | Yes | `undefined` @@ -59,6 +60,7 @@ The bubble chart allows a number of properties to be specified for each dataset. | Name | Description | ---- | ---- +| `clip` | How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. `0` = clip at chartArea. Clipping can also be configured per side: `clip: {left: 5, top: false, right: -2, bottom: 0}` | `label` | The label for the dataset which appears in the legend and tooltips. | `order` | The drawing order of dataset. diff --git a/docs/charts/doughnut.md b/docs/charts/doughnut.md index 5140051b3..b13a422d1 100644 --- a/docs/charts/doughnut.md +++ b/docs/charts/doughnut.md @@ -59,12 +59,20 @@ The doughnut/pie chart allows a number of properties to be specified for each da | [`borderAlign`](#border-alignment) | `string` | Yes | Yes | `'center'` | [`borderColor`](#styling) | [`Color`](../general/colors.md) | Yes | Yes | `'#fff'` | [`borderWidth`](#styling) | `number` | Yes | Yes | `2` +| [`clip`](#general) | number|object | - | - | `undefined` | [`data`](#data-structure) | `number[]` | - | - | **required** | [`hoverBackgroundColor`](#interations) | [`Color`](../general/colors.md) | Yes | Yes | `undefined` | [`hoverBorderColor`](#interactions) | [`Color`](../general/colors.md) | Yes | Yes | `undefined` | [`hoverBorderWidth`](#interactions) | `number` | Yes | Yes | `undefined` | [`weight`](#styling) | `number` | - | - | `1` +### General + +| Name | Description +| ---- | ---- +| `clip` | How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. `0` = clip at chartArea. Clipping can also be configured per side: `clip: {left: 5, top: false, right: -2, bottom: 0}` + + ### Styling The style of each arc can be controlled with the following properties: diff --git a/docs/charts/line.md b/docs/charts/line.md index beec61ed5..665513dae 100644 --- a/docs/charts/line.md +++ b/docs/charts/line.md @@ -50,6 +50,7 @@ The line chart allows a number of properties to be specified for each dataset. T | [`borderDashOffset`](#line-styling) | `number` | Yes | - | `0.0` | [`borderJoinStyle`](#line-styling) | `string` | Yes | - | `'miter'` | [`borderWidth`](#line-styling) | `number` | Yes | - | `3` +| [`clip`](#general) | number|object | - | - | `undefined` | [`cubicInterpolationMode`](#cubicinterpolationmode) | `string` | Yes | - | `'default'` | [`fill`](#line-styling) | boolean|string | Yes | - | `true` | [`hoverBackgroundColor`](#line-styling) | [`Color`](../general/colors.md) | Yes | - | `undefined` @@ -83,6 +84,7 @@ The line chart allows a number of properties to be specified for each dataset. T | Name | Description | ---- | ---- +| `clip` | How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. `0` = clip at chartArea. Clipping can also be configured per side: `clip: {left: 5, top: false, right: -2, bottom: 0}` | `label` | The label for the dataset which appears in the legend and tooltips. | `order` | The drawing order of dataset. Also affects order for stacking, tooltip, and legend. | `xAxisID` | The ID of the x axis to plot this dataset on. diff --git a/docs/charts/polar.md b/docs/charts/polar.md index 84275dd93..bbc9f046c 100644 --- a/docs/charts/polar.md +++ b/docs/charts/polar.md @@ -50,11 +50,18 @@ The following options can be included in a polar area chart dataset to configure | [`borderAlign`](#border-alignment) | `string` | Yes | Yes | `'center'` | [`borderColor`](#styling) | [`Color`](../general/colors.md) | Yes | Yes | `'#fff'` | [`borderWidth`](#styling) | `number` | Yes | Yes | `2` +| [`clip`](#general) | number|object | - | - | `undefined` | [`data`](#data-structure) | `number[]` | - | - | **required** | [`hoverBackgroundColor`](#interations) | [`Color`](../general/colors.md) | Yes | Yes | `undefined` | [`hoverBorderColor`](#interactions) | [`Color`](../general/colors.md) | Yes | Yes | `undefined` | [`hoverBorderWidth`](#interactions) | `number` | Yes | Yes | `undefined` +### General + +| Name | Description +| ---- | ---- +| `clip` | How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. `0` = clip at chartArea. Clipping can also be configured per side: `clip: {left: 5, top: false, right: -2, bottom: 0}` + ### Styling The style of each arc can be controlled with the following properties: diff --git a/docs/charts/radar.md b/docs/charts/radar.md index 7ec740266..0e993f597 100644 --- a/docs/charts/radar.md +++ b/docs/charts/radar.md @@ -81,6 +81,7 @@ The radar chart allows a number of properties to be specified for each dataset. | [`hoverBorderDashOffset`](#line-styling) | `number` | Yes | - | `undefined` | [`hoverBorderJoinStyle`](#line-styling) | `string` | Yes | - | `undefined` | [`hoverBorderWidth`](#line-styling) | `number` | Yes | - | `undefined` +| [`clip`](#general) | number|object | - | - | `undefined` | [`fill`](#line-styling) | boolean|string | Yes | - | `true` | [`label`](#general) | `string` | - | - | `''` | [`order`](#general) | `number` | - | - | `0` @@ -102,6 +103,7 @@ The radar chart allows a number of properties to be specified for each dataset. | Name | Description | ---- | ---- +| `clip` | How to clip relative to chartArea. Positive value allows overflow, negative value clips that many pixels inside chartArea. `0` = clip at chartArea. Clipping can also be configured per side: `clip: {left: 5, top: false, right: -2, bottom: 0}` | `label` | The label for the dataset which appears in the legend and tooltips. | `order` | The drawing order of dataset. diff --git a/src/controllers/controller.bubble.js b/src/controllers/controller.bubble.js index 39cf25668..d344f488e 100644 --- a/src/controllers/controller.bubble.js +++ b/src/controllers/controller.bubble.js @@ -79,6 +79,21 @@ module.exports = DatasetController.extend({ return parsed; }, + /** + * @private + */ + _getMaxOverflow: function() { + var me = this; + var meta = me._cachedMeta; + var data = meta.data || []; + if (!data.length) { + return false; + } + var firstPoint = data[0].size(); + var lastPoint = data[data.length - 1].size(); + return Math.max(firstPoint, lastPoint) / 2; + }, + /** * @protected */ diff --git a/src/controllers/controller.line.js b/src/controllers/controller.line.js index b7fc90c29..c4e49110b 100644 --- a/src/controllers/controller.line.js +++ b/src/controllers/controller.line.js @@ -159,6 +159,22 @@ module.exports = DatasetController.extend({ return values; }, + /** + * @private + */ + _getMaxOverflow: function() { + var me = this; + var meta = me._cachedMeta; + var data = meta.data || []; + if (!data.length) { + return false; + } + var border = me._showLine ? meta.dataset._model.borderWidth : 0; + var firstPoint = data[0].size(); + var lastPoint = data[data.length - 1].size(); + return Math.max(border, firstPoint, lastPoint) / 2; + }, + updateBezierControlPoints: function() { var me = this; var chart = me.chart; @@ -222,21 +238,10 @@ module.exports = DatasetController.extend({ var area = chart.chartArea; var i = 0; var ilen = points.length; - var halfBorderWidth; if (me._showLine) { - halfBorderWidth = (meta.dataset._model.borderWidth || 0) / 2; - - helpers.canvas.clipArea(chart.ctx, { - left: area.left - halfBorderWidth, - right: area.right + halfBorderWidth, - top: area.top - halfBorderWidth, - bottom: area.bottom + halfBorderWidth - }); meta.dataset.draw(); - - helpers.canvas.unclipArea(chart.ctx); } // Draw the points diff --git a/src/core/core.controller.js b/src/core/core.controller.js index db5391dd9..fb42f1195 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -772,6 +772,10 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { */ drawDataset: function(meta, easingValue) { var me = this; + var ctx = me.ctx; + var clip = meta._clip; + var canvas = me.canvas; + var area = me.chartArea; var args = { meta: meta, index: meta.index, @@ -782,8 +786,17 @@ helpers.extend(Chart.prototype, /** @lends Chart */ { return; } + helpers.canvas.clipArea(ctx, { + left: clip.left === false ? 0 : area.left - clip.left, + right: clip.right === false ? canvas.width : area.right + clip.right, + top: clip.top === false ? 0 : area.top - clip.top, + bottom: clip.bottom === false ? canvas.height : area.bottom + clip.bottom + }); + meta.controller.draw(easingValue); + helpers.canvas.unclipArea(ctx); + plugins.notify(me, 'afterDatasetDraw', [args]); }, diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index a434d0c5a..9d33d72a9 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -48,6 +48,53 @@ function listenArrayEvents(array, listener) { }); } + +function scaleClip(scale, allowedOverflow) { + var tickOpts = scale && scale.options.ticks || {}; + var reverse = tickOpts.reverse; + var min = tickOpts.min === undefined ? allowedOverflow : 0; + var max = tickOpts.max === undefined ? allowedOverflow : 0; + return { + start: reverse ? max : min, + end: reverse ? min : max + }; +} + +function defaultClip(xScale, yScale, allowedOverflow) { + if (allowedOverflow === false) { + return false; + } + var x = scaleClip(xScale, allowedOverflow); + var y = scaleClip(yScale, allowedOverflow); + + return { + top: y.end, + right: x.end, + bottom: y.start, + left: x.start + }; +} + +function toClip(value) { + var t, r, b, l; + + if (helpers.isObject(value)) { + t = value.top; + r = value.right; + b = value.bottom; + l = value.left; + } else { + t = r = b = l = value; + } + + return { + top: t, + right: r, + bottom: b, + left: l + }; +} + /** * Removes the given array event listener and cleanup extra attached properties (such as * the _chartjs stub and overridden methods) if array doesn't have any more listeners. @@ -556,6 +603,9 @@ helpers.extend(DatasetController.prototype, { return applyStack(stack, value, meta.index); }, + /** + * @private + */ _getMinMax: function(scale, canStack) { var chart = this.chart; var meta = this._cachedMeta; @@ -596,6 +646,9 @@ helpers.extend(DatasetController.prototype, { }; }, + /** + * @private + */ _getAllParsedValues: function(scale) { var meta = this._cachedMeta; var metaData = meta.data; @@ -611,6 +664,9 @@ helpers.extend(DatasetController.prototype, { return values; }, + /** + * @private + */ _cacheScaleStackStatus: function() { var me = this; var indexScale = me._getIndexScale(); @@ -622,6 +678,9 @@ helpers.extend(DatasetController.prototype, { } }, + /** + * @private + */ _scaleCheck: function() { var me = this; var indexScale = me._getIndexScale(); @@ -634,11 +693,19 @@ helpers.extend(DatasetController.prototype, { cache[valueScale.id] !== valueScale.options.stacked; }, + /** + * @private + */ + _getMaxOverflow: function() { + return false; + }, + _update: function(reset) { var me = this; me._configure(); me._cachedDataOpts = null; me.update(reset); + me._cachedMeta._clip = toClip(helpers.valueOrDefault(me._config.clip, defaultClip(me._xScale, me._yScale, me._getMaxOverflow()))); me._cacheScaleStackStatus(); }, diff --git a/src/elements/element.point.js b/src/elements/element.point.js index d985094dd..14849f9ae 100644 --- a/src/elements/element.point.js +++ b/src/elements/element.point.js @@ -53,6 +53,13 @@ class Point extends Element { }; } + size() { + var vm = this._view; + var radius = vm.radius || 0; + var borderWidth = vm.borderWidth || 0; + return (radius + borderWidth) * 2; + } + tooltipPosition() { var vm = this._view; return { diff --git a/test/fixtures/controller.bubble/clip.js b/test/fixtures/controller.bubble/clip.js new file mode 100644 index 000000000..9502ad1cd --- /dev/null +++ b/test/fixtures/controller.bubble/clip.js @@ -0,0 +1,35 @@ +module.exports = { + config: { + type: 'line', + data: { + labels: [0, 5, 10, 15, 20, 25, 30, 50, 55, 60], + datasets: [{ + data: [6, 11, 10, 10, 3, 22, 7, 24], + type: 'bubble', + label: 'test', + borderColor: '#3e95cd', + fill: false + }] + }, + options: { + legend: false, + scales: { + xAxes: [{ticks: {display: false}}], + yAxes: [{ + ticks: { + display: false, + min: 8, + max: 25, + beginAtZero: true + } + }] + } + } + }, + options: { + canvas: { + height: 256, + width: 256 + } + } +}; diff --git a/test/fixtures/controller.bubble/clip.png b/test/fixtures/controller.bubble/clip.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2c454de75ed49604df4e94fc935f0caead96c6 GIT binary patch literal 4685 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 literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.bubble/point-style.json b/test/fixtures/controller.bubble/point-style.json index a64507516..9849eef8c 100644 --- a/test/fixtures/controller.bubble/point-style.json +++ b/test/fixtures/controller.bubble/point-style.json @@ -44,7 +44,7 @@ {"x": 9, "y": 2} ], "backgroundColor": "transparent", - "borderColor": "0000ff", + "borderColor": "#0000ff", "borderWidth": 0, "pointStyle": [ "circle", diff --git a/test/fixtures/controller.line/clip/default-x-max.json b/test/fixtures/controller.line/clip/default-x-max.json new file mode 100644 index 000000000..f69182d1f --- /dev/null +++ b/test/fixtures/controller.line/clip/default-x-max.json @@ -0,0 +1,38 @@ +{ + "config": { + "type": "scatter", + "data": { + "datasets": [{ + "borderColor": "red", + "data": [{"x":-5,"y":5},{"x":-4,"y":6},{"x":-3,"y":7},{"x":-2,"y":6},{"x":-1,"y":5},{"x":0,"y":4},{"x":1,"y":3},{"x":2,"y":2},{"x":3,"y":5},{"x":4,"y":7},{"x":5,"y":9}], + "fill": false, + "showLine": true, + "borderWidth": 20, + "pointRadius": 0 + }] + }, + "options": { + "responsive": false, + "legend": false, + "title": false, + "scales": { + "xAxes": [{ + "ticks": { + "max": 3, + "display": false + } + }], + "yAxes": [{"ticks": {"display": false}}] + }, + "layout": { + "padding": 24 + } + } + }, + "options": { + "canvas": { + "height": 256, + "width": 512 + } + } +} diff --git a/test/fixtures/controller.line/clip/default-x-max.png b/test/fixtures/controller.line/clip/default-x-max.png new file mode 100644 index 0000000000000000000000000000000000000000..18a4eb29afa3b624b6e88a08642a7371f850a9ab GIT binary patch literal 13051 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 BH-rEH literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.line/clip/default-x-min.json b/test/fixtures/controller.line/clip/default-x-min.json new file mode 100644 index 000000000..b4a4b0c3e --- /dev/null +++ b/test/fixtures/controller.line/clip/default-x-min.json @@ -0,0 +1,38 @@ +{ + "config": { + "type": "scatter", + "data": { + "datasets": [{ + "borderColor": "red", + "data": [{"x":-5,"y":5},{"x":-4,"y":6},{"x":-3,"y":7},{"x":-2,"y":6},{"x":-1,"y":5},{"x":0,"y":4},{"x":1,"y":3},{"x":2,"y":2},{"x":3,"y":5},{"x":4,"y":7},{"x":5,"y":9}], + "fill": false, + "showLine": true, + "borderWidth": 20, + "pointRadius": 0 + }] + }, + "options": { + "responsive": false, + "legend": false, + "title": false, + "scales": { + "xAxes": [{ + "ticks": { + "min": -2, + "display": false + } + }], + "yAxes": [{"ticks": {"display": false}}] + }, + "layout": { + "padding": 24 + } + } + }, + "options": { + "canvas": { + "height": 256, + "width": 512 + } + } +} diff --git a/test/fixtures/controller.line/clip/default-x-min.png b/test/fixtures/controller.line/clip/default-x-min.png new file mode 100644 index 0000000000000000000000000000000000000000..44dce35d73780108053439b87d9ad837786dbae9 GIT binary patch literal 13216 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 Yhb1J)Wxu-A;Rk>}`r5`?Md0xN2W_n$_5c6? literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.line/clip/default-x.json b/test/fixtures/controller.line/clip/default-x.json new file mode 100644 index 000000000..79dc08cd9 --- /dev/null +++ b/test/fixtures/controller.line/clip/default-x.json @@ -0,0 +1,39 @@ +{ + "config": { + "type": "scatter", + "data": { + "datasets": [{ + "borderColor": "red", + "data": [{"x":-5,"y":5},{"x":-4,"y":6},{"x":-3,"y":7},{"x":-2,"y":6},{"x":-1,"y":5},{"x":0,"y":4},{"x":1,"y":3},{"x":2,"y":2},{"x":3,"y":5},{"x":4,"y":7},{"x":5,"y":9}], + "fill": false, + "showLine": true, + "borderWidth": 20, + "pointRadius": 0 + }] + }, + "options": { + "responsive": false, + "legend": false, + "title": false, + "scales": { + "xAxes": [{ + "ticks": { + "min": -2, + "max": 3, + "display": false + } + }], + "yAxes": [{"ticks": {"display": false}}] + }, + "layout": { + "padding": 24 + } + } + }, + "options": { + "canvas": { + "height": 256, + "width": 512 + } + } +} diff --git a/test/fixtures/controller.line/clip/default-x.png b/test/fixtures/controller.line/clip/default-x.png new file mode 100644 index 0000000000000000000000000000000000000000..70ad431e86aa5be01eef792660b61aecf56a04e9 GIT binary patch literal 12199 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 XJIN0nBR9wZ`0t#i?isAQ^_~9%33=&D literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.line/clip/default-y-min.json b/test/fixtures/controller.line/clip/default-y-min.json new file mode 100644 index 000000000..7c6114a9c --- /dev/null +++ b/test/fixtures/controller.line/clip/default-y-min.json @@ -0,0 +1,38 @@ +{ + "config": { + "type": "scatter", + "data": { + "datasets": [{ + "borderColor": "red", + "data": [{"x":-5,"y":5},{"x":-4,"y":6},{"x":-3,"y":7},{"x":-2,"y":6},{"x":-1,"y":5},{"x":0,"y":4},{"x":1,"y":3},{"x":2,"y":2},{"x":3,"y":5},{"x":4,"y":7},{"x":5,"y":9}], + "fill": false, + "showLine": true, + "borderWidth": 20, + "pointRadius": 0 + }] + }, + "options": { + "responsive": false, + "legend": false, + "title": false, + "scales": { + "xAxes": [{"ticks": {"display": false}}], + "yAxes": [{ + "ticks": { + "min": 2, + "display": false + } + }] + }, + "layout": { + "padding": 24 + } + } + }, + "options": { + "canvas": { + "height": 256, + "width": 512 + } + } +} diff --git a/test/fixtures/controller.line/clip/default-y-min.png b/test/fixtures/controller.line/clip/default-y-min.png new file mode 100644 index 0000000000000000000000000000000000000000..7ae2e6510a4b738db3d1126034bcc25e995f7225 GIT binary patch literal 15057 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 z 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 WbE3Boji(2|f2zuAm(c&1hx{KbV%6dR literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.line/clip/specified.json b/test/fixtures/controller.line/clip/specified.json new file mode 100644 index 000000000..5885240c7 --- /dev/null +++ b/test/fixtures/controller.line/clip/specified.json @@ -0,0 +1,77 @@ +{ + "config": { + "type": "scatter", + "data": { + "datasets": [ + { + "showLine": true, + "borderColor": "red", + "data": [{"x":-4,"y":-4},{"x":4,"y":4}], + "clip": false + }, + { + "showLine": true, + "borderColor": "green", + "data": [{"x":-4,"y":-5},{"x":4,"y":3}], + "clip": 5 + }, + { + "showLine": true, + "borderColor": "blue", + "data": [{"x":-4,"y":-3},{"x":4,"y":5}], + "clip": -5 + }, + { + "showLine": true, + "borderColor": "brown", + "data": [{"x":-3,"y":-3},{"x":-1,"y":3},{"x":1,"y":-2},{"x":2,"y":3}], + "clip": { + "top": 8, + "left": false, + "right": -20, + "bottom": -20 + } + } + ] + }, + "options": { + "responsive": false, + "legend": false, + "title": false, + "scales": { + "xAxes": [{ + "ticks": { + "min": -2, + "max": 2, + "display": false + } + }], + "yAxes": [{ + "ticks": { + "min": -2, + "max": 2, + "display": false + } + }] + }, + "layout": { + "padding": 24 + }, + "elements": { + "line": { + "fill": false, + "borderWidth": 20 + }, + "point": { + "radius": 0 + } + } + } + }, + "options": { + "canvas": { + "height": 256, + "width": 512 + } + } +} diff --git a/test/fixtures/controller.line/clip/specified.png b/test/fixtures/controller.line/clip/specified.png new file mode 100644 index 0000000000000000000000000000000000000000..60e60b23447bd8c1967c3b5fba4ef040a584ae43 GIT binary patch literal 26837 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 literal 0 Hc-jL100001 -- 2.47.2