From c853ca6942fb2a2b00b7a4b03e7a17f94a6b1684 Mon Sep 17 00:00:00 2001 From: Evert Timberg Date: Sat, 29 May 2021 17:47:44 -0400 Subject: [PATCH] Allow setting a constance spacing between arc elements (#9180) --- docs/charts/doughnut.md | 2 + src/controllers/controller.doughnut.js | 12 ++- src/elements/element.arc.js | 48 ++++++++---- .../doughnut-spacing-and-offset.js | 29 +++++++ .../doughnut-spacing-and-offset.png | Bin 0 -> 39691 bytes .../controller.doughnut/doughnut-spacing.js | 28 +++++++ .../controller.doughnut/doughnut-spacing.png | Bin 0 -> 43696 bytes test/specs/element.arc.tests.js | 72 +++++++++++++++++- types/index.esm.d.ts | 13 ++++ 9 files changed, 183 insertions(+), 21 deletions(-) create mode 100644 test/fixtures/controller.doughnut/doughnut-spacing-and-offset.js create mode 100644 test/fixtures/controller.doughnut/doughnut-spacing-and-offset.png create mode 100644 test/fixtures/controller.doughnut/doughnut-spacing.js create mode 100644 test/fixtures/controller.doughnut/doughnut-spacing.png diff --git a/docs/charts/doughnut.md b/docs/charts/doughnut.md index a4f36794f..1c1755e92 100644 --- a/docs/charts/doughnut.md +++ b/docs/charts/doughnut.md @@ -116,6 +116,7 @@ The doughnut/pie chart allows a number of properties to be specified for each da | [`hoverOffset`](#interactions) | `number` | Yes | Yes | `0` | [`offset`](#styling) | `number` | Yes | Yes | `0` | [`rotation`](#general) | `number` | - | - | `undefined` +| [`spacing](#styling) | `number` | - | - | `0` | [`weight`](#styling) | `number` | - | - | `1` All these values, if `undefined`, fallback to the scopes described in [option resolution](../general/options) @@ -138,6 +139,7 @@ The style of each arc can be controlled with the following properties: | `borderColor` | arc border color. | `borderWidth` | arc border width (in pixels). | `offset` | arc offset (in pixels). +| `spacing` | Fixed arc offset (in pixels). Similar to `offset` but applies to all arcs. | `weight` | The relative thickness of the dataset. Providing a value for weight will cause the pie or doughnut dataset to be drawn with a thickness relative to the sum of all the dataset weight values. All these values, if `undefined`, fallback to the associated [`elements.arc.*`](../configuration/elements.md#arc-configuration) options. diff --git a/src/controllers/controller.doughnut.js b/src/controllers/controller.doughnut.js index d6c9c020b..bf472317c 100644 --- a/src/controllers/controller.doughnut.js +++ b/src/controllers/controller.doughnut.js @@ -110,7 +110,7 @@ export default class DoughnutController extends DatasetController { const {chartArea} = chart; const meta = me._cachedMeta; const arcs = meta.data; - const spacing = me.getMaxBorderWidth() + me.getMaxOffset(arcs); + const spacing = me.getMaxBorderWidth() + me.getMaxOffset(arcs) + me.options.spacing; const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0); const cutout = Math.min(toPercentage(me.options.cutout, maxSize), 1); const chartWeight = me._getRingWeight(me.index); @@ -325,7 +325,7 @@ DoughnutController.defaults = { animations: { numbers: { type: 'number', - properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth'] + properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing'] }, }, // The percentage of the chart that we cut out of the middle. @@ -340,9 +340,17 @@ DoughnutController.defaults = { // The outr radius of the chart radius: '100%', + // Spacing between arcs + spacing: 0, + indexAxis: 'r', }; +DoughnutController.descriptors = { + _scriptable: (name) => name !== 'spacing', + _indexable: (name) => name !== 'spacing', +}; + /** * @type {any} */ diff --git a/src/elements/element.arc.js b/src/elements/element.arc.js index c283b577a..918128cdf 100644 --- a/src/elements/element.arc.js +++ b/src/elements/element.arc.js @@ -93,16 +93,30 @@ function rThetaToXY(r, theta, x, y) { * @param {CanvasRenderingContext2D} ctx * @param {ArcElement} element */ -function pathArc(ctx, element, offset, end) { +function pathArc(ctx, element, offset, spacing, end) { const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element; - const outerRadius = Math.max(element.outerRadius + offset - pixelMargin, 0); - const innerRadius = innerR > 0 ? innerR + offset + pixelMargin : 0; + const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0); + const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0; + + let spacingOffset = 0; const alpha = end - start; + + if (spacing) { + // When spacing is present, it is the same for all items + // So we adjust the start and end angle of the arc such that + // the distance is the same as it would be without the spacing + const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0; + const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0; + const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2; + const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha; + spacingOffset = (alpha - adjustedAngle) / 2; + } + const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius; const angleOffset = (alpha - beta) / 2; - const startAngle = start + angleOffset; - const endAngle = end - angleOffset; + const startAngle = start + angleOffset + spacingOffset; + const endAngle = end - angleOffset - spacingOffset; const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius(element, innerRadius, outerRadius, endAngle - startAngle); const outerStartAdjustedRadius = outerRadius - outerStart; @@ -158,11 +172,11 @@ function pathArc(ctx, element, offset, end) { ctx.closePath(); } -function drawArc(ctx, element, offset) { +function drawArc(ctx, element, offset, spacing) { const {fullCircles, startAngle, circumference} = element; let endAngle = element.endAngle; if (fullCircles) { - pathArc(ctx, element, offset, startAngle + TAU); + pathArc(ctx, element, offset, spacing, startAngle + TAU); for (let i = 0; i < fullCircles; ++i) { ctx.fill(); @@ -176,7 +190,7 @@ function drawArc(ctx, element, offset) { } } - pathArc(ctx, element, offset, endAngle); + pathArc(ctx, element, offset, spacing, endAngle); ctx.fill(); return endAngle; } @@ -205,7 +219,7 @@ function drawFullCircleBorders(ctx, element, inner) { } } -function drawBorder(ctx, element, offset, endAngle) { +function drawBorder(ctx, element, offset, spacing, endAngle) { const {options} = element; const inner = options.borderAlign === 'inner'; @@ -229,7 +243,7 @@ function drawBorder(ctx, element, offset, endAngle) { clipArc(ctx, element, endAngle); } - pathArc(ctx, element, offset, endAngle); + pathArc(ctx, element, offset, spacing, endAngle); ctx.stroke(); } @@ -267,8 +281,9 @@ export default class ArcElement extends Element { 'outerRadius', 'circumference' ], useFinalPosition); + const rAdjust = this.options.spacing / 2; const betweenAngles = circumference >= TAU || _angleBetween(angle, startAngle, endAngle); - const withinRadius = (distance >= innerRadius && distance <= outerRadius); + const withinRadius = (distance >= innerRadius + rAdjust && distance <= outerRadius + rAdjust); return (betweenAngles && withinRadius); } @@ -284,10 +299,11 @@ export default class ArcElement extends Element { 'endAngle', 'innerRadius', 'outerRadius', - 'circumference' + 'circumference', ], useFinalPosition); + const {offset, spacing} = this.options; const halfAngle = (startAngle + endAngle) / 2; - const halfRadius = (innerRadius + outerRadius) / 2; + const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2; return { x: x + Math.cos(halfAngle) * halfRadius, y: y + Math.sin(halfAngle) * halfRadius @@ -305,6 +321,7 @@ export default class ArcElement extends Element { const me = this; const {options, circumference} = me; const offset = (options.offset || 0) / 2; + const spacing = (options.spacing || 0) / 2; me.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0; me.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0; @@ -327,8 +344,8 @@ export default class ArcElement extends Element { ctx.fillStyle = options.backgroundColor; ctx.strokeStyle = options.borderColor; - const endAngle = drawArc(ctx, me, radiusOffset); - drawBorder(ctx, me, radiusOffset, endAngle); + const endAngle = drawArc(ctx, me, radiusOffset, spacing); + drawBorder(ctx, me, radiusOffset, spacing, endAngle); ctx.restore(); } @@ -345,6 +362,7 @@ ArcElement.defaults = { borderRadius: 0, borderWidth: 2, offset: 0, + spacing: 0, angle: undefined, }; diff --git a/test/fixtures/controller.doughnut/doughnut-spacing-and-offset.js b/test/fixtures/controller.doughnut/doughnut-spacing-and-offset.js new file mode 100644 index 000000000..d2e0c59b0 --- /dev/null +++ b/test/fixtures/controller.doughnut/doughnut-spacing-and-offset.js @@ -0,0 +1,29 @@ +module.exports = { + config: { + type: 'doughnut', + data: { + datasets: [{ + data: [10, 20, 40, 50, 5], + label: 'Dataset 1', + backgroundColor: [ + 'red', + 'orange', + 'yellow', + 'green', + 'blue' + ] + }], + labels: [ + 'Item 1', + 'Item 2', + 'Item 3', + 'Item 4', + 'Item 5' + ], + }, + options: { + spacing: 50, + offset: [0, 50, 0, 0, 0], + } + } +}; diff --git a/test/fixtures/controller.doughnut/doughnut-spacing-and-offset.png b/test/fixtures/controller.doughnut/doughnut-spacing-and-offset.png new file mode 100644 index 0000000000000000000000000000000000000000..e78e313ddc01d628bbfa5ea58c393f0d2d8609e8 GIT binary patch literal 39691 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

~9lg~NH2v41hpLCcmeMWZf zH@4sKbHokpp#&gInf{?m;FV>9vLlP?=#S96R((JZ5&`N@_k>N*CEldBMWF=uw->OfPb( z;TQu&X>86Ybkn$R%N^QnTOJC}bQiAL5Xx6x!p4I+Rw7zS5L36bA5Uk>y@#jQJX9RR@a;l9dkBPvNWeu)GoH16EZ1a~NpkW+ACjGD-9B=}tf zBV{AuMVdNU!h7EUh6Y&g9NKKJyV%W1@fVeMl4*c52#eopzvofcT+r(S(@$OBvio$n z8X zgbFW~0=9UG)4^e)_A0qxQWFNcV(A&2Ub^*T8xa5c6BW5bOL0sA7rmg~iIur6@e(C8)|B6lCJVl$Q>bD8~RF_msK_`2l+ zuKwqfH>YKv*2t zSt%s2emHAIS@=?Om=|Q*HQWUW%2k;aAYUTakOcGT{1o%KuOmPCE^m9!Ds=_kg(%17 zOb2i2={VJD=G#19WK~q`N^1}_g|^)yZ%g{h7fF20N3TSV#z7r7uuWl)Nh#q1bKN15PX+bCmVC<&E9KGEGwz@Hn=? z{MCJn$S-n+dP>xff%m}{Gl@3r6qM-O0C#nT1K^85gs7D)DJw&i$=>i=FW{!%hHQ!3 ztW3qtS*JtymJZdE=W4gD#tXI-&$d&MpB>O?F%Ae^h&YNE(9kA{%!?7%fXClPP24VU z=m^mfuZfO-=qF!l1n9l=aQDj+qpzATz?=1OR!?uVb)~V;PZC5cOm3o2@&8P_y3@v5 z%mhj5xOf}}0-JbD*XB=tobYw28Ig|HX#zmZmry>aZXVXSE{4TFy7=RHS?ETsbPaSyF-5f9>j#n)P@2FQoHa6gFFV@Z6v$97FT90s|KI+9etFo|_FuGS8PWcH%-rs5idVCZSh^Hr4u*b_;Nf?vK*p- z)kxL&GPeu|!XU2+aCkZ1BgfMsAPsT&1v%#a8M@$Q%CBvgw?zyPa5akunq}_l(mv}? zWBuLX!l5_sDHK&xL6eq3DnQf|QP5m}Dhb2_IuQ4V>*q;fS2boWn@6kBZ7fJ`$`~iW z1kfY(pD3o$#or9xn3W1RSb}~^!*O5Co^Q)M?W$ROjHf_RP|{~6!v24TJ7(?gkO!{Zz4o<8Fb-G_nUgso zt+1+*+HQei1!daP4;FBwkRW0~pPX1KATJoRYy%4*28lQw4v94VxmerA3qyB42RZsXZ!7$PM@|wn-)_HOZ?oA??T~r&e>JooTHvC zeT;m5tBK3q*h!^B;HpufGzD`4WD!(yi=TpKf=zvkt-$)ZN?hv9r99r%-SAEqJPqPcgt^tUG`dr& zWW!{1O$DTdRyIi^dQ626ahW|@Aa#~@l@mM*cu4t7!z96vq#kxYwO=rVNHrhA_NvL; z)B^r8qZ-io6e~PWcOI1ys%Y4bYBjvpDt|rktIZ}<0*?iT2jJnSxeUyt!%_xze6FgK z+K!la_J*^ge^{QS&(!Xh`!BJ9RSx0PZp)M&hr+3+=xhhZu29UQ_k@YBm6_L1_n6VN zU>$xz{>g72w{%@uemG#hwA_Sccx*CeM`!&WXsl&C2LW#m#wlE#*(aM z$aaN7^(GNx$+TGFT}0N2nUpMztq?^+)+GBfHI~n7diVJL4c~d(AMc#|TFyDIbDrmU z?wwJcjQK(svYs4|erJm(?=sx6SU12S>;Qk6u7uG4hwl9$mAow#MJFFLYuQhPh~fUR zzC$Cm7<|P*(?UL@XQQUcO8~{BK2dc;aOc{$lo#&*) zK3QA+Y29iN_8W}}RVu$j$edJm#T%p{cnyb^_4&RA&zhmWSpm*bBxJK+F`T}D!(CfR z^%)d|j8QsYEQL|JD5AI~>wLuf2TwVX15TIqUSYrG|2w>3gbTBMTjKFCp9GRYxlwg! z=k^_!!^S8xbC@SKfd2ShtR&}vInR#INn?cJ%UAJVoAnT>#oBDy*V^o^xTOk+hj&oJ z4k4xnuY8{uRQt~B1H~opw>KsZWBRxqjpJ_`tf`eOZaCN5CV!4)fldqXFgW5N@!NrI z1h_G9$DMG_YB!&pH}Wc>KQ-lh z!Xg)(-#OP3a`21-Z8wyW5`{Ym%Rko==%FWX6j0_h7aq_hiKiM5hA#|mRQS0lM2vZ2 z8DxHG<%m!7O(O8kxV=z~a=qSRLoh$0QMPiSNGE-tArE$(lVFBnlY`_Ct0^uGjH$6# zLF3c$Xc0>o_%!kJvvo?~R}zRozEPZWpyXr-WpY z>XD10VFb6EF1m7JbM4cL`b{%|&=UTdW`_{GIQO&#r2yBR`}3&fV7vbI`gn5~ztJV& zW1p_=grG*=HE`gkgNyP(_%yutl9N{+n_w#CGbBEl;=Vpceg?8sr@{o3Ae6xyQ%Hb? zhE>t-@!e#`Fuvh}Z0?#@$o27t>e<5|-9R`-!>wm!6O{;i=ex)%3OV51Za-lpmi2&w z8+#M0l+%1O#v1!rp~Ng11E#zL*|8%Xc=ojE#MaInrLDbl`S~j~o8##AWcq`w(ZOe_ zg%2eVgC(MqF^Z|_Bz(sNcGBDB2c759A;Gxo0>q*nJ?_5osvGGujh%<;FXgdJ+kR#R zdvkwh;Tj%a)Z8FJQNDFwc^QG{R83)RskcjKOa_a0tz||BZ+Jk?>^8_TV&$|HG9Hdl^>h5z}7WGl>Ih0u!?l+!$-UXG37_MA#AerLHrDYP1> za3}6W|ItjUe5%voZ&N1`Nz-&+qA^hmr93J{^#ACcJ5=&*^|3=4)9+rL*k7>(8(vs$t7o900gO7lcx^ifPyqN(x@RtW zkyVt6yR>P)1I_b9ye?KC;cT9lB%WP{^5;k!KO@xu|AQWkS-WcHrqI3xY66(TS_N^T zy2wzdz>^>7ejJ9+-dM5|=+_1xN>Tf;J{A&Awh!89(bhhxiSq9(tHnYFB`u z?kO%T=DO;Mi>0KM_zGJP+{#LSx6My7e2Jpdi9M5hogaFBa{gg3NEI@>KzhxieLaON=QR1^kBGh9KCnR&ogEY2f^685rVBD5xyoEy zF%x6BvI)QFRj?IYMFVt+gO9rUE#sKh%G*|w8@w@&Q0=wqWMWm3!(%2jd$~zV&bBqVI~55 zw2lfqxW0LEsMqujB%HugPpW0_{`zvux7|8sGh_Vn+%1n=-}+5RE(rn+tld%VThHMN zQs|GJfH+p0ibJK+$WyY0mk-ZIZ)*H#(|}I+G#U(z1G?nU_@1*1^J~YS!N=(fkzbq8 zH-|$_jXtv5&Tq6lRJq1g_B!%J2st*0mVkl7SsVB$oIV9bqulp6CM{tdAv|I*S-9@? zLJ;Lv#CfSKf1j9b!L)J$N~>wMWhvn{iO@*Y-W(pjL>=P}?DofW(N&Sj(>4YmOb> zIsu_s_Zik5x__iYj_<5m+!|u|R6U>Tx5|gb6LaDDgi?*J&U&% z$cxdkKQDov&d&E9?ORicx3Ef}SZENsX^k!X)%&r(P&P;oR^wJ5t%}o;*wyLp@cm~x zON%5hEMYs3K3urjs4J8ky4Rh0TTN?i$#!Y{Tc)g_PWVc^+Jyy4a_U4(sIVs=4a&(p|bQhITgADPT5IfO~Kb+D`un=jNWfa{diQ zOaM=2qhLTBctWO+gW#f%s_RYNQ0QJqi)=kWRge>+JEpm9ARB!TvGCdXydMlrSZZ^F zv_j*;?ZQRrj_=`5XFU6CIX0hh{AYUa$=D};cS`QF86R^Gg@(%;_C`LwZ_ux(qKbXy zWYTOPo-YR_wQ3m$B$Dtv28e-kQ}2V8R`!gq%3ATvWrtEl0d*_gz|{}eY7*d#Jj!Y9 z8ifwGB)&k%bFIAGbjp^{Xj)VY%Wk@F!kT)(KUJVG&-@Jrn*= zVmxSEYKuM7juXH#nr`z=&NVOrA^A~_=h+j^)_YP6ub{$Mf}ZXAu^d`J0^h}13&c7J z<#Wx-TY*#ct*^S7=Pl9(L}^64z7%^lOtb2yndg~r4Ochr?tQV!gn_geUO_n+b(SDZ z)<%_;6^G{U=rmmU3QMgTGnSk=CB%fb;S8j=C8j^;1Ngz>B_y%n z4X583i-FEF{z&KPVxK+Ud9#&RzpHuOJ`^e_Yr6P{_QhOex~#dL_C+mTHd|#HfDbOT zYGoe~Ib#k>e6sk&NS)I$@QQp&Q~N;Gw|w>`$QnGDhGfZk{L+KG_D zCYS>m6cK#Vo1=4aBC!X-16QA!G4@dc+MyVR>9TTD^xCLqpu zXj+b-x$3BcG18`&m`VU)m%X7+xM;$(l z*$qNxcILBVIVk6#fKTycc2j#9S)e2#%};I_k8S`h5r-nZ!fl2w6~__Jk#n|9k`uqo*!rNJJ(MM=rqh)qOc9G(%pJOQOb#e0 z&=tFh{=i3ob%@^tviVm53VRc4ZY5nB`GBgjf-pZx4le^c*L!ZLUes5>9NcPl>< zvg^1BNvubGlz?CXqeJ>U6(R^{4_w~7BVU{`7+G4*3zzZz)Kp$$k9`!ynBwJhq= zvY28dPxj!8ll1%6E;p+c_ zH1!c5k#oTc3gh~;>R3Mbak_6D9aK!vb5R%Qt6^Z%T~*%sF{^Z;3L2rr>1Q67k?G;jQV7PUX!%18J&>e|wvML8JsVEaWy-}REV2?vY8-fgE;lmVI`ct)9tbjCIN z=jV5_&E>6~{;sd0(ln%b#eiP-zHqR{fT#wo>Y})408Q`8 z#(?HI1DWBf1G!|cMD#W{H0v1h&H&+Ww*F9sYx_WIwZDow_+#S1()Bauz#w)leqIoZ z(&I$AA{W`Am@GEu3xNs!&=nL#YSb|ja)OA`w7`xm=m97Bfhtz~6SGneqtfQL_y@F|vXS3Q629kznRfL}Te(u)rHNs1$yd+km+RE!gG-DdCAC->~RAHRx zM(Y(HVx)8&0s|DMt2}|9j^^k|C98pueDY-9Psu_~cl@Hn$K< zkNo!z2V==8rdNuBJsvS=nmr3qW=?WFD4xVzf&ew#?OzrU;iI_J0DR1 literal 0 HcmV?d00001 diff --git a/test/fixtures/controller.doughnut/doughnut-spacing.js b/test/fixtures/controller.doughnut/doughnut-spacing.js new file mode 100644 index 000000000..c6c843792 --- /dev/null +++ b/test/fixtures/controller.doughnut/doughnut-spacing.js @@ -0,0 +1,28 @@ +module.exports = { + config: { + type: 'doughnut', + data: { + datasets: [{ + data: [10, 20, 40, 50, 5], + label: 'Dataset 1', + backgroundColor: [ + 'red', + 'orange', + 'yellow', + 'green', + 'blue' + ] + }], + labels: [ + 'Item 1', + 'Item 2', + 'Item 3', + 'Item 4', + 'Item 5' + ], + }, + options: { + spacing: 50, + } + } +}; diff --git a/test/fixtures/controller.doughnut/doughnut-spacing.png b/test/fixtures/controller.doughnut/doughnut-spacing.png new file mode 100644 index 0000000000000000000000000000000000000000..d586621e9809944bd4bf08edf84286a990ccdb0d GIT binary patch literal 43696 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 s=|r3 zoD)Bnd?RsoeNvW0^o~!VTI~F=7&N^dyqCY6)_0Go`$LoY@5@)K?}A4z&8>c|@3Sw5 zAZVV^4rK;|oZvIJER*+$b~#&Kj5Gj(1F>4)?o^$z$fTF@%VQn^W_Y}N-us5{joYqwH zb-gg=_8O=vqeHefZ0cIB^QyqVG7(H#eBZIx8ourFHr^xY8)c-W3%&znI^MEc`z%H7 zE8PDD=0oSiaTyHrp^unlJt0eIIvFOZTePy^`i11=c_*OnXKAmdKRQ|88|LAC7dd~sCrK3%|oQeEu0Q}R{GSn=) Hj*k34tr;d# literal 0 HcmV?d00001 diff --git a/test/specs/element.arc.tests.js b/test/specs/element.arc.tests.js index e857b97dc..23380aa25 100644 --- a/test/specs/element.arc.tests.js +++ b/test/specs/element.arc.tests.js @@ -10,6 +10,10 @@ describe('Arc element tests', function() { y: 0, innerRadius: 5, outerRadius: 10, + options: { + spacing: 0, + offset: 0, + } }); expect(arc.inRange(2, 2)).toBe(false); @@ -19,6 +23,25 @@ describe('Arc element tests', function() { expect(arc.inRange(-1.0 * Math.sqrt(7), Math.sqrt(7))).toBe(false); }); + it ('should include spacing for in range check', function() { + // Mock out the arc as if the controller put it there + var arc = new Chart.elements.ArcElement({ + startAngle: 0, + endAngle: Math.PI / 2, + x: 0, + y: 0, + innerRadius: 5, + outerRadius: 10, + options: { + spacing: 10, + offset: 0, + } + }); + + expect(arc.inRange(7, 0)).toBe(false); + expect(arc.inRange(15, 0)).toBe(true); + }); + it ('should determine if in range, when full circle', function() { // Mock out the arc as if the controller put it there var arc = new Chart.elements.ArcElement({ @@ -28,7 +51,11 @@ describe('Arc element tests', function() { y: 0, innerRadius: 0, outerRadius: 10, - circumference: Math.PI * 2 + circumference: Math.PI * 2, + options: { + spacing: 0, + offset: 0, + } }); expect(arc.inRange(7, 7)).toBe(true); @@ -43,6 +70,10 @@ describe('Arc element tests', function() { y: 0, innerRadius: 0, outerRadius: Math.sqrt(2), + options: { + spacing: 0, + offset: 0, + } }); var pos = arc.tooltipPosition(); @@ -59,6 +90,10 @@ describe('Arc element tests', function() { y: 0, innerRadius: 0, outerRadius: Math.sqrt(2), + options: { + spacing: 0, + offset: 0, + } }); var center = arc.getCenterPoint(); @@ -66,6 +101,26 @@ describe('Arc element tests', function() { expect(center.y).toBeCloseTo(0.5, 6); }); + it ('should get the center with offset and spacing', function() { + // Mock out the arc as if the controller put it there + var arc = new Chart.elements.ArcElement({ + startAngle: 0, + endAngle: Math.PI / 2, + x: 0, + y: 0, + innerRadius: 0, + outerRadius: Math.sqrt(2), + options: { + spacing: 10, + offset: 10, + } + }); + + var center = arc.getCenterPoint(); + expect(center.x).toBeCloseTo(7.57, 1); + expect(center.y).toBeCloseTo(7.57, 1); + }); + it ('should get the center of full circle before and after draw', function() { // Mock out the arc as if the controller put it there var arc = new Chart.elements.ArcElement({ @@ -75,7 +130,10 @@ describe('Arc element tests', function() { y: 2, innerRadius: 0, outerRadius: 2, - options: {} + options: { + spacing: 0, + offset: 0, + } }); var center = arc.getCenterPoint(); @@ -100,7 +158,10 @@ describe('Arc element tests', function() { y: 0, innerRadius: -0.1, outerRadius: Math.sqrt(2), - options: {} + options: { + spacing: 0, + offset: 0, + } }); arc.draw(ctx); @@ -114,7 +175,10 @@ describe('Arc element tests', function() { y: 0, innerRadius: 0, outerRadius: -1, - options: {} + options: { + spacing: 0, + offset: 0, + } }); arc.draw(ctx); diff --git a/types/index.esm.d.ts b/types/index.esm.d.ts index 17b06d78d..082186217 100644 --- a/types/index.esm.d.ts +++ b/types/index.esm.d.ts @@ -252,6 +252,13 @@ export interface DoughnutControllerDatasetOptions * @default 1 */ weight: number; + + /** + * Similar to the `offset` option, but applies to all arcs. This can be used to to add spaces + * between arcs + * @default 0 + */ + spacing: number; } export interface DoughnutAnimationOptions { @@ -294,6 +301,12 @@ export interface DoughnutControllerChartOptions { */ rotation: number; + /** + * Spacing between the arcs + * @default 0 + */ + spacing: number; + animation: DoughnutAnimationOptions; }