From 31be6100015fbca3b639bcd63f9d03b52f21e171 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Mon, 12 Jul 2021 14:45:03 +0300 Subject: [PATCH] Fix stacked box dimension calculation with weights (#9394) * Fix stacked box dimension calculation with weights * Fix typo in filename --- src/core/core.layouts.js | 6 +- .../core.layouts/stacked-boxes-with-weight.js | 112 ++++++++++++++++++ .../stacked-boxes-with-weight.png | Bin 0 -> 17650 bytes 3 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 test/fixtures/core.layouts/stacked-boxes-with-weight.js create mode 100644 test/fixtures/core.layouts/stacked-boxes-with-weight.png diff --git a/src/core/core.layouts.js b/src/core/core.layouts.js index d5c1e20b3..fd830ffc3 100644 --- a/src/core/core.layouts.js +++ b/src/core/core.layouts.js @@ -223,9 +223,9 @@ function placeBoxes(boxes, chartArea, params, stacks) { for (const layout of boxes) { const box = layout.box; const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1}; - const weight = (stack.weight * layout.stackWeight) || 1; + const weight = (layout.stackWeight / stack.weight) || 1; if (layout.horizontal) { - const width = chartArea.w / weight; + const width = chartArea.w * weight; const height = stack.size || box.height; if (defined(stack.start)) { y = stack.start; @@ -239,7 +239,7 @@ function placeBoxes(boxes, chartArea, params, stacks) { stack.placed += width; y = box.bottom; } else { - const height = chartArea.h / weight; + const height = chartArea.h * weight; const width = stack.size || box.width; if (defined(stack.start)) { x = stack.start; diff --git a/test/fixtures/core.layouts/stacked-boxes-with-weight.js b/test/fixtures/core.layouts/stacked-boxes-with-weight.js new file mode 100644 index 000000000..cbbb87545 --- /dev/null +++ b/test/fixtures/core.layouts/stacked-boxes-with-weight.js @@ -0,0 +1,112 @@ +module.exports = { + config: { + type: 'line', + data: { + datasets: [ + {data: [{x: 1, y: 1}, {x: 2, y: 2}, {x: 3, y: 3}], borderColor: 'red'}, + {data: [{x: 1, y: 1}, {x: 2, y: 2}, {x: 3, y: 3}], yAxisID: 'y1', xAxisID: 'x1', borderColor: 'green'}, + {data: [{x: 1, y: 1}, {x: 2, y: 2}, {x: 3, y: 3}], yAxisID: 'y2', xAxisID: 'x2', borderColor: 'blue'}, + ], + labels: ['tick1', 'tick2', 'tick3'] + }, + options: { + plugins: false, + scales: { + x: { + type: 'linear', + position: 'bottom', + stack: '1', + stackWeight: 2, + offset: true, + bounds: 'data', + grid: { + borderColor: 'red' + }, + ticks: { + autoSkip: false, + maxRotation: 0, + count: 3 + } + }, + x1: { + type: 'linear', + position: 'bottom', + stack: '1', + stackWeight: 2, + offset: true, + bounds: 'data', + grid: { + borderColor: 'green' + }, + ticks: { + autoSkip: false, + maxRotation: 0, + count: 3 + } + }, + x2: { + type: 'linear', + position: 'bottom', + stack: '1', + stackWeight: 6, + offset: true, + bounds: 'data', + grid: { + borderColor: 'blue' + }, + ticks: { + autoSkip: false, + maxRotation: 0, + count: 3 + } + }, + y: { + type: 'linear', + position: 'left', + stack: '1', + stackWeight: 2, + offset: true, + grid: { + borderColor: 'red' + }, + ticks: { + precision: 0 + } + }, + y1: { + type: 'linear', + position: 'left', + stack: '1', + offset: true, + stackWeight: 2, + grid: { + borderColor: 'green' + }, + ticks: { + precision: 0 + } + }, + y2: { + type: 'linear', + position: 'left', + stack: '1', + stackWeight: 3, + offset: true, + grid: { + borderColor: 'blue' + }, + ticks: { + precision: 0 + } + } + } + } + }, + options: { + spriteText: true, + canvas: { + height: 384, + width: 384 + } + } +}; diff --git a/test/fixtures/core.layouts/stacked-boxes-with-weight.png b/test/fixtures/core.layouts/stacked-boxes-with-weight.png new file mode 100644 index 0000000000000000000000000000000000000000..320e50284d69d6b905823830f9e0be583c72e683 GIT binary patch literal 17650 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 beN3F2!6?#Y`jiv^|EOG3S1i3^9Q?lkeCQQ6 literal 0 Hc-jL100001 -- 2.47.2