From c51d697d7f9df8dff3f785beece4753e1b87cb97 Mon Sep 17 00:00:00 2001 From: stockiNail Date: Sat, 1 Oct 2022 20:26:45 +0200 Subject: [PATCH] Use the correct area to clip for dataset drawing when stacked scales are used (#10691) * Use the correct area to clip when stacked scales are used * adds test cases * fix CI issue * apply review * Update .size-limit.cjs Co-authored-by: Jacco van den Berg Co-authored-by: Jacco van den Berg --- .size-limit.cjs | 2 +- src/core/core.controller.js | 14 ++- .../core.layouts/stacked-boxes-max-index.js | 109 ++++++++++++++++++ .../core.layouts/stacked-boxes-max-index.png | Bin 0 -> 16627 bytes .../core.layouts/stacked-boxes-max.js | 109 ++++++++++++++++++ .../core.layouts/stacked-boxes-max.png | Bin 0 -> 22012 bytes 6 files changed, 232 insertions(+), 2 deletions(-) create mode 100644 test/fixtures/core.layouts/stacked-boxes-max-index.js create mode 100644 test/fixtures/core.layouts/stacked-boxes-max-index.png create mode 100644 test/fixtures/core.layouts/stacked-boxes-max.js create mode 100644 test/fixtures/core.layouts/stacked-boxes-max.png diff --git a/.size-limit.cjs b/.size-limit.cjs index 175477082..f4606e0b7 100644 --- a/.size-limit.cjs +++ b/.size-limit.cjs @@ -7,7 +7,7 @@ function modifyWebpackConfig(config) { module.exports = [ { path: 'dist/chart.js', - limit: '77.2 KB', + limit: '77.5 KB', webpack: false, running: false }, diff --git a/src/core/core.controller.js b/src/core/core.controller.js index 396193a17..9991263b7 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -101,6 +101,18 @@ function determineLastEvent(e, lastEvent, inChartArea, isClick) { return e; } +function getDatasetArea(meta) { + const {xScale, yScale} = meta; + if (xScale && yScale) { + return { + left: xScale.left, + right: xScale.right, + top: yScale.top, + bottom: yScale.bottom + }; + } +} + class Chart { static defaults = defaults; @@ -784,7 +796,7 @@ class Chart { const ctx = this.ctx; const clip = meta._clip; const useClip = !clip.disabled; - const area = this.chartArea; + const area = getDatasetArea(meta) || this.chartArea; const args = { meta, index: meta.index, diff --git a/test/fixtures/core.layouts/stacked-boxes-max-index.js b/test/fixtures/core.layouts/stacked-boxes-max-index.js new file mode 100644 index 000000000..60fd5f45a --- /dev/null +++ b/test/fixtures/core.layouts/stacked-boxes-max-index.js @@ -0,0 +1,109 @@ +module.exports = { + config: { + type: 'line', + data: { + datasets: [ + {data: [{x: 5, y: 1}, {x: 10, y: 2}, {x: 5, y: 3}], borderColor: 'red'}, + {data: [{x: 5, y: 1}, {x: 10, y: 2}, {x: 5, y: 3}], yAxisID: 'y1', xAxisID: 'x1', borderColor: 'green'}, + {data: [{x: 5, y: 1}, {x: 10, y: 2}, {x: 5, y: 3}], yAxisID: 'y2', xAxisID: 'x2', borderColor: 'blue'}, + ], + labels: ['tick1', 'tick2', 'tick3'] + }, + options: { + plugins: false, + scales: { + x: { + type: 'linear', + position: 'bottom', + stack: '1', + offset: true, + bounds: 'data', + border: { + color: 'red' + }, + ticks: { + autoSkip: false, + maxRotation: 0, + count: 3 + }, + max: 7 + }, + x1: { + type: 'linear', + position: 'bottom', + stack: '1', + offset: true, + bounds: 'data', + border: { + color: 'green' + }, + ticks: { + autoSkip: false, + maxRotation: 0, + count: 3 + }, + max: 7 + }, + x2: { + type: 'linear', + position: 'bottom', + stack: '1', + offset: true, + bounds: 'data', + border: { + color: 'blue' + }, + ticks: { + autoSkip: false, + maxRotation: 0, + count: 3 + }, + max: 7 + }, + y: { + type: 'linear', + position: 'left', + stack: '1', + offset: true, + border: { + color: 'red' + }, + ticks: { + precision: 0 + } + }, + y1: { + type: 'linear', + position: 'left', + stack: '1', + offset: true, + border: { + color: 'green' + }, + ticks: { + precision: 0 + } + }, + y2: { + type: 'linear', + position: 'left', + stack: '1', + offset: true, + border: { + color: 'blue', + }, + ticks: { + precision: 0 + } + } + } + } + }, + options: { + spriteText: true, + canvas: { + height: 384, + width: 384 + } + } +}; diff --git a/test/fixtures/core.layouts/stacked-boxes-max-index.png b/test/fixtures/core.layouts/stacked-boxes-max-index.png new file mode 100644 index 0000000000000000000000000000000000000000..60c829a478c043e3ab4f1b27ba61646411e4cb84 GIT binary patch literal 16627 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 literal 0 Hc-jL100001 diff --git a/test/fixtures/core.layouts/stacked-boxes-max.js b/test/fixtures/core.layouts/stacked-boxes-max.js new file mode 100644 index 000000000..43fd9d3b3 --- /dev/null +++ b/test/fixtures/core.layouts/stacked-boxes-max.js @@ -0,0 +1,109 @@ +module.exports = { + config: { + type: 'line', + data: { + datasets: [ + {data: [{x: 1, y: 5}, {x: 2, y: 10}, {x: 3, y: 5}], borderColor: 'red'}, + {data: [{x: 1, y: 5}, {x: 2, y: 10}, {x: 3, y: 5}], yAxisID: 'y1', xAxisID: 'x1', borderColor: 'green'}, + {data: [{x: 1, y: 5}, {x: 2, y: 10}, {x: 3, y: 5}], yAxisID: 'y2', xAxisID: 'x2', borderColor: 'blue'}, + ], + labels: ['tick1', 'tick2', 'tick3'] + }, + options: { + plugins: false, + scales: { + x: { + type: 'linear', + position: 'bottom', + stack: '1', + offset: true, + bounds: 'data', + border: { + color: 'red' + }, + ticks: { + autoSkip: false, + maxRotation: 0, + count: 3 + } + }, + x1: { + type: 'linear', + position: 'bottom', + stack: '1', + offset: true, + bounds: 'data', + border: { + color: 'green' + }, + ticks: { + autoSkip: false, + maxRotation: 0, + count: 3 + } + }, + x2: { + type: 'linear', + position: 'bottom', + stack: '1', + offset: true, + bounds: 'data', + border: { + color: 'blue' + }, + ticks: { + autoSkip: false, + maxRotation: 0, + count: 3 + } + }, + y: { + type: 'linear', + position: 'left', + stack: '1', + offset: true, + border: { + color: 'red' + }, + ticks: { + precision: 0 + }, + max: 7 + }, + y1: { + type: 'linear', + position: 'left', + stack: '1', + offset: true, + border: { + color: 'green' + }, + ticks: { + precision: 0 + }, + max: 7 + }, + y2: { + type: 'linear', + position: 'left', + stack: '1', + offset: true, + border: { + color: 'blue', + }, + ticks: { + precision: 0 + }, + max: 7 + } + } + } + }, + options: { + spriteText: true, + canvas: { + height: 384, + width: 384 + } + } +}; diff --git a/test/fixtures/core.layouts/stacked-boxes-max.png b/test/fixtures/core.layouts/stacked-boxes-max.png new file mode 100644 index 0000000000000000000000000000000000000000..b136ab01cda23c19a8e9d8af63caa6a647256d82 GIT binary patch literal 22012 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