From b92f9e52fd99b30ffdb9821a1588a2a73026a674 Mon Sep 17 00:00:00 2001 From: Evert Timberg Date: Sun, 18 Apr 2021 16:30:54 -0400 Subject: [PATCH] Only enable the bar borderRadius at the end of the stacks (#8941) * Only enable the bar borderRadius at the end of the stacks * Float bars always get borders enabled * Tests * Update documentation --- docs/charts/bar.md | 4 ++ src/controllers/controller.bar.js | 2 + src/core/core.datasetController.js | 14 ++++++ src/elements/element.bar.js | 15 ++++-- ...order-radius-stacked-number-mixed-chart.js | 42 +++++++++++++++++ ...rder-radius-stacked-number-mixed-chart.png | Bin 0 -> 13513 bytes ...border-radius-stacked-number-with-order.js | 44 ++++++++++++++++++ ...order-radius-stacked-number-with-order.png | Bin 0 -> 9285 bytes .../border-radius-stacked-number.js | 41 ++++++++++++++++ .../border-radius-stacked-number.png | Bin 0 -> 9535 bytes .../{ => borderRadius}/border-radius.js | 0 .../{ => borderRadius}/border-radius.png | Bin test/specs/core.datasetController.tests.js | 34 +++++++------- 13 files changed, 175 insertions(+), 21 deletions(-) create mode 100644 test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-mixed-chart.js create mode 100644 test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-mixed-chart.png create mode 100644 test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-with-order.js create mode 100644 test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-with-order.png create mode 100644 test/fixtures/controller.bar/borderRadius/border-radius-stacked-number.js create mode 100644 test/fixtures/controller.bar/borderRadius/border-radius-stacked-number.png rename test/fixtures/controller.bar/{ => borderRadius}/border-radius.js (100%) rename test/fixtures/controller.bar/{ => borderRadius}/border-radius.png (100%) diff --git a/docs/charts/bar.md b/docs/charts/bar.md index d4d0a271f..71473b41d 100644 --- a/docs/charts/bar.md +++ b/docs/charts/bar.md @@ -171,6 +171,10 @@ If this value is a number, it is applied to all sides of the rectangle (left, to If this value is a number, it is applied to all corners of the rectangle (topLeft, topRight, bottomLeft, bottomRight), except corners touching the [`borderSkipped`](#borderskipped). If this value is an object, the `topLeft` property defines the top-left corners border radius. Similarly, the `topRight`, `bottomLeft`, and `bottomRight` properties can also be specified. Omitted corners and those touching the [`borderSkipped`](#borderskipped) are skipped. For example if the `top` border is skipped, the border radius for the corners `topLeft` and `topRight` will be skipped as well. +:::tip Stacked Charts +When the border radius is supplied as a number and the chart is stacked, the radius will only be applied to the bars that are at the edges of the stack or where the bar is floating. The object syntax can be used to override this behavior. +::: + ### Interactions The interaction with each bar can be controlled with the following properties: diff --git a/src/controllers/controller.bar.js b/src/controllers/controller.bar.js index abe98841c..0ed99b7ec 100644 --- a/src/controllers/controller.bar.js +++ b/src/controllers/controller.bar.js @@ -269,10 +269,12 @@ export default class BarController extends DatasetController { const parsed = me.getParsed(i); const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : me._calculateBarValuePixels(i); const ipixels = me._calculateBarIndexPixels(i, ruler); + const stack = (parsed._stacks || {})[vScale.axis]; const properties = { horizontal, base: vpixels.base, + enableBorderRadius: !stack || isFloatBar(parsed._custom) || (me.index === stack._top || me.index === stack._bottom), x: horizontal ? vpixels.head : ipixels.center, y: horizontal ? ipixels.center : vpixels.head, height: horizontal ? ipixels.size : undefined, diff --git a/src/core/core.datasetController.js b/src/core/core.datasetController.js index a3882e9e6..cff882ab8 100644 --- a/src/core/core.datasetController.js +++ b/src/core/core.datasetController.js @@ -127,6 +127,17 @@ function getOrCreateStack(stacks, stackKey, indexValue) { return subStack[indexValue] || (subStack[indexValue] = {}); } +function getLastIndexInStack(stack, vScale, positive) { + for (const meta of vScale.getMatchingVisibleMetas('bar').reverse()) { + const value = stack[meta.index]; + if ((positive && value > 0) || (!positive && value < 0)) { + return meta.index; + } + } + + return null; +} + function updateStacks(controller, parsed) { const {chart, _cachedMeta: meta} = controller; const stacks = chart._stacks || (chart._stacks = {}); // map structure is {stackKey: {datasetIndex: value}} @@ -143,6 +154,9 @@ function updateStacks(controller, parsed) { const itemStacks = item._stacks || (item._stacks = {}); stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index); stack[datasetIndex] = value; + + stack._top = getLastIndexInStack(stack, vScale, true); + stack._bottom = getLastIndexInStack(stack, vScale, false); } } diff --git a/src/elements/element.bar.js b/src/elements/element.bar.js index 8d9006804..c7e82309e 100644 --- a/src/elements/element.bar.js +++ b/src/elements/element.bar.js @@ -1,4 +1,5 @@ import Element from '../core/core.element'; +import {isObject} from '../helpers'; import {addRoundedRectPath} from '../helpers/helpers.canvas'; import {toTRBL, toTRBLCorners} from '../helpers/helpers.options'; @@ -83,16 +84,21 @@ function parseBorderWidth(bar, maxW, maxH) { } function parseBorderRadius(bar, maxW, maxH) { + const {enableBorderRadius} = bar.getProps(['enableBorderRadius']); const value = bar.options.borderRadius; const o = toTRBLCorners(value); const maxR = Math.min(maxW, maxH); const skip = parseBorderSkipped(bar); + // If the value is an object, assume the user knows what they are doing + // and apply as directed. + const enableBorder = enableBorderRadius || isObject(value); + return { - topLeft: skipOrLimit(skip.top || skip.left, o.topLeft, 0, maxR), - topRight: skipOrLimit(skip.top || skip.right, o.topRight, 0, maxR), - bottomLeft: skipOrLimit(skip.bottom || skip.left, o.bottomLeft, 0, maxR), - bottomRight: skipOrLimit(skip.bottom || skip.right, o.bottomRight, 0, maxR) + topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR), + topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR), + bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR), + bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR) }; } @@ -224,6 +230,7 @@ BarElement.defaults = { borderSkipped: 'start', borderWidth: 0, borderRadius: 0, + enableBorderRadius: true, pointStyle: undefined }; diff --git a/test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-mixed-chart.js b/test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-mixed-chart.js new file mode 100644 index 000000000..897037932 --- /dev/null +++ b/test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-mixed-chart.js @@ -0,0 +1,42 @@ +module.exports = { + threshold: 0.01, + config: { + type: 'bar', + data: { + labels: [0, 1, 2, 3, 4, 5], + datasets: [ + { + backgroundColor: 'red', + data: [12, 19, 12, 5, 4, 12], + }, + { + backgroundColor: 'green', + data: [12, 19, -4, 5, 8, 3], + type: 'line' + }, + { + backgroundColor: 'blue', + data: [7, 11, -12, 12, 0, -7], + } + ] + }, + options: { + elements: { + bar: { + borderRadius: Number.MAX_VALUE, + borderWidth: 2, + } + }, + scales: { + x: {display: false, stacked: true}, + y: {display: false, stacked: true} + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-mixed-chart.png b/test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-mixed-chart.png new file mode 100644 index 0000000000000000000000000000000000000000..3aff7387b1da289f9164355101eb5dccc9ccb816 GIT binary patch literal 13513 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 OM?+OdrT7La?0*3X<)p9x literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-with-order.js b/test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-with-order.js new file mode 100644 index 000000000..886e9c463 --- /dev/null +++ b/test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-with-order.js @@ -0,0 +1,44 @@ +module.exports = { + threshold: 0.01, + config: { + type: 'bar', + data: { + labels: [0, 1, 2, 3, 4, 5], + datasets: [ + { + backgroundColor: 'red', + data: [12, 19, 12, 5, 4, 12], + order: 2, + }, + { + backgroundColor: 'green', + data: [12, 19, -4, 5, 8, 3], + order: 1, + }, + { + backgroundColor: 'blue', + data: [7, 11, -12, 12, 0, -7], + order: 0, + } + ] + }, + options: { + elements: { + bar: { + borderRadius: Number.MAX_VALUE, + borderWidth: 2, + } + }, + scales: { + x: {display: false, stacked: true}, + y: {display: false, stacked: true} + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + } + } +}; diff --git a/test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-with-order.png b/test/fixtures/controller.bar/borderRadius/border-radius-stacked-number-with-order.png new file mode 100644 index 0000000000000000000000000000000000000000..24eb8e0ea003ec8ec470f6cef0f2ae4c0f662bff GIT binary patch literal 9285 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 h2UYI>s6z4vv?UjVO(}v9$QHJU z;ub`Z8f;YQ5Ngf}?!CY7d}EwH=f@rQj_VjnFqv!CXU;X}yH=v9u`UCK8v{WQgT9{D z1qgzJKVc9Z4fuGK@y;271R;H`vll~b7jh3hv$=Gmq}|`x@6MxEx}&jLU!TyqR9l?; zQwU>mw&wkz?6MOQjB!|Zk`6)l$w=bI}R;c#1) zvwEHKU$yUKK2rHUEXjQIPV?qt_l4$-?Lp44N3i>Id6eD#=FR;L>uT7jupkVrhlR7c z@J2;-r4GT)fxk0wNMRg&QkeP)em<3fgTIf|mT4(++)LI(EP|kxmRs#G3P7myqS7gPVHjn#2%`JI`J3Oj+_S zbyuM=sf@L&!10)OoGx$V^k>H1BVcdTbBFfnTW51axUrow#D%} z1<=v}_pC^6d)Tv9sKSbJGwniiuRWWU%83xKVGOCrr2F|Rh^}Zc$n{1LPi52SqGT9> zWLLfPE@JHa%gQ~)&Jzg)fzgF0IL{|56C%J77d5f4l6Zd)8UHJdYkYh3^n5HWW@?{3 zTUkVRZ}=V}>CWD+w=@6?wA4_HwhHdaWm+*xn8UKRcX4;EQ$>Jm z{7pc#)7$eoziEDP#^2$?vQyxPk)}E6nAedDPEju_qhC_-N{3{}g@5m`&XI!+?()dW z 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 literal 0 Hc-jL100001 diff --git a/test/fixtures/controller.bar/border-radius.js b/test/fixtures/controller.bar/borderRadius/border-radius.js similarity index 100% rename from test/fixtures/controller.bar/border-radius.js rename to test/fixtures/controller.bar/borderRadius/border-radius.js diff --git a/test/fixtures/controller.bar/border-radius.png b/test/fixtures/controller.bar/borderRadius/border-radius.png similarity index 100% rename from test/fixtures/controller.bar/border-radius.png rename to test/fixtures/controller.bar/borderRadius/border-radius.png diff --git a/test/specs/core.datasetController.tests.js b/test/specs/core.datasetController.tests.js index ce7d121b6..e89aa0bf9 100644 --- a/test/specs/core.datasetController.tests.js +++ b/test/specs/core.datasetController.tests.js @@ -540,12 +540,12 @@ describe('Chart.DatasetController', function() { expect(chart._stacks).toEqual({ 'x.y.1': { - 0: {0: 1, 2: 3}, - 1: {0: 10, 2: 30} + 0: {0: 1, 2: 3, _top: 2, _bottom: null}, + 1: {0: 10, 2: 30, _top: 2, _bottom: null} }, 'x.y.2': { - 0: {1: 2}, - 1: {1: 20} + 0: {1: 2, _top: 1, _bottom: null}, + 1: {1: 20, _top: 1, _bottom: null} } }); @@ -554,12 +554,12 @@ describe('Chart.DatasetController', function() { expect(chart._stacks).toEqual({ 'x.y.1': { - 0: {0: 1}, - 1: {0: 10} + 0: {0: 1, _top: 2, _bottom: null}, + 1: {0: 10, _top: 2, _bottom: null} }, 'x.y.2': { - 0: {1: 2, 2: 3}, - 1: {1: 20, 2: 30} + 0: {1: 2, 2: 3, _top: 2, _bottom: null}, + 1: {1: 20, 2: 30, _top: 2, _bottom: null} } }); }); @@ -584,12 +584,12 @@ describe('Chart.DatasetController', function() { expect(chart._stacks).toEqual({ 'x.y.1': { - 0: {0: 1, 2: 3}, - 1: {0: 10, 2: 30} + 0: {0: 1, 2: 3, _top: 2, _bottom: null}, + 1: {0: 10, 2: 30, _top: 2, _bottom: null} }, 'x.y.2': { - 0: {1: 2}, - 1: {1: 20} + 0: {1: 2, _top: 1, _bottom: null}, + 1: {1: 20, _top: 1, _bottom: null} } }); @@ -598,12 +598,12 @@ describe('Chart.DatasetController', function() { expect(chart._stacks).toEqual({ 'x.y.1': { - 0: {0: 1, 2: 4}, - 1: {0: 10} + 0: {0: 1, 2: 4, _top: 2, _bottom: null}, + 1: {0: 10, _top: 2, _bottom: null} }, 'x.y.2': { - 0: {1: 2}, - 1: {1: 20} + 0: {1: 2, _top: 1, _bottom: null}, + 1: {1: 20, _top: 1, _bottom: null} } }); }); @@ -719,7 +719,7 @@ describe('Chart.DatasetController', function() { }); var meta = chart.getDatasetMeta(0); - expect(meta._parsed[0]._stacks).toEqual(jasmine.objectContaining({y: {0: 10, 1: 20}})); + expect(meta._parsed[0]._stacks).toEqual(jasmine.objectContaining({y: {0: 10, 1: 20, _top: null, _bottom: null}})); }); describe('resolveDataElementOptions', function() { -- 2.47.2