From caf18564ba50594a90586ac2e4d4be3bc9364508 Mon Sep 17 00:00:00 2001 From: Liam <30486941+liamHowatt@users.noreply.github.com> Date: Thu, 16 May 2024 05:59:12 -0400 Subject: [PATCH] fix(roller): set the position of the selected text correctly (#6083) Co-authored-by: Gabor Kiss-Vamosi --- src/font/lv_font.h | 2 +- src/widgets/roller/lv_roller.c | 34 ++++----- tests/ref_imgs/widgets/roller_2.png | Bin 0 -> 32232 bytes tests/ref_imgs/widgets/roller_3.png | Bin 0 -> 33114 bytes tests/src/test_cases/widgets/test_roller.c | 83 +++++++++++++++++++++ 5 files changed, 101 insertions(+), 18 deletions(-) create mode 100644 tests/ref_imgs/widgets/roller_2.png create mode 100644 tests/ref_imgs/widgets/roller_3.png diff --git a/src/font/lv_font.h b/src/font/lv_font.h index 429ea51b2..2d142456e 100644 --- a/src/font/lv_font.h +++ b/src/font/lv_font.h @@ -115,7 +115,7 @@ struct _lv_font_t { /*Pointer to the font in a font pack (must have the same line height)*/ int32_t line_height; /**< The real line height where any text fits*/ - int32_t base_line; /**< Base line measured from the top of the line_height*/ + int32_t base_line; /**< Base line measured from the bottom of the line_height*/ uint8_t subpx : 2; /**< An element of `lv_font_subpx_t`*/ uint8_t kerning : 1; /**< An element of `lv_font_kerning_t`*/ diff --git a/src/widgets/roller/lv_roller.c b/src/widgets/roller/lv_roller.c index 4941ff312..14ed164ad 100644 --- a/src/widgets/roller/lv_roller.c +++ b/src/widgets/roller/lv_roller.c @@ -321,11 +321,10 @@ static void lv_roller_event(const lv_obj_class_t * class_p, lv_event_t * e) lv_indev_t * indev = lv_indev_active(); lv_point_t p; lv_indev_get_vect(indev, &p); - transform_vect_recursive(obj, &p); if(p.y) { lv_obj_t * label = get_label(obj); - lv_obj_set_y(label, lv_obj_get_y(label) + p.y); + lv_obj_set_y(label, lv_obj_get_y_aligned(label) + p.y); roller->moved = 1; } } @@ -463,26 +462,28 @@ static void draw_main(lv_event_t * e) lv_obj_t * label = get_label(obj); /*Get the size of the "selected text"*/ - lv_point_t res_p; - lv_text_get_size(&res_p, lv_label_get_text(label), label_dsc.font, label_dsc.letter_space, label_dsc.line_space, - lv_obj_get_width(obj), LV_TEXT_FLAG_EXPAND); + lv_point_t label_sel_size; + lv_text_get_size(&label_sel_size, lv_label_get_text(label), label_dsc.font, label_dsc.letter_space, + label_dsc.line_space, lv_obj_get_width(obj), LV_TEXT_FLAG_EXPAND); /*Move the selected label proportionally with the background label*/ int32_t roller_h = lv_obj_get_height(obj); - int32_t label_y_prop = label->coords.y1 - (roller_h / 2 + - obj->coords.y1); /*label offset from the middle line of the roller*/ - label_y_prop = (label_y_prop * 16384) / lv_obj_get_height( - label); /*Proportional position from the middle line (upscaled by << 14)*/ - - /*Apply a correction with different line heights*/ const lv_font_t * normal_label_font = lv_obj_get_style_text_font(obj, LV_PART_MAIN); - int32_t corr = (label_dsc.font->line_height - normal_label_font->line_height) / 2; + /*label offset from the middle line of the roller*/ + int32_t label_y_prop = (label->coords.y1 + normal_label_font->line_height / 2) - (roller_h / 2 + obj->coords.y1); + + /*Proportional position from the middle line. + *Will be 0 for the first option, and 1 for the last option (upscaled by << 14)*/ + label_y_prop = (label_y_prop << 14) / (lv_obj_get_height(label) - normal_label_font->line_height); + + /*We don't want the selected label start and end exactly where the normal label is as + *a larger font won't centered on selected area.*/ + int32_t corr = label_dsc.font->line_height; /*Apply the proportional position to the selected text*/ - res_p.y -= corr; int32_t label_sel_y = roller_h / 2 + obj->coords.y1; - label_sel_y += (label_y_prop * res_p.y) >> 14; - label_sel_y -= corr; + label_sel_y += ((label_sel_size.y - corr) * label_y_prop) >> 14; + label_sel_y -= corr / 2; int32_t bwidth = lv_obj_get_style_border_width(obj, LV_PART_MAIN); int32_t pleft = lv_obj_get_style_pad_left(obj, LV_PART_MAIN); @@ -493,7 +494,7 @@ static void draw_main(lv_event_t * e) label_sel_area.x1 = obj->coords.x1 + pleft + bwidth; label_sel_area.y1 = label_sel_y; label_sel_area.x2 = obj->coords.x2 - pright - bwidth; - label_sel_area.y2 = label_sel_area.y1 + res_p.y; + label_sel_area.y2 = label_sel_area.y1 + label_sel_size.y; label_dsc.flag |= LV_TEXT_FLAG_EXPAND; const lv_area_t clip_area_ori = layer->_clip_area; @@ -514,7 +515,6 @@ static void draw_label(lv_event_t * e) lv_draw_label_dsc_t label_draw_dsc; lv_draw_label_dsc_init(&label_draw_dsc); lv_obj_init_draw_label_dsc(roller, LV_PART_MAIN, &label_draw_dsc); - lv_layer_t * layer = lv_event_get_layer(e); /*If the roller has shadow or outline it has some ext. draw size diff --git a/tests/ref_imgs/widgets/roller_2.png b/tests/ref_imgs/widgets/roller_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8b72fb839098d545a961513ae5c5179d77d0e9e6 GIT binary patch literal 32232 zcmeFZWmuJKxHXDO2?|O#h$ty7ASu!1TZ>(vyyz}a7YcF1{c_evsy-HL)TpQs+hxMSGaK!In zUwy%6eaG+`{JV7P8WH^Sy6gX~w`6-06D=*0!bwx3qoZSE{jS~gsrmW&g@wHq+&sLz z)Vr!lg-S)=6tiP`BnQRFuRZCqzpi~*@}xm^OmZQj)Mx&eU9GW#!P2 zdRnjBt#0Qsk+xX=GP7solw_lr(h7AqEzVUp_>{8frIS!r7n6LvFV3DA|2AaD^z9iR z_v8`&;VE2KSeTN%va!KxoSUA$kl;F*wak?`2v-lOfUEnz=DF^8YYMgGBFp(KV;~}3 z>~(Wpr!P(Q=|&Z@I$L!yBgtC@5jl8-{gO%;uKoV%+IQjF!L@L0-k;m?DoW$ZH*!6N zm8koh1BrFCwVjZNjNaYFZfYT96A3jK=bJ-f~^q+F4rOMSWA_*-pK!KziN zD~vC{qA(|QbG0yF3ehih_K^?wJ~^Ya&L--7%hN|ZiupnRY7^ozB{K$8XQi(V4Gj?) zuf-FT(CnEl2d^$sc*DmAUVSV!d~Cth$113${rjuzGXD1MOj)h3!QHC&aX9@6V9SDTq|um0b+?c69R zYmMhGYR*;s&Q)qEM(RmA?AF>tU1tx=)222lOv}3tkf-S37ta| zpSf3FdfVZaXv**Vdy_6c3MHC$qk+$4=orx#88Q9ZJ0fUAhk??H3pMGfWn&We34bsl z4?8dUU+*!_x~Qb%P4&kD1Ue%o(Y^O-vGO=8D37=E&)n#vr#co$jenb%q#FJ}Hav~f zlHXUIc=Sfe)z4t@uGzI}(W~P2d3xQVM^Zz^)OvfeEOmpkMZ96Ua=gAO*`nCXnB~y_ z>R0w$U5t76I{(hrJaR71A1EV`Ua;LHuRZzEdyfZ}3qO(Hp)-70p?vnq+UGcZo=cW^ zg%~-NS|_EE*t%&S?QZ$N;06lC&Fi^b(iWq;-sAI?<4-L~W5yNFE?k!4IywD!hN+e+ z#|`TSX!O{(KI2sWR1{)~vnx6fu_wHh{MkL*==UY1?uF@otKLPynF;;2 zq51YC5w3w}LQB)R?Qxra1*Mfh5SuM%Cg!05J z$D}2H-Ain`|Di!fuX9DiZu#P9jKYKu^4mm_0z1p)jBU%8OX_Y_Tx>WILYbN%vJT0>-@UX0uTx6?8b%XKj(#^YPZSB=FWI-2l zySb2KXTt2AHzREHd{yV0&{z`Vp}^aH9?s3=W0Snk%{3pEtBxP5)$~lP>s}nIxxxy4 z=6E|3>lSg#le~IA%S;A$X2`c}+V=+Gu_Txi^cOT_OYbKBf%38X7B1;kK0_%E)Me8rZ{=Y z1428DnA57b8;Ks|Ui=t49KLNY)%eT2v%J<*uIkbkUvgt1^KI&ek@T#?5-QQ@3v0cJ zB7^LtQ(L*0t9)ati{4}5YGu!+Y#3MUSnJF=hep^2F@$Y*ysLTlx^G)0_eL&0G^R9` zXCFG|50)_v{At(n<&2~kVY$IvfV2{uvQeMp+v^NO38dn?*c>h+jy+h?Xd~G@TX)}P z`#GY&S$UR?BL1*E0{H{Ku1=wq_oSJl#Yn{F_Bk{4xwjO-POV~^n2nQ<+W_s|W+tVW z_!YCrP&|}m=bdX&>t2n|HgzCDofaw>NF;@=iQXxAe+r+>i91&)K6B$e+W&UuCN+_p zCYaL3YP>RoW6Sg7jJ9DnCzM>Gf!$?M0_EjoDsy3EZ%JCAz_IUPzM!eG>&~k>+m|1L zjaID>-`81i@RDb*{l=V_xH#Bm!>+M^S7&i7xO3LSHaMa`<&!R2`P|-)$As5K71tHE zs9otGGrs%Drq;F#wV_LcB=W;F%N%DL5O~@dFW8VRT{+HJXTMdc6lE`S?t;n6v>D0EWp*TJ?QVFd= zg|O#nRjGbDqUTJ3S(8TD)JK_&SvK2ZF+;z7%GaV-@`%Z=Cy}L1MR(bX#E%$|cOXKh zVSA!jlRL1Indqqv6~)ySI-( z^ivSqe9*Cg??zlU#*gc(2TC zgQAP^@VJeGp51iDpBW{xN8e74ONX(J-2}+uqsf=vhCy!DloOtN`{UF)o%5e31&4LV z)==K|7eM&?9FB53zbZ~yydl<&5xi?%O19%x{G)*T8+8rOZ(bMkv_(J3!$?W8kh?k~ zYOdH48qfMCO*FXneVV-gV0jf+ocWhyMEh`%u4Yq6Kpr`Lo3 zDt{|k%3GIqKl{s>+c0vw6vOc|GO}%*fWjs7hKh&W!*VhI$D<#`Y^wK7z1rM;8VY!c zk>tNS(V^ZWDLWr}?`!Mj|8kAnJ{@yX=pc!h%z35n9VS_3e+M09{_PEx!bs>Pqu7rF zZop$$pdX9S>x8O-hwJjQjw`@-=0t>d;4JZQ?i-YdzR)uNi^w{m9u>~zH(Ot($6Bj2 z*hr2%lZpcZL^Vhb!>Bj;#QmI75(|l?Y#}JB3OkA!+&GEO<0k%;>f3zRw{b8S8B&zO znwW4g7}@q7clv-5D5Vj$$&+?iHZ(X9eM6_E9nHV%W{PF#GyV186*Iku<;HbtN{|X7!e|oHfZ8ZgTp^?7b7Tkp3{ z$lJ9VWxMLx^*pF|EF0dXZ=ZMJmWg6R=U$-q*onyN;fmfqc&xuR%p;y-lat~z1v7DSkUoM7S z(=)B`=gQ3+VDq(0p~g1Og{X|JmaHlEoV`xz<00%;sC9Nxw(ID3_OHGtI=VCjk93M}| zxV651U8>0o>t3NWx^K+CcZx3TMc6_p|ANu&MPi*$>t+ejIQ5Wfy||1Al&-Fh+gbhs z(869F3oZMKc5XfyTZI@i4|;T7>%L^*o?>Z#Fx*!nA+jKP==5{;;1k&VH#VMD8-f5TxXqr+;KFW7}q57*!r8Sq?zjWJ5Txmr{ zm@g(?PSsLWeV!Cp5yT^tOs-oT#_H$A&Wv+zDA*PlOoB9NNrRhc(3CnxG4LAa+bcLb zs^cYeX7l#ZL7uyj9}WC)v$sB*ifbs?9kr*7r=q7Y+%EbxNX)V~^=U!Z$|us4<28)IDBX=+khf6?j$xp3hCX^2E(;Z-d8w~)v&=|o~U z1p2sAP=Ef6;})hGlv+>R?Ph<8>T*kN(D%&EKUT$JbnLK6Bl#x>wc-#&y^a$nK^Mf0Y8jp>!(LLRz)i%n%A?#j~Q(;h_&u5=sS9`KcR;M~4Q8!g+ zV1;?vB|YZ{NpuAa&&;f6H5BmctN;u`Kfp0rgmQ{+!L8xK2BEl5YjfBVmb25<`jFE_In)b9*v{GpN=yg za}S}-zPL3jGd2(6qg+-1Y>=r1{Um4n-Ad(?p#~57rHNODng3dJC><1$S51b-rB2n6 z1z>q1Co{+_{DPQHElNfBFC3^&2+rh>)(P{u_1E(%Sv+bm6+D)H3Nn5+XnwF^FTln- zzvE%$ZLc@c@3M7xzTeCztboT!y6S6?H1(t|W26m36RHvp>m}Y%iDh=xgQ~)uM<&Fl zFFHQ>FSZN2bj;{^06xm*3y(G`oxhHc(4=V#XD1p5Jl14^0dJ`lYOK+;^cZ zW!2%I!hs_Cmy0a`zREGQGrPY;FY;L|dA9UKqU0b^LhPg3YTO&mNBIgA*wv^?O=44& zG8tnlv|ikZz4g+j00U=c{szlIk*wSHy0I&d`o$5Cf)eHB;Wx7~L%p{3zzqEN8+N;| zo|yV2&a4c!t467nQ5emcM04zKm1fBpF~_ZOa<+uG6NxDGzlrRg51pEF`4IddknQ&MFgd2Ap7 zVhr0}Faku5_?1vN;c3il7j^pg*oskf| z7}>q`Bs%9Wc@G+ijBT>3Orgmx*YHD5*_Z;G;5e+RhhXEs+>AarPCC7)RPLdc+3omg zQ1WMz7fP$xWqWz|<+$+WZcp8gT4l}drT6k#odFhAy4_G|_oXg{5G0A9k53^+_tdVF zq{vkaSiGt!P0N2^$=f6R$zK>v6tCNzjrCMN$h?Voy3GX<^(^l-Q*Zy&4eG~;#3<>y z^ZUa0>z}-2LVjoZl(gnW<-W0Qf$2HgG)yZmG@kWP!|+UT^7N(ZwCa5!tL@35n9b)1 z-c{t~S&(`iBZI!gK5+>(*`U*)iUhlMo)( zm%B!py_cblERkG$1=Vf8D2$8&U!v_t{T<%Pe5{?mbSMzCU>Tg%>@hZ4iizF#m?`cE z5dmRvcEJ;T0Ic0Z*g~F32jg}^H_34umBG2$blO90&D8lQAbHi|<|n;nE>{SCNRffW z9P;v;KVK7UwJfvD?u&CHLB26p@d7e6vcwA zPsyDg=EH_!^`Up)fVy;;l=v?LP3{?7ST5?#yeqjdv6UC(`$h@y6No7<;Krv=~K{i9G9NO)Zt{c{IhlX%@kMS1%=b-B=6R{_~ma_B;)f+xX9h%TMN5LnqCA`gI*f8f7*IEwS$t69gqMWJUxCKPrX)Syv78De7{| zWz9dY*+a+kc$lYQy0%ZVC|3~W^R5}HrUQ){Wl8KOC%`&TW*{cgsW!G=XAKyW8nbL0 zf{1ac&%D5Bois&X&cAJ#!6!Ty$v59BFo@do{98(>Gp>2$nMvr-xXD!w1aj8w{byFs zE7cH~M~_QGSHVJ{hZl%amT|t1ZLct%93FskW*^Tgw=9ZU&+Ged3WuwzEN&{d{ORO; zmH7`@v-N#bmo|%I#tIpe=an_AdLtfz`Mpb^dnysMh`fraG76>PcYFF1m6bX>;R#r% zCXNDM7;rK~mo~~6YaxHY8ZF3fg^@QEfW{?)=yBxA7F91MO3WwJ za#^!{*}9A6{J5CB>cU5`fPFV)Xua&qN)2U!UgtxqwY`hun6g~IeIq|HoB3XZ%1COj z*gBpHC>Vl|R0Li~uzkc3NVq)gSZd#e`gm4q%IgB`anFZ`|KgC**<}ZFExwxvE%TO; z<`(U~)lr0`LB`9C^4md$dug^z*X=kty=C$;tE3Db_{qMw?K!}`rToz&<5HE+7-!n# z0o58E)!FRD_etkti6I(ema0N#k;#u!Y=zlo*Rm0k5sI^iK0{qb-$(`F{)QLOg_k5h zIt3o;?<>Nu-eSGn8Eg&STZ=9ErR}^YSvSSFTf6dSwe%t<9g@Y?7Pmunol2!Q++<~%PDRlWo5>6aKijPO_-gk zw%V*4nPKy{&b-b99YyQ>W%SNM)>FL-T1@(oVTyc~t>wV4C2K7kBUis8{tKkm%)Fin zTiKRWT1-Tgtgzx_$a`q~Lfbjt+OwhnL(OU#rPzOBz4`nm62xt*D}E4ADHlk4#DAq( zfzATzk;W1#o=(iEY+9RU`R2}JDLU?TWyA;In&`q-0q5T%kv|eZH#3O)(+=#khML#X zoR4*K?Aa5-*I2M@s-wv#CyJ9aF~2We``E6bObYgHx~ky%B(8DtHxXNI-cPFeWfe`m zX%RhSiGQo_oyIIfu{>+h zWU$h7Y;@tYD2}L!KYALjKuv(-WciP+m`!X4H7P6jjGdx`+?+#vE7g#lbhX5kvDT}a zyrw)|(3FG}H52`MuIhaC?Xn@YU`fYbNq+vtv~}PmgpbKW1U|!aIgDr9znx6{n-=vS zu^TpbT3(cGj$Ep>R=(tdeDT(yNgBq#Q-v!*oR9F#+lMvUI7mTJQJW>oi9bP_4pr1J zC@Y&uMny>}bZXN)C|!lIYQnC33 zurXfuDN5j~bH?04_jCIAcOU5`Y|wxnCQU~coL^9olg$*6N+)xEevaesw_$5<&sH%u zR&KAu5;a=ugn}X@9S$oTwCXe~=4R0pBGW{Dt-3IOBiDp;dE3o~XRN8|Z7Ks77gs>4 zyn;e+&9W2H!a_Ry>r)yUneY*tF0Q-@hNXe+XAln)r@8aP`y5Gghi}m`rKYB)h(#cwtE{X{jp;ErcS&unevdUtU^867 zh9_=#l~5u~cwLQ&@D{pQ3Mj=aXa)HA_)g2Y*;Wh$MI$z6s89VUQJxF67tF>hn$w1{ z$H@EAl$4fQ7HCFAM=yuM=faXY7OuakFRWEZ`O|$9Lo-HRa%{1QWOaF&l$=~HT}3^| z*~TWQQXU-xgHWR4<=lH3%#`O0WWloG+`PQQgM*QZ8F}i~Z3(C67vi)Wf`Xp=D}(lR z=R}2{CLq;>leG4>hzxUp3I*#OGRYuu+B2f{spl#@ai&4ae+WWbC+v8eC7V|Fcj}n; zD8rrj^RlytR|hvl<7_ZcP#oSToU#0DYm*6W<>KR8a;zYbxcTlGYzlvgi58@^dd{F( zaj(-e(L0$mM8+%$iWq*P>skh|o*xq%+uPf^tWq)?P!obUvXP#`rKP2X(eC!z0jXO? zJ!g<=8e3YujUU@gm?lGs&{{|R*;`5)hMq|EU!UFPQxbEk&_&y}sK98M+g4+G(7|bc zoe4+d#mwiBkPxO*B(22Ft*X))Q`NCSA}foFUwL}Qn{5gt zD3*_{JMk+#RHY3gp{BOCw@*q;6prGB1xChu;u0DEo^c>hL#2U&H!(3mAfce3uw5T$ z*ep1`IOE(DbMjTXMLV|;P*VjyO@e#ES6}phocQChv39(#0 zvUH%;sG{YnGY<~*9Au&TiPlW@#L>rfdS4tb261SYzkW8R#v~zQpX77#q}!vv-Gq}W zR7&|XR_O~%3Dgx5Y{={CmdHrL^(cr;FE6j4LP$7Y8Az1mK-Ig3k;Xi6jWb(4JO;sttD&}v|31gSDggNTTUhlhvLdY9J6%9%xmgUNXXsgyJ{h)o9` z;N6TJbx)MCBsEr>d3NWmPPyH7Xaeo1^>BVxHuC&r-xuM*6?1Fiv7n%CN*{?{=I`!q z*el&C7X_GKeF#2O2uS_#QU~R=HsA5RpY6Hos|ff4Dg~ zL|5h91QVY#3`|Xh4*n%I?&#>yFNm&`CoxuI3YwBjZ|++z8L`pV(h8%q^z`(!u=v2? zvO1Lal;-LFxI4!o76ndgUtc&wK+1CqGc(CMsIf_IiNkxpOgM9La)Jt>qxjna#Zui*Y_xXoNXXC;@)6+Bv(N!o=&n$up!MJj8aG=TJ@;TuK zO1yhUB}QO>$Q~jzJA7z%zj|3xQnKCons(mM$B#EdTg6Hxv4!j3ym=FDIbc>?Vd7Xa zXf=pl>ZD$a++PXPKaUGij|ET2JPGw9W3`HlgQG$tt%gvb!&5styyI~Lh0lL72n9O?|K0PF>#jaN zbuN#7`l9tRkyBCzx6ZLf2lmaFYAMp;@xZ)9dWeqVAPiU?4;>v{ zmvwk{)`)>X+rU5r5lMVK)0_Uy)29T@P#agbKBO+~BfF3LED1;uU#NSAhRP}{+vn(4 zcKZ*=m7N|0%tE6@uymLe2L=YJy%P_7$W0f~c0;11%_KZE2R3n1$C4-R5m8{r0=RZ0 zEe%j!ThY|}_Wd^7osl$i9&a2G8(ARiJ6mQ=e5?5Qv70XWM{xp)6jb-bc*UgRHWM;x z>fw#{1;@_czdcXa%Q3LNXRZ{`$ut``m=(J_I)>xzKq_&fYNE9IW0epQkn}TssJF=d z#3m!osQX|w4CmG@NLt%Nya&A+`4~DuWs4nNL`%!dqOZ{wVdrJiRiOKL8~D;lhtE4! zv=8p*sjv`1pNDMS<60E3x3*5Zdjmqbv*Zv0$M52I>2sYQF5p$5pjIX@)yn_g{=5Mh zR-vmHrzPRv>v*HorK-j)s}-w3SLPJQXy{Zei{!3i32$~bSfAiUb_<=Jo<2uO z?!mGXKLJ*xP9y?>(28O-b~ZD6&&eD@($*jY%X9FglbJ2PlpW>8zDUN=b`Da%$iH)) zw$k^N5fsCnTpR?#|NVOtt$fZ>?ufRa;9$$eMHQt;I+=$NA2To*0(RERr~1qSQiDQ6 zG5i{y(!6G04faF9o<4f6|2aE*)aZmF&q*<^_YuLy*6pP!HKt~a+of2uJWSsZ?hpfLd=@wXI`91L zjDw^s`K&8QRrhjEa$C%9q7tz)Q^c}sP;#A(r70X87tp_uFNCk!ce z-1cw8#>N&B5`xZXRSHn{cW0+1ary0c&(5T@`}X#@L-XJJ`)^LxtnMBk=!rMXIIys= zjMsX_RhDRIXh5Y@*EJc_ea}->Z^9WlmRlK$igV){QGH?M%QO6ZX~JxN#$u0d{a~EJr9A%HnP#uWfv%S=Q?zSnU%EoOTClYU+%Y^${DM zh&FNBy8{-lVTO0l)zUI+KJ(yLA>cxCZO;&-;Mb*`Uf`Y$ER0+~eg3v&T z#k>|02?bGGJ9W_B%*?EWxE*bu_)o{^#wapn#^KN0_OGIG079787355UWWu4u_6`r1 zS5}Vp_KJo9>|ML3KQlf~F-VravOZc>tp2~)%tb=JBf4Iv0|zD@Zg|t(XaCT=`&oS`j^GpdCbhrjg5`rbO4b2 zzt7CfL`Fu=YK;Kr0q_tK(pN_mxX_g#u&0SY5K5%9va+%1ZX*Kz01nWU7ekSLqY&6SGsz8C)#CXA`J~+C)znXm%5=|E*TYSN=daI9l6nlO&_Ck zn>u=WRs%Zm_SQe77aHsFLvy&EUGS5ilM@fRQE%pi-QqRXidKkFHGDNKmME{lsn6qt z2Jf_6-9w(5XaS}U;wT;gmcmU&NlHpeLGiT~t8Qx3u_CoMvrO5y!4P^ud&s>*Sll5%y# zB&4J%8|jAZnf8kh@=Ubd<6>fBu(*;_NPu}ORypvoVE*js=>gioAxOEP7g^0rato|i z%Hnpp8%OT^ah+EE5jih=tjwQZ!$oFS2TaEiYMg%Ec2Xw5_D#`b85$neU>DU4rxRX` z-WidL!o7`pJ%|H=a9(R7qof>^)UYcTpuj1}%M)_jnr`sJkdu?EPRncH{X9Awrmf?CLc;T%{KCiPa^rAQJbD?2F##65BNp@&1bIzU>ft zC71jOUE;JaIAbi13D#R{tE=UGfNm~0R_L<&XKE0S*48uO-!6@_q*i>xW}G`s--huD zO;l4$i}437XIv-f42l`WfS|{@`uI0Sebc2xC;GnfRrb|>ci;=kYQk{*ijtF`ZwKN* zQa5?9WQ~3gV|4c-sj;)O^U21+e;7CUZ`*Qna?b7}fx$1l*vgSnCV)NdSm3u%ejg5t z%oGX2%UN~W<^R7d^ntAjPaNnsRzgpvj0y)%etW$i!^8n|sxNC^0i~so zxEZ;R8&6!iVGd1w>OI4jFP&yN6y$_#Q(fC$?M0qVC~^YxQmvGE%1Ufp-2OzdeiGgH*vGIC zDOd=qoV_O z0a02}Q2_?%J08*xBd9`K&59M|Fqr-x`@9?NMP0GK@4ul{OETAt# zmxKTYp`q8}^N?2Biu;?VhIV$WRH3f$a&iJtCZR00XsFfl5AiRfIe0`w zl+N{G6WdIR($eM}O2xcSmNTS6sW@7+wY9AVV%+zX@T?}}Ez;7!Xr9&l&l3Gyi&!=V zZbA6ThMW+F5)zH)Q^ql8=n|7{TJfLwVvQ0Mh8Mrb-pUG-a=Mi<(Err`S=wgxE{<1* zDPfz-lB;liI#ax(U2Qd>AF!kbQQxCpRX`bO2oI*mK zbBg-8=}&p$5|WaJLw@7n;1Jp9+BuZLosQdC&+x@9{~28h5`|mZ=bc%~E9l&xbX`zb zM<2!5>B*pxp1r29Zr%m4q||LW%cf3O=`ezjF&fByVh+=Vg#l?P4;hz|@7LOCT1Zh>lU?7hNuATu-| z1GOa+3ALs5SmEhv5)Zwbtk7NO?nI$}Q>kOmi{<_d^L-Cp4UOT^Q9vD`GZkI`=lH-k zJU`p*?oJXh4Pl$ z6^|4a7K+n0ki6ng0PSbnP4EiGJfx>D4Q)3oPDn_A-YlG?bSe(Ki{uv2InEXv9vzxH zORKBQlWQN~07*zja2H9*-A~3x4=HN)VSfSN)-4-qI&$%A_f3VEeKcG5>LbZ*+Sv}7Sjz?->x*>7ZlKGJS}$(0N0{G>M%F;#T;BW-%1{X6mTY<^ zuPA{;)x-wyAeuIhym-aM@$vEcdXxlOpqiy#7|4&!M#jd*d$N281bhcxt*x!j6rOzV zRaYz>2DIM7;V9Ffo4yW9_Qn5QUsZw;kKTV*ScRx?jcxu@V^s?OinVx}m6Zh~>p8>x zwj16@aXt#+ab~(lj~@Bbe2=!*a+SKIbB0mQ_p&mx^0DRqQ%LE5TGeHfR%{9o>GwAmY%Bh@|c>EM+-<@+t>gxbVcB1>QK_WyXt>A zz2vK(H#Iq_=<{R3&b!p00j5)%O-x-Ura>Q5Gdu5@v8lc-E#G=`o$QM-Z1J>Xg+=#( zpF}xu+7*jGyh%S!C|K5Y41+2r?4mm!$ly6wr1vj_^p!xV?N36>qWSgS?zVMI(~V*cMN&DPJ)4-x{VMznXycKKzUn)Pe7kaPUm z`}FRU1F3NS>*N`n|5}YpmRq$x4bHwb;D)Q-(8##(nJ}2EZ=B^s=gwQGgc!I~;}x&W z-QACYAX{5om(+mXkn9iF-TOHUn9V-BNRy={Nt&P;hK3LypgIUATb61|NlHSyFWFRM zd(5Anh$n>wkGqV-`0;JQy#G<5RsN0`fmvdk2?)0!*%DxZ*h1~)88FFG^OBOXk={N3 zzpWV%(1mN{&8pGP5?lja-LE28Co!3qA2}Xk{%miTZK#1FXkualO2<#G$_cv`lFlw+ z{&fpuJ_^=h4AFDSN`sn#rO!xN3dXjC>>vs;WNi1MfVf@4pw*)hu2f2pXc+1%NZKIl14&c1;G%moqv z*}`3_;t>i=)b^U}#;hwIP_Oa?8gNjJ@XyTk5dNjc;t>`$uCEiXLsv&^%GwKi>+7FZ zY|z#!=_}6mlz1eE6t+7hRl1ceSF7Qmpio?iClM#}^Iw~dQs#~LJ5;o$6BDUoTOwuC z*MPj+wcb=RSZFzAVtA7M%brDge)d}Mgx!>Dw_sZh%H|=zIHu-nE2=Oi{Lg5jnSvvC z_&}^gp=ZPU2s%V_1hgmok8daJU^lsArgp-w*4-iw}2Drsvy=SbjmOCSMSCOaL$E%ejV(~NK5uD?OyC*1ql7|Vn)ePm{D^zx2ve8zew zlRvK4v&a7k88A0xAP8ukbBdJDfQnwVNeC=0y|3Hz5jOG%oeUv*5I;YEwjfKC?ha*>nsAd#u1f-2Xxr%=-`jICH(&fma)GfeXj1Dg zFb9fg`z%cd(@G#cO8nW^F_YuF>p@Sx%=Wb_mAeCzmm zUwE#<7xW6_$WAkn%d=Nk008C~`AF3)g1qeQeiGot5#OrITi5g19U4dcTW^9u6w)me)mXxjJr zcc<4rJSKyA{B(K+jCvsLDs=c!UwCdky;7{1wa*a$j(SLbS(R4m=Ko*Q9-9UEhhnY> zeVaj;`cmL%(;SSJT92L+i`$GcDoR@mmFB8jFK{ssrVEx0zw(xsm*0{w6Qt^fiBdpx zrqaU*&wJ)b=>~L{DxomxUq!hJRIYp!f=F^QvP$Pw^)_ll5Nz|)RoT0w@5OeS35-`U zPdo5|GU=?4l|4E<4EF`$Xqgpn!&6mTOBF0B*Jb{;9lRF~p5UJtH2CIzG+M<%)GLZ+YdaT6f%Itl-0s?YA3;}%;6O(__=<@w8pcrYpIhq>P5b;ZjzYNSW{_65Yb?>h1=;6qH7IT?wZgqnn5DCCJGF z6d^M+FC>(~Du8>)kAZ;!ZCYJJW0@c|+ln>}u&S6ZaXdcY*f`ZlX*#ezoc!~GFYrF1 z)^)7AM6XHBi~RAeeh}FF)0hQ;U~~>w?^<73Sy@|)kBND~M%*{kD{o+60CQ8A1+GKg zAau>9YzDxxwq~<1ZRzHwdDyJn#d9@N$(Uau)pm;JvA<7%byQQ4>PFoHl2l#{JgTzJqhO4rTb*swFH z_<7v>)fxo`%K!dd0C?*C{rDfnXSaW_bnGnvhKJ)m7WCpeSjCZWR-+YtVX$b&^=3|J{*zoitr41J;9IyW^V0BWt_IAeS`I=CVe^_WuRw zEA;%eGx!i%zQ8mLL#r}z=RaiSFWK2J-;KmpNJwTf&}1k1DuODS>A3!L7yd#4EdTd=EQxp+U$WxeXA%hk(!{Hldrw#?k!yza{FyLGuwi&HPW5BpJ zV|bQ+A+@#XdPNYjyJr?S#gm<^_+q`>suH@8ibg@>Elq|grQg@G{S6aKorvRAD2-zK3e1M1LdnBTcKvI+mGO3yT61^;>rUd+r4#J zYS|{|ZN5K(al$b4UaN=GNhkwWZxh#U>O}G9VrMrj9|M^#^Q7$`B!0`ZR4)9hp0>G{ zmtIw$#XGHl%3lkPqjU1KVLe1C3=c7%@li;=nT2^OzrjDwqQr!R1#{QBDFgP#2T%?C z8i1sH(gI-kkE@8gduaY+Qi)_FD80*jQC#&#g@0_yU~FDk$N@esA!*nY`0`3vowF5< zz&Z{mgJ5%ZeoTNx=+pK2GQZ|spK<}P{A7(kQ&UO{8TZ4aMUCuXb2Ttg{0$2=!T%B7 zHs2Y?Ynh*)%HSlVx^WN8I69cMk_9UOWOsLWOSCl>f^B)mAUyBrA(qu{-Gv!TcC0jI zMl(5#%GNa_!D;j`;%w3}O)XNuusg$on@J|TZ1e3(?pE!T{6j8bVMRGHlVU9x)KCi$ z?tu6W!z|psi^c+ipDUWj;7+O{@AjROj$&xqfd!JB* zynFW!d^IqlDj$0!6V6i*X7v=jH&F87yCBETeKdm^|3sB*EEmM zH^G2GOhg2?ygBdjJ-qE}>s;Z84TMcVDm-Y0fS&>qmNK9M030(QW26dI#Xzwo!tuA9 zi{rIt3i!!f{31l`jSWu@0~WP6El>^u32!Xi|LvHvYtf{+1E>h35zpmFpn(8)+L4TR5{1f2aO6z6NOE53i3T?&5Lwr&(ze^&Fu@T{&K7{Gzp-|N7>1Bbp{B;38Ul zkK+%cawvXu9gc0Lru$%Ug!U@SLlj9$AaPgWCaj_;>?9aC0^eU^JY{@kIeZa`UEDyprDnw zy{hOlReLNIt>k85kqHx3Cns*AK&VO}&2*YYw9SK&$N4Gx^*3oE*eLZQE7?!#C&C3lU1N1|!@tkKK_SeC6vB_o|hEE@XD z{Z^%YZuu_RA_ivHZ~{~cz!eLo(Vm_=ooC5ON-&man+)PmCcrJXh$V{r86cVFX_qy$ zwZ)!~KtVZh{&_8`*$8w$kUKs9ULVv3|6GM`h%Y_=xH%^&)!S`BDhcKG{j}#HAIhS- z-4*Q@J%tUxtVTu#OiIl{EouQE-o*$ETea?19@zp<>IXq?De(C7gXH@w0ALWOb&gl*~ej$Z}3e}iQ zuj~;Xd1AIGd?l6U-HDVZ4WZN`W~I4{GNr8G8u1HAwa6a~~fO1*WfSpR8KgkRBdrqTp+U>w~YU!SH!iJGmM=__`e{z#<4v zOVgR2)UTu3X{RtSOl1H*(;i7A(Yv~DG<`FfPAlqvwRhhCRR90~KPnW_kdfIC3L!Hy zgpj?*ame1X=RqZv6*8hj$lm*9^OC)?SI0;;*?WEOr}z8&y?nplzv1JD*DtR)=RBW} z=lyYiJRaBE^&IGvX=p66@Cyh$Gm4yCgDq2l%e(@}{_Y}JV)31O&VS)c7p#8~tdpy$ z8~BLo@+Nl;G#O?m9k7|D%mUjDiz?6w3sh<4AIim+j-RhTxGfvO)}fir8{b9Gqg41c znF#TPAl>uby0hRF$v5VRw~2~kB`SEfq_AE6_9C2JW8*t!-TR_k-+i16x-GHGRDN0! za9aWa5sp`n@4@b9__NsOOt6gZV~F{`S#ISM@~IM_sSpm-aNFB8T7aqUqem#__E+Kd zb`bS6L?YSgFsOI zH?;8IL!3pYcRzO50{WrDn|GAJ@`VokNE1)yjl_%Mi-(!lcDH3 zr%zbH@#WQ+rSUg{ixMKn!E4?~tj2(dC(-QU=~0Eqj~85n42Py)%7u0PX8b|7^p(xr z>%=4`T!Nt+oDc6HiBGlf?6#sPx-n&F6uoVL0owsYG36($?f4+2I1~h7`R4E*Frtth znr*!cr$x|;;WnXCNqqYjmU%Qs>VMkA9@%yr>!KmzGPt5_V;YH+4%~lG0!jVfEmfN{ z7=1KHjCn9uWcd46(@Xg0Z9x>H>a8e9U+zPGJ#fUrj_8&?!CAgC2YmbE#3@BnSsaNQm7^vg|o}35mh;siu$#gBVwm zJzocHJId?pvLkqsUOP9`s|hX;3GEcvRJM(sRcmnisgkOSOex&1(c<6K;XZS7IEVo& z&q3X0B@l`!j?v3fcFv`2d3VUys|F{2hPfW*a7HfQeJZ&Nce zb(O~6$MT=u7!(n@V-`JTbvn4*HrruGfGG9Td1D?j(vHiI=J&VWWdvc!u%-UN%=ioI zR6!bW)i1a%Bq_6U&Bl*$(e^BzHpHt^AGbN zeEFOP`4ZC0yQc>_ZGktYFh+0{!Rq666R9EZ(GDqFu9HNP=2&ptEO(T@Nh^YT{N?&W zgP_`*v>Kt;xhu1Xryyf7?nGxowllI~)WLim6ME*O>rKvDRN+N6m;Zx@-bs=-Ui?Zb5r+L8h z;YZ1^Z)&ecMUnz1jJnT1LzDkN)M?1>xPDKuB7OaA=0Lo-xaSh2VV9dITbf(l;>izF zA|Vq;8h~Gw}FT*#t4K=FXz>EAUN%GFb_dt3bhlkI(VHXi2X$GN~tk< z@be`;x(WUo4)o$)*Y<&WqBns9DdqzrNO1yUbT=q&pe8EBa@dNhQUB#h6@9*u zB0-61HmHh{gL>EXOQa<*n8#n~UjL+h)k-QvOofZ1AGl+`1FB z^>~_{wKiI?#mnVbA@-0<=%m7OA@c3Q(lRkYPhjb32NSmb)~u8YI)Qkihvc-u{U}?F z&i6@LH`M9Nt@!M)Veg!wX0ZpNx ziO_g_?8iG{r>j|%AE&XoS^RG&Wyo}(&Vfg-KI*cM$A|XLU>{v2%2&OE`hsfTmUjx3 zmSyTDr{<~l4w6UJ2NE2;*gPEi@x)O`Y zlJxa7j;n;hy7fA)`$}-J+g^6Z%<8WS!{@?2De?BdyFKR#rF-!2y0kn?AAKrwH(JZ+&41L%kGBHa!{Z- z&}*~O&%fl@byji>+11O-4h64yO0e#6u+2Em7WDCav~wKX46p^Y<8?cgZf^Z__iFsN z(PrhP=r(htNnXWiS7qG&!-qqA-s*|&aWwmUTSz72QSmEp%wG}q5HTd?PH*{yvOXX{ zCQZtqqwOQDR?Mw$jtg7uAs?j<5qsajX9$+6OB*5%-CLqv8}xYiyQDw-)t*xVvBzZ7 zA@Twn925GET@>rg%M8$>(@O(ckm5xrpYS{RyV5R=AD_=-=B+H14mjfBUww5h-Hvgi zGWKV9w0L>BR+;k9aqEl7;Yl<0Oi*KbTs-4Mpwu9?CSHYGYWSd1s75bzRPc6*lXwP8 zV_6AGaB+LN%t>o&PD^&UhXrFMj7%Nc0pO9sVe(#NY0_IaQLEfz)n{p2eDb+R-k6Vm zvsQVtzAT@+tqFAOTrJvrf;P8o)+eMFI;2GfNxsLO{xsp@+RY+IAuvO~n$v_KUk^WBJ$&54Bd@rT?@d?Gvy1C`$Ce89-NUHlr@WiHw!D8{*oj)qESy(EvlH^U`q-w{_idnxMAuQhtQlhQ!6oK~ANdMe&U zkgK25YSr82Iy#o_@LST(NnBBJc3I!ysoCoH>C~8fQW64}*8#rWGFrZRhaEy1(Ov@0 zaqT{L7bp&kIGf>R`hN3TVP?rF7xu>w8s^M;2fr+PV~(p;1G_`S_$*`$2-oJb7MTSn zELy2$&9mZiVupSj1+{&x9`RP+3+OtZ^XF-+lY>>w6OoEBuR)T=fw0jLt5Bw(Pvn2! zP?^G`M@(O_!@dVD!TkzGy)~R`Vg|pwDj9?shExrc#l4_h2W%y))DPe;Zd8_Gn<7k15g7(go5Mxa*j#hA7N|cyGeyQN}n@G>u!zyFdVmevm3} zxa~5l^Wm*SRIUv5>ElFQ-xP&_(0^5%w%qQIiIzz{UNlbh%P!RXLnB^ZU8(Nl6Vqh! zV|I~OpxZ7b<8u2U1T`R~sd}HlIo(xc%Mr4&q=bBD>tU)Whkf5e2qzq3kv28y8UQKbg2S&oWN zls2d7A@4(_gDjms3Xw35NyVRyOQ56Ij_WgO=m$q#ZyYOXJeCMZ39lf(bF104Kx<}P zzpJ!b)*fbw8Y|>faU~3^1*^QZi2Li3Zxii&C{b6^3KMgY*#gpfXoKgul-`ufjbe3w zK5U{y7u85gZl|>K>8{3vihYq`zz)BeG?t!MCnMVq$ zsdG2+mS)&a)gA72p}pf6O}K8J6Z`V>ah=TQG+_=Dqne<)BaUGuXC5fyV-l|6GCEMY zGZ~5}e9cNssRd7W^%gpsoAM_=pIN3z)b+v0{h&K#O6^JMD>gxPDJ8oiNh!88N!rV9 zF2nMpW!`)8Qp5gF^2!6Rx>V)2_~jGzhsnfAJ_v~%su_P<_C7cy^===$L|L8agz4$> z?xphhgj6F|-?rGCTt4ok^Z1lnK?k!YmNFPOLsplEcXRF?2p)~b4R|IUy((<`vV4$H z>th$+#E|b>EIRD6RFxoY#XUFs*p(U+cC+%jp@v)iMpwjQdH&J!_^r53-Y75j&uPnK zyX0Lza|-Yj-U<{9pRaP*#|x^-x^Cck)QZ_jt*e&oSA%xqM<)f(Cv2^=pwT)yG_k{y zXMrovAh+7ELk=olXnFiErHR-$MvU3aDpT`FQN--LrC`D4=VRze;!W7}y#1T&tnHIT za|j1DF8!jQHxm-$gr0{rcM^(SsC~_+aapIGwdE3ZMG%idoy)G4Ys&lgO7W)C&_?-W z^EeHYAoWe-aG6oov%M;qqRxuiJo3uUPmW~H?7I*~gfaw*rcX!kk!t;dtJk?^xd#%T5S%WTq&X7zOD zQiBnd5Q65Bc8-A76gFd<bF4^MKO?6_f521q2gR($39i;t@pPUh#h z-OoNJaUUwCY;mQ~E$6Pfu*>7pF2aWk64x2F40LyEZZKTSZzLSo&><>4m-SRh4Ei0E zhwdGpy}f-(JjHi+dtYhzA6M^>9?PTTF=vh+R(LAEd_%t^1AP}HH* z6&_8TXB}=3CMS5dBRPOJ)zxRIuHBjRd zYvzT+n=sFKK8rUgNz5#X;8`2uXlfiS6Y(7U+PA*#1li#)_W9z>K92o1p{ zydVp&Lxa&;7bMzXfP_Z)5|pD*$ng6#EC`}xVk)eyZkNUBxyQ1Hd?UV642!9fUssKv zdo-|g_i58wpNFQqNt1u__|&&%8~cQy9ALovo}IH>R++> zlx&Vl4k{nYNo_)rQxn2QLh5D(S~2f?{6$PAmD6SzMmX#rr$Uoi9(~clv&e z9->K5t)JH}&YezHoGzS6>f2Wf9{xBXINC-0vvmocW1(W=jVnu!Zmp=G_fmfY)Ig6y&;#RCsdW-)!Kj{BRJ z1_+ubZ2lzQdwSEDzdTm5h8W&Od?)X**aKU`IaoE6?51XjkvQnzHpDnj_*Pe+3}$}j zpuUo}_%FJ-AdRBkph(T%&qOfn{V#_b(DA_P(!MP7<74QdS&p#NTGuLdsoIH$&hopW zs^BV+(S?xFu|dHx`w&qfT}5TlGHJkZyL5j?=zaR*TI!PZgr6`bdk25IS7l1LC+keO zoe7xjY$FhKLAdV-SQb!fA-IaKb(#hKU*KyT+qwd~8m&)tl!U0clbaYr=w2p>apjA}wx5$Mh z-;&~3OM)=mzCdlLTV?N)%7DOpz4RAhTQGg1sw}?M<=v#HK#|nIldN})BG@&{J+rb( zJ@-ZXqIQAhQVT3C-a<{^(#M?Ggv`9|>XCkgNj$T>TNy{z$H292%d{@p?9{LztR*j5 zyr}d&@i%Md;5h+(J@Zi83>t#0xpt~57zOZDrY+-f2+^yU&&K@Q&QbL_|E?H^ozN}E z^e^)UiM*jNb;SK@B)%XpGDk6n9RnU3yDcT=b}e0F5p}}=U{r; z5&yamuHp<*^QvJOCjl|S&=-Gg-hz{YTs)&leN%k1bbuXw(hYr6RG@CCk8Y35d;B${ ze;A+Kvj9oWh#L%A^3o?kcVH*P1;t6QX8TmjiJaR1TYslhg9X>kGGwh;7>tB0qTVeP zAGqW&v+YOfAIm1x@h$SeB5DVjGu-WVB>BY124O}+uhv_2QSUqKzZX*yv6D1^B++>2pc>+ zV#L&XS5J?cpJeKZ5WpeIM9?Hbb8h4{dHb-n#l#o+q&fJPqmNhG?|t-=rkYY!rdDTLTse0_a`< zws(lGx=s3+7mx1lrJhH;15U(L$5nt9!t0gz*)nuN2#0U9=z3iPgI&)W@NNKW{?`q3 z|HC6NFzhj1hj0ZR@acO;a3(ltrI4!HYvF8S@_o^{&n!v#-G2>1U=7%2?HkktCKYG} z3-!RB`DIA=W8vdN78jtV1nYaUkm4V*tJVNRkb;s@jE^pYB^wZ~x;ioHkVnl6xA-1E z_E;S&h4W3=jec?I!Z{#7j;_{CiamN%R8UY)HEs!ppcB`9JZlq^Z>6PCVe|##s}L50 zbGp3WKuQ4O37{v465w$ErZF6DLf97Pd=i0>G#6Jxd=Z3Vv$Bps4+gXv5J-%0dY6x? zgHNWkU+^O@@1agK?>=_Atv{uNmKP7ruHC=om0H z5aq+A`l|@yq_VNKon=NWtswlCdiNi6&pJX%BdF;GUp#~FL%h`F!VFYnO9vAi>wm)eVRYz>zF3Z)#Yu+*7jd(OJ_{E9MnRb%_ueQDr0eqmt&KpuD^EJ9Tw)$8Qs1S)_#;cyZS zfjH1!=#rHKq6nvtFo59)n6Ah+6M1=J7Y}%VX^myvD2(9zQ(UWv4KODRcE{&b@p>}b8|3T%T#Cgz#9&`v$D{;qvo;8;2L9Yxb1dLbv!DWW$d`5tZWXl zAR1WLk+h~44VS7sZ%DhW1~?P*-g^W=oDn#{rZVPnUHyZt(#($Hk|rlLE~K&rveCFu zd-gO4&SvE!oR4;GJ>S;Wimr11{Xl^~Uzrw0nC6`vB&|o zKE57VlFX9&(qEbX*YUA%ozxNcC&0+5jBmulxNezAvU%z)%5YX8F@75~O<7ro-tf0A z2*=@ck=8g+EXV=M9B8|CcY&^#f@t_x_!R34Ewv{_ zYFhi~YI7`~4aR|o{T6k|rqMgQa=jRta!*4ZY9J3l=zx6EH2r|>OJ84~s;S=EOiP&C zrY{t1k3cbk?A%=T8$_8|z=c;96mSX%v<4Z1VabrQl?ny{WV4{)rW-wh0Rv(lt$c&Q zkl`UHmQ=K~ph^Qwg(7IfQHMF&?jQ1A(#}397UYfu@^~z3^`kN?dwM;uGE0Ea6%iX$q_2f#8k80+Cd7@7o%tZ60A z5OnK%_(g3!c!~jjFf@ew0I8V%Z~vM+lFfFuJz9ra2Uw_U6;vm9M9=v@v9?~m#IZIp zJWLtXw7{PFR}n-?x>?>d>j;EbVB_@G0q|3K`W3&n4uF8>p-u%w5CsMN^1svTFuQ0S z*h9`0f_#7__rI$IZHbzYk|PJZaqt6uFpfdgWUCx=eKm?zOI@P|eNt&RI05g)jf9j` zGlNH(@&SZ>p*(8k>Gz7(JuKWPla-D5VNZ-GU?8mvDtHvw_;S9Rt_n+k@dAtt2ocuc zBxQMN#g-sc8;XGdQiEYZRTWKk7k4vI2|l6>yq`InGt{Z-V&sAV1j`<*EGaQ59|wpG z*gY!aa{I~MqZ9QW45d^4*WBDy0Ei+O@n1Ip4N^S%e2YwJGmgH^#L?6=fQwI5G|%h2 zEgy}-IY`&{y4>)rF#tb-mlZ2e8w2yTE$x-z&%TwH$7FpiEh$mH&C{$6wF=4^iSZ2Rty- z4%*{9BQR=!dTf|_c#c9z3j*ac8$YbvyzjMRL}?K9ZEyVWO@XF`kq-={A?H73WocOt zI4&rkL_&^BHsVDgRc_;5*$7DUOv|UMaAt9eea+0Yglj*~Y_-*2Mx#<0!D#8}8TTL> zpjv=$vLuqF$fzL}>h{S3c#Zo=h#YSW$$`kFc=V?ofP#c_N9Pdg=kbW!K_pVO{F!|J za?6#FhxweHiGO~*{*jqR&{GOL>4)SW2oF&K%!GMR(<8{C_&fkuiI;Z=JQH;IY*~la z<>T^4uOR%izb`=2dLH4|ezgEWN=j}qNKVz?caL+4^|$=>-m7^2`@k_hNK8uY)lH@>$!w^GXu~15ZT= z?8>X+EZ1O;7dnZvPAXeJ6^96bKm=o3k-kyXZLDYbqO-10(Ff8LJ(mHnL-eK6v%aY) zDqH>j+gcls)+_wkn>mbyy}AYtVKgKYAZDQd%F_Ot@QMYul!~;B%z1ym$u*fy&*fW?7@?)6OwGzFixrh& z#q^sw6F1S-;+;^3wRof_ML#T8;mU1irH)E29fUb?w84qR7oYh%#9#T48}|o;xujH* zds*y({V40whFj(Ri81%r4=fg0(Fq9CCQ!mabz0o7u;B5WX%6WN1T#<7N~5XHT+=!{ zRQoFUq@5}pJVXv(fKi6lt$75vw><5KNbIBLl4TNQEjo>Tll)g&quEx}I5L@_b**Gc z+szFQwWDVtv4KTGZ)|Y8ek1xBV@bawuzf#&>YJOVH{t>=kOhWLY^=!^azJMh(Y%iz zxAhNBO--E~?E%SFhJ2con`>)l_or&DHic;wyfx5ieWDmGvlADp1Zvu*RL8~s(h9*j zihBS5Z3_bC7C_*qU~^;y{`LRZg7Tp%L@+|iWpFSRY(d@Kn>bq#1V;Ua6thEt8}7Zh z*W0U-H31<~V5gxcu;Qt|l!W={1rD?#)E(W-!OgOGZ7`SK-D&Nvg( zXfVDE8LUA_KMh*dxGYoTqPcl_Q)`rm22qCjR#n!^0dFO4=MS@X;MyT*LvX&J(bZiD zNoQ;2=jG&-K&`tTmyj^g#0u+`B;6GC8l)E(L?m;2Px=Ayj=XMhFBPclpr#Bu2@MV1 z-P*dkL@tW37F+|o`28Q+X<*FPZ1>!SO{-?!gT~HXSbbh8dKO%Yl^Z~*`LsY($*0Qg zP0S0G8>!9}s{R)3-`F~w4X4$ZK!sSd4>Opjukx^i9xUYqEdDZrmJSY33xW0&d;{|e z0Ju@z?T`l3)Bun-77a|b+n=9FEm>JvEJPx%FJJafJ3LoXQX`|(xPx6hX2JnqWu7*WUExiF_`0p$aoUR7hDHW{x6=h^I$CCoaI~F< z#((sIAb}~>*xuWNHJ*b&4)(tPldmu}KqnR@xBAl7e#$+p8ZwDxmm$4YJia=R4B8;D zw_3^5)6n#bXaJfD(v%RKHi(uK8U=XXbPti{;NpvmfucClEU(*EvdIUtJGt2t$@{P> zr*%nEZnfdNa``e;82b9el$TnjYd{a;Rv4UongZwq#Z=X?>9)ZU%Tn$PzrchC`FHls zQU^sd#gGwyct_Kxxa&OF@i! zQXm&o$D=MP^L)~cTbfErNbJs!2ERMZt{UEpVb=b;AEw;*hv^(^wMs`h|} zisu@XpS(adO1wNh9$O&W=dU@JNj25>1x{bwbq1l z(G7+y6hZI|m^^y#DK4YW6lsLBI}|E;ottd)DP^cyWLZf`O1hocLkT!AEkRw}Cr0Ro zp#i{9n6lskU}KFIhP-r2_hf<2jbheVZGDNAIj7Pg9ze2S;%%63p7`#N@#5&w*mgnC zXWFsA7-W=@hsS5PW8ASZI33|TFEvvc++S7|ZBe+v!?-yN#>NL>k72q;*VRdge?X3; zt1VqCO!qV8q2}k~gEeSa%XAJk0Ib1W5HHxZRGJd1$lo>QrwjKnDby)^{pm{CP&uuj#26dTJWPQ5F$&FoSsB<*VWSA<4wm-s-!I_QL9nct zTm$YI0Np4#uyH|zA4+BX25%Ci*fLp&I2cq->GS(KVmRQd0z`dur}`bee3|`Mw{Vx} z99*Jx+$HMK($05m{^H8=`_JjG+kJD@FyGnE-`dLSsTp5WTT&?)7KH5ld(jri{$sH& zjjgTEU=0KFw31TKUm=;Z0BxGfP=;s1>ft#k}uf}?{?XmW;5|j43zBQlb1+-Z||lanpV5Jw}4R0 zl=1fidrrq7d>7b*U~db`FSPdM<^1$vlVA_JL6q8W z3HBgvZnCfz)*PdW$w@I@-r21Ki6nShlLseVxAP%89Cu#nij9p8PG{k^eOag|#?4U% zw&Ohh{BF{9hE*lBS7qj~KGQ1S(8Lr&+C)!e6)n(;bv8U&h;0x(S2UUUre@7&ReQ}= zYhu9etIw@4(aMkC&nsAt?x}h|ttP!ZMfVSo+C0(NH-(>YJ3N1f8F0vzDNrA zF>K;CCE&Q}3zC1o=k)4j*q6oa`ofMg{4_wT4nP0%KmX?<{Le`EpU2_7C7o%%@ VJjK4imL38jE2a1}Pr~rk{{o%RTp9oX literal 0 HcmV?d00001 diff --git a/tests/ref_imgs/widgets/roller_3.png b/tests/ref_imgs/widgets/roller_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2863e17ec30abb92f967c9a49a948a71494ea224 GIT binary patch literal 33114 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 z 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 N$w?_m7D*Tf{XdZshqwR$ literal 0 HcmV?d00001 diff --git a/tests/src/test_cases/widgets/test_roller.c b/tests/src/test_cases/widgets/test_roller.c index 134efa602..8249c456d 100644 --- a/tests/src/test_cases/widgets/test_roller.c +++ b/tests/src/test_cases/widgets/test_roller.c @@ -246,4 +246,87 @@ void test_roller_with_overlay_and_bubble_events_enabled(void) // TEST_ASSERT_NOT_EQUAL(0, lv_roller_get_selected(roller_mouse)); //} +void test_roller_appearance(void) +{ + /* use a number, a symbol, a high letter, a low letter */ + const char * opts = + "0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg\n0@Tg"; + + lv_obj_add_flag(roller_mouse, LV_OBJ_FLAG_HIDDEN); + + lv_obj_t * rollers[10] = {roller, roller_infinite}; + uint32_t i = 2; + + /* a normal and infinite roller with the same size font for the main and selected parts */ + lv_obj_set_pos(roller, 20, 20); + lv_roller_set_options(roller, opts, LV_PART_MAIN); + lv_obj_set_pos(roller_infinite, 20, 200); + lv_roller_set_options(roller_infinite, opts, LV_ROLLER_MODE_INFINITE); + + /* a normal and infinite roller with slightly different size fonts for the main and selected parts */ + lv_obj_t * r = lv_roller_create(active_screen); + lv_obj_set_pos(r, 130, 20); + lv_roller_set_options(r, opts, LV_ROLLER_MODE_NORMAL); + lv_obj_set_style_text_font(r, &lv_font_montserrat_16, LV_PART_MAIN); + lv_obj_set_style_text_font(r, &lv_font_montserrat_24, LV_PART_SELECTED); + rollers[i++] = r; + r = lv_roller_create(active_screen); + lv_obj_set_pos(r, 130, 200); + lv_roller_set_options(r, opts, LV_ROLLER_MODE_INFINITE); + lv_obj_set_style_text_font(r, &lv_font_montserrat_16, LV_PART_MAIN); + lv_obj_set_style_text_font(r, &lv_font_montserrat_24, LV_PART_SELECTED); + rollers[i++] = r; + + /* same as previous pair but the fonts are swapped for the main and selected parts */ + r = lv_roller_create(active_screen); + lv_obj_set_pos(r, 270, 20); + lv_roller_set_options(r, opts, LV_ROLLER_MODE_NORMAL); + lv_obj_set_style_text_font(r, &lv_font_montserrat_24, LV_PART_MAIN); + lv_obj_set_style_text_font(r, &lv_font_montserrat_16, LV_PART_SELECTED); + rollers[i++] = r; + r = lv_roller_create(active_screen); + lv_obj_set_pos(r, 270, 200); + lv_roller_set_options(r, opts, LV_ROLLER_MODE_INFINITE); + lv_obj_set_style_text_font(r, &lv_font_montserrat_24, LV_PART_MAIN); + lv_obj_set_style_text_font(r, &lv_font_montserrat_16, LV_PART_SELECTED); + rollers[i++] = r; + + /* a normal and infinite roller with extremely different size fonts for the main and selected parts */ + r = lv_roller_create(active_screen); + lv_obj_set_pos(r, 410, 20); + lv_roller_set_options(r, opts, LV_ROLLER_MODE_NORMAL); + lv_obj_set_style_text_font(r, &lv_font_montserrat_8, LV_PART_MAIN); + lv_obj_set_style_text_font(r, &lv_font_montserrat_36, LV_PART_SELECTED); + rollers[i++] = r; + r = lv_roller_create(active_screen); + lv_obj_set_pos(r, 410, 200); + lv_roller_set_options(r, opts, LV_ROLLER_MODE_INFINITE); + lv_obj_set_style_text_font(r, &lv_font_montserrat_8, LV_PART_MAIN); + lv_obj_set_style_text_font(r, &lv_font_montserrat_36, LV_PART_SELECTED); + rollers[i++] = r; + + /* same as previous pair but the fonts are swapped for the main and selected parts */ + r = lv_roller_create(active_screen); + lv_obj_set_pos(r, 580, 20); + lv_roller_set_options(r, opts, LV_ROLLER_MODE_NORMAL); + lv_obj_set_style_text_font(r, &lv_font_montserrat_36, LV_PART_MAIN); + lv_obj_set_style_text_font(r, &lv_font_montserrat_8, LV_PART_SELECTED); + rollers[i++] = r; + r = lv_roller_create(active_screen); + lv_obj_set_pos(r, 580, 200); + lv_roller_set_options(r, opts, LV_ROLLER_MODE_INFINITE); + lv_obj_set_style_text_font(r, &lv_font_montserrat_36, LV_PART_MAIN); + lv_obj_set_style_text_font(r, &lv_font_montserrat_8, LV_PART_SELECTED); + rollers[i++] = r; + + TEST_ASSERT_EQUAL_SCREENSHOT("widgets/roller_2.png"); + + /* test that the selected label stays in sync with the main label for scrolling */ + for(i = 0; i < 10; i++) { + lv_roller_set_selected(rollers[i], lv_roller_get_option_count(rollers[i]) - 1, LV_ANIM_OFF); + } + + TEST_ASSERT_EQUAL_SCREENSHOT("widgets/roller_3.png"); +} + #endif