From cea5ebd76e7fd11da3e4c0fab81ff2b3946e7ffe Mon Sep 17 00:00:00 2001 From: DemchaAV Date: Tue, 4 Aug 2026 08:31:53 +0100 Subject: [PATCH] fix(charts): a bar's value label gets the halo the style asks for MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The halo chip exists so a grid line stops running through the digits. BarChartLayout resolved the colour from the style and then passed null for every value label except a stacked total — a hardcoded argument forty lines from a sibling call that passed the real one. The style accepted a halo, the layout computed it, and the label was drawn without it. Line charts and donuts had it all along, which is why nobody noticed: the 1.8.0 release notes already promise the chip for a label sitting at a "marker or bar top", while the javadoc on ChartStyle, ChartTheme and ChartDefaults each called it a line-chart feature. Three descriptions of the same gap kept it invisible; all three now say what the code does. Two arguments. Every emitChipLabel call site in the engine passes the resolved colour, so vertical, horizontal, stacked and pie labels behave alike. Six committed previews carry a bar chart with outside labels and are re-rendered: chart-showcase, engine-deck, engine-deck-v2, feature-catalog, financial-report (pdf and pptx). All six draw their charts on a light surface, so the themed white chip is invisible as a fill and shows only as the grid line stopping cleanly at each number; on financial-report page 1 the pixel diff is a single row. The two decks needed a second generation pass because they embed thumbnails of the other documents. The carousel asks for a chip in its own card colour, which is what surfaced this. ./mvnw -B -ntp clean verify — BUILD SUCCESS, 692 tests in the closing module. ChartLayoutResolverTest 38 -> 40; both new cases confirmed red against the reverted engine, along with the existing minimal-chart test whose ShapeNode count now includes the chips. --- CHANGELOG.md | 10 +++ assets/readme/examples/chart-showcase.pdf | Bin 17571 -> 20142 bytes assets/readme/examples/engine-deck-v2.pdf | Bin 35743 -> 36283 bytes assets/readme/examples/engine-deck.pdf | Bin 580457 -> 581263 bytes assets/readme/examples/feature-catalog.pdf | Bin 215328 -> 216143 bytes assets/readme/examples/financial-report.pdf | Bin 188344 -> 188787 bytes assets/readme/examples/financial-report.pptx | Bin 411341 -> 411465 bytes .../document/chart/BarChartLayout.java | 4 +- .../compose/document/chart/ChartDefaults.java | 4 +- .../compose/document/chart/ChartStyle.java | 12 +-- .../compose/document/chart/ChartTheme.java | 2 +- .../chart/ChartLayoutResolverTest.java | 82 +++++++++++++++++- .../flagships/LinkedInCarouselExample.java | 4 + 13 files changed, 105 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c133ce85..fbcb0e080 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -164,6 +164,16 @@ follow semantic versioning; release dates are ISO 8601. ### Fixed +- **A bar chart's value labels get the halo the style asks for.** The halo chip exists + so a grid line stops running through the digits. `BarChartLayout` resolved the colour + from the style and then passed `null` for every value label except a stacked total — + a hardcoded argument forty lines from a sibling call that passed the real one. The + result read as a feature that does nothing: the style accepted a halo, the layout + computed it, and the label was drawn without it. Line charts and donuts had it all + along, which is why the gap survived since 1.8.0 — where the release notes already + promised the chip for a label sitting at a "marker **or bar top**". Two arguments, and + the six committed previews that carry a bar chart with outside labels are re-rendered + with their grid lines cleanly interrupted. - **The example catalogue renders the weights it declares.** The same defect the donut KPI had, 138 times over in the examples: a font *face* constant named with no decoration, which the library rewrites to its base family before the lookup. The PPTX diff --git a/assets/readme/examples/chart-showcase.pdf b/assets/readme/examples/chart-showcase.pdf index 0fde69f31cf53fbd83d83fca7b41d8cea4b56a34..1317546bd96971c858d713ebcc58247fde8ab14b 100644 GIT binary patch delta 11387 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 Q1o(JC$h5T5sxrv`16&#!3jhEB delta 8826 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 ihw$*r*~U)RAzO@+ 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 delta 3397 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 Gfc^^rdVneb diff --git a/assets/readme/examples/engine-deck.pdf b/assets/readme/examples/engine-deck.pdf index adf4488f3ae18ff247e047ef3896aeae0031b275..4c7097424d6c7052a67b32a729fe3047d15c7686 100644 GIT binary patch delta 11142 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 Nu90bIq?DwQ{|gW^Tmk?9 diff --git a/assets/readme/examples/feature-catalog.pdf b/assets/readme/examples/feature-catalog.pdf index 860559b4d0c1e587ce1743a729f59b9b3785b7a8..fd27cbd4908373531f5c88011bb1451897a52246 100644 GIT binary patch delta 5884 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

veF~rw%6=_=d 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 diff --git a/assets/readme/examples/financial-report.pdf b/assets/readme/examples/financial-report.pdf index 8a0f470713aa4461cdf0498399356651b16e8297..47194346e4ea332c0bc23a56e620c71a7e8aa148 100644 GIT binary patch delta 17287 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 pOyJs>gw;t1przL%p?E+ delta 16849 zcmXV1V|3q5u#Ropw(T@%W81ckUu-nCn#ML8+fCBw-`KWw``&v$?S7b@-P!ZZoHNhN z+zueN_ac5bgXCu8&bZ!!pag~k91;!2T{a${u^&S*>4G><9y7?`3JrXa3BOaz5%N9D zCQ4%zlXuW`wBBFd3Mt(mFC5O~>C6xlw3@K$2(@)}c5ZZaz8EWS|BLEwalUp^jrML%Z>{6zykBW3)yq!`}3zR&Q^CFfi<8TIyxz8_4J zUW(@TJYO$>9v=%t-rE))KQ9lQdH^A<^NUunmcVoU-j}P7+X9jg*O!a)SKiCZjUFGq z_lJ*2R8mn`m7uGO&{jh1F0ta!a#fIhj$T&SeJwsjz@zMT!CK9X+w2fltJ z0s+3aACExUKZBG+{ok%4+X|E}H~imrL61Pd%l7uDQdt*o!N=WlnbGHg(??>!<3C$2 z!C(Df-ro;-ok$%EX#5k%OdV4$Sbx0C2Ks&0JzfIc%U7a;4oz>9DI9T|P*GYJ^p;b| z3f~1*&WH=OJy1#z)-VI5O%R`X{1Qo*h#bYc05anag%Z0UXTt7D!#Up^i9cZ5JemdP zAWuR)e8?afe+;ZiC7U?qV#F7oPQ5pmxVeD37aj>nEJ^YWhzyD$3M(F>9fzYDDe-G5 z?teR5Q2X)HD2FuNss*2<(RT@QxY#u22%9XN5^zyrOYinYAA zP&WLuV7Mr`~^Bbg%n|Fsp|>p^zT!V#67jsoX~U8#)zVU zl6BUbvXh+a$l}|2A!IY)Frv~CO^Q(HaM<*hRx~I@joaEKg;WgP*@#g2CNzG|l~q^j zI)(J51{VAb#P$r{7!-dRB7H51-fUj*g_!PVJgLAD*gdWF#uNDM%L;6B6ln}l$WEA( z*4ZFgByk0~#^VXr{F41;Y4MFt z^QVu7qbO&MpZI1AR1L6`4Y_B*9`Rf9ZinWGKC2j<(FG9_vJtTZf)uQMbjzs$=McK4 z=c~am*l)L-MjK%PR%@y%TPQjpd`S`)>j$jj70n0AgQ7B=N=^s~TSOt+FRT$bwC}c* z>Z%fyV%`SU5%^558(~NjVr+2vyht47+Syk>2x=_edOD9{3emdTqkSH!Z7kG_LlMHK zR=HUgt?|_9jD0ulq2M+OA+A{Z%fYx$V6ppr9=E*wWyL7aM7{9Gz>@^h zgzJ?=(Q{O5nsRz5Zh7y{3Y-`$E0``@wQ~>xaW`2_dTji69!s)jAjb@>z}YN9YMEIX zL)Zhf9RO8ZCaFPeMY%ZH!xZHbI{5Ui59tGLH#T~o>{P$u`V(0PNnnHYn64P}1b_Ov z3@UrM=^Z@hPvf zweolTL&@tje;Nu6Af_fi8q;2As3JF-1ZTa`<%y!C{-NdBmFBmy)b}G-n)fSC39oZ` zHRT3m8|`LJmX0aD0arC-z6Wv+KRa!{{Fg>hs@`*-mnzyGy+>!`8yIN4cZ}d~e zT7fMibK#oC;<{X%+KU^MEoZQkmku}+2VUXy9%c+*9=g091G$0s2drgV68e=fggx59$nro3H%d=$A_{>;eL|eTM#f z5+pIDG_kQ7Ebej`nR3cnI%1ALT|#!GN0PYTbCsiNeh4SNM4BXH~9?e`D%HABGt`ja!DphPYU{6F?-sz-4Lcv|)Ie39M&JNd-W?W1qzoe$ljHxRcR_X#p`XshAEBGV zV0nND&{29|zUMNsWx#Pk?cR!Bz!8IQq7Z$C)E1cr^-^s}@OfEy+y?}Ubd&~wz6qsGHi#$^a7O&ggv z{?#xAA+?cvY9W?oG1Q&}CFe26*a9W2PjQcX_fW_jQ5gn<|L8zkS(e9?42Z3wLk!eRSI7!Q?LgpNW-N8kk6rWebs2FLF{JVE6o z?TM*QC6}EuE>d$nW>}c1rs;^sP2LV9qnh_<@;7d)4w1A#a4jcoWS{9*VzGnGB~&%G?>Z z=(GeA3_7M283hZ`Scnh;MimD7%Nr-RTQ5 zon}3*3M_3f0YQUhhk^!0RQw_Zz=#dQmGm>s=GIY+Nr)G|waiM!*xXYlCfKt=wo4pb ztNlc0jY16D2NH&f@>@fYU)pQMm9p;-S9$pYO-OvJbSh{KB$%=Yz4T1_NfUoOGHnHd zITK(F%(5L_HT~+rej5)%99#Bhb45lKBAL2?MO+W9yd)ddc4_jLn|lLNK+Ib>Uo>O1 z>WsLW_D8Wff{=Ky6{Nt_VoC4UK5IRccQB2aRn9nL9%FV+#bqQEV{S5um7&#si<)nH zU{sjdKTsQ%uie(R7=%$ZvPLu5a&zg}YsBSf$cX>Yxq2G?6(fluF~QXU24LJFEi>Ha z4g1zt(&10(7r>X?biO#s1L0N)_-RLqkSks67?cdp+20YrnDiq-K?tMgTR|4Nk+k29 zV=%Zo3%o<#;H-SH4JW}+QU(i4Kry(6&aF5&Cd(Le6PZ+UKS&^arc@P6HZPQ{wEe*x z211dd9){z0%KRk@!;tF{0FPg2glfDmD#!l#Ewz#guCWFW`z34$4uBX?9ABH;jZ>hB zax`W$gA9P0#FJ;T3z{J8M6~^jkHw~fvJK6JLur{^g_IR5`6`~3(hEKu*vy4x5j91l z44YcIhz(==}U=dgJ&i5=X z1+FGQTZ^v8@*!k10nkPvL}6|FLRjRKqCxV-)9GIZG^O7M^;6aYkq)m9$z+Zk<(Ggo zXT9nHlo{L5{%`pX#C3TbR4Lnwkbzs-!Gk1E@gd~G;`-rIW3X?~g~pl2>EGd@7)pPv zFeZ*0vr=f$w`66nve%;q%H`nV*`YFgUqHySbxnp$%%Vh&5d-eOuoH6ypAL=;R{Q}27i7wR`M!Hko{22=Hd&e=d;K``t8VYa6OO+ ziYO`K48L?;i>wi{FY}dRBW!bVa~MQ1u5Jt&Mc#)8TNQn? zXEK2lOh-@2$q1Rn=8Q3tmF&R!-YEi+ zh>mHh*5E!f!bLJr$I)I20}UCaZ>f%70k)0FIN@@YdAc=>fH~$wA2IFZuLrr`%;A{0 zt9C$KB4*5VocBtOQt@q$5qh0tIYx{SzuMNn?Q7OT79A2=KuY~r^P1qbm~Fi=99nUK zZCn*@%@ZJlhsLZ>YBk6TeE(z=F5gP>P5{gSEt3yR)?8Psp8_lVn)8jx_g+JJEPEV3 z)UEwRd~PWcBTO~&oh3$G+!;i|dSj<;k2TQAp}s2%1%{Bv%Ky4B&C9CD4W>l%l^_;c zQIP_aY1_W#(OulN-yv*DR*u_%ZAZvtFEs}@P5{gh>_spXvpG9rFeTTk5^a}VUujK+ z-VYkiXX2IyRkk)I3q@NdJE~4w@TJ{>HF{$9s^luS6-MiAR~^3}pr>)$va9lgvWcrj7#;5?LZ|uWgEb2!2~FwlM(tmf9&=>TiJ|PV z_!Yo|aV`I%S=M{j5$SB*H#!eoL8HAerWCn1@)dKQR~Si- zLo%TaYtMxDe{HBng{p8zT*4otV$R!^M9HC!ygpNbr{JBL5;D!s--l;+SkxOI6q5WX zr_C~9aD>uMOi@vCp^>ppnE2biazl0noeZ4N4PC8&NpOTz&xn?O98V^6XP2P3RE}#E zg8P+Zk0BYV6F@w9j#NE_Np|{_zHv#@JeSXc5(3>Mk0g-ITY|8|VS)`URgdY)?6e;UO&a4#6gzz z8>0sV&-XWIEL4Nqe>-S}{mU-9Brmsyf71=bLG^aCxf<~}Lz1^NXOviCzfMTlA%AIU zW)U~_;4Rsq0pasT5r&WF&;n2|V!k}%khQTiE0St7hB}m$ zf=={~C2&;nr$!#iz7Q{{MTunuT#Agv%c$d~IWJIrmhM^%_eV*5O30+UxHrTJ^Qsgb zgp5kCik7S1^Vg|F>n0#)nig)<#iO23T4!=7xZ>hW#$;-US8r-Q!EP7dhO?<7B^Y)B z%|{ZKXLe!s2amKnXC+`E_8~#OZSw9cLT&!7ZL)=MLm=@=EYPwHakf-#J>g0>CBV#n zD-;`-Em01qVWlrV1RMs0aE4FNhcin44u@L_4;5%$cAx(NA%~1j@MLc)UDpn8FaooI z!nP$fPdQG>GiK%|w9BA$Y-0a?JuB6G;lGRFsFtx@@kFkAVKD#!h*DJ#82|H9?{NIWN;;L({L?dyeR z;-2_{vCu4V(gA9w9H=ZQ2*QgPYXVk0iL-K@u=TlM{_W}P?9KQeWzEPnZG_78wEDk2 zE$w|ScFwpg*{2e|`dQs{61s4(NYlxL&bnpbRVP?_p#a_&7&7>47qVCWVFG4sAZLN0 z7fwwxIQ`^hb2vjoFgk$5iYeShuJ{8Uo|WjJ?ngBclj$hA!3@@_avmN zM*P6}CIi_BjrD`6EUg=f8U{uZ6g_mT>H;Uda-k@cUnH$~;1paryQ{MUD8Vw|GtMjg zGEzAz=)m28MK#$u5+@4MxT)Gf$6&CRPOWYJ--$ye2V!?^^AL;rts_;`o55tA{FtAi zKO4H!vo8I=f5SOyWT7FV${g;dw`Rq$vD#+swxMCbeI-&ySR50GWwttYZk<|pyw^}- zQgXaU)AswTo?Fj{357F44?8M3C!;uVbG|coHVClv%!c&u(4LR6u>5JP9e&rfuJ^V@ z{Do8JSaiMv&hlC>7(1EH9Jt^3D;Bl0eqg7D#lFeA6)~3C@M<6-cC@?xVn?6VzUOH> zR+dTRl|m%euQzH91A)o3BMdnfj+K0b;zEwEu{?s>U1xC&F?6^LmGinAYEV9BCHyiWJnkkJ6tL}{qeR~R>gkA~?LU4cAg`5#(Bjs#aDs=RM~*mJ{TRXg zV$p@F`jxj2x9hrDjx8}jyu>rrlf)E|W*pYzf}9npcX%(C^5!F`Idl8XCnW2!Te?=8 z=Y2G>yA?{Y8*SSNwfE!JJC%?*`qz;R@oTB4K$zfUnVfYqQdgJ?B8=Qvi*Z+&)#OCF zvSZNz#sf2!p2SdiryN(u*${~*OHS)(+2jXH(b)i^+)CHgGzJB$P;1x%q9_Yc^f=Jz zm)hg}j4{WG(E#-sd&d+VA~m1>bATev@52Ori&~=r?sa%?CYiEyuF>)J5C6{5jN4GR zC+sg+Pw#;Ar)3cH^6vgpT^^hC8*{OjJYLzzjxJ8~+ID=#@mHa!HKCMq5)Io*w@FVb ztQ=nB|M|K#tg#ebd|hU>g2W!HJ_R_LY`#72JBKBib!p z?7)E@0z8QKM5Au93q}(v-{;H1F#e+1Ra|mm^y-lHq5ajI#bQ%2Yz5^*X{S#OnVREy zAv4mcWZ^`Xdh^r(hyj(xZ)uvUqn*TZqz8*VCT~>T4Ibl8o zqeB@dY$&wRtD)4&-Jy~f2Xj39N+MnvkVCKDKU2M(aW5cyYUgwiO6`3aU@!5wG1H;X z=7o&%B(KRxu>PPN$QuAWb=%l`&JLrLnvm@2N(^~#y9(AW@xL15F#g=hA~Hh|_fgL0 zJ#5aIq7``4DH-;h*E$D4&W@J9xie^+3gmutnmJBX$xv5rO_wH~F;Q$yfa^^J2~MIn z8CNgx_eTC_)hr+YnA4}Cwt{81*@kQUMb>&>Vf8*AmbX_j0bQX$+HIsa>6Psvw+cmZ z95_R!f{#sre^rNsoU6qP6IxD=KS?daK>M~-B?4XkWhoa0JFG~ZbczvUHOCTCx1YTM zOn<(7XX;Kiri8ZX#N%Zygg$9CtJKsFPLzv=>N}F6c_RQ%*uqHRPasD!GOA$IZ?%Qv zz0q)@W=2WVB;k}8Z{)Tx`b_#2@} z3x-xj#S^=>Y5g76n=%C!D&v@RpJ*!P>4Ag(0ii;ZI)?fM6f9nbRL{bw$fWg9zIgr`O#1qqm?;dKMoenu%+x!@Il#G!OjOFN=V74J@g z-4xs9uIhE=MJv7ftd=tK_t8&f7XK{vz-@lh+EjYkYSutr8M0u4ZcY zM-k+vdKYSXK$}yR?w>Mkib3qJS+LJ)ZC}g|4dlglnHdRks0pglzELEb(+k6o47dW9 zQx*(U&j&8E@$^#Q8V%n_Eb<$&S#vVy=g4bpCu?|^t~(`EylZ1U8(NCe8h7YA)*Zda z0BMgu?9ShQ^S1pn;FN@-&De1oK4uNEpcSRq5;J|0QD zi5vcscVT)Z5+5Ud+Lx>?vR@OJ>>~|;TrI%=r99L*9W!YyD>gszvtB19cL$21i@`WS z3g8&HB;rJojqGh)cg{iQrw3`&UB)Hr*BHi@1YPTgTZ#jM*1PiUo}7YH7aH_9Vnt{Q zbaJ_eolFHy^U5b@)xKgE?k$WA<}|YXd;1Cx$_zFs(~oI;uRvsSn9vjN&k9kM|!WcMKrH zIjk(^dE_p15{!v-HCGlN11BIf9mrNJJlsoPB!|mY2-w6 zqy|02hdW97qEcLT$;-7NEi-E_T z(5h!^W(0)QaZZc@-s7Iz2{C9SKi^E!6tW3bZM=PED*Ui_W60CsekfVd3s@sk)?RD~ z7)b5@(e2_>+7D~lPXhMrJRveGXI@X+4d-EY#g4BvU&lBt?Wn}PFciPsP|j*k;Pehu z3rvde7{%jzXJR!w5iO5ym(F*yPf?&~Uq!{@`$=^nVfunN7|-m@8YJ+wy!PmLyVlTs zZYLL6D7_6_<^pnmuS@j@ZdQ_b%S{#j%LX}x(q<8W0S{!QB>Jk^yh-D zvZrLT%NtdogqsR_NLnUOj1!`yj4BVsSdUZa&}rVrH>Y(WIgrzvk8t^EG1g$wFY$dW zf?+36G!GMoUHn-I$4~uqWk5cms2|X%JKnM%> z^^)WrB=`n(8Y<9l%T=xWJ8O3zTm~uGmQR&LnJHGBv`bYC)`2~zD$aUO(9?`s!e%9Q zoq*`EqUjq(Doqg1ZNu~sCMc+6TV;uzkXvb??aX!u6owPu7id&+AW|4Ej5RfTN13~C z-*fcC)12M?uXJC!9h9L}JZK(G>!g%aZFF_VrL2{V3Lnr5S3X54N4-(YVr`_@wl7L= z8g$b3(}GETBw|(zRxZ775Oj_y#%7&oT5L#>Dq*P^Fi8E`^r_kGi*}PIW#?*R(C9y1g0zt=UHUQnPz87G;bTrZb35jmn}+HaK=MpF z1ELfG)c~f=?*pHY@|eptlH^cAw`a7AeM@2WYsDVNDA3~wmo?%aUdAjQf!ZsnU~dfr z^G_ESmccllQ1w$=2qlK0jGk*{^d|o8Tbw2lcW;b|p+|C0_g?kXuk9~#`Mn25w1KD( z%MS3b%5EjF2zdtW3&0@_&2Gug1*!pwlN5f5MlX zhRh8phTzf>^U*B_5RAA#Y$wd2U@pBH`Ak7UWdizv%jqs4jwXk-FS9%jwZ;j}taoDM zAfOqyZQ~CSV;TsW;nVT*D`f1N$5nc9!o`U?QT+_-Zn)EiP`3}@1(XUGMrW>|*k3*Q zx8=|(g$F)p73US)--43-6c^sGAt+XcB%S(<-cQ(F1@N!rIfT0|%Jk4b)$xvU>uk7{<)rCE% z{6(-8n?+qO*$Ygz7ZBV9st_4c7FrOKsgom2dp+fdE5DFuh;l2J8AEvsl>T*$0Km&t zWQwkWXn=Be=JO!XfM*qJ@(ypRWDl>O!}k(&DD)U8K`OoA+=5dgxqe5V}i|kvyWF<6j2vq?E$U@{w)b3N$&^QfA}#K>Yen_7+_ux&poTZ>2U) zv$-M8HqAFmR>)d0G%@jy%%X9p9>7#K9LLdQ4Zdh1F2ZCz)G*uCdSk8rB;aU_t@eeW z3*C948!>f_94{aSY<}In3cVog*xo*rP?Kr%s8fI*jJbPlkza zMl%tB0CKAKF(vGN-XD^xuLCG8YbF~)7l^6c1E35?A|YnBj8QKyUP1Lb;^u8vCgq1G z)AcJ6R8~GdbW1p*IvU2Z;h}op7hP-Y@%a_#-|G{&d85&$>M;8ysa35L1$WYP z!=g_rEkcae4drm4h=ocrmp_MS4f2Sniq7jnSgT%~NGumF!ktU-kKXpR&8Q1$_0N!5 z{7>ezKmW91{hthzll^}(h--@sX9|n8WzAl*GMzT+)_xwPC83kWCU42Zg50qIRTsdd z@?c}Gh#2H0TdRqxS*1EIoyo3bI(`F*HTeGZpY?xuL^!6XPYs^QfP9Qb=|e6W;EDH_ zHleiA7Qddl4eXg##aQ(p?D<0 zaer-C!csON^>iM9?# zxnKa~QLS)wS_T!5D!Ke>{S0Qe+trmr+}Sv9QO@c^c8~ENggdvP%QC~CYMGymbU(PK z+EE8hMY%sklwBmW7! zcBOc49O(wgi%4YxjaeJ(qkDO>V-c~4>Zs@mtP4k%4FmrhRU%0;uQ^f`^27f{l~;S2 zqoG*Si=TM3FSzLdG%L#>m9VAduNO}S#iQUD%ueMv;y*ecUO{Qs>)(b4XY?ajxV*vL zXFS6cyJ@h!?pT>V2@IJSm{|>Mp$CJdFWpJIGd4~khymOIy9u9QjMjh(J2uxXPi_3o z_4TtkNLqu4bgp_|`2X{Lm8tEs>LVlV5AN=N_THSX%vAjQ>VG#&G)&244JO5OWBt6; zWXQjqfGnNx7jb8)f_s=!c$m@ zd4tl;xYk@LFnjM<;EL3tp<|L&G}d#@1^NP_-4epF66t)<7(D$(*^2C>Nj_%n_lHOS z=v=KU9e(~wg?x7floP9)I3G>geCYgOhAUTPV=}y!sd+qzmN01OaaI~Zi0-TB&;pMp z1y-B2#Kj(MUT4eaOXrJo6Wfp5*FuQ)t5?vSXHO7$r+*Juk6nWEM}?hyvhKM3fR8F( z(og?c75$2tWVH0%}<28i58PEX!N|NA5+IZF!TXRSMJ3OgAlqMWy;$Uw5!w3 zY*(?)^HXYtpbbQoR%8g490Q&)jL7E@468|PEv-IF}o80rqR8z8L!xG zLJeObv}vKEy=RTE%inSre0{1e*-UM>QQTa!ZH+3I^B7cW8pEb|DU^$L)alVh@1&H( zj|iUH)P5f~V$`@EsjN0rN^Y`K62ZTjq0>ZH7v_tp-$=(!!fs zYo1D}sG@VCe;n$&*XccGerFtzM{o-f;wm&*w2>|E&a-pVN~-o?BO?W-}r zY9-tW>xc_h;+D9(L?x}kGK~FJCdm?N*}97=Pj!XvnEUBwx{`f+69z}}&pVCmcaLQ~ zOKeAAyMr}CzjMeLvt8*-esgVHkR?#IOkp}bG-DvdQjuoBc}RR@fv+J)9%#q7;lbUc zX{wJy6<>1DuO?#vm`*{%`oavFrW!bmt8QUX0v;LrOU-MN#FMIJ5UunZ*&P^gX5+Um z=QY2Svop1ZaNp7o*;i`=Z#$@XP|@6mEZcaVvr9HgtT-AEMACCA^a9YlI?QJUF(=C8 zGj+=1NxbqYouF?JM4wa6wNI4czh-#&fQ{-|L_l1s3&gMhIZ(~Ny~%HUefD@te=>UU z$f-r>w_U^FH3zD zUQtxf`L@ge&>6Wd`Ua?IjgZlO7+0pT-W){;E_lwM#*>cvF{-?~!*rr$oOpLA;EPyI zJJs3v-I>p_Zg@obmt?IUuaHOFtElU-G^G%|g2?F_J&D5c<&=;|JNc}Hjn933$6~Hi zgbO8q;RmR@hO!E*GFCFZ+nz1Bnf_L}@cH{-DN29}=#6}V)1PR*C;57UH*KmU0!oR< zo^7#=Fto2S7MeQU+BjZH&rZsg+S(r*%5Ysdsh7<9V`5D~%4aDS&Bl6YlG1Hur6N%2 zN&h5H%v0#-_Wc(0Lzp1vZV3-`TOV!4RN^%7=k9wPfrzw~Fwx3GEv&Dz{a3b^301hh z+U`*?0G2;7fqRkc7w&ENYKpm;gYksamCfk&zsAR|!am1F_pRbz%ehZnoIfK{*xv}+ ze(88)*i0=dEo7xPmx*TGTb)kxl=lfV(pcr)}g?c8;NbiGAB__vJj(Ef#Mye9L zPo;^_t(Q(>G*S{~BMEDT^_GWbKI}^pJg)IA0dY*fhkuNk-I6WDn5p{cDb|l=OOOsF z$bC08$A=+^~82&D=x7y-B_#O*Bd=NR2L;|m+CZ4d|Jji^mGnKk;z_(J>hb7{Y^17 z5FR{W-7q*Jlx2_-=7=}3aLP`4=wQ>0C*lo0^;3w7m1((XRwx$118dMrK?ag~$;aGq zjwaRpOwz9rQH;Gp@xc~vmEF{=sDtQ|%ZHNHFI3GIDtrMCMwFN5&6rbx4}<39j2Ufp zgUq&gg6-lgtv`^(z5(8-!rswF8CR(iAUmRH)5%fJMQ~Z{bis4z>?`rX1}$puS`PPR zvwv-A>6sq!%3kpiKB3?IT_;tCEG_W;>?!|jT&SbVH$N;85tO=Y;*Q=tk9BLZZvQPy z8HX0yN5nj6n%h!FB2bQXf`p?>BG_v=D{G(@Hk|pEANnDu)<0Rr!Dba9=?`HIfV>$_ z%+fGy%T+0(S9JUH=TmM=SZ$Igw{9G2;zmBcjXRk*`S4SPuA6u`F}K`%C2_JaRG%@$ z_iq#P`_}}pgvhFLc`LGlgSg+>Ze4B}8XT}7?W+30`UQ*|l6buT<|~^7iTROXf)xt0 z^??=9+4NbdrFB!MF88nAM3$B$0x&j7UW15`a9<-yXQ{3Te7+H6KtF1(4fF+*Yv4Ey zh)f_!ahsDvUj1vZy(h6$pA>pP`957;49h^+=q(~HHey=P4}RxfH_YgB=MdFRy1638 zQ)y?s5#+p@^4wm0O(>ZWpErlnEn&3H{9lqv0tb z3ky^2dahfo1$ik__)tg)o!}CdKKYQ8^`0v$Ig-H>Vwj(iDB+4@Hd0DMA=LYG=3>0Z zg1%e(I|2ks)-TWBt1_j?0009Xm|BaXiSw{ujST>AKa* zK6M*2Pn_1nV!uKiWSB%In7ovEQ|}`T`r6((gd{hnF?UOgg<<7TvzXED+vMmIHI8k& zYg#EOUt*{e6Pc?<6Ea6o%;0p?==8TNeG$nS&2zebZXsr8Iao0T95cUI-4emo zln7iK-E!TdC2>gWX)XpCDBLf#XMA|tHtNPC$#Bw_g#w#@rTK(?;VR2ejl^2#1d$T+ za^|r=U_HAUBEBjHuyE%vh3sqGH`5C4(ZA7RNOCrz=H=nR(w!;9QXW~sq}qgAcg(=8 z$8*!c5BQy|R-0>up%)h#Yxx~kS4mZ8T!fTyK17ygkdUU3`2%GRFyHvG80?)?mDDux zxm2^jj)5yEt2$cpuLw!2{wLHcrD#~Mw|T-qkVrW{?xp|=Vrost1M9X^2m>Qi+~tKM z4xK@P5QYX~YD`o>Nrq2m*`EwVX-v<)e-sgu;2EAHQ?C_z-;?W1Q{Rcm0ZQJAC{dwX z-m8$HFw5Mn^H#}0g_-IIw0Y*?OjCi#mB1vMOrlag<-|3QP3ezkT2rQ15> zhp-6M$b0xf3`)I+WLmNE;zj&kH#YC|J4z7ii_F|;d}dR5BvG&aTvk2g0j6yd&7H=> z>7@=WXHV`eQ+;O~e-YsgD(sg2zQ{Dyh}kz1uXIn_sj-hJ`91x%rXv6G8Pz}gsmy;( z3<37Bsrq-`rbWR;36}hqX6SEz4FO+)kl$Aj2)j*PInZm~NxwmonTTAs>cyoC9LNC> z0UcyqCX5%DvX6X6a!^ar z3^!UJPC>X1c8x6SmaamHFB{`p(4z@w&44)bPWYcvCy^o*>g$IR!e6ksc&Jr(>+919 z7Hh_YZjtk6^AqO_SN(bH(_gFyH2>1hUF5(1b<+kEN0&tY(yWr(;5$LQ_ME`~#r^+F z6G7Q0A||Zowl??2v8{hLunIk#ZhEE|fBK=lf(t+l3@xvD(d8wa%e{cE76H_HzJGL+ zPN5JIiO(zam@ab%{wr6@N+hBP;Ze{FOtUmJOL<(tN9IEO z6bHRabn<9k$*0hv{h5r*{!E0G=R=2DU}YrZ`}o?sz7ysfSm zxz;ble2wHRuW`$=n%~6`Mis0T$-zuYA2g(T8esTgv;n-_9-{uE3oCu?OZ2;&FEM>r z9^nlhnT0mIV4e~m4K8;@*1YnM^DhPUF7hs4!-(q(<_3F|{zYUrARk+k<@|N%V;kwk zdXrX|<@aqx!16KZ{`Dj0-{@fP^I_zx74Js{)Y~_HFPlx;yZTGa&NISI9RAJ6Io5MQ zr3TVV!4#jv*BM-sna6+uloh2TlTBLp)i(ZFgxHJ+;XAokk>!q?48QJ6%!kFErtw?G zhj&~ruYY5V0Z&g4z;j-2rli5#-Ti#)tFH|xAfWr4sepge(}=~P%PXTbZ&dpbRO^*H z+xq{yLH~5O^3Ou#;1Rd3XUKv6DWBRs-F0}pr~N0)Shw;3bON{6w8QV?NSog}-EDRa zI-9Rqgg3lN1ah6aV{v&5X?qfR4C_eq9fS&!0O8Fi;#SjM$>sRXqSul0fB)_K??`v^ zwObxzXvrwy<@_z7(ig*~>)wyIve(4rRv{Go9pU^TkRH}5ioR_Crcy|ECx#MU z)ta=yC4_~r9!h`2-y(nQc-EfFg(nUX{i`fCN#73-8=r1Soiz5*KSnQa+@Av1Y741A z!2cHqhzXINtJ6ofu_QES2Yv}XN--z)zFu8_TuhhEmi?RN1a3br&T}FcST}loo+iuM zW@T^Io@wfpy3!vN>wc_J76~qHaP4??1Pd98cc>#U4`us-W)ZOoxr30H=J;4DZ6}`!P zCbMp()K`nCNQHiJ9t5P!o>HR+g|0bYES7 z7{hNRdi}fC1b{@5aK>71D<)@wQc1DBokyrVcu0H?S9Q?I>Dp3zM&u&r6X!*c zWv@oCKymF4uXNHHX#?(4k;8jE5)vn)Mxo3~^YHy^V$1Bgv>x2xZYs*$9-{VH_b|m= zZMYq8al8Kafwjcf!PDX-sUiEcy&c9yP!?)vKjLNNl?&C<^=Luz6fTci2~Q$h=W$E1 z=tYUZi`&w`<4;5Wm(5S_qOXoyU6xs@*C)S80hYLY^+#mX>lXLV>qMg!izQK%+GWNi zJK1*qfc!b?bN0a{?AFM?lT`$MW54wAHU@U@Et0R-U)aV;T$QF4FnloCXJ4k_7hC9F z9dk@!_l40mgYATRB&@VWXmxgO5Z${Q$tahSf!7vGtE0b7>npcT7tDSgF|SM2C#E4|_X*TwWQ`tkBWv3~yteP`ab| zSkIelz4DDB`JOJh%e{I+r%U-5PcXglJ<`ExH6?yw+}|-Qax%&e?;@TEUQwK!tX*i+ zK7Cu9Oey~y;=~dZ#7$3-NEP%;;TPfV1N`B@NH2}nR&9v6Z<_X$;tjTrwuJ~ZJvf*W zZ(hK=h;Pug1SI~wG;ub+%^#kcW2a@z&p3bhUYwOF09kj8erNYCKMfAq{}qaT<&o+X zxAUQ(ppMxm8?V>z7PCyrNCKI}*Goj8dO1?Z;!Pt8y}mh@(VqB{R?7Ejy1NmZj+N7pkq+?t z{J1kx>V10eIy5?b!-zR@!C+(h;dhU2Z4^$yq|RzjeXJ8S95QFI@;jX-H2ZkF4vklqZVZT)m7Ls!2Pv@&)6o)-3x-# zTFfGlQ{Z)7^2NHYRJ|44KOH6$Emy=XWSk&qXHaDdnH_SBjs9oFc{DZYG0ujsjkYt4!Q{_h-`cGa4nC}_x0xzl)>Pyaygzu!E? z)60CO$=)lBE1R*Mt>SO)&7@LBD`4__8@-2lx~?5VZfo@na5J(rG%m&Br`?f|oU-fmsRJiU^t%`tvUjt%O!s`qB+qSbX=%cxs_N?R G#svTp$Ac{Z diff --git a/assets/readme/examples/financial-report.pptx b/assets/readme/examples/financial-report.pptx index 7744cf16d60599f7191951b4139bd0360b6319a7..7481dbb38dcdda06e1be1e7be4ea2b2645a1e6b0 100644 GIT binary patch delta 17726 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 Kw#1qZC=37(fW+tk delta 17532 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 resolveVertical(ChartSpec.Bar bar, ChartStyl double labelBottomY = v >= baseValue ? yBottom + h + labelGap : yBottom - labelGap - f.valueLineH(); - emitChipLabel(out, "value_c" + c + "_s" + s, text, valueStyle, null, + emitChipLabel(out, "value_c" + c + "_s" + s, text, valueStyle, halo, bx + innerBarW / 2.0, labelBottomY, labelW, f.valueLineH()); } @@ -338,7 +338,7 @@ private static List resolveHorizontal(ChartSpec.Bar bar, ChartSt double centerX = v >= baseValue ? xLeft + w + labelGap + labelW / 2.0 : xLeft - labelGap - labelW / 2.0; - emitChipLabel(out, "value_c" + c + "_s" + s, text, valueStyle, null, + emitChipLabel(out, "value_c" + c + "_s" + s, text, valueStyle, halo, centerX, barTop - innerBarH / 2.0 - valueInk, labelW, valueLineH); } } diff --git a/core/src/main/java/com/demcha/compose/document/chart/ChartDefaults.java b/core/src/main/java/com/demcha/compose/document/chart/ChartDefaults.java index c0ce56f81..fad5141ca 100644 --- a/core/src/main/java/com/demcha/compose/document/chart/ChartDefaults.java +++ b/core/src/main/java/com/demcha/compose/document/chart/ChartDefaults.java @@ -81,8 +81,8 @@ public final class ChartDefaults { .build(); /** - * Default value-label halo — a white chip behind line-chart value labels so - * digits stay legible where line strokes cross them. Charts rendered on a + * Default value-label halo — a white chip behind chart value labels so the + * digits stay legible where a grid line or a stroke crosses them. Charts on a * non-white surface should override it with the surface colour via * {@code ChartStyle.valueLabelHalo(...)}. */ diff --git a/core/src/main/java/com/demcha/compose/document/chart/ChartStyle.java b/core/src/main/java/com/demcha/compose/document/chart/ChartStyle.java index 485892de9..eadd5d660 100644 --- a/core/src/main/java/com/demcha/compose/document/chart/ChartStyle.java +++ b/core/src/main/java/com/demcha/compose/document/chart/ChartStyle.java @@ -45,9 +45,10 @@ * @param axisTextStyle tick / category label style * @param legendTextStyle legend label style * @param valueLabelTextStyle value-label style - * @param valueLabelHalo halo chip painted behind line-chart value labels so the - * digits stay legible where line strokes cross them; match - * it to the chart's surface colour on non-white backgrounds + * @param valueLabelHalo halo chip painted behind chart value labels so the digits + * stay legible where a grid line or a stroke crosses them; + * match it to the chart's surface colour on non-white + * backgrounds * @param areaOpacity opacity of the area fill under {@code ChartSpec.line().area(true)} * series, in (0..1], or {@code null} for the default (0.35) * @param sliceStroke pie/donut slice separator stroke, or {@code null} for the @@ -357,8 +358,9 @@ public Builder valueLabelTextStyle(DocumentTextStyle s) { } /** - * Sets the halo chip painted behind line-chart value labels. Match it to - * the chart's surface colour on non-white backgrounds. + * Sets the halo chip painted behind chart value labels — bar, line and + * pie alike. Match it to the chart's surface colour on non-white + * backgrounds. * * @param halo halo paint * @return this builder diff --git a/core/src/main/java/com/demcha/compose/document/chart/ChartTheme.java b/core/src/main/java/com/demcha/compose/document/chart/ChartTheme.java index ff83f8523..b366a6249 100644 --- a/core/src/main/java/com/demcha/compose/document/chart/ChartTheme.java +++ b/core/src/main/java/com/demcha/compose/document/chart/ChartTheme.java @@ -20,7 +20,7 @@ * @param axisTextStyle default tick / category label style * @param legendTextStyle default legend label style * @param valueLabelTextStyle default value-label style - * @param valueLabelHalo default halo chip painted behind line-chart value labels + * @param valueLabelHalo default halo chip painted behind chart value labels * so digits stay legible where line strokes cross them * @author Artem Demchyshyn * @since 1.8.0 diff --git a/core/src/test/java/com/demcha/compose/document/chart/ChartLayoutResolverTest.java b/core/src/test/java/com/demcha/compose/document/chart/ChartLayoutResolverTest.java index 15e569ce1..f8b29e213 100644 --- a/core/src/test/java/com/demcha/compose/document/chart/ChartLayoutResolverTest.java +++ b/core/src/test/java/com/demcha/compose/document/chart/ChartLayoutResolverTest.java @@ -3,6 +3,7 @@ import com.demcha.compose.document.node.LineNode; import com.demcha.compose.document.node.ParagraphNode; import com.demcha.compose.document.node.ShapeNode; +import com.demcha.compose.document.style.DocumentColor; import com.demcha.compose.document.style.DocumentPaint; import com.demcha.compose.document.style.DocumentTextStyle; import org.junit.jupiter.api.Test; @@ -134,15 +135,80 @@ void minimalChartHidesGridAxesButKeepsBarsAndValueLabels() { assertThat(count(out, LineNode.class)).isZero(); assertThat(out.stream().anyMatch(p -> p.node().name().startsWith("tick_"))).isFalse(); assertThat(out.stream().anyMatch(p -> p.node().name().startsWith("cat_"))).isFalse(); - // Only the bars and their value labels remain. - assertThat(count(out, ShapeNode.class)).isEqualTo(2); - assertThat(out.stream().filter(p -> p.node().name().startsWith("value_")).count()) + // Only the bars and their value labels remain — each label carrying the + // halo chip the theme defines, which is a ShapeNode of its own. + assertThat(count(out, ShapeNode.class)).isEqualTo(4); + assertThat(out.stream().filter(p -> p.node().name().startsWith("value_") + && !p.node().name().endsWith("_halo")).count()) .isEqualTo(2); // With no tick labels the value axis reserves no left gutter: bars start at x≈0. ChartPrimitive barA = byName(out, "bar_c0_s0"); assertThat(barA.x()).isLessThan(20.0); } + /** + * A bar's value label sits on the grid line as readily as a line chart's does, + * and the halo exists to punch the line out from behind the digits. The bar + * layout resolved the colour and then passed {@code null} for every label + * except a stacked total, so the chip the style asked for was dropped on the + * floor for the commonest chart in the library. + */ + @Test + void barValueLabelsCarryTheHaloTheStyleAsksFor() { + DocumentColor haloColour = DocumentColor.rgb(20, 27, 51); + ChartData data = ChartData.builder() + .categories("A", "B") + .series("S", 10.0, 20.0) + .build(); + ChartSpec.Bar bar = ChartSpec.bar() + .data(data) + .valueLabels(ValueLabelMode.OUTSIDE) + .build(); + ChartStyle style = baseStyle().mergedUnder(ChartStyle.builder() + .valueLabelHalo(DocumentPaint.solid(haloColour)) + .build()); + + List out = ChartLayoutResolver.resolve( + bar, style, ChartDefaults.DEFAULT_THEME, 200.0, 100.0, METRICS); + + // One chip per label, each filled with the colour the style named — not the + // theme's, which is what a dropped argument would silently fall back to. + List halos = out.stream() + .filter(p -> p.node().name().endsWith("_halo")) + .toList(); + assertThat(halos).hasSize(2); + assertThat(halos).allSatisfy(halo -> + assertThat(((ShapeNode) halo.node()).fillColor()).isEqualTo(haloColour)); + + // The chip is painted before its label, or it would cover the digits. + int chip = indexOfName(out, "value_c0_s0_halo"); + int label = indexOfName(out, "value_c0_s0"); + assertThat(chip).isLessThan(label); + + // And it is wider than the text box it backs, so the digits sit inside it. + assertThat(out.get(chip).width()).isGreaterThan(out.get(label).width()); + } + + /** + * The horizontal branch dropped the same argument, so it is pinned separately — + * a fix applied to one orientation would otherwise look complete. + */ + @Test + void horizontalBarValueLabelsCarryTheHaloToo() { + ChartData data = ChartData.builder().categories("A").series("S", 10.0).build(); + ChartSpec.Bar bar = ChartSpec.bar() + .data(data) + .horizontal(true) + .valueLabels(ValueLabelMode.OUTSIDE) + .build(); + + List out = ChartLayoutResolver.resolve( + bar, baseStyle(), ChartDefaults.DEFAULT_THEME, 200.0, 100.0, METRICS); + + assertThat(out.stream().filter(p -> p.node().name().endsWith("_halo")).count()) + .isEqualTo(1); + } + @Test void valueLabelsNoneEmitsNoValueText() { ChartData data = ChartData.builder().categories("A").series("S", 5.0).build(); @@ -942,4 +1008,14 @@ private static long count(List out, Class type) { private static ChartPrimitive byName(List out, String name) { return out.stream().filter(p -> p.node().name().equals(name)).findFirst().orElseThrow(); } + + /** Emission order matters for anything painted behind something else. */ + private static int indexOfName(List out, String name) { + for (int i = 0; i < out.size(); i++) { + if (out.get(i).node().name().equals(name)) { + return i; + } + } + throw new AssertionError("no primitive named " + name); + } } diff --git a/examples/src/main/java/com/demcha/examples/flagships/LinkedInCarouselExample.java b/examples/src/main/java/com/demcha/examples/flagships/LinkedInCarouselExample.java index dc884be78..09815f90b 100644 --- a/examples/src/main/java/com/demcha/examples/flagships/LinkedInCarouselExample.java +++ b/examples/src/main/java/com/demcha/examples/flagships/LinkedInCarouselExample.java @@ -503,6 +503,10 @@ private static ChartStyle latencyStyle() { .barWidthRatio(0.5) .axisTextStyle(mono(22, ON_DARK_MUTED)) .valueLabelTextStyle(mono(25, ON_DARK)) + // The labels sit over the gridlines, which on this surface read as + // strikethroughs across the digits. The halo punches a chip of the + // card's own fill out from under each one. + .valueLabelHalo(DocumentPaint.solid(SURFACE)) .build(); }