From d1ea882fd831bb6a0e1880198e812e895299506b Mon Sep 17 00:00:00 2001 From: Clyde Stubbs <2366188+clydebarrow@users.noreply.github.com> Date: Thu, 30 Jul 2026 08:25:30 -0500 Subject: [PATCH] fix(theme_mono): eliminate layout shift, fix spinner styling (#10216) Co-authored-by: Claude Opus 4.8 --- src/themes/mono/lv_theme_mono.c | 35 ++++++++++++++++++-- tests/ref_imgs/theme_mono_dark.png | Bin 16286 -> 17213 bytes tests/ref_imgs/theme_mono_light.png | Bin 16785 -> 17552 bytes tests/ref_imgs_nanovg/theme_mono_dark.png | Bin 19922 -> 20285 bytes tests/ref_imgs_nanovg/theme_mono_light.png | Bin 20785 -> 21027 bytes tests/ref_imgs_vg_lite/theme_mono_dark.png | Bin 15690 -> 16806 bytes tests/ref_imgs_vg_lite/theme_mono_light.png | Bin 16190 -> 17151 bytes 7 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/themes/mono/lv_theme_mono.c b/src/themes/mono/lv_theme_mono.c index 03b11dc361..ebde1d1be0 100644 --- a/src/themes/mono/lv_theme_mono.c +++ b/src/themes/mono/lv_theme_mono.c @@ -26,13 +26,28 @@ typedef struct _my_theme_t my_theme_t; #define COLOR_FG dark_bg ? lv_color_white() : lv_color_black() #define COLOR_BG dark_bg ? lv_color_black() : lv_color_white() +#define SPINNER_WIDTH 8 + #define BORDER_W_NORMAL 1 #define BORDER_W_PR 3 #define BORDER_W_DIS 0 #define BORDER_W_FOCUS 1 #define BORDER_W_EDIT 2 +#define BORDER_W_MAX 3 + #define PAD_DEF 4 +/* when using border width changes to provided feedback, adjust + * the padding as well to prevent layout shift. All widths must be <= PAD_DEF */ + +#define EXPAND_BORDER(style, state) \ + do { \ + lv_style_set_border_width(&(style), BORDER_W_ ## state); \ + lv_style_set_pad_all(&(style), PAD_DEF + BORDER_W_NORMAL - BORDER_W_ ## state); \ + } while(0) + + + /********************** * TYPEDEFS **********************/ @@ -52,6 +67,9 @@ typedef struct { lv_style_t large_border; lv_style_t large_line_space; lv_style_t underline; +#if LV_USE_SPINNER + lv_style_t spinner_indic; +#endif #if LV_USE_TEXTAREA lv_style_t ta_cursor; #endif @@ -116,7 +134,7 @@ static void style_init(my_theme_t * theme, bool dark_bg, const lv_font_t * font) lv_style_set_anim_duration(&theme->styles.card, 300); style_init_reset(&theme->styles.pr); - lv_style_set_border_width(&theme->styles.pr, BORDER_W_PR); + EXPAND_BORDER(theme->styles.pr, PR); style_init_reset(&theme->styles.inv); lv_style_set_bg_opa(&theme->styles.inv, LV_OPA_COVER); @@ -128,7 +146,7 @@ static void style_init(my_theme_t * theme, bool dark_bg, const lv_font_t * font) lv_style_set_outline_color(&theme->styles.inv, COLOR_BG); style_init_reset(&theme->styles.disabled); - lv_style_set_border_width(&theme->styles.disabled, BORDER_W_DIS); + EXPAND_BORDER(theme->styles.disabled, DIS); style_init_reset(&theme->styles.focus); lv_style_set_outline_width(&theme->styles.focus, 1); @@ -159,6 +177,13 @@ static void style_init(my_theme_t * theme, bool dark_bg, const lv_font_t * font) style_init_reset(&theme->styles.underline); lv_style_set_text_decor(&theme->styles.underline, LV_TEXT_DECOR_UNDERLINE); +#if LV_USE_SPINNER + style_init_reset(&theme->styles.spinner_indic); + lv_style_set_arc_color(&theme->styles.spinner_indic, COLOR_FG); + lv_style_set_arc_width(&theme->styles.spinner_indic, SPINNER_WIDTH); + lv_style_set_arc_rounded(&theme->styles.spinner_indic, true); +#endif + #if LV_USE_TEXTAREA style_init_reset(&theme->styles.ta_cursor); lv_style_set_border_side(&theme->styles.ta_cursor, LV_BORDER_SIDE_LEFT); @@ -462,6 +487,12 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj) } #endif +#if LV_USE_SPINNER + else if(lv_obj_check_type(obj, &lv_spinner_class)) { + lv_obj_add_style(obj, &theme->styles.spinner_indic, LV_PART_INDICATOR); + } +#endif + #if LV_USE_TEXTAREA else if(lv_obj_check_type(obj, &lv_textarea_class)) { lv_obj_add_style(obj, &theme->styles.card, 0); diff --git a/tests/ref_imgs/theme_mono_dark.png b/tests/ref_imgs/theme_mono_dark.png index 3af01805c46d43e69768c246c87c5692e3e328e9..c6dd486c17e5dff45d6b36107bef2c3197ade9e7 100644 GIT binary patch delta 2600 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 delta 1665 zcma)+X;c!37RT94(i})DOLW9^PN&dm$_Z1SY&nW!YMKjLMyt3b+6$)y0gaco7(A^+ z5uLGIqER$l5+k)7Fw-p8=Wc2`X^El?kcLlZ`ZDj+yWjrzf6qPl-1|FMb`_Y<;@N_* z=PJK3b7o<^t~n-KHrDTk!TH}Hnw)`S$8izQBhZa`xT;nY6kh|mj&ceH=HnPn)H~{L zx9pvV=Hc|Qq|;CE*o`kpnR82aS)8w?mUH%xiR-h-6x9JGt zE_I8id04$FZ>II7oOg&HzM}Lw1oHQ2hsj|qc*3wnMeuo2He}6oST|RF%$lkX$qO4G z+J6TO18{jZNPsC6%7%bI$P_k!i2O^sw}Dmh52avY4c`!gbAUi_JCEQ*Z5Lnma7ih= z-XG2EqhuA?XUacy9^lrl?^`@MobXOAL%! zDoFMJ4^%4;mIwQXx}U-r*(_<|e$Jv0~z7i2=O|2EkXQ4%7PwI&hPOs!M!h zCUvQHY?^K5x#IwKI~LbWi)joy_qtfDBy#AEXyn?s9YZFr6tfi=rC52W<&YbZiM3kLH`LW?K_j^EH_ zJ?=5mr*lBSMSq$&j``>Bf%RiifX5Ncryz4V4pF55G#AXU zim|!r-@fUh=lCa>%7eSY!blx47;{|eku^LbzW$)V*KTN`4_BTJFFBqZZrUAgSX0$V zgDJu9qdZ8{XxYJK?6u%`F6Ikc8w0}vF{$CG z;3{O`n6;$D+tW=DZZ!J`ZZT=ppZxu`iaD2xGJ|sZyex`{Y%QJHmbf7<2vij41b|b% z;Cjkn@>sCT?&bF9c4P^&EwpJ7_cG1{dr_xxS!jq3mGqHEHB zcjFR&l5&^U6M1K-|K&eUZ437hWO`Hi=#3VcI3)$2u?qS3D)MJN0C?biqX!G z0nm``R$ps^l%2udo;#EhavH72+%3cEr+d66g=IYrThEMBID^W^T-#I2dT z`0DN{u|e>qh=J%kXX<*c|K8L=owU`ICS}#MIp$=aaPvj0@N%V=M(GM@^gf>QGf)~1U0@}j41>5}#`J%}B^%#X4f_Y+hHdmQrJCTf5wKYY$6Bv@7fGOnIr))YAAM7qF<_EGcmnbVT4PRXoN1&n&|m%Qm&5iiHn2EG zPk{{I-J>WzdnO#|H7W~lS}3S5 zi(&)N%N+%~bh+w@XzYy8A$Qfd?!CG!_3STNvSw55o|FI)0+8;w{vfMMOXE(31a1?# zvOf;SoKQZTyKu_WK3C)l_*<}t7pU}jYH4B5j%#w`8M{$4-$ Kx|b79rv4YExcpE6 diff --git a/tests/ref_imgs/theme_mono_light.png b/tests/ref_imgs/theme_mono_light.png index 9bd83c687a7e64d27bed142714f030fd1a29f82c..02a436da8b91457a54fba24d69fb25ff7f8fa3bc 100644 GIT binary patch delta 2606 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 M#cLO;O+D`Y9WFY9W&i*H diff --git a/tests/ref_imgs_nanovg/theme_mono_light.png b/tests/ref_imgs_nanovg/theme_mono_light.png index 7967810f1687b71010a82da1f28e4ccead696b44..cf0b4df8bff593bf9985d8eafbb30e3bf5a9739a 100644 GIT binary patch delta 2270 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 delta 2002 zcmcgt`#;kQAKzHaaoaC`men6=6}XxmFy^rHmr1NPBGf(h!wPlw1$TExBxl zVP@9zG$*%Fsnx`kYh%XTZ{z57p67YJp8kO6^V|FL`n*4%_Ya@<>s?v~rj&p)G$owZ zC|b(4=gLm?Hb#0z23HiOuxxFP8U-f(Y-RGO%mH6awRk)9$jFfP^Cq6gsK9OBf#bMz z0**F!FPA>C$`fuf*s)miR@e(c7Qq(2$LCN(MpV{M4*LNR7z{(9KoHk62o?Het{%$D zUK9uFOpF6TfBm7e!2rc&zwaM3kujll_7wg88`{>raI{;vc}TLz_Y3)4XKBx5sK9R{ zxFcR#Rkw&wSoV{gIR+hHcr|T!>;aNQ5Ze_c3=ZB{eA)e>WrM?bGR{_x zj2emqJY%ko%;DUcr)LxmD-+gy@X5ZT9aB!*VcU}mr0w2(suPoO?M(ft6|cF0bVIkT zy6JT)UEhO=jG}SK;Gne3&*bA1QjPE_XYZ~O%v-n-idYnKUoQ02P1e~!JI}(0(ZSd3 zyRtk@ql=keQ%svuc##U;F=ys-^>vtA=beD;?S%WXJ7^1SWNoaY?_68XtHEa9o7M$& z%jVwPv2^&3ZTW(58h&8o<}qe-Cp(uji)^1#ghPj`S=**cObAP(6=@?1C?Y56U!=Fb z5}Qh!*Avf=RZbQTt|Y6T*$mXR07)B!E-L*I+g6n#AgGz7(K z666^sJ(S|&{tZU%ffX+%vS~kK21Up6d@LO%y%SFBwj!Z?;n(?v%T(IrJJ(YF%aMQF9*!mA zf2mfC#;?V{{nWQ5Fe|Mr%=ZCS(s6l>9df}2^ZG`z{F<SPVE_WtvR(TkhDq4Lm zzL8e2enTGkR~1=UdwSKzMHcDzY3F0nkyN}IZ{glP92K7S%B?4Qbw9^k%-l?MI;^&F z^$aKRc3^XOxY%o1J|VlUg#4iq7ofMvCwe`gy^oFTA?xd#Q*xP?0)Wd`p1)CCH~Y}c zNMr|yK2B3tt>tDUc{*dtyvx>Olw)Nl?Q&LBj@LXv|ItxN@B z?dFS>IjUKyF*E3D-JOCrEPXHq3J_Z`NKNbbSNkR|WEaf`W~A>`-j+(qIE{tr<|ok{ z9}R<0M=W<=9tHz}0SE;39}9fL^p%baNe(mbFh>mONnJ9%0!S&?Ww=eN!Iae&)QM_{ zAs$b&}NVdhG z6k@q*D@rc@?Js=qG&yFqD`WA*=_a|eQ zx_Ox7!KOq~D0^QY1rSL6*lRr&zC6mPH<98WzB1_U{CRCT@$_%`@0!Ef4dy1hgz}gQ zvy&-raz}grHW3&E*zH)2w2T#Ys!*4IRciWUX%-d`@nB<675<^my1~wgIiK)UM^|0; z9dGt&)`&sb{$cfmjQi5QKE8zdwen1Vj(&Tc1Ak;KO`wZ(@0xFs7h7`)N^CD55sep%heYIhm zhCU+A{~n)TMd|d29vBhF3d=*qnLdPX#D($pnmWp=g1L%uUJS~{rw8A!_hnBM_!f@q z=q~m}_7w9irJ1jLV6YrjHJI^9RS64pS}*2zfz@pp{1pBjKHr@8oe_5-!V$b)9AgZV0D=4v z<5*Lo^v5Tb^R_VPT@(y*7XgFBBcPD82mmT^_WR!dvvu?@8Q-5w083Lf(mi+_5oot; M&pVzYS@_-k6DLNtH~;_u diff --git a/tests/ref_imgs_vg_lite/theme_mono_dark.png b/tests/ref_imgs_vg_lite/theme_mono_dark.png index e8d9d13efa39034acb8ba18e5ae0607bd28e02d8..feae1e8d62dbc4ca7a7219262e975653f0883651 100644 GIT binary patch delta 2762 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 delta 1637 zcma)+c|6k%9LIl~Im*#=Ae6bi9Pvb^giWrFp&n;M$`Nxuxt^JAX@#gp33EiUm@AcQ z%n`Y!QOi}$@tAUyTyqS0*7NlI(SOhPzt8vc{k~q`KR(|#g9G#m2A`8&58rxSL!@y@$a*4g1W(rTXk!pCJJp_Z1dI`(NDRx9>+q< z1Pfz|=>9UW?kl|ZHIP!dpTICx6yK4W$2SXqm`(mlwNVV0)f&PvE24}3d^pV!~ z$=s2&w1z7Kw>&SpCdIpupl%OeFP9Y^mnelAY^gQ1(eDbL0eU z9F36)UNVp3!)AJjb_LbAodarg-B(!1F4lvQLtNc1_qRI<&?E;tJm`XYFgQxejhvP(a?Q2WxSiOR z#62|Tq;2lDOFB-Vzpt}&(# z{QiTD%*dd*DzIA+w*#Qpp`TachzuVze&i2UL z#UnxpIBp!`RX2zSHQ1%AceclDoxGYXH3!Y8F2ST9)nBQac|MU-Nb|D4bC}#X84u9q zvxB>4F@}k`5@MM15t{Ve2&s&=dEL3_Y>WEQ_pg}e7BZ&X&50-lzpVV{4H!JDPrrb1 zS4baAu}onuYbb>+&8n~W)llJ?EbMNw=x+fN34-(uH-+>7>E zafy%D`*^8=_D`TBf{>bOxI8P`Jj;{rxn7h?3jM1vqyxJ~o53NE&OwGN$~s-GoH&L} z(I1~&~UtE=>qDU{Sg6YG3gFBAUt6X@jbN0wV6Hb&!1iUF9(pollx5O0FUwy_r35@!PQ z_FbKXxV}1lP7&tg34jkHoJA6-er0c&ya9vd9@Lhq!@P9!h5?lxx1(r85Mli*+VKCf zEm0d*Gy3>mi>b|V!%OMry4s}1ZP@2P--_4J7{d&v+Z9uJ>e|a zYQ9k6vA>ZDk}VDf@_PA@Onk$z?$>G9cUPECNG^NGbIx&f-irS%#=tK{sF`S58AAY0 l{4Rpj#N8?2@QeTdg>!nVjWx(f=hKgsla{s?<>nXT{s!CY?B4(Y diff --git a/tests/ref_imgs_vg_lite/theme_mono_light.png b/tests/ref_imgs_vg_lite/theme_mono_light.png index af6483182f3e179033dd0b9ba49d3daf094d6c19..7cac863f83e0ca3f717ee4cd237b7c58702d0a87 100644 GIT binary patch delta 2739 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 delta 1770 zcmb`{dpOg390%~l~0U?lqSQV~nh@g`M@(>73{M-JkF8AMfY=$LsSIB|=`rUDbu!NtWvGwF0lu zx)1bPQNZB0>qd-sd1!^gAH#~P@1wa;n#_Amj$)l+K)5CHQ8X}aOuVadBv!eUUp|M(RTmfY%Wh1(BA!Z8W zDeJW4MrN8~F8{IU(ZDAPfH5|hT3O?3-O)+yvgsZ+$MaZbQD1y8n!2p@z$aBGG>1X~ zjF3n`Mp~Kz{T@G|k>!azdB6S`Ed)@DKmdu35cog~t}w)F_lL}j0T=Cv*D-~zHB2t9 zMzOOsz*X-+V0K`c*R}`SX{NQWpC!&US-1OC%G8ijpk^RzHj2=q%;izpJxvJDKejHB zc<_C5X3hj!=;rOx^`Ecn;P)UxEIvAWu&jp`T2$)z3Y#4Hr(UYRz7QDVfYwe^cpPLE zTV&X_QfhnCcl!ENRJ8#SnH|)nJ>IXV^7si)icEa9ZLnb9{iDGN!fQt1i+!Hfo)RHh zj=kuojZWaAM|Bk;$Xc5|MSndT0*O3;!UnYqysgd3_3ggw&ZGqJb)ERwG^-Ke?iVvo zOy;BI!&c!ZVy2V*@jb1+K2}(OQ_}UYS!a}p_Gu(fQ4?qlg`MZQ4PoqFp6#`6xuP>i zfqN$nr5)V$$eSwG9EIivmmV$Rey`Z9N9qnjf%EqS{n@A0T|FVx! zXNNW}hARpDS>YSkqIL}=>z2?{*Xf1Tg{m08>o0mcxghK;t^n43C~0Av!kJ31hLpK+ zPYjRNrVrL7KUHq%^$tf?W(T*O9#!-8pPR9GmZ4W>Z)(#)%aHZMZ2CB39Qnp+LXbLH z4^o3{H$G|@|J-%%ipmY%Xyk|$J};8UTvE{HJkt`biqwZ8(^Y7!GwUsf*mzJOd8Cb> zLRPiotXYfE%`VGQ@gyVTE}&U+4_*xF-&4Pp?IFc<~`fw*DBv5cZ&yMe2%un=P# zD!O|J)M(@0lQ?2*^bINt%p!=E8P9R6^DD023@NG!BT=|~E>AqCL_8;VF`r1;6vi^H zQI#X~%wLYM1Udr0Q@kqq0R*=gYQ}k_A2`(u&J7f&&?{Kxa&9VDm+stP3{Hk6;-4Nr zJG@+MQyFZzUZO$l#R+}q-Qcz+RKFS+?_$po_ksTw{zLtNKznxQ-?ZT!hCBVyl z2T;kk+i+2Id3nvKs&b{VJ*8I>B&4yn)u?d+^kQd1uvD}Ri&r4=QJ2i+%3<~4U~agylrSgHe0;TBy^i1 zX$c&;3+W1_Q~PlVdJ;J&ycwxVL^Ni_txLq|>G*OsKbsR)l9+S1K_N2CH~ zeb>ie*K)C#t^~b_@nIpOuac;S<>Z79t@R6kmPqHMFWrm4%tX2m&JO3l|>(8|fL?$V;;