From 1ffdecfe6840a4becc20d9207f17ce0032890ed8 Mon Sep 17 00:00:00 2001 From: Jukka Kurkela Date: Sat, 10 Apr 2021 15:58:39 +0300 Subject: [PATCH] Consider dynamically positioned scales for padding (#8868) --- src/core/core.layouts.js | 17 ++++++----- .../x-axis-position-dynamic-margin.js | 27 ++++++++++++++++++ .../x-axis-position-dynamic-margin.png | Bin 0 -> 7866 bytes .../core.scale/x-axis-position-dynamic.png | Bin 12076 -> 12484 bytes 4 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 test/fixtures/core.scale/x-axis-position-dynamic-margin.js create mode 100644 test/fixtures/core.scale/x-axis-position-dynamic-margin.png diff --git a/src/core/core.layouts.js b/src/core/core.layouts.js index 5b8ef42e5..dfd0dd31b 100644 --- a/src/core/core.layouts.js +++ b/src/core/core.layouts.js @@ -93,16 +93,15 @@ function updateDims(chartArea, params, layout) { const box = layout.box; const maxPadding = chartArea.maxPadding; - if (isObject(layout.pos)) { - // dynamically placed boxes are not considered - return {same: false, other: false}; + // dynamically placed boxes size is not considered + if (!isObject(layout.pos)) { + if (layout.size) { + // this layout was already counted for, lets first reduce old size + chartArea[layout.pos] -= layout.size; + } + layout.size = layout.horizontal ? box.height : box.width; + chartArea[layout.pos] += layout.size; } - if (layout.size) { - // this layout was already counted for, lets first reduce old size - chartArea[layout.pos] -= layout.size; - } - layout.size = layout.horizontal ? box.height : box.width; - chartArea[layout.pos] += layout.size; if (box.getPadding) { updateMaxPadding(maxPadding, box.getPadding()); diff --git a/test/fixtures/core.scale/x-axis-position-dynamic-margin.js b/test/fixtures/core.scale/x-axis-position-dynamic-margin.js new file mode 100644 index 000000000..7e8bf6e6e --- /dev/null +++ b/test/fixtures/core.scale/x-axis-position-dynamic-margin.js @@ -0,0 +1,27 @@ +module.exports = { + config: { + type: 'line', + options: { + scales: { + x: { + labels: ['Left Label', 'Center Label', 'Right Label'], + position: { + y: 30 + }, + }, + y: { + display: false, + min: -100, + max: 100, + } + } + } + }, + options: { + canvas: { + height: 256, + width: 512 + }, + spriteText: true + } +}; diff --git a/test/fixtures/core.scale/x-axis-position-dynamic-margin.png b/test/fixtures/core.scale/x-axis-position-dynamic-margin.png new file mode 100644 index 0000000000000000000000000000000000000000..3dffa316dd768ca6379df3b6fbabbc337c07ce97 GIT binary patch literal 7866 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/core.scale/x-axis-position-dynamic.png b/test/fixtures/core.scale/x-axis-position-dynamic.png index 62fc3ec86e7912fcc44d030cd2485f908cf518ee..bbebdd33b7ef520ae961cedd24bdae6169d539f4 100644 GIT binary patch literal 12484 zcmch7Wn7eB+wDEWAOlEBC=x@cgoFs9?<>}|)(X{BzeYjELoHUz=Je_;^v z82IrS+hPMjC`eiUs;-yGd?I;SjLv>zfX&auv1j(&Si>qsH z>n1zKi!OfMi^j8+{tmet%@-(8mY1a^4t<7fzuQa9UWKD-R2NsB~5Dzg0A$ByoVPC%G5K=&qo6hv`e>u(4qCl@F% ztB0SK^vd6nG^>Lo4t7`5GA|HQ+fXduBU}PU%F{#fVlE}#s}tpv{#z@*C-}*4eXxyk zpXvNs;kmf*gGs{Uom#@>HYO2UGldLxh*tB7CF$SyLF>ZqER;_gbY!YI{Y<$k;Gh9L zJ$a#Fdwt$vYiny^XJEkSw6t&8pXrXqFcmrIlfK;Fm&ZbIEn;-3^WfY%&ZRU?)M0@W zdV4d^IY%#-ml|O(kQ^Ip!*}!jhtzgzh%{TF@F9diK``VeWz<{fR`vbj8##K-Rf9ez zh?MMBt@hqyCvDFB^HDz$sbtV%P$)ITUXs;M9~`3AKJ^~!^zdsq?$J}1N2V$M)g zLv7qql!T8-#<;+KzBiVL7k8hLc7XazoE&sAuNS1YkLnX)pvSecSBQ?*othjr3^$wj z@v6JfO4YE!?M-FN*K^5^U=509-&eLAeyBG8?y;k@vA5tg#F!*1A-5^bj*l2O5tpHX z`)gCT>G|{yKQ1&^(=~+fak40D*e@wq{@t-J#9Qz6i@r!PD>W*gOSFvPy%84o2zs1h zut{;a4ro*XezUK>3WShhTw8=l+C71WHf)cyNFSqrDm<$qtqtJi|^Mf?+4%x0@2Y@BVT~?ZY7N$ zJ34Gaf)%QJZ(J#BSn6Edm2u*SXiv8l9U*I%sDVD z4+%F23eg@eu*zky8^4|i)*z++bn0BXH*q~=Y9=SIYc1XNFA%S_e^G&qcOCcCcvwC+-$Z*32a`jK7abtsj~DU@Uw#Q6hu>fDvxm>bp4T50 z-?sYx;uQzHk=4iX2OOQZ6aGl7@keQR+sauMLM-MYd_CW5NG{7~`|Yd?jMrK;Qc5g; zI^nc7)z)2P)B2JaEiy%mL}F~8EB%d04X`w}z4^DN!o`NTMShrOsL&hM`tM2G#qixM zai8rjIELC6A3aV8m|yr+sH&>Mu5Y>EN}A{Q1Px0Z>pAL1K8D~}JO@VF-E^}x>p{t2 ztz2!9pn(E!vY#SE&*(W2Ek6<^#N1Y!#c;ps9}MpM2k*1_t!X)Qzk9`RQq?QPXg2lp zbxSIY=veRg*XUfWG({w4bN2B?Lc9f@0E@ULfQdEr?+agZKYses5BL3{*CYsvQ^Jw>D zCdvB?zJU}w^psq%_;MMRBEkY{nkziTrZowP!SG?{{`Cz⁣`=GVQg--2XGv2eQoo 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 UK&iXIAn;FFL0$g6tXa^10W|lBKL7v# literal 12076 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