From 22a7bcbf93f1586950a0cefb7c9fb12d2c7211b8 Mon Sep 17 00:00:00 2001 From: kurkle Date: Sat, 19 Jun 2021 23:10:11 +0300 Subject: [PATCH] Legend: fix layout padding handling --- src/core/core.layouts.js | 2 +- src/plugins/plugin.legend.js | 17 ++++---- .../padding/2cols-with-padding.js | 35 ++++++++++++++++ .../padding/2cols-with-padding.png | Bin 0 -> 20213 bytes .../plugin.legend/padding/add-column.js | 39 ++++++++++++++++++ .../plugin.legend/padding/add-column.png | Bin 0 -> 21243 bytes 6 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 test/fixtures/plugin.legend/padding/2cols-with-padding.js create mode 100644 test/fixtures/plugin.legend/padding/2cols-with-padding.png create mode 100644 test/fixtures/plugin.legend/padding/add-column.js create mode 100644 test/fixtures/plugin.legend/padding/add-column.png diff --git a/src/core/core.layouts.js b/src/core/core.layouts.js index e0069fe2e98..7206db0d990 100644 --- a/src/core/core.layouts.js +++ b/src/core/core.layouts.js @@ -200,7 +200,7 @@ function placeBoxes(boxes, chartArea, params) { box.left = x; box.right = x + box.width; box.top = box.fullSize ? userPadding.top : chartArea.top; - box.bottom = box.fullSize ? params.outerHeight - userPadding.right : chartArea.top + chartArea.h; + box.bottom = box.fullSize ? params.outerHeight - userPadding.bottom : chartArea.top + chartArea.h; box.height = box.bottom - box.top; x = box.right; } diff --git a/src/plugins/plugin.legend.js b/src/plugins/plugin.legend.js index 206f1add94f..03f7fe4f21b 100644 --- a/src/plugins/plugin.legend.js +++ b/src/plugins/plugin.legend.js @@ -88,11 +88,11 @@ export class Legend extends Element { if (me.isHorizontal()) { me.width = me.maxWidth; - me.left = 0; + me.left = me._margins.left; me.right = me.width; } else { me.height = me.maxHeight; - me.top = 0; + me.top = me._margins.top; me.bottom = me.height; } } @@ -199,29 +199,26 @@ export class Legend extends Element { let currentColHeight = 0; let left = 0; - let top = 0; let col = 0; me.legendItems.forEach((legendItem, i) => { const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width; // If too tall, go to new column - if (i > 0 && currentColHeight + fontSize + 2 * padding > heightLimit) { + if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) { totalWidth += currentColWidth + padding; columnSizes.push({width: currentColWidth, height: currentColHeight}); // previous column size left += currentColWidth + padding; col++; - top = 0; currentColWidth = currentColHeight = 0; } + // Store the hitbox width and height here. Final position will be updated in `draw` + hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight}; + // Get max width currentColWidth = Math.max(currentColWidth, itemWidth); - currentColHeight += fontSize + padding; - - // Store the hitbox width and height here. Final position will be updated in `draw` - hitboxes[i] = {left, top, col, width: itemWidth, height: itemHeight}; - top += itemHeight + padding; + currentColHeight += itemHeight + padding; }); totalWidth += currentColWidth; diff --git a/test/fixtures/plugin.legend/padding/2cols-with-padding.js b/test/fixtures/plugin.legend/padding/2cols-with-padding.js new file mode 100644 index 00000000000..604ade6b7df --- /dev/null +++ b/test/fixtures/plugin.legend/padding/2cols-with-padding.js @@ -0,0 +1,35 @@ +module.exports = { + description: 'https://github.com/chartjs/Chart.js/issues/9278', + config: { + type: 'pie', + data: { + labels: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'], + datasets: [{ + data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], + backgroundColor: 'red' + }] + }, + options: { + plugins: { + legend: { + position: 'left' + } + }, + layout: { + padding: { + top: 50, + left: 30, + right: 30, + bottom: 50 + } + } + } + }, + options: { + spriteText: true, + canvas: { + width: 400, + height: 300 + }, + } +}; diff --git a/test/fixtures/plugin.legend/padding/2cols-with-padding.png b/test/fixtures/plugin.legend/padding/2cols-with-padding.png new file mode 100644 index 0000000000000000000000000000000000000000..8871ccddc6b2c45fb64b4809b51c95858ddbd08a GIT binary patch literal 20213 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 Wcii_OP0ItE9mL$k+PKyb8~Y#jabv^) literal 0 HcmV?d00001 diff --git a/test/fixtures/plugin.legend/padding/add-column.js b/test/fixtures/plugin.legend/padding/add-column.js new file mode 100644 index 00000000000..7a1e6d5e5a0 --- /dev/null +++ b/test/fixtures/plugin.legend/padding/add-column.js @@ -0,0 +1,39 @@ +module.exports = { + description: 'https://github.com/chartjs/Chart.js/issues/9278', + config: { + type: 'pie', + data: { + labels: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'], + datasets: [{ + data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], + backgroundColor: 'red' + }] + }, + options: { + plugins: { + legend: { + position: 'left' + } + }, + layout: { + padding: { + top: 55, + left: 30, + right: 30 + } + } + } + }, + options: { + spriteText: true, + canvas: { + width: 400, + height: 300 + }, + run(chart) { + chart.data.labels.push('k'); + chart.data.datasets[0].data.push(11); + chart.update(); + } + } +}; diff --git a/test/fixtures/plugin.legend/padding/add-column.png b/test/fixtures/plugin.legend/padding/add-column.png new file mode 100644 index 0000000000000000000000000000000000000000..187dcda8c1621cae312f0f0d9aba3a7a2afd7f3b GIT binary patch literal 21243 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