From d73e42011dd63da215300d2015363530d0a28faa Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Fri, 21 May 2021 10:58:28 +0200 Subject: [PATCH] feat make some structs private --- docs/misc/boxmodel.png | Bin 18940 -> 18948 bytes src/core/lv_event.c | 10 ++++++++++ src/core/lv_event.h | 12 ++---------- src/core/lv_group.c | 24 +++++++++++++++++++++++ src/core/lv_group.h | 38 ++++++++++++++----------------------- src/core/lv_indev.c | 28 +++++++++++++-------------- src/core/lv_indev_scroll.c | 24 +++++++++++------------ src/core/lv_indev_scroll.h | 4 ++-- src/draw/lv_draw_label.h | 2 +- src/draw/lv_img_decoder.c | 11 +++++++++++ src/draw/lv_img_decoder.h | 12 +----------- src/hal/lv_hal_disp.h | 2 +- src/hal/lv_hal_indev.h | 4 ++-- src/widgets/lv_arc.c | 2 +- 14 files changed, 95 insertions(+), 78 deletions(-) diff --git a/docs/misc/boxmodel.png b/docs/misc/boxmodel.png index bdd0133686324a330985297dc21461cb55e8ee45..0368fa99a620bf1bab8bab9cd9aace6db25e0d36 100644 GIT binary patch literal 18948 zcmb@uWmH{Fw8Uo@Ygb?4??+&y33-&Hz zS5JRVrg|ELbo{0XzwM`7F4hs+`AR7jjyyIAM2@ETrx*-OQf88BRrzrm33QNSyn+?- zM4kTPdm{1pzDy?(`w0Gk z!H11{e)S|&cz#6+(|~7Lf6MeV zOPB4E;}*{O`MGaE0L5?DnL1kv|Fq?UgNI_Aqr-*zor(MpmzS3@adE5L+ug&dys)sa zJ+y8Ud9ve$${&IRcypyQ(K#GGOG!yRvB<&TKZ?B`eZ_NMz36(SihzJ{y%xex`@{tK;RbY1}48bjRIMFgSad2Q6%a-VBZ}%LCXAX~uXusH-+8IuTlrL7(9nBD;L8JI*kWah~ zriyS34GpnbEWTtvKMRxT>~Nj!o(X|U2ue{lO2Pc5hL@MuNWHx|B^6a^Sy`GyGFN+h z`*yo%90RPpygY=8ii#vE6u;EV&d$#7#cGK`Sj?MyEb&aH{@K|i zgM)(+6!LF8;uwwTtT#m=a5Gn~GHHqkcd_TW$2BNz2H_>xq$I%x}vsFICMZm%m6A^)W|M0LgS4{&#dZP3GcCQ#6 z6LWQQGm8oy21et2d*rz#xiZ42$mez>5Fh4Sv*3y)vFc&jdOaBzMUi2S0#yyIZE+t&bn3hsf7gEMe{b4L65vqpam z?JPPwJG)$=Qb$L?hnuCRM`(}ucr0RKVw35Tui^&(;0x+|u{eg6{h4w$Sh;}rR1nYM zLL?G39&FLreV@PN{)A&}Y+Plw;2$220-nCYYyne3VkmlcXo&kMA(TK+I`2E#`Nc&n zi{+4-b#QbP2wkoE+PRxVU%(wd$?cRk>`w+)VHO!GT{$$j}wj zYXtNZ9Q=Bl9b``D%XJ?-H;s1RcWi!AN=iz>(X@CZA|c_~AN*XC^xboBY-Y-A(e(>0_?4}01Uw6TiV$@3feaHQ{gaR zidE6^OR3#nB7w%-pZ3vwFH%v|FS}n8ItJh~R5e&>JOxpa&QF7^{M*IV6&4;I^3T$e zy13Tg;b1bItKv@|Iqt%9e+C*+QPGNM7(5b%ot+&AXJ_lvb)ns<;^g83xgwR=a{Zyx z^%ATI;Rj%gZdqay_=b zgoK2W(o)UC`C39k!u7jHdDS|b6)+9XcPHT8-QAIqky+gCYX&_}y9x>mt;OizT0LP= zVi=9123@Gs)zzIYb~_4{t8Id3CMM8$d3p5)6Z`-a_4M?-f`$eNiHD4Wg7I17k4OjC z^U%k#+fxH*1^`#0(eg5iN?G7!wPR;IH=L=+e5uLP+q(=bNAn8{mbSLKoq-rM55~gy zeDBiX@Zo|C$Fg!g;Bo+p3{*7$P@dfY*w9lo-`6JsHIBn>XV3@0WC9?S(UkLjv3Mez z5tv{TuMsh~P1@Sq`AE!$Q@(*@zjTsIIZUgK?hcpazC7h!{rcv>>M;IXZpc1z|N5g@KNKd{}?9X&etA1)JL~L9NkA)66W` z%L@v`uFlir1MB0i8JI)kxiZiM1nDoin{Ljw=#3{SF&T{j_&_~_eW6n15Z7H`zz3Ss zNoDh$c8ORzuZ_NFnR+|Zz@VVg%F2zlx7_R3Cu`e#d!W5)&yz5XKOpCOF0z1tz<7~r zJP3oxufJZuumHF#5R5H!wmA?>tL<&a>FVmrWH$fp`*+lb+l%mUMPKHGwD+6P(XjaK z6wl+qb-fJv2Ak#g8V#%$(kg#9%)d)z8l-gIM0JM;1i%9@90jS(PQItZ3%Z{~YB`W7 z;9dB0cJob;*z|!gsC_Cih;K08b*Wc9Y-g!Oh?SILq{JCP+sX^M6;%s*&P48AbDD38oRZd>t|3 zpS+CJCCPPtu)HVIX^YN5VuEUn9-@3zvWiK#v5542roRnVF4@U(9|Soel~BRlKb!sahY!)%?EYH|G3K$(iVXr4QJttfsE0HW z0U@Psu8T|PXU^#(^S6Boq^|`e8$OM@y*+%zTk+*lE$_YRxX2>X2fxu(?FdX9NxY7fB(=BI)Owk88+&OCPo!JxB%EmX zcByLIFD#`rG+yZ%r7>9XmQp7lu{~KLU!Gs$38dXR^0so8kOrN~*`xZrSG2^~$yt=a zXF|=qqeR`alBlx0`IvAGdr^qH&A3km8%3&vGqkkSu9h(d!Yed{@Dl+Qg(J*#G~-X1 zs>yI>5AE2?0N6@)MDUxAJe&1XO+=(n|#f?3f+(YDQqWb1`COq!D+eJGuS}L%Jh8 z?o7^kYtF0pdYikEdndVj^mAH8tMI@|3m?xG=vIo7-@7EBh)PySxDPKYjZAfPEz>=`&v0MLcz#!eM8rDO{P6)Z(Vl$wF zxESUcX67;Ee#tMPj!Y?4!y%qUSc=T!>n`O&X|#@J+Iq}VDtQqkxrlp5Xi26B#TLZB zz(G!N;=t6BH~A*>kp4`ccPJGzHqGY#zQ`h!33`uB@cuOag?I%?$blF125vZ zr9cqk0On0^|FD>XRUZA-I9#PPN<^IbuOLpHjJCut-sYTe;;WqJKJFHZkd91A=G*fPHH{cMCv}@*g2?cV&e+CEQHbCvz7fnJ zmb19nrhh?mJy)k6mb0brY_wQx9TxjIwA-JH<1f$0IQ-?b&AlqsITgvBdGF|MB_|f6 z_@EY_;JMJ``%0vOk(-k%L@Ge6cvhyxD}{2n7pRr%_x9r@am?IqpxQ=n1K~X4S24dS zj1FmSUa7D($pMq3cBQDVViI3>8X@?PCW2CPu39BW!=)I}%4q_Q1#?I5W9ga;-c@Fs z_2*>~rr|2R!nDr0pzfU+$l0n+W7sEvjdI|vw2xrAj_>;|=1^!8?v0e@5$R@39kd^? zRd?S%;LIn{=Zq`$bpcw0M5_CnkEe6aW4&Y;Zc5yH!J%$K<5X9Ih=Ar)+yv+W?pOJs z7G%mB8dCIAaHDabVf<3N?&V~`#ej8g-)akaaqVw%l_ZU={OjoTIOG!V0<|K_-o<%2 zb%)oJ*X=TslPS0B&K3TcJ%NAIyJ^O5;b1!Hl|kL{u{|k>j-s!Zkv|{5R8k@ao0b*H zfB=ksn}!*i8d3C^K_yY(d5s=%MUonkFQ&IIR#O65X<{0Y?UqOeYI$=FD#7JjUdi<0^v4s(^OztltrMlh zayn=c-Qb6`x zQmg>P6{n2Anoa!U{!i6_H0NO@vJ z-(AxSu2=08dqmW~a~O~k}Wo%uMfRh8q< zl_%?HaK#;AWLiFZ{ETy$<6*&y)ltJ$>a-D;1o%7nyQR9t3$+uTDi>ulQ$&TzpFnvS^IwaS=qCDmfS!^u1a|l$qQ=fXm zMLn;L$;%Dl__3l~P84s(Y%Bgflf8n|hCgYQ`Y?6x0(5D$*{ZE|CTr{>$fZOvzyCuJ znfrUTGq}(!c3!QT@(|$C>FTVY3)`C=ecQYcdfMT-PI%jOgRF|$4sB=H(~Mc*G~5X66zspM-$6eXs$5av|;TYu-8Wz0!M?4eiGkw zPiXWjN>{4!=pKC53<43SD@vgKUZB+2ZPU*(mv7AuIQJ{=5FnC2r)R#*{JF>-*Slly zE6nvItc2O3i3dk76Ejyt-uicBUCSYl~b4I*qF3(`wtktnY>MO+h%pJIM#vLvr|dyoD-ofq7C0oj4B!F@dfcW$cXJ7LC*2d(v|#J7FC$ZT^-&St$-c<1 zbJ~O4u4ASl2bvfYa`NEV+00b}Z)p@!-_qcTATF-l!pWQ!bZ~{`&Q5H_cB8kJczG?d zi@ZJ-1yiEnP|Ghe_~70iD$m~_u2A3mr&(|Q;A?W*ExNtJ zBOb{cQffVFH|(q0ZxWUKMrmjmYmih&e)*}?QL+938OzN%Oj5PcGUPG&D8od^dX}NI zud=AnS*@WcJ2O+)g8q|n23(49m(i@Q{(afu;=)-XCfnY$Li}h}DGmrY6rA`kLRjTn zljSaJj#USZX|6aHRNijs_P@j822*ftX+ICIP2DWyY&9TPOU>O_&uM_3d8HDhd4B#- zVWRM(Sg;~2ToLAZ#kiMG(?*FYZ}n-*HcO*rN>S3qI=?vIUZ^D&bbIiKq1Se>(8Ru* zJWsdcH`b%MT9LXB4~+)_1k;Qnc&B%%GS3(x7~QnqU5p3*cS~jbmCdeG=yZe0B3k#) z9&_uhp^yQ>Iq`vp~;C-ej@6F!MwfctRETrI!%(Q$2vMaHJy}swkoYX)+_f6 zeX)y)#zxwoKHW#JHR+yRi1XYr~-|Vz8Qj9$!wjm^A#aR-ONUFTNOU+kM zG?>2Crb)<)Z0{fUoeVlSR+*<)Zlpnuj~?PSYVH0SL?)YtF83aj_)%SiT(+c@hExgb zY_26=LD^{fmY2pzejqPjx6R*ydiN$|j)smn3I0cD#(m;G1R-&@rbdcSYN}h6gA59< zsi+%*U13)Z{s1YsVHJ~J;A0MK+a2TbW1CKJGVECAg+n$Qc(2iOTW*70^TWfKw%~En z3r?46gYW|n#PiI53e5GxugssND=>HE+Le`1Zql3MmvemddYUl6*wu)yX?2>iRHWyp}q-{uFghAFtQe zQP@bJX;*6E{%9*UpYR!l(dpUMilg18QaCGzE!A#0e4~E;N}*JtZRu1A6L$ zzz{_ zDN@*9icErBB4ND7YF zHMA>IsA?&8QcY9;u9&I>jt_(5{9Ws>{^0f2&!Qv2K!nY^-x+@e`SIR~%Q0`O_c5R#7_n9L~b zn?}Lp&^aMtas4mM*)CJ{U}5W5b@bn!ex;>_qHug>81>-v##kh1aAQO>-0mIbiO0oR z9l%!+r$+f-7$V{p=QcSBe|UTgnpEPx__n5Zu}{P{&iiC>x=)hXTNhqtwmS<7A9uT)wJ@bwzOPt{Cf0WuFn_nS*9}!xpxOu`=iETplFDUG>T zYAP=H$js+vtY1z#oD`?R$EqMs1j}zXV%hS7>^Ldl5wSklknEaq{33Da@uT$oA~o?L zc9mRBo|>B4!BO|uNU4#2_St+207wC8r^>rpeki2=t<$C2)t}^Jvkt+&CMwfDuBr3a$Q88d50{TB2C=n`6E{Y_?)vOAdnwm9rby|jo zevy%AfP5z=C-(BxeDMt+psWDoP+64H<$Aieex^}@t~oq4rN7$l2V?;ZZf@=!i_A4N z9yMiHEEUDm6{2a>iOI-dd3oDZsxeSdeias)2KSlG*L>ZZ zEG#W4873>1&3~UM5TlEOpfuWvMM#t)ng7vW$Tx>{ zgam<6oPR%WhYwV#p^aKqw|+74vochE$3n9gE0v>Sb2CnbHqN?<4O7C*jwNMC=H2>< zZBy%rNX2NieAf|qviZ`P!e|E^*$I!4H0oSa7ZkF2?K9>2egOevWN#4=K<}PzED<&q zRFeU2TGGCOzm^N%(`C}@_p3c3*W(uGXQIDQnHezdnN(M2XWEzhGYGgGEJGJSoM{E2 zxILEr_Q#JOgv7+FYiqp8T&|BJZi>pvkf^s^yA654l58sY>*dtXj}cm`-E|5^<802n zd8EP7`he!m-gs^shy)w6=HKDP&5v=X8-3;WM{0oE_j(=-rHU^S5+UTWdF!mz6f_63 zm4NE^1fl%(5a0?DNF*+9XMnl{f+Pb_-$0z!($xIg=yVZ;!wbv>f4u+}_V!y_$?k*J zs`T{q!Fb%_A-J5MnVGvrN0EX4dU>=YAu5Uhv?!WJbu4DH4Dg)j7#KbAgy87!wfA-1Y(1U>s8(mV98RxWgMnT4d9>OTb*utq8*WcmvR9w%H` z${!F!UQ=q0PfCqDH!o7K9zLaspIFh+%Us>@Ov+UXXfYrG-k||qN#+ewwSRAaG zU`~SNj^B6)$%f#4pH`=h*;aRf4!5tqHTWbdV= zlx0jbL-yj`#Wq(h`}-;hGq=6+5uZrBVx5931zZ8HcH`g=w9Hy1mDQPh?L`a+3#cBZ zOD1j3!ORfw&Q#+?OKI-#T#7e-Oc?X^7Buc=x8d8r4FW}jau(~@IGcBbW_ER-BG~{L z7~9ja@PV~#7bf)suTV|$7ek-XiiZp;9B56CK(xVOk;2O**WZ?PDxjKTp>B_)rqO7!h4dd)9kkjc93QF{mUJt z-jY`-wb$Xe0r!ef3Ev?mlS%jG!CWSO#+j=j7?Bq#SN)4@J+f-Zc*Jz+3kYdH(<^k} znsG08O9;ZSp#EVdX>J+s{jQ%Fz9(U2G!{M=%BL2fbK}!jO0La+Avck%tnZ}6wq$>k zl(P0!qE~v1_36%$8n3p0T|1mirc(6BWNiE}d@AK`72-Uc8P?B&7bKViT>FfV#6q6?J{z% z0IxjhH$A??z-8JH<-%R*joC%!(!3kP;RHIbHt!oM?)J;vIo8v$cX`#ln5DT2*;+*? zgKw!hzYU*!+-;EYF$=GgsuEC?UX?kXS^t$?Pohk0uDQM$3Z{HWN+`l+TKHy09NVoxX#3V>h#<#y0yw|EN^MY{4)5l?W<^Rs8D{VK#NZ za0MForzv$2fw}qEnn?4fkloUp&zY!$NYlvBKgsQpJ88>}+b7iTT{?%LRIR3N;6PyR zcnUHBb4YvlxUY3{a$nWp9KmAN*pqE*Sp-p*Tvkn>eaqxxl=6$}Q`xQL_{a9L3L=8) zzzpeM!szjs+ESxG?FE}e=&SXv@s3I83Ch3h^#`ePvU90kkxeMcrN@ZTic*T^ETl4- zmCt_@6W-{Y!J3&ge9$yr#Ck|#s&yLCc8X4!NkJ)wsnVq0*?ZsGAuSU_K1*TQx5@cPYyIHQ@mE!P=tIk_gjhi zXP^ypP?Q@5F<`MK!mC|#NBAWHaX z1uYLM+Otk7v=tBPP1wh^+8Se0&ZWYZki9{=%Q=#(JEyuc*U9+Fo2X*hr1J=yqK6x; zx7D%^rO-iJEX^V>PHz%U?m2#Qa56T6jvPq3aaLe7L7Ng+?Tgy}GO2T~zhU#X^aE>F zbZ&XKJL@p|>i0szW|yf*VYGtjZL}0sxuObIh$-G9edQy-<0)>rVZiTv<`0!36fB`u zZ|VnAe5Ov8D1+t&u7#UP3(^w-`zFMC#`V+CJ_qr0oz_Lzo49Q=V{?%j zb(XgTc)NjGoPkc?rZYbaPe%@8H1^t$W<^&HmPg-02(w2K6XAQAKQv8n{ciZUE~{@A z{OE!j5cVEHnI56O&MrnFCMCPL3+f1dhB$3&gFiSoWtY+)ERfP;biNXz6H$y-q)SS+p`cqHI#>Tz*#T~2#QRO)Q} zfYB%|J^kipD|xBrPWeF@Oq43uXj`qN_QC3jKXMU;YEei_NLkgfgRuwtz5#v&oK%U< z)raqF=zI~inM*GA3TJJ1>&HnL$s#+<0%{!}iOKxP<{K=+J6zv~$HfS{M&Hs@(u4>) zzI=iqB%DC>+t1I> ze-jrUq<0(7k)l*6`8X7Fd~A^=ksR#j2Wvc8kSY>Q&Bw?0*<||j8yvRw459Gj5G?>9(?%~X3dr&8N`3B0OrD3a-*a0*Zbi$;sJl>SJG9Vw zd$9)!z+cdB%WQU}v9Ym1;l#qqT51@6h%@xxZFd`$HI{}tqAx*%e$^$)YpChJkux92 zG#pBvX*v=vN;C%q`!l_%w5N>CPPuZN8*i?&rCcU0)O2#=-DG{cI^F+HhC=2X@q$dP ziDg1rUjNVii}Sci5iD~6?{}K^vxtU1vWgU7?I{84@Lb3o-A;%Q%|kyAz)bIA9Pyjk zjS+V}t+F4fFOrY06WpxtG_Rs?1c(I;`We6H$h_FH9CT?|U3*zf&%8il-*qFRZ$dt; zp`r67)<_q<#^7Tj*WS6-5{vqB3|!ve)XY3AP7G@m4q{@jhFU)i0f8&_LBN^e(`%J; z++O8M;k|YVjF~uH+#{L3k@w)NFe=idp`q^4rYXghRtJklk)4dOw&p_Fk4D2>YI5YKQMJ(>#_iVBKdOdq+{9>0VGCwYKg?aJ;%^I3lI3DdM^d1qyIh3VkXCl%!?e;0o*2Y$daJRXsA zCtQVasl3P2zV4rM>||l@b0$^8sTFHm>ggX#SC`2W)x0`fxCdA?d+O^8W7>L2DJUoi z3NKy<2M6$I+W)c-B4D#1adL7pnN0twv0Ou^*9&B7DJw76ezqR&&xAic9J${ETWL*g zt)`Y%t2bhC7xr6aEP7%D^A^t)s?)|n$?97K+k6_5Ou$4;&0@L6zXoO@6;)MM;GE3M z1J=YKVD+>;*o0Bd)!;v(o$H&J4wZ=F&H1h6PV4(#SoUDVRlhY`$ zm_nGCngUT$NRp!UU6XLnd}F%2M7 zAg=H3`r--x){su8S65pj>4FiIiqguHIZ^}=z%H7Ff`x_E2ae_{lxj6?s=vSnM#!nM z-bjkQi2B-EsWd)Vz5bXMKNONOv8E4y862-(Kmx^bxw3trQG2xvTy`c4b!Z==3!Gnb zKGJyP=TiWKSbqX53V@KX@Nn2SZve7#fx?*%)Qryr?1jzUfF)Wwd;dh6 z2b00z&rG@ETl^q@e=QIZtif=MX7e#8YhA|b@&yW^pyj8)1vd;#e2EIs(9pmZ9Ch>n zXbLQKw;LkxlPP}F;CNQyUaVBBA*E? zxO8TxSH_DCj^F{qf!|I8IN)+~$pDd~4V-=;fY_ApL7An{jpy_R7n=j4_5X`_xIQ%k z{AVX&z{cv4m&dx;qspefW$D1es*L=@Ht&URR>Iuo2rYr|}89 zri%pmRVE{LcQdTO&gm~~OZtRd-`3Bg#;(oIHb7OAL7XMs+Vm>OnK5fjKXDj!%s?Bk zAt!T3T_@_n)@So#t6Hli)W%{LOcOgCRrEv@k^NN<+Qz|_8a*#Q6$@x-8S*UH?~NKO z(NKygHkD}y1_WzgH7uyiTZe+`Q$`G&_VA3}JVIBAF1Cis z3flCV-7Kv}JyD4}C+VGz^q|LMKw3Nu?NM%*ej#CEBa8#3vrF|g-A*@Q?*wJG>g8Q^ zbGi2Hn}a<;+7On~!&e|(*6#Hq0~zG~URN|~bbH0*m@i_$L{uhG_B(X6Z_9W;Tq@29 zl-?St=3FZ3VC*Y}Sn|dhs)qnAu0`|e2IyHpi%Xa3D`ef`U4^nw@DFlGD0`B9UD-W0!PnvXHL!O3fNrx`%Z|1-JsYI7^-}{t!v?N+6 zYRH^{vvw7%|F!#N6d%pD26D^GST_>d69}n6yTFq?@YoUH;A#$1Gc4 z*OG#Sf+aSWM@d4A{TtExj>_G-Kt`3l$EDlRh}M6ZEEZJ7=v#-|ap+jD-gA<8cYs~0 zS^C{b!HzV<9js*nd{gd~V7nqY+9mTQj`FSsFKNe&8i{Tm4HK zTy|&l4h$4EMEx6O@3}C`3u@(c^CEi~i9uT5y%)NFJ`MXvncCbidV$3m(!+ZJbGJaI zKMQ?ANp@|q(7BzzYopH871Gta5XZYIl}iMgdV*N^-H&(oY=`oBOvS?TS4Bgd!E8s9 zEnrwub$wv!Q3afg*eq!+K}!B1L<@Ike~EixOFulrHht=yHG%i}xXq`R1PV+Bv37hV zDZ$00?Az7^V7WmnsMNI#kp_tH3wbijA<(c7DCeT8HlkeZ&j#0wGb$B2db*j51!|K6 zQ^UtF;}My1k+OCQ%FutMdpWr0EBjOq{r;?*x*-Opw;l zJ*SQBk?>G1C%jEE9{bfCtJBc-z)viA1@yY#P33oKphU|$iLdDS{uNtYs_OqBDIq*tcT*q$j0}~Z zaUP4f&obw?t4F8Dl&-(RiIYzgLt!`U#tzGmOfFal#1Zj+yho_ti1m~s`o-^(0L_fd z3{3+Qm@h`s?JUe9`;t;=$HG-{V=bIA#b^K7W z{!egm&MuI%fS#>&zt79IaYk&%qn&VpTL`>Co2oxtE)3yknfu~Cm1qg*11nJ0Q%oYr zjDH4I=DL*dhk|NjHPW^zGrm9jd-zRYtffaF0%O;peXGU7U^Neh$Zg1s(EbCTVRtqN z`LbzKS~uwXYpbj1?*+=VT{WAo@n_bnLzE$^gA7ZC4BL|)pjaxs$sb^Y6#_GB$8d*r z^2}!Rl*3j3s-r55YDz*q`+&qW_eh$1smn%l3Q7)9nZHMvDAq~~u1`C<{G-l`#;l9g z{owNZ>7y=p-DKm+;>f}Rz4|zh!-gt%Cl~&iW48-MmK)RkK4qYb3Q`FwGxZ;J0#nM1 z8f2H~(6P&r0yoF3V54-^pc}9q!9km6iLOd@K^9#Y7Uc`wZ0xO zV8)!e-t4#66|hS1y5r{IpwZFMt~L%Wt##I7CCs>aPb-&BM^uvyySlx5TEF(Md-n^I zUQ2QfJ6g6_`sb^s=hQ*2nZxiaO6CjxPy)_h4!Viv-JwsRRx>!woNX076Jv=-LPKwX zHK(uiEOMP(#O50V0Ji0p185i9<$M<+d5OOMenNmX5!a}uikaSu1m61gNfUlSAweYD z4oDq+AG*>qI;^V`!Ab?@B$-?qI%m^POQp=zG^@6L(-qZ<8c$K*ci9O)vK-gf0P%ho zQXYqVfiR(%c|Uyu`%e;s%7d@Zdu*`x!UI%+!t4=)jCOq)R1QNI#Pi$<5uT`Ft6?y# zD6L^HL~8IXlL2-cXk%R%c!J5kXx(tKuqmQsg*k#hLV2SBn=6#da5TrEepkKeZVZ-9 z-R<4f8kZfObljlhq=SLTHTly@H!n6c2!)doIJ2Z?A#f?+ddl=4aR(1Ld{R3l*?%;q zTw*L=&#vvqHv80Uvw$I;Zg${yFSv)KH>S_4%#qXRBJp%6?6UBTu6C*L@3a2Bcx5R1AJeOtC_dc6;YS`XR{lGXLj)^72ezO{*x%B*3CR-_3 zR>or?lHx)BvQj_s0Ti&~Ch?5!J8gJegzKU(ecVce=VN1JdNPzlrVaF`IO3*k9TVa5 zfNwCW+E8uU{aKo8`QzYB`=Wll%Q}rD35C;Pdz z@>JTX=YkjjYX#nH(oWM@X@2%ye!m$?J*~mXN05;C{0M!qNz`vhn*wzRy+B*pdl#*0 z|MRe9B><6y!7^oT-E7th6!G3qbO|*%EOLnI7xS*vQl+oPT(if_zOe&htn<$_gcvR2 z8!;U8Dn0bUwFG#R6iQ2f0=aW>>6_mqk6#lPmtUsOI60%k0 zP~x%SC#B|ukTCmx8tCYNqAA{Q9zD4nbZ!Kj5l%2i*p5;zgP&$Bfhf+usB$9h!gO15 zx)vFDfg2Ath49<`GJ}4ykHl+=vd62wMsL$!9Hj4@QC#Fb+5In@MZDrgtv>KHgvMQ& zKJqj(0axXRzfR@i_-G9!|Jn>z{>o)XL1_O)E}M|6?_cX$bK!i-xwP$X|__S}<*c3)F@zN)~c+V7da?3E#@INCSL=*Lowg z5OsD1S*muOM@$f$OS!4#!N5UdiaGbrjU;$`+S6s?+1~hQ-m3=Gz3{lWuOLUh4O(mg zR@@h#|2iB$GYq$xj@tq2(hHax%(m^FJHwfhm+Bz~MCLL7`ga!&|2GE11;0LdSN2P2 zT4xvN!+X}aoUvqjko2Bkpmp}Mq=;qh_bQg|Du19>_0!ug_yv4#E1G572GNp0X#nw?7L zHsZ0Ec6C#+k6P1j-5xKagWz1u9XxhJR499-{P2s#S@!5N}4WqW^>~jH2=<%;!gy z_{T@brCNu~KYic>ajhPNPe35ENczuqN8c$4y)0oPrPn8ZxwB;g;<_)UtB%UVO+Z!> zeCsWp8VCjSw$sXoUtG*qRQW0^J=n#7m#zt#{R(R=!_ir>0n~!5N6r`OF!*Zv&;IpK zCanp)3US63AVxRftCiS1?;rml>SC+vM<0f{YpV7fh8O8zd? z5+S}KK4aYmU|g?#V}A9$7qE^3|J1LSCf5tey3I*#v(miz0%(<%ZHA8Vir{+&B%i+* zfcW4O!|DrYw;hQ)y~yi5D^&WZgcRO0VYWNszW@Oj)E)B*P}d#pM^D{V{S7hi&gR(- z)#WLTd)kMT=xj%5=LJls{0g=73+W9X9P4cJI3cHm38c3@|7Qf)P8;b~(c#^i7nD)nfZh%7Z zuI|2K<6YRLA1{35E^=;9=?p|4XX(>ur`7cQKidXrBy2`jorz2C<+$dKk)b@49FB#}Y&INs zMq(;ND;t{A&{#jg65138D)jwmgjm7nFr+HtE9a6$hF331m7s2(#9IprJTEvPC8!T8 zlc3&=Tv(Y6+B`LldBJBzy|32Bf>Ce~G+S&?v>N%S^5V~9aWocIR*#UOnRu@r5j`1p zR9t-Kpm=Vb)6-Xdy-o&>eTL5({vB`JG?dhtAC7r%Eal|lnjUWre7Le;Lb~~XSwKOU z+cl~v(Jj;w1%ig5dD)u;%QMWI8asMk9k-~WsArnv8*Er*IbUT&qGiu2$*3oPSEpem(WM(5 z%N{M)7r#1;EmCLpY7-()A^Bpq zprBY{;`_6!qYrl-Ygvzvr<$4bm<7#GOb@sDV;uom6S9U{JW6U&Mn)NjW;^RWqgTBf zqVA7mViI>`LmHAs2ET7_GYrlTyfOyXdi657AAifqXKHud*Q{DTHJ&<-9n49yQK>d6 zv3c{go*$>m*jMLPUoAtkynGJ<;T)5A5t1z)>7D;_D?vP&X`nwwPyfRFkCS?skfB}{ z%bwyk9Ne6u4xmMM}Y*=-81 z?dqBpPV#WRdtPyVU3$J9IzGGG_FXJ!Y^FR5`fUO(H&Y^;E++0}*T@nL)Jq@j+fWZE zh(EYYOd0&^-&h8Q z;^X37okar1y72BUJNU;&!;;|&b6Giz>;LJX)U;Ngf`ykpgoVX>ODU&Zk@*!9PDMr8YV)9uOAV)Jj>Zd!5+4Q8xa6z7FlyDZGWZ%nL86}A z%uMuGa5CO~eQrTAUzv=R6v+|=C_QPN1zB5*fogRzVJ4GYtj;K$Ee58r?8GIc$D_>B^Ln%Inw(T4;^a!roZl83QMIT8#2G={eo(!9Pg`H1Vd^~Vo zqKJqcZp}}J`SKrVgvG?%a3kti_io`%CyrZ{ z@@vemUVOMc*<FQK&@g>jF?%RtP0gIo7it&GMtyy$v<^K3Cx4*ytJ!e#S zU}ExQd$ER$zd=TqTdnKsH#hIb-@mT@_1mxOY|a0^UR<&MUF^O!n?!f`+kH&blKFOA zqI1T%xu2^OJcHC8f8T9YcPC#qFd*_JuoT#`P3`Zu+Yf(47Nw>A@nU4)2*2$t`v36P zw>S1ou3o71bzyRs07HXs;;K6$iXV2(P+|eDSOlgn2AP~S2bmZcDo%sa8UrXPFo3cJ x0}If9q;Wxo9+FTi`AJ?Ee4*acL<;OXk;vd$@?2>^}r45JCs)uhE}Bp`nsfvB8V*juO%z;5T7kqae_ukxeFmmk7+1 z)Eq@^tgMWz9l?)KP@?umdX7eh?_JCsP2Y=4NXr>A7{Nn9y@!$z6IODaKUi{eMV@`? zJiRt-lQ2ZDiV21hmiuz(QTyRQiY{;Z-QlrCkwU1-7vXV@FBa4v-byKn9M*jd$rF3? z_DcXAi5S}4_OnvvT^?nDr4YXJ<@nC$=dwP6O82{JveONeJYLUkX92I=hv{?v2 zrXFlYN%jJK@2|^)|G&I~09H9+(^F%>f^n&>Di%t72#mA2y z?;jz@?h7acJORg!N4^}!dz)w4t*Voqt&WH1A>gv#Ac~V$P%JkK+!3@-0`uAe`D^7Qu0Y7+FOW4zs&uXFG%dLGJ2WPxMmdMk~tI1&- zrMMUk14FFC`@!}8hWYzD`iU*%*RKucYt0gqlB&!mDbo4eet{u1U1{f6t7^#`{C{_0YO=e325eGcM={76%`fZgRnftvfDO6+qqVYGktk^d17+1Le58I4$D7L z1^bp0xrocl%Z|Gffv+%WpyXVPIf(VAbH@;M_&6eG-zBB|(JDwYss| z+1c^AUm)1n*eotBNk~f%UpJMj*986ahj-W({T7*~~;zIIKQNOB)?8x6L0uK0Z#BeZev?Sl5hvxZTchfLvM4H`t5@zQziUjNCr? z`QIbS+Otx^~I?c2Axd3k>~Hv@}{ z>Auv{jm|=98$QWn6f2kXoUZq(gVo^$xtiWWL`8+~oSRd(@xj8vdhcM$)Zv!V+uQqX zuEqrY?OS0bC5-c};op6I!Bqym=I2~oT$T2lk|P;{qfd|5f>3Y;O+ znwmIdz0UL$>WDePa%Z-~X9nF(UV^XcI_44+$pl1UPTm^1ddS>*+r z>wxU?_AP{wJwqA-Q9%2S#h7nCU3>$9u!09nBbNCm5eJi?>GC6|r>FT`D(%md)$wb7 zLm~JzHWtO8)qJ1B^13?L|6|U$lp;o6=b&g~Q`71BsNnj>MlP%R<1X2a#ccWRAvzk` zi_AlMaJOHMdsEb4IU{$1o^DdSdrtgf@{{?}cx<@H9Z!$E&utG4edZOrVe6EXlKMS5 z8VMGuB1kQK1hf79A(I8N=O=$f(=IwYh1x!FAtSM*1YBHPV0k})q{!2z8;;BVLKi$H z&#k_`K9}bWQyi^o&+@XsidzO{OWa;YJ~ub_Zmx&ByF#%Nb-rxI2#A=QweO4@AOGW7 zYRwc!Qn~#zGKi#8IHu=776?j9BXHOnA_gC$`#MgC^KpOvsJUMs4TC;NeEPJyGoHhP zK9EseS2xVuM}>q=DPy=bl*DshCzHnW0jw90AtOfEuR*FZFfagl$FHG*6J(r#prDBg z9YHj7bR0HQIlnW3Q4scttR^V(^73Nh;;cT8p79J?lKnr(?Oa@DxAs>$1i_-$Uut&x zoXi#?;C093b$9XNDOmwQeyC6+m}GswqC*85Q?BD~kGAb_sl{d1`suJ?<)R*PcUSDY zx4xbuEhQl#Ppev9x^%po!Q-@72r``_9-C>V0}?AMYnrEM5R$yIvhr-XR>_OKb}z`q zfYnNS+urKx$>Kg9i(&Ax8{dP0kx^bczlRFt6G%fzR@x>eChYX|Wu0y{=NEVGmwR!C zb}ALxWy27#R*HRj%qGaJG&D4lK_i(eg>u5-k&y{0>cOh17rKb@0elOzmk0MH9R)Zz zIHy}FHe0)iAj9MHyT>lKc^H_Pg~Y{Swz*&GgF&2o+_MJT=2Vd)JUV)eNJqQd`4+Ro z)@NLH^8oO!{QP{S5|!{sfxF=I?a}jji;CS1&_x=M+H$}y2zCQ~8=Fzy;mKXPp@G`a{z9i#7Py}SqpCW{!=MoJcFhT=b(38Qm2rwo8Raf1681}>ek9w>-$ z=+_tluBUpsc68M(IuqN^%V1nswvf5y2Vv)p*)r5NkNyd%%@w2F0K zk}Dl(MRUrd=+1d;BCv)N5ln*Zgk5`OdcE#KzjR%IDiVST$^9nR9MCNr?O0J z7+Y+wJk?Kl`3BjK(yns%{w2NRg#zgEFCOFw#f@i#HDLz0i5hEFt$R8?p{g*)C+PeV z`?%HK<~V^9FGIr^M;$;lp`pZKIF`wxR5HWW3wFiLj)x(JF@+@_gRzanA)kUgAx)U# zC-Yd3g!dOPQ@fh2FH2WC#6vnF%~fIZc6BQ&UiF{aUNR+qI*x-;tME0!gF{7)w8RVD zrXOl>RB-bYum3TCA%bzp82de<(pu|i1^c{t%v9#k$Qgqaok|_YyaV={L0F^On(2%T z<#Ncl(Fr%5?**$x;UZL?9uWrXeyJz1`0ALxs|8xuig?>9yxm)>;T2IktBg4dM|*-r zZd59{DhA0Kml{;x35EBzlzVjsZ?F(QQplB4NRrB8EQGo-ur3&^v<0Bygqa(MPq?v! znuT;^hx|CvKwWAbC47>HG0!9-Mo*UY!cbm#?6vjKG z%GOBG{04T1nUq$@t$8%gpNjLbk59!|a?6u)g;5?&znW$F=H=zMR^KQ1-zKA!$d?UC zRBsb%BBFo5HOS;FBY!>8rsBX%|6&|5i|332D`)OJ#e0o^-PB67xm8rUF4+3AgHc3U z_CwJ!T=y8le7MLG5A@~gi=C}NeZ#MJ?~yLMaH$jt^1Le&j+UdK_AwF5U!4tq1|UFy z+?LXORc1+SaAM3HMsjXX-LLzWfXXhqFt0e9%?HbpR>YF4_=zTVM{deNfXWA%-56Ge zGV4^x*4j^B@3l}*|0NY7bK#~%78?$diqZQ!9{ewUXjp#cs^k_=nME!lU_jq0fNq8Pp%$%!z6GMN;EGvp=Lz|F8lh{MQnAjfr{`dj) zR<-)YEKNmDv$IfBE2>ih*1&IGsxtA+SgK2fWwZ(ZXJEJCKSFkWQ9ESxis48Eao*qD zG;Ct6Z73`<$QvML1msK=)XJULuRFzyC6_HCXW`h{Sv4-@k@2rAEiV+B^)^%)2PwJjySZ`9trSlh zlH?;wVy~OD`gnRWWdFc07qj*A>z1Lx;sxaHs<)v<+@U>adF~5C=``#FM=MmWfdY-N zr`N1c1bF!?3s-2-gwL=wyYfZ(1;$h?B^8Bn(s{MMbrwa}-i3Zq2rBUwh1&f7h4yA& zHQQoGL^6KGtyo2hy7VM!1*8ReFCwb{?zk=qA#6eB^!)|`K@{W#Nl zb|~Z$E+|RVPR}P>p!K_O3hL{}k6avL{8@hI9bcX1hIFKj4Li%A5FQDpI}y6uLyrW0 zcI0Rzz$VNjRn68J*t!W8hrmkC;i@~iS;BUS=Qt*RRmkGNVdngsifVp4Pc?eaqX-a+ z_Rm$xuXMzZ1aDWIMjy@_b`VJ0`}nbGN}VdJA(($Bg~ZKLFXvSEoIkXk!b>V4SZ0*Q zsMgViD^!T5kBAp7AhS;qZCbyvd|v`@kl7pynIptZ8 zkNg*@f%?Xm3QILC@KV7dNagnK^Z~9C0)wNac!^lWuRsUQ19?uix`qhJteEuuCN3?M zW>E^a>I*}mi<6Me!>_2c3bIVkIIbneV}(v{(59=Hi=*MD)%^GVVCPM43@sO#oa5qV zwK78|BMH})d^I=yk<^hZYJ4(r_uEHPTr%8w^%2qBEMaIJFF7;b+3(6gZf|ckWo;fh z8AX_0FR~ardtND^{%Mk7H?t=w=dR)-{o#+M+Ah|gsT0;1d~N~mhPzTOjMT-+2{?Ay zTx_^c^O8p_Vuk2x6320Gp1%4MH~Cz>Bhc##YiZhY(?(Ts7LKE{QnVc{-zZlqJs;5O z_-8ABGYX?v{l10@3DhP3us8prcErXhL<7LS(#2}%T4_tgP{xuWcoX^qteDWOc^mpX zy=$V^v9rgz2yi3XmMeI4nA8DpV9EH^L|UPGWmfXzwnur)-fi_v*;ko#`NFkMmXs?^ zu(GfyITIloO>YTu6SzheCc@Cf*5z8Ei&LQ31SuLle48l05a|8I4h^#s{IfZLI&Gnu z$-(o>Kr9V0CQSg~je=D_i0IQ4jI3-<-L@>g^68qA|Byr5CdG@zQZ9WfJNom<5?gC| zR!fTRLWM4?L4R%st1D#qSfM1j%{gTjRs2?8dxmv2n~1F1ecvr21Cg|Io4=G!dNT-J zq*V^|zw0&IRoiTTBS&DEg<|7%FLu7q#5-U0!F#tKu{4+$7bzK8&}}RBM!jd=0R(s- z^vA>)9ywCm(=5<3qJCv(ysUNmeI%eie=RMF_pT!iL%rRVT`iJCinaP}xBI;+~?Ntvgk!S76Z+d##E!ik68;Iw&ij&S{I zN&JGK33K1QrmBeZn|Dq<8fMH%d4mAtqW?qFCy=B)rNIF#&y5k~NPnq?Y zHBwMyO}vnIxN|NK>6r>HMj@Z8t)w)@C7rp05ol;Nsj%t4o8)SMKuZrNHMZ4-g?kIn zdzzWyupPG~qgmH9qPgpAV-IqscX!TxFFHpZ9HtM50_Ab&s}J&Ac#e@rq^(X9jN0K_ zJ~~HR-j*afd^N@12RW3r2Ms}$9(MD!!z~Qxp8P>mQ%G#1VWFFpHr6wiEuD8dH7|-w zI0>0f)(>MDtt9qm3GC@C25oK`_tlGvb{COG4~kyw%w#n?e-YB%+FNQ{ww<2q9hpg; z2`BjDMHUMJO>#k zWSJ?Zy|VW~NpE}}pgkF9Y+UTI1_x=B zhck|GXahG_Yd#MZ)Xt)6`kMILb1s3BZQ~ghpI=AaZ$6Rc;-?+h>L zlA1?y-M@9?3!?W#vbH?m+A94dxEG3xcSqLK#f}cKGtJ~{+v3duvhhs7)pL{4l!C@b zhAv3Rm_0Hp;tKY-P$-y|YPaF=Smk2O)?41`WO-}c?s(6$JbD+r7?p5>${P0GfeDQ3cQT&5RWD_KOmI07 z@2gwzqG)#aNdAr|a$i?zV|%wnQEPtSd!4QAzPSY^Rlxh&=_9h)=OhL4%Bl&b+b0dV zydTJZKjr87I*vL*%j$yYSFZD&>xQZ|*h<5$e`!B8K9XdwbGuM~-RSsA;MSEQYyqei!Bj+D9@KI>;f5fLol|+Q0pX41Vrhb1K+n za^)8$9xuJ?@t52z+oZq}fqGu}K0S*=iSyG3ILjRZ$5-VA(mHLIe6(#(8*9^4g#0oy zbKBM%28SIL-}rNta|ZsXnK_;{Dl(=`9eUJ{L@}rp{-pY$&rfE+WWha3=lr6RBbx&Ta?Fw%6Zwy1uu`$ zt{avcq=?7GmY+yRHug@3fd*piCIhsVj zS-`TpP>1}2>yOx;%p+?z1{bieCDp9K$TK5~^^!3?6~xdzY$Daq;HLc@|EuV1PkT?i zzvXN&Ax^*Z5KlXaMYMj>|Hc00YhsoKdmtf%Mx@(J>4IdDd~qj1xl|)Xe`q_Uh#tgg z;BWH=UUo58reJg4v0*Q-t|OiH)3VRrq@MI`_ce(}L_qcSr$QNZnK&zE4i?WNW|D05 z#I}2wm=1`RO^OjB`j*T9u5p>>a&kXW-D*jo_z8X)UYD{{r4d*$=blGPOC_v&Gtg~% z^Gz{JnDmX3Ve*J-znfH=iiw-9R{9 zfROz3{bxH&Mp__PczRvpc?)(dUVq^!;%g_(I1g(DW&2Or{agR=oAQ&`(7v85LF)%lvpm!-qHPZl+pG<9GiLFy4(%WIOZ7tqH$g= zolx`6-FhI5Gb46&QJn3!>%v8@KnpdXOy_%I zFWk&Vu6ILEMG)lGa^e5G2p60!9fS}_1w%+=IR$B;n|&Yfrh)TUN_R7;iuqR2+{|3OauH=%It_Wu4} z4kPezp#jVE3Fs_YRIeb{#|eOzd2XKOE`op;q^dAHPKI8-(Co4758o5k-0LmpzGhS1 z+}`#R03AxC6=p*<0Cwsh{VXo@AL@<}JPl|8l!yB(oCZBefEW+_n3HAL|Ks9dE(XXw z`y2gcC^O);yORZ|Gcz-P{`?thu+bqQB`pF>A~GJwP<<=Vyw>*iLW_#1+0CbP0ev}d zrI`OYOEyCQ%GK31lj>Dy_Q?qEaUb3@NXC$75xe08^4ca44CVpZ-G6g)V|%hHER)VB zak)3`u*k{I9v4sl#U7|FR`XlKDTpX26zuGn;U9AvMw8hs)EcbQuAFRbnO?%9Q#DIlA&>XmYgJgwNv`4EX7{Z{7%rh`fl7j`qA>a_Q>r zWwl%D(j0``pN}?qK{$?%j$q*6(1?ge0c|QFCAGdcT{3r610=n7bZSCkVlZZAX0C2- zS;fyp>&wo;!SBNKCjR8-+_$$||d?CnPGAOWpz1cGx)s4DntbHxG|JP>d3) ze|klSXZ6D4fsm~B3=MRJ71(co!0W?%PuA(KzG*ZUxUsRJ*|5!apBQtnWkel%ra%w< zx8;}O!k@eH6HmSH*5g;QZk5$Enk41D}tA@d(vzcaRH z>UW18EVreA9_Z=m2?OPgnTaVAtdFLV!vX1qdMhBdtwWAG5}f{#?GY=r1%Q5~_wy?( zo9P&ogM&k9X=$Nq1z`+@^jblN_kfcQnBE9Ne#y~v{;JyAuKD?7AZ}E;9BXIi6}tNRBsM?5@|5qw9F#bs*Qj+pB0F8Ij|AZ$pYw6E*+*uS#L>~w@L2#d z15y$R149H@80M33$hciV53A;Pb{6#me0|QB25bA?b`gab1@6{8CTIcZ0G(Hq)B=bp z)f}<*bRTjE!%ZhD5Z~3md)niMv3#w2n%Nz;%#!S$w$~Q5|HwFi0s9QBAfKp8IG*}< zJ3Yj@$>g$1$*oejSnOO`Q)w3V4r?YL_^)SS-guJ2?W5&8TJQfFI<*3oWPnm3z?>VF zHz$7`ftCa`20eZKUylzE9B%tuj!!>&RB=~Y8-4Z#&fSOBkK$T*cA52*cXPw3Ty`$jx8kf%d1wL+u6bhI4$oXgjs| z`dsY-_luiWc$F*l?<;pUCnnt$&%?~czp z>RZS6!HkhUAx+^;BLcm%1lwIbrJJ8fL`c-GMp!Hd=HzmW!nfm-;*)z^v^q#{Ol?&( zBymk#Qa8`C20gtu90rtWRSS)_HfEZ>&>ghMQ69>S5zKhCM%*O2HcL+sr3*eUorM>* z71K!UI}lGj zR7XCV=&^i`k#VH-CQqD0s%^VZzxUTjIK}O7 z9>wZZk=O)qQ-pXya_K^ zTiO>s^hOgf*RV~_ZC_kXUZjmD9s8wYOj$f$7A|9a=L7R0&)pL>ba7Nsi~8 zI`;u$g!rCsjTveL<<5ao3t#FvOSl|$O8{jBSv_C4HL7Q}bMCd`Y?9J(W#YQYud}6_ z7mH0;*OF7SF^!aoUs4Qo6R#t;lL$Kait&`S4&G=|dM=;D-=1AOcSx;!0j5p3 zn-rer=5_Kbg{=}25}tI21d>lOGL!k_6nTK+@U5!K()M;>HLxNi2Gw7%h^eQvba?LR z10E|aD;g0wxL5S{d)hl=wzz$jp61dznPw+-3!2%Y&pSnOO3Kr2D#mqN(-#qn16dgI zoY`keTT8Sq64H{JUL~p9AG>?I43y`K#|DOmtLl2Ws_zh77?%F_=TP!25H5QZCUh7t zBtP9GpM5d5V=rvM^KWiBC8LhBXwZKKOoFBS$er0mHpbo&>^-@8Mp4Ph<=5P@o?v`dGWJr$N6gG?%>K?V0!^ zp>;`A2Yk2*Z-*50*-h$cD_;~JJ$aej;84HKxwpaQNnAiG!uV^)_YN$ND@F}LYTo5V z?~UF;7~%gDBg+Fi;u#|^0D=-`b-qlk?Lov^ps)3MP+h{GIy78=&fn?w%&6XKAt*8u z)np_!OC<2sVpEPFOmupBM6~>sGO&pySrU!40)NXp2F*{P*aM}fZQ0ul#q<^5s9f(f3E>b63KQY|tsyTC@z~ zOirKpV!LgM0!p5vd&L=kEso*Q`E{0nZ#9FFgv_U{lunykR5C`Srnsb--+}}^#kH8f zRZ)Ah%3p$@!N$h59XU>27Q0y7*iL>`GPFiTDoReyo_5oPVWmOZaOQg4+BL(UkhHd_ zkV1%_()U-fp-^c=a!V&fKTqvSce+$PhFUS-7I-E^_{$R#u#P*P1b}VjJvVn!VIh_G z-EM)ZwO5Hx$tmog=Iv^kW!0)vEAB?}O^ev=yQ2Ni7X0D9R?uBwt%5}6&x?v6Ksa<~ zw?B8*{q9iUl7BDej4bd&`u9e+D~kS*{zX2Qm=6!{qJJccctzg9@+1_r@g;b7h}r8` zkJKB#On&P{ntaUPu|3~!0WvBXH*r$scfEsqYf9R06?7LY4pu{9NMmZIOm$3~5{u{~ zhkU(vvNPKy2lv{Fda<`GDO?aJ)&zV?Ca%zcE{ruoN{2m9E-!Iwa*z?Ebq4P+?J{J_ zv2k#i3{LG@U9?F6Njvrhb%)a&4{%(7&5_0x2Z8w^t)zsO-~A#}Jd)7W-Tg;wY^=p2 zsK9|IP^3-o&JGxn{@c!6qd_r0ZwEb2{R#jJEUlg?0B9ZJ8F-pv;ua+~8V-;j}rifvSU) zjw!6$|D8!n#juA}?bFeP1f>ilmEuB)N~i8dvcaV!lpoXvuN)a7D!BDanYTJ8UgE2{ zL-lFI3_Lt7BJ#ZH;_h%rJ?AZW;fk#xUog2sA z1=ib}YBNdU!xj#v6Z@3)hfO~W)>C3rgSL095@+w=60W{;yRL1~&fUb9D1Mhg08NquQWH_eCuow zb%!kV3G3_O(jn|BV;D>e)vgm8^qBCl@S8u|25>_-zP~MiB`+znYD%t1hP*lK_?O4v z3N47oiS=_r$J^T1&T$7!EX>)Om-a~7T-euOS*#r-%5DT7L|p*lBj5 zThjC`nuD`51+ZDoa;u@Bpa3)#(Adb8nwq*ZTS27bc^W9AEh{U_VKv{CCzW99H2q+_ zT%<_p4LRh@&d#oEXc%ShbO&&3cd3OFclcAT@);0-M(=@{5DEqs zcDzuY6qm!YFPc>ROc|Asknra2ZZ8jVyV<@nA+dQ%aGOdz<~&z1i$M_6IWX)~Z8eJd z)ut;d^+$xLn*|SB#jhLG@jaHjVLlHL+>MH+=9kEJH;%+A}I;`<|_c!@W zc~gov=U^^T9~&Cf-ji@#MsOEg{_W|vK1I3oAEkzXyjuJZev8r|;$dEUWjuYfl70334Sq zKE4|8G6E~pn$Hu2XvOD=ANVhy&9UAOgUr3Zmq)&akS4R*iJkKuvkuh={N~#qlm^Pz zTHci;<0OE&pE3lzxEy!h0HZA?CNLv%MnpuU^11y021tu@3JMB+OUtmTsz=7=q2Xb` z_3H18WrYz5raxn3V0%hrHo#`qhe0Le(*-u#c~5?itBv2Nf*aq6yfcA~O0(598bAQ~ zA_ej$hd=?e9rnji~SA%J#dG&B}YyUz|>TVPCX zyC)`2a(MX|o}Q;zAY%te4Jcq#rLqA;0pNFL26xxGzw>$DCr;!^Sxf?(7fdIx20NYg zbamO@oaoW0mZuinszL#-XOwxkzaLPWlan#P%k^y70-R4i=dJd$9~?~=lRAb{))<(P zQw4npeSvlFnf&=CzLhL2`vkWG$Qxie8%kt;33~kF#}5Q#N_61BZ^+!FmnN=gd+tw!~2BEU^-{3`%)einEYjn6jv zJ#RM?0C<KJFlJjWHbzUtP>h#r@j?No zvk(}594_1Uz|pOy)@SfcDg|fn#2x)i=5=9UH68*87*0(?1DMcdKqw{(c<}%jI5j8; zyxxHG_y{J6nVr2GcvM}M-M;0BN9voJCT`n{hhhKx75KVHA@3E4G(g9s=y>0LXc7Aj z9v7S49Ah|{-2ilY{s9RYd9G6LCE${fu$hF8fT8?Nb}&smzZ#$x1{DQpX=w!@2dv<; zhL6bOPo*9b9>)Pu#yVK!0Qnl$FPKji3X6z{)Gs7+SS24a;&hkLp6ZcMa%OBy%_uIm z*(bzyVMubvXWJe3H2Q2r5+wDU~{|@G#KoY3|&{$0Ph6nSko&@zM?d0eioChHY;=*jlk!&)DorWJLI1eB_4d z`F09-?OBw}eA;)HMu$@r$~M`v+rOjCbxgy~D^5fezx&9xjdgoDc~5TV#UXcg7X}e! z{2%*5-sBUegeJwQ`+Y5`(D3fg2^OEPg?AyWG#Mupc|`bI}+PdUTP3%ga9iCts5v$>SrINo?_UkPhlISlbRA zgA#B@+EzVydbw)P-W(@)d>^eXB`l0WC#HgXMLH9f`PBk8jJ+qeL^}f2=kX0GI%!0O zVEVB`U-%Q8&oaADLZ-hkzNUAStcBMAJO>d|-d_wE>yc!Oq?P?Qm4N;Rn&E+DtCzc>)(W5w?_AjN){^N)-l!TLYc+ISE_Au zh_8_*2}vuqqp-fI5b7T$)`0<~peGMMk@`zVP_4A^I{|b?J>H6I@JV`U_;R5tH#Zj@ z18vxsS)g<-z6mA*$WI+Z`w>;q(CIl1(Xpv;LSxgWJ)ak(z6ZtK=o?BEeR}p~PTah+ z!r8?+xOb)mr99iEWpT|R2o%jfUVbiE9Vz?F`o}#lbbWty#S^r`22wQR~RR1GI z(|4?y8LHUGaINS?1~k z>+ov{C5E>-9Tj~JY3J-bO9k(KvR6>h|*-n zol9=xbsvA_1jvDq=C|E`dGG*od_KIYJ9i==85|S1#C{T1c`vxNG>h0qFo%g|k zaYWCOAvb;=jvIzO=G(n5<8Y(^0|et6x?Rz{voi}h`TM>njkQ4bb|cBSPEZdpAGePL zLn8-!#dZOiao%&3qn!Y*f|80XS$W0v(|QUjwXA~LMpJO7m!D_zz9P+RS!s>ex(Qy< zd?O7YwcL)Xz-WAum7=6)r(dv7N48Jj6D$$DQa)&MKEt(Iwh;yB#~l*yOf!rn-jQin z(Gy!q>jzkv=`Tv#HEkKusZmIo4@SDeBgB+-^V1VjC3E!@nS!$PjI+emj;1Q)y|w## zRbVTkY*|;Di$^y(W@`2EYHm_Zc!kmZ<3cy&sr2+g?{L==Z>6obTx$Ibl-;-;-AKq%t!Z+^}o%H(gx4|&Z9a_pb=5n?~i^-)JQZRWa#6@ z2x`^-*4Ob`m88jw(;+0{yK0Vv>}V9BxjbFJ7JaDaI&C^5AoeB~WVZhf70bNpY$ z=T{idF7a@iafgQsr`CB_Xr|p&vH_liVGbSYZwmLZH!;f@j1k5H-zNdYx}`p)y(zM2WO@1i+Wce-?a zE;P?x_A4WSG^zat`!Gd0>vA7OA)5On<*;`h66xmo#JpY{Ik~XhsA|ymx3RUd#85l| zQR~L(u7b|ZBV?q0LMG3NB8*7gD?ss!%(#&!mU(@D>g>hH^|3AgD$n4uR!?orB$b}( zi$2Z#zyBmm2jPm(VB_Orx2GB7=97IWzdTJp2nS3_8%sEQ&uu$ObY6>x6U7iuCvZbJ zPHf9KiyI{0t_(>YJ6O)Ug^UVV%CzJs@y84nxNHFf84`X=+POE8u89Rh9Cau%&^sAR zPw63dd;_flksy^trnYiNL z2RTJb+o8pz4#oTc&Wsdi-JGACbk3@FK%buvdUfQ*46O53D<37zHyNh1{+Dpw=y@n` z?#=VT)ewIg|L`AAn8(x%M>}%!!>6`nBkub_-LSCgwMURp#)_YCdFt%8W{n;$2GkVW zi(8vWR3Gu~)lZjS_1uOJUL^#O90x5T51+CwXEjZBe7X4{C<~4j z#bvesv~JljU8oTn@EyHoX{OfugMvS$6f8J(;9Au81{|CKXyM=IPCukPTNp#@j2}`q zEx6&MT>!7hT-X9Q_h*ZYnJ2(V!9E%PvN`@gJi5B3Loxa+ffKuk=Al7FqH?SO8S(j~ zY$(FBXpRk|I{HZe45;Xc#fV{4x!c}>LUQHV2&b(t`wiA8SPs1P9eC?=SN`|ou>aY^ zp!-m{V0}7LQKRcz8ERy@zE&lp&gfSfNmxp7z)5ec|sj|Fyz1FqmQlvbr-7>uYEyt7j zxbn*B!e30qhJW;wRS)K-^;=wCky0@*h5LaKluzvt#=#wf(5pJr9gF{|k|%?c-dMBw zy}Qsvaf(PycgHQ1!g+8+n(yU<0eppcSQli>rX(hPE(`3euU{quOzvTUgZJ>Y_I6@|#dO()oqW;Qj{Ks1ggM@Z z?>lg@DQ*+RbAo{f6$UVrBy7`oUv~_o=rl2r^_$tJ>6Pswpk{8wY|F8UW`~6QC5{H%-@Jj((X3?@9 zbMI)tDKKnY9BL}2Q2twdKwkmk!wcJOZO!z7^EtesQpCe1;5{Xg^&VR6Kf=bP2}^62 z#rw>yRH?VgNvPR~*4>x{0glwrXKKqV40t_w!3i}!L}G1imVT{ZRXH(7zHNpNQK_jx zMP|mVQHimk;8DSWT=(1I;jm}c!8F4?>?yP8>N3$qhw{Ri4iNCepm=F)uziuajmM77 zoC*DXHf?J$58F8&7k=LiQw|;b<-`BZ|G*}tA|tu&5#XXhlSE? z#g%q<4{DYF*Qs;Hj4-6Q*eS;~bj4b;@Wp|bl}@8ZX|2pvA@~AL-z7IosjN(*3)YXX zJE9Ge74u5Dwe2EfPVo;#slPb1_SFBqNn&chvv|=CEG9$X@YkE}KV5V1mGx6&d1`+|BQlr6{ejK0qCz;HeYeE40TwlZEC`LCUu;nsfGhDi=vXOgw;GRw353NT?yXsiJv{~2B zF1_TLiaynxFBaD|RTGtZ-l!zUy{wMe6|H_E!3pueLL?tHx1i2sC+0vAVVb_}734N! zl4$baqj}Xw9FD`CYX?XOCHfD)x za853Rv-SYi%WFO#p#Psc$tl|Tjc(3zhnK3WWH+$B`+Rn<3~&v3_+LCw7zALydTjD1 zR)BwUikj~5YefaE2K?)!$|({sjupW?r<(tEi|*8+pEO(PhkM?4Haa>wMc80N3z;7b zMu?j%z{F*fqgIvaXO;%;aP2qXa@t4H=QBi9t{zFr#rErPVq!ufFA8ZAlZ1CCwU;c? zY-!!K@zC+$#E+Gje2NZABO?gw{W!@Yr4DWYE!2(2N3XITjj0tqRSL3( z8iM;H-%f%~?wmSgcBHO~d1p`g(Dl;XZrt&q`Qku*Y)wBZiKw^dYfta>u}R3Q8LWf# zI3~QZuqN+^cplzSn>$?OACKoN7K@*ubQWFKoO`yu&dew8URjx$QSY4SDY`T$DUt@h z&zqcxp`6&C6>hLeVbI}-OE}Ib9v+i>Y`?gYoSvS5Tu*$*Qc$0Jd}xJbWqn*Y)B)B7 zeyB=8&9>$T+e>Dj>n#)KTPPSf*QlJLx>e~4y3hCd!g$W4q%gdJt^v&MBfRg)FqUwFH zt4>r-MjenjSwP+|5Vj-{6Em^YvfR#gzCISk#u`&mWLT4*!kITdp82__x2zmaS{DA{ zDkWAXp}ga>EabE+r0lnHmZ3tkkD#ep{|ajiA};Q$tPRwo-hxx)nbrLpIubqcTKIljGJ~TGd5O7sGY%k1E z)YWZ{*3~E`r?TZK+%hXFD)3q3V)yB&(rwW`DNt8*8P(KpvR9PfF(+MInaa?RFSYHX zuL@dk*42J0kO|Co&{AU}j}Zow7zF2YzcZdWqvGS~y&T)`%3GVQZ!=^=stXMzC!(J8 ztyIBp{lUWvfri&CNAk;uz|r1;e#2Z#j-7%G4)?&5r+sDuzQ$XKSdO>n`9~g?krD%A z?L1tgwb!|F;R* zl6rc-WR}lqWxaeUs8HHa{Mf&>TmRZUKlSA>fAm(n?dv42UhxnXp8sv1v2jrG=U>NF z)^B>cX3dX1t1IrTPFTFyv0whTm?R6(*=3#kH}i*icjsR5$;Zlh*}n z=C=Y9=+UHQ!OOdxdsKS+yq-Q?_NhqT-sX)q|I(USr`}4M8Y^GDK09gS`P+QidDGn7 zn%LNV-@aYua>)7KqeWkSZQU+#e%{?*GW&jcb-DTa&-ZHQ6Wz|Cu2z%i5E}ZiSWUe) z=b_5?l%TGoK3li`Ed2hi^6RTZtSk53d!E?a>sea5Y?qbV&gAL0-|aJC*zkS-`)%K^ z>zLhQ*B0ZJk}$ZtCv(<({#~Wn&G9P?FK@rUDr53RW%ru*YkvM*5MO_`f9*P886-Y^ z)v8rXJdUWBs!!f2@Z@(wEnjZ#zTCrKN`7p(>$LFJtxHR{RM@Q8e!b*<+=T}Ze$D^> z<;JeJ(o)j4H+p+S`rp1i8_qV_^YZF&N1(TURn@d)tdo#QK|Ld8zDKRQl}9x47k7uZDjQ4ga0(qV(_m zzq;V+-@kqr{@KyK@>9|NbEmv6-`xBy(Yw9m*7x13)_r@c%yl@Xe*c$ubJqvld3)oe zEJK5@lW6_nuk(XqT%A+W+#G-*&#=clg$4pb7?0S3j3^P6wrap ? true : false; } +uint32_t lv_group_get_obj_count(lv_group_t * group) +{ + return _lv_ll_get_len(&group->obj_ll); +} /********************** * STATIC FUNCTIONS **********************/ diff --git a/src/core/lv_group.h b/src/core/lv_group.h index fab33343e..cc0cb4533 100644 --- a/src/core/lv_group.h +++ b/src/core/lv_group.h @@ -46,33 +46,16 @@ typedef uint8_t lv_key_t; * TYPEDEFS **********************/ struct _lv_group_t; +typedef struct _lv_group_t lv_group_t; + struct _lv_obj_t; typedef void (*lv_group_focus_cb_t)(struct _lv_group_t *); -/** - * Groups can be used to logically hold objects so that they can be individually focused. - * They are NOT for laying out objects on a screen (try `lv_cont` for that). - */ -typedef struct _lv_group_t { - lv_ll_t obj_ll; /**< Linked list to store the objects in the group*/ - struct _lv_obj_t ** obj_focus; /**< The object in focus*/ - - lv_group_focus_cb_t focus_cb; /**< A function to call when a new object is focused (optional)*/ -#if LV_USE_USER_DATA - void * user_data; -#endif - - uint8_t frozen : 1; /**< 1: can't focus to new object*/ - uint8_t editing : 1; /**< 1: Edit mode, 0: Navigate mode*/ - uint8_t refocus_policy : 1; /**< 1: Focus prev if focused on deletion. 0: Focus next if focused on - deletion.*/ - uint8_t wrap : 1; /**< 1: Focus next/prev can wrap at end of list. 0: Focus next/prev stops at end - of list.*/ -} lv_group_t; - -enum { LV_GROUP_REFOCUS_POLICY_NEXT = 0, LV_GROUP_REFOCUS_POLICY_PREV = 1 }; -typedef uint8_t lv_group_refocus_policy_t; +typedef enum { + LV_GROUP_REFOCUS_POLICY_NEXT = 0, + LV_GROUP_REFOCUS_POLICY_PREV = 1 +}lv_group_refocus_policy_t; /********************** * GLOBAL PROTOTYPES @@ -212,11 +195,18 @@ bool lv_group_get_editing(const lv_group_t * group); /** * Get whether focus next/prev will allow wrapping from first->last or last->first object. - * @param group pointer to group + * @param group pointer to group * @param en true: wrapping enabled; false: wrapping disabled */ bool lv_group_get_wrap(lv_group_t * group); +/** + * Get the number of object in the group + * @param group pointer to a group + * @return number of objects in the group + */ +uint32_t lv_group_get_obj_count(lv_group_t * group); + /********************** * MACROS **********************/ diff --git a/src/core/lv_indev.c b/src/core/lv_indev.c index 55b10898e..2e16b8e5f 100644 --- a/src/core/lv_indev.c +++ b/src/core/lv_indev.c @@ -35,12 +35,12 @@ static void indev_pointer_proc(lv_indev_t * i, lv_indev_data_t * data); static void indev_keypad_proc(lv_indev_t * i, lv_indev_data_t * data); static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data); static void indev_button_proc(lv_indev_t * i, lv_indev_data_t * data); -static void indev_proc_press(lv_indev_proc_t * proc); -static void indev_proc_release(lv_indev_proc_t * proc); +static void indev_proc_press(_lv_indev_proc_t * proc); +static void indev_proc_release(_lv_indev_proc_t * proc); static void indev_proc_reset_query_handler(lv_indev_t * indev); -static void indev_click_focus(lv_indev_proc_t * proc); -static void indev_gesture(lv_indev_proc_t * proc); -static bool indev_reset_check(lv_indev_proc_t * proc); +static void indev_click_focus(_lv_indev_proc_t * proc); +static void indev_gesture(_lv_indev_proc_t * proc); +static bool indev_reset_check(_lv_indev_proc_t * proc); /********************** * STATIC VARIABLES @@ -595,7 +595,7 @@ static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data) /*On enter long press toggle edit mode.*/ if(editable) { /*Don't leave edit mode if there is only one object (nowhere to navigate)*/ - if(_lv_ll_get_len(&g->obj_ll) > 1) { + if(lv_group_get_obj_count(g) > 1) { lv_group_set_editing(g, lv_group_get_editing(g) ? false : true); /*Toggle edit mode on long press*/ lv_obj_clear_state(indev_obj_act, LV_STATE_PRESSED); /*Remove the pressed state manually*/ } @@ -654,9 +654,9 @@ static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data) } /*An object is being edited and the button is released.*/ - else if(g->editing) { + else if(lv_group_get_editing(g)) { /*Ignore long pressed enter release because it comes from mode switch*/ - if(!i->proc.long_pr_sent || _lv_ll_get_len(&g->obj_ll) <= 1) { + if(!i->proc.long_pr_sent || lv_group_get_obj_count(g) <= 1) { lv_event_send(indev_obj_act, LV_EVENT_RELEASED, indev_act); if(indev_reset_check(&i->proc)) return; @@ -674,7 +674,7 @@ static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data) } /*If the focused object is editable and now in navigate mode then on enter switch edit mode*/ - else if(editable && !g->editing && !i->proc.long_pr_sent) { + else if(editable && !lv_group_get_editing(g) && !i->proc.long_pr_sent) { lv_group_set_editing(g, true); /*Set edit mode*/ } } @@ -765,7 +765,7 @@ static void indev_button_proc(lv_indev_t * i, lv_indev_data_t * data) * @param indev pointer to an input device 'proc' * @return LV_RES_OK: no indev reset required; LV_RES_INV: indev reset is required */ -static void indev_proc_press(lv_indev_proc_t * proc) +static void indev_proc_press(_lv_indev_proc_t * proc) { LV_LOG_INFO("pressed at x:%d y:%d", proc->types.pointer.act_point.x, proc->types.pointer.act_point.y); indev_obj_act = proc->types.pointer.act_obj; @@ -901,7 +901,7 @@ static void indev_proc_press(lv_indev_proc_t * proc) * Process the released state of LV_INDEV_TYPE_POINTER input devices * @param proc pointer to an input device 'proc' */ -static void indev_proc_release(lv_indev_proc_t * proc) +static void indev_proc_release(_lv_indev_proc_t * proc) { if(proc->wait_until_release != 0) { proc->types.pointer.act_obj = NULL; @@ -978,7 +978,7 @@ static void indev_proc_reset_query_handler(lv_indev_t * indev) * Handle focus/defocus on click for POINTER input devices * @param proc pointer to the state of the indev */ -static void indev_click_focus(lv_indev_proc_t * proc) +static void indev_click_focus(_lv_indev_proc_t * proc) { /*Handle click focus*/ lv_obj_t * obj_to_focus = indev_obj_act; @@ -1047,7 +1047,7 @@ static void indev_click_focus(lv_indev_proc_t * proc) * Handle the gesture of indev_proc_p->types.pointer.act_obj * @param indev pointer to a input device state */ -void indev_gesture(lv_indev_proc_t * proc) +void indev_gesture(_lv_indev_proc_t * proc) { if(proc->types.pointer.scroll_obj) return; @@ -1100,7 +1100,7 @@ void indev_gesture(lv_indev_proc_t * proc) * @param proc pointer to an input device 'proc' * @return true if indev query should be immediately truncated. */ -static bool indev_reset_check(lv_indev_proc_t * proc) +static bool indev_reset_check(_lv_indev_proc_t * proc) { if(proc->reset_query) { indev_obj_act = NULL; diff --git a/src/core/lv_indev_scroll.c b/src/core/lv_indev_scroll.c index efd7cf2d0..8cefbe6fd 100644 --- a/src/core/lv_indev_scroll.c +++ b/src/core/lv_indev_scroll.c @@ -21,13 +21,13 @@ /********************** * STATIC PROTOTYPES **********************/ -static lv_obj_t * find_scroll_obj(lv_indev_proc_t * proc); -static void init_scroll_limits(lv_indev_proc_t * proc); +static lv_obj_t * find_scroll_obj(_lv_indev_proc_t * proc); +static void init_scroll_limits(_lv_indev_proc_t * proc); static lv_coord_t find_snap_point_x(const lv_obj_t * obj, lv_coord_t min, lv_coord_t max, lv_coord_t ofs); static lv_coord_t find_snap_point_y(const lv_obj_t * obj, lv_coord_t min, lv_coord_t max, lv_coord_t ofs); -static void scroll_limit_diff(lv_indev_proc_t * proc, lv_coord_t * diff_x, lv_coord_t * diff_y); -static lv_coord_t scroll_throw_predict_y(lv_indev_proc_t * proc); -static lv_coord_t scroll_throw_predict_x(lv_indev_proc_t * proc); +static void scroll_limit_diff(_lv_indev_proc_t * proc, lv_coord_t * diff_x, lv_coord_t * diff_y); +static lv_coord_t scroll_throw_predict_y(_lv_indev_proc_t * proc); +static lv_coord_t scroll_throw_predict_x(_lv_indev_proc_t * proc); static lv_coord_t elastic_diff(lv_obj_t * scroll_obj, lv_coord_t diff, lv_coord_t scroll_start, lv_coord_t scroll_end, lv_dir_t dir); /********************** @@ -42,7 +42,7 @@ static lv_coord_t elastic_diff(lv_obj_t * scroll_obj, lv_coord_t diff, lv_coord_ * GLOBAL FUNCTIONS **********************/ -void _lv_indev_scroll_handler(lv_indev_proc_t * proc) +void _lv_indev_scroll_handler(_lv_indev_proc_t * proc) { lv_obj_t * scroll_obj = proc->types.pointer.scroll_obj; /*If there is no scroll object yet try to find one*/ @@ -91,7 +91,7 @@ void _lv_indev_scroll_handler(lv_indev_proc_t * proc) } -void _lv_indev_scroll_throw_handler(lv_indev_proc_t * proc) +void _lv_indev_scroll_throw_handler(_lv_indev_proc_t * proc) { lv_obj_t * scroll_obj = proc->types.pointer.scroll_obj; if(scroll_obj == NULL) return; @@ -236,7 +236,7 @@ void lv_indev_scroll_get_snap_dist(lv_obj_t * obj, lv_point_t * p) * STATIC FUNCTIONS **********************/ -static lv_obj_t * find_scroll_obj(lv_indev_proc_t * proc) +static lv_obj_t * find_scroll_obj(_lv_indev_proc_t * proc) { lv_obj_t * obj_candidate = NULL; lv_dir_t dir_candidate = LV_DIR_NONE; @@ -341,7 +341,7 @@ static lv_obj_t * find_scroll_obj(lv_indev_proc_t * proc) return obj_candidate; } -static void init_scroll_limits(lv_indev_proc_t * proc) +static void init_scroll_limits(_lv_indev_proc_t * proc) { lv_obj_t * obj = proc->types.pointer.scroll_obj; /*If there no STOP allow scrolling anywhere*/ @@ -508,7 +508,7 @@ static lv_coord_t find_snap_point_y(const lv_obj_t * obj, lv_coord_t min, lv_coo return dist == LV_COORD_MAX ? 0 : -dist; } -static void scroll_limit_diff(lv_indev_proc_t * proc, lv_coord_t * diff_x, lv_coord_t * diff_y) +static void scroll_limit_diff(_lv_indev_proc_t * proc, lv_coord_t * diff_x, lv_coord_t * diff_y) { if(diff_y) { if(proc->types.pointer.scroll_sum.y + *diff_y < proc->types.pointer.scroll_area.y1) { @@ -533,7 +533,7 @@ static void scroll_limit_diff(lv_indev_proc_t * proc, lv_coord_t * diff_x, lv_co -static lv_coord_t scroll_throw_predict_y(lv_indev_proc_t * proc) +static lv_coord_t scroll_throw_predict_y(_lv_indev_proc_t * proc) { lv_coord_t y = proc->types.pointer.scroll_throw_vect.y; lv_coord_t move = 0; @@ -549,7 +549,7 @@ static lv_coord_t scroll_throw_predict_y(lv_indev_proc_t * proc) } -static lv_coord_t scroll_throw_predict_x(lv_indev_proc_t * proc) +static lv_coord_t scroll_throw_predict_x(_lv_indev_proc_t * proc) { lv_coord_t x = proc->types.pointer.scroll_throw_vect.x; lv_coord_t move = 0; diff --git a/src/core/lv_indev_scroll.h b/src/core/lv_indev_scroll.h index 83f6aed91..76c64d176 100644 --- a/src/core/lv_indev_scroll.h +++ b/src/core/lv_indev_scroll.h @@ -31,13 +31,13 @@ extern "C" { * Handle scrolling. Called by LVGL during input device processing * @param proc pointer to an input device's proc field */ -void _lv_indev_scroll_handler(lv_indev_proc_t * proc); +void _lv_indev_scroll_handler(_lv_indev_proc_t * proc); /** * Handle throwing after scrolling. Called by LVGL during input device processing * @param proc pointer to an input device's proc field */ -void _lv_indev_scroll_throw_handler(lv_indev_proc_t * proc); +void _lv_indev_scroll_throw_handler(_lv_indev_proc_t * proc); /** * Predict where would a scroll throw end diff --git a/src/draw/lv_draw_label.h b/src/draw/lv_draw_label.h index 930a89ef7..fb71210d5 100644 --- a/src/draw/lv_draw_label.h +++ b/src/draw/lv_draw_label.h @@ -51,7 +51,7 @@ typedef struct { * all the previous characters needs to be checked to calculate the positions. * This structure stores an earlier (e.g. at -1000 px) coordinate and the index of that line. * Therefore the calculations can start from here.*/ -typedef struct { +typedef struct _lv_draw_label_hint_t { /** Index of the line at `y` coordinate*/ int32_t line_start; diff --git a/src/draw/lv_img_decoder.c b/src/draw/lv_img_decoder.c index 4040a1f2c..0bf13831a 100644 --- a/src/draw/lv_img_decoder.c +++ b/src/draw/lv_img_decoder.c @@ -21,6 +21,17 @@ /********************** * TYPEDEFS **********************/ +typedef struct _lv_img_decoder { + lv_img_decoder_info_f_t info_cb; + lv_img_decoder_open_f_t open_cb; + lv_img_decoder_read_line_f_t read_line_cb; + lv_img_decoder_close_f_t close_cb; + +#if LV_USE_USER_DATA + void * user_data; +#endif +} lv_img_decoder_t; + typedef struct { lv_fs_file_t f; lv_color_t * palette; diff --git a/src/draw/lv_img_decoder.h b/src/draw/lv_img_decoder.h index 6c852eae4..01e28342f 100644 --- a/src/draw/lv_img_decoder.h +++ b/src/draw/lv_img_decoder.h @@ -43,6 +43,7 @@ typedef uint8_t lv_img_src_t; /*Decoder function definitions*/ struct _lv_img_decoder; +typedef struct _lv_img_decoder lv_img_decoder_t; struct _lv_img_decoder_dsc; /** @@ -83,17 +84,6 @@ typedef lv_res_t (*lv_img_decoder_read_line_f_t)(struct _lv_img_decoder * decode */ typedef void (*lv_img_decoder_close_f_t)(struct _lv_img_decoder * decoder, struct _lv_img_decoder_dsc * dsc); -typedef struct _lv_img_decoder { - lv_img_decoder_info_f_t info_cb; - lv_img_decoder_open_f_t open_cb; - lv_img_decoder_read_line_f_t read_line_cb; - lv_img_decoder_close_f_t close_cb; - -#if LV_USE_USER_DATA - void * user_data; -#endif -} lv_img_decoder_t; - /**Describe an image decoding session. Stores data about the decoding*/ typedef struct _lv_img_decoder_dsc { /**The decoder which was able to open the image source*/ diff --git a/src/hal/lv_hal_disp.h b/src/hal/lv_hal_disp.h index 5d0e61d7b..1e3214f53 100644 --- a/src/hal/lv_hal_disp.h +++ b/src/hal/lv_hal_disp.h @@ -46,7 +46,7 @@ struct _lv_theme_t; /** * Structure for holding display buffer information. */ -typedef struct { +typedef struct _lv_disp_draw_buf_t{ void * buf1; /**< First display buffer.*/ void * buf2; /**< Second display buffer.*/ diff --git a/src/hal/lv_hal_indev.h b/src/hal/lv_hal_indev.h index d52b0e2df..5cdfe243f 100644 --- a/src/hal/lv_hal_indev.h +++ b/src/hal/lv_hal_indev.h @@ -168,13 +168,13 @@ typedef struct _lv_indev_proc_t { uint32_t pr_timestamp; /**< Pressed time stamp*/ uint32_t longpr_rep_timestamp; /**< Long press repeat time stamp*/ -} lv_indev_proc_t; +} _lv_indev_proc_t; /** The main input device descriptor with driver, runtime data ('proc') and some additional * information*/ typedef struct _lv_indev_t { lv_indev_drv_t * driver; - lv_indev_proc_t proc; + _lv_indev_proc_t proc; struct _lv_obj_t * cursor; /**< Cursor for LV_INPUT_TYPE_POINTER*/ struct _lv_group_t * group; /**< Keypad destination group*/ const lv_point_t * btn_points; /**< Array points assigned to the button ()screen will be pressed diff --git a/src/widgets/lv_arc.c b/src/widgets/lv_arc.c index d775260fc..e0f2064f8 100644 --- a/src/widgets/lv_arc.c +++ b/src/widgets/lv_arc.c @@ -523,7 +523,7 @@ static void lv_arc_event(const lv_obj_class_t * class_p, lv_event_t * e) lv_event_code_t code = lv_event_get_code(e); lv_obj_t * obj = lv_event_get_target(e); - lv_arc_t * arc = (lv_arc_t *)e->target; + lv_arc_t * arc = (lv_arc_t *)lv_event_get_target(e); if(code == LV_EVENT_PRESSING) { lv_indev_t * indev = lv_indev_get_act(); if(indev == NULL) return;