From 29ac863d14aa572e4ff328dec2d5aaa55a7031a9 Mon Sep 17 00:00:00 2001 From: Andy Everitt <38423143+AndyEveritt@users.noreply.github.com> Date: Tue, 29 Jul 2025 13:48:55 +0100 Subject: [PATCH] feat(obj): allow `LV_SIZE_CONTENT` for min and max width/height (#8448) --- src/core/lv_obj_pos.c | 120 ++++++++++-------- .../widgets/obj_pos_content_min_size.png | Bin 0 -> 1559 bytes .../widgets/obj_pos_fixed_min_size.png | Bin 0 -> 2066 bytes .../ref_imgs/widgets/obj_pos_no_min_size.png | Bin 0 -> 1328 bytes .../widgets/obj_pos_content_min_size.png | Bin 0 -> 1934 bytes .../widgets/obj_pos_fixed_min_size.png | Bin 0 -> 2455 bytes .../widgets/obj_pos_no_min_size.png | Bin 0 -> 1669 bytes tests/src/test_cases/widgets/test_obj_pos.c | 22 ++++ 8 files changed, 88 insertions(+), 54 deletions(-) create mode 100644 tests/ref_imgs/widgets/obj_pos_content_min_size.png create mode 100644 tests/ref_imgs/widgets/obj_pos_fixed_min_size.png create mode 100644 tests/ref_imgs/widgets/obj_pos_no_min_size.png create mode 100644 tests/ref_imgs_vg_lite/widgets/obj_pos_content_min_size.png create mode 100644 tests/ref_imgs_vg_lite/widgets/obj_pos_fixed_min_size.png create mode 100644 tests/ref_imgs_vg_lite/widgets/obj_pos_no_min_size.png diff --git a/src/core/lv_obj_pos.c b/src/core/lv_obj_pos.c index 708e3f4c61..ed84b1cc1e 100644 --- a/src/core/lv_obj_pos.c +++ b/src/core/lv_obj_pos.c @@ -84,6 +84,56 @@ void lv_obj_set_y(lv_obj_t * obj, int32_t y) } } +static int32_t calc_dynamic_width(lv_obj_t * obj, int32_t width, int32_t * const content_width) +{ + if(width == LV_SIZE_CONTENT) { + if(*content_width < 0) { + *content_width = calc_content_width(obj); + } + width = *content_width; + } + else if(LV_COORD_IS_PCT(width)) { + lv_obj_t * parent = lv_obj_get_parent(obj); + if(parent->w_layout == 0 && lv_obj_get_style_width(parent, 0) == LV_SIZE_CONTENT) { + /*If parent has content size and the child has pct size + *a circular dependency will occur. To solve it keep child size at zero */ + width = lv_obj_get_style_space_left(obj, 0) + lv_obj_get_style_space_right(obj, 0); + } + else { + int32_t parent_w = lv_obj_get_content_width(parent); + width = (LV_COORD_GET_PCT(width) * parent_w) / 100; + width -= lv_obj_get_style_margin_left(obj, LV_PART_MAIN) + lv_obj_get_style_margin_right(obj, LV_PART_MAIN); + } + } + return width; +} + +static int32_t calc_dynamic_height(lv_obj_t * obj, int32_t height, int32_t * const content_height) +{ + if(height == LV_SIZE_CONTENT) { + if(*content_height < 0) { + *content_height = calc_content_height(obj); + } + height = *content_height; + } + else if(LV_COORD_IS_PCT(height)) { + lv_obj_t * parent = lv_obj_get_parent(obj); + if(parent->h_layout == 0 && lv_obj_get_style_height(parent, 0) == LV_SIZE_CONTENT) { + /*If parent has content size and the child has pct size + *a circular dependency will occur. To solve it keep child size at zero */ + height = lv_obj_get_style_space_top(obj, 0) + lv_obj_get_style_space_bottom(obj, 0); + } + + else { + int32_t parent_h = lv_obj_get_content_height(parent); + height = (LV_COORD_GET_PCT(height) * parent_h) / 100; + height -= + lv_obj_get_style_margin_top(obj, LV_PART_MAIN) + lv_obj_get_style_margin_bottom(obj, LV_PART_MAIN); + } + } + return height; +} + bool lv_obj_refr_size(lv_obj_t * obj) { LV_ASSERT_OBJ(obj, MY_CLASS); @@ -94,74 +144,34 @@ bool lv_obj_refr_size(lv_obj_t * obj) lv_obj_t * parent = lv_obj_get_parent(obj); if(parent == NULL) return false; - bool w_is_content = false; - bool w_is_pct = false; - int32_t w; if(obj->w_layout) { w = lv_obj_get_width(obj); } else { - w = lv_obj_get_style_width(obj, LV_PART_MAIN); - w_is_content = w == LV_SIZE_CONTENT; - w_is_pct = LV_COORD_IS_PCT(w); - int32_t parent_w = lv_obj_get_content_width(parent); - - if(w_is_content) { - w = calc_content_width(obj); - } - else if(w_is_pct) { - /*If parent has content size and the child has pct size - *a circular dependency will occur. To solve it keep child size at zero */ - if(parent->w_layout == 0 && lv_obj_get_style_width(parent, 0) == LV_SIZE_CONTENT) { - w = lv_obj_get_style_space_left(obj, 0) + lv_obj_get_style_space_right(obj, 0); - } - else { - w = (LV_COORD_GET_PCT(w) * parent_w) / 100; - w -= lv_obj_get_style_margin_left(obj, LV_PART_MAIN) + lv_obj_get_style_margin_right(obj, LV_PART_MAIN); - } - } - - int32_t minw = lv_obj_get_style_min_width(obj, LV_PART_MAIN); - int32_t maxw = lv_obj_get_style_max_width(obj, LV_PART_MAIN); - w = lv_clamp_width(w, minw, maxw, parent_w); + int32_t content_width = -1; + w = calc_dynamic_width(obj, lv_obj_get_style_width(obj, LV_PART_MAIN), &content_width); + int32_t minw = calc_dynamic_width(obj, lv_obj_get_style_min_width(obj, LV_PART_MAIN), &content_width); + int32_t maxw = calc_dynamic_width(obj, lv_obj_get_style_max_width(obj, LV_PART_MAIN), &content_width); + w = LV_CLAMP(minw, w, maxw); } int32_t h; - bool h_is_content = false; - bool h_is_pct = false; if(obj->h_layout) { h = lv_obj_get_height(obj); } else { - h = lv_obj_get_style_height(obj, LV_PART_MAIN); - h_is_content = h == LV_SIZE_CONTENT; - h_is_pct = LV_COORD_IS_PCT(h); - int32_t parent_h = lv_obj_get_content_height(parent); - - if(h_is_content) { - h = calc_content_height(obj); - } - else if(h_is_pct) { - /*If parent has content size and the child has pct size - *a circular dependency will occur. To solve it keep child size at zero */ - if(parent->h_layout == 0 && lv_obj_get_style_height(parent, 0) == LV_SIZE_CONTENT) { - h = lv_obj_get_style_space_top(obj, 0) + lv_obj_get_style_space_bottom(obj, 0); - } - else { - h = (LV_COORD_GET_PCT(h) * parent_h) / 100; - h -= lv_obj_get_style_margin_top(obj, LV_PART_MAIN) + lv_obj_get_style_margin_bottom(obj, LV_PART_MAIN); - } - } - - int32_t minh = lv_obj_get_style_min_height(obj, LV_PART_MAIN); - int32_t maxh = lv_obj_get_style_max_height(obj, LV_PART_MAIN); - h = lv_clamp_height(h, minh, maxh, parent_h); + int32_t content_height = -1; + h = calc_dynamic_height(obj, lv_obj_get_style_height(obj, LV_PART_MAIN), &content_height); + int32_t minh = calc_dynamic_height(obj, lv_obj_get_style_min_height(obj, LV_PART_MAIN), &content_height); + int32_t maxh = calc_dynamic_height(obj, lv_obj_get_style_max_height(obj, LV_PART_MAIN), &content_height); + h = LV_CLAMP(minh, h, maxh); } /*Do nothing if the size is not changed*/ /*It is very important else recursive resizing can occur without size change*/ - if(lv_obj_get_width(obj) == w && lv_obj_get_height(obj) == h) return false; + if(lv_obj_get_width(obj) == w && lv_obj_get_height(obj) == h) + return false; /*Invalidate the original area*/ lv_obj_invalidate(obj); @@ -177,7 +187,8 @@ bool lv_obj_refr_size(lv_obj_t * obj) /*If the object is already out of the parent and its position is changes *surely the scrollbars also changes so invalidate them*/ bool on1 = lv_area_is_in(&ori, &parent_fit_area, 0); - if(!on1) lv_obj_scrollbar_invalidate(parent); + if(!on1) + lv_obj_scrollbar_invalidate(parent); /*Set the length and height *Be sure the content is not scrolled in an invalid position on the new size*/ @@ -203,7 +214,8 @@ bool lv_obj_refr_size(lv_obj_t * obj) /*If the object was out of the parent invalidate the new scrollbar area too. *If it wasn't out of the parent but out now, also invalidate the scrollbars*/ bool on2 = lv_area_is_in(&obj->coords, &parent_fit_area, 0); - if(on1 || (!on1 && on2)) lv_obj_scrollbar_invalidate(parent); + if(on1 || (!on1 && on2)) + lv_obj_scrollbar_invalidate(parent); lv_obj_refresh_ext_draw_size(obj); diff --git a/tests/ref_imgs/widgets/obj_pos_content_min_size.png b/tests/ref_imgs/widgets/obj_pos_content_min_size.png new file mode 100644 index 0000000000000000000000000000000000000000..164aba09e37c00f471f8d209a71a229c6da24b82 GIT binary patch literal 1559 zcmbu9Yfuwc6vvlMlofd-4Wc3wmq$?ul~x$VR4_Eb8bvA^NPPh6#3J|vsaBAN1teIe zve*JvsEV45qM}$3MIj7W2~{8{h(KsVf;5m2QbHaiBz9w`-|UxizTDqEbI*V7`Omrc z%$BInogCa9003}eZeVN$02~Yec2Wq3Ws>`*Td}2lOC&2or_+s(kB^Lu3=IuQrBbz8 zJvurnlgTt1jnQa)`}VC~ua{|N%Ed>!g~Q&6QIvGE>-9ZD9Fi@&kSTQ^QH2p5HxPGhm{epV)L&kzMc1xy)mD@c67FT1iuiQD+T70ZCMpiIu5v5>aq_{8Tk-1uA-eYn}xJ>7xE z3sz01Q0Xtk+W^(mWcPZPq8skKi@4pz*S9OyGQRSk7i!<+A9E7p)Z#oW&u1y9?i){I z6ai=95WpD^h7cer?LRkC=i$j@>v|Vy`^?xm8o`qd_i8<5#-wjI!}({u(K1i%ehC5E z`*N{p-~`=Jp?g$^&wh|LS61P&4MN}*afrmIpevVv;VdfnQ2&zmsu!PqJ`KOpus~E! zBakxS(ngcmgeemWA&WA&$m3=2$exRwf^C#946E@aFmh=CkBkId_<7*X z*u?6B1PUVU86}AhZ7;c5dl144zmG?Pm9fWn1TGv&_U6am=VtDxt#a^FKc7e!3X64l zG(tloa&X~2%OJx>*h-$#Q*-bRUhCcSe1u8aq4+aail774jQotce%Ie4m81 zu9H(A62b7uda&qEQ;H&ttW3lN_(ABMPF>3$(OPF0ot6!T@1o*}%rVn|p~XT-kt}WG z-c(-G#^AGq-aw4?t?9JZB5Wk&4h)}59$ZIaYoXldL<5g@R3JfS5+HoycQn8r>jc6d zg$Yf_dp28(c~x{Dc9LQZ5PRmr=?*$aa87&-xP?tP_1_6Etqe$8`qM`G7j_EN?`z`y z!ukAr*ej@yWW5f0;!2$tio0Cq$DuxJ=`QLNOd&y~eE-YA^DUMp;i6@TJM)JW#gW!& zV@_xYYKQ$Zi-wO_2Csq`%_6dXC3}c$^^TKuR&}&ZcNWpK*TtD*tDif)lWVv>3ng3W z?rMAcl{Uzkxh>3K*=QDVw?7B>uDx*UD~jWm|Jms-yA@te>cFK?h3zWLh$u$YXS=ii E1|8u`%>V!Z literal 0 HcmV?d00001 diff --git a/tests/ref_imgs/widgets/obj_pos_fixed_min_size.png b/tests/ref_imgs/widgets/obj_pos_fixed_min_size.png new file mode 100644 index 0000000000000000000000000000000000000000..c1886fb5f09551c2c9adc022f9a2d81aaf6a2e2f GIT binary patch literal 2066 zcmdT_X;4#F6b>(MAi?dmQbAOBQPkQ>skVZweL;{#1nN*xQP5Hr2?9z5+bEJ?D;6se z&;p@kfZ&2G0tOV+SWto;h)G3|kU+qSCh!uryo4;K!A@t|ADxc>>iu)h_kH)woO8aJ zd(VUh`z^4vwZ!3Y3j+LocHnS$7>6^H67VJ_p?{WV3MHXIVZJJr3PsV;(b3`IVX0KA zP$*12Z=t~5e@H&+vbBc6vx<{_deW;mG8)7)BFKVXO7f)X7 z)+p5mp-dN1uaZvaw^z-yk7&IrrkzTr5^iGI9qMnmSY^-bjREb4h01LeFX^1YHi5Xh ztw$shrPUAd`TU)iM%x}fl1L;vovyh0%$){2+sy)5$oJ?;4e=PTKf$5z~bktjJ86wh!g` ztx823J2c{Djk{{cyCWQ}JH!;0b4Q1ILtm++tZN-e(|38qKSERN^e6G?V&0Xm48B2F z%q+srLMdr4=VeZQcRQ zKoB4hKnNnhFoYm*W+s9&qv3$R3k>}3FSP z6kdr$u>K>9hTc*%qnZewH>E;5G$WBPmrj*?iVVj{kWb6<&TCk_`q>2pk{y9X`4Ve@ z>|pB8jK)U!!-WRjM&n+tJwRqNkcIqP)z??kq&$KpdtXRXU|zJG6*!g`t?pA&@_KG{ zKYG<1U!3I_hd#9gg90XKD4>6eK=0O|fD+HEE0ke=ue z&^o_`lc>DN#_X*R1@h%lB$G;Z$(~N2-hJ2q$%(Y7h&{PT z@g@8`4!)3P57Ku<5$^LQc4|&*xyY}z*`kv{@Xhzgw9PLXM7?Ot`4+9fd`Ewk+llHQ zYZ`Az)^N0HQ!>9hXVm5!vuf~5$Fg6(qRas!EYCpwnF!H5QxLIBc0qaH_cc9 z(c@m$TR6u*UD)l4$rSgG+ThyaJGa2{RU%GJwfeGgFbR)k*3DlzT(Z!7^x0}62+$B1 zBK+S&qQ#VrVLa6X^uCND@|P4=h2^Q>0ow7icQIG5*QA$Ulx{f-D0`d+H@j&E;;y*R z1P9$2x=*#@xI)EiJ|=Q2w{>WvwMkgZ*hW3~D!neQm2fK3omMc`mt#GpZ&^YUP@EVI zO))b(>iR>DK-oYNJVas2Uowq#ZX8tvJTtI>T|l9H##L?5j{AAal_8Wq$!=gc6Y{^+ zh5B~?v=ZVofOXF^n8vLv!xipqS_l(tGjnC6J3tFxuUWbeKg)|;A#t_>KDV;EZo|+i zU1~FP-#_r(P!KVkiokjz?cVpu{w?rz67&=zm|j6=5Lo886MIm~DUV6!`zCaa=X+AN zb`O^16xj5yrS@j$-Enm}C~Qo|*mjQ8!?nMy8tf0J^4-hhocQ}9Crdv2ecJYRgL>4N z<=wHjzgcJOU9Oc{f17hU-jhnH4U^+-4|2Xz&NuzAZ+MPpu`nqzSA;OQDocFW8`l4I YJv^o|G#KtF^q3<8e1m;zz4z1q05{6|CjbBd literal 0 HcmV?d00001 diff --git a/tests/ref_imgs/widgets/obj_pos_no_min_size.png b/tests/ref_imgs/widgets/obj_pos_no_min_size.png new file mode 100644 index 0000000000000000000000000000000000000000..658e5c6c8836049cbe445d1ca56d2da658832d94 GIT binary patch literal 1328 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV0^&A3>3+_`SUoCS{L9G;`;UL*SBxqK701; z;lqay9z1yW?%m6mFCRU6^x?yYA3uKl|NsBnw{IW5|6O(MXX@6k){8zXPW#+{@`vv1 zPo68jq-^SoVQ`ip7rm(H|^|?_uv0seEBD;YYvh7Jq*8 z=1tkg`}%V}W$pO(`}gk)7cMx=e;v8{&97g-&Ye4V`SRs||NdROcCF*s_sad>Zr!@I z^vchbSH2%QdA?`I?FS$JTz~fI?fZ{+@7_&Lo!!pBz+&s^;uuoF_~vT1|D!08_QKoi zE|oC{1vu_0+#~Z<=0fo^ySo4SX0CI5jNa+ZPCWZ2<@297jm*Q{^@k>J-9B;2%p6_s z$+il1I~`^9d!H=a&Ty?t$u)B4+R#+ROWb?eHeCHOF+cveo1bEb&*$0iqQ5?j*}qcv zi_(FBv~qhha~1Br92+KkB;IT919c#92}7)q7<4R{#)@);w?WrOViv1EJpLL ztW`^9I;fYy|71a!tN=%uL$-qQ-u_*3f*g;oi=B}E?z~fxrKw{Ji&5Qfpr|lM(sTY4 zgO@@lQXCXI=Gae2oNo83$^*UUQEX=1_81XgDN) zVoS7qFq7kxKaFR0u^K50xSW$eu~EPM=dZITU*7CjKMvMlx&H%e(WVHUbN`B_- z1Jn#O@6|2o6TjZ~{@%UL|M}VF-qRtX-`?$0oiKan?n=%l^569v6^i~j#O#{0k1yqO z*4<-P6JDOO72r_1F4R#Svu~H;=gF>*?Z5voR``CpoTcf-R@O&hr(bu^XRiGB{ofYO zCx^cleFb_bE?eO&@6R8ZW?xx8Ra*W2RQmG;2g}E7{v%7vPluIfzP`@EA{fY2xINro zJ6?A6^3~Dq3O87z6!y0{2ngZ}c3^xMt<3qo0vM;j*z?Mi_R!1(#@IC1~iZg*Bni~{OiZEGO_GD6@< g{@z0jWcu`gsBy{51?RM0NPvv;boFyt=akR{0Nh{RCjbBd literal 0 HcmV?d00001 diff --git a/tests/ref_imgs_vg_lite/widgets/obj_pos_content_min_size.png b/tests/ref_imgs_vg_lite/widgets/obj_pos_content_min_size.png new file mode 100644 index 0000000000000000000000000000000000000000..a3f212fddc327063260254cb0912130e7aa9a0e5 GIT binary patch literal 1934 zcmbtVYfw|y77h?KR)L7*PDLIkmLgKFR4%qS6*xempoqvz(biHy9dzVTEs-Ws5A+(m zwURQJmq2R^f}A7;Q3EIvuw3E;v}8y`h&&PqA%PemCl5$+5B+`nr>;NyTi>4btyydK z+UrVE;%?XXyxzlLFs|`&q+|@n1;AjOMsY4Eb867igF3lM38`eG(Ks_RqgJbxO6Azt z*y!l!)YR1M?CkXP^u)x(+}xbiYPH+#4u?ad(ag`!o6TmE$z(7XP-*jwL7Y`o7rzSv-B#J>aE$) zKW+Q`4l-u2?}Lqxl}nK|3n5kWr&~>>J(eP|`PP8--tb}oOCNB3Hk36H%2I*s;TZPN zi7H7>^^@!M_u02aVzD@iH5|I<UAKfjZ(tdBMOC%o3Bna4a zg!nZ{`yc%l%#Ml?Tfs?2;7AHa=ceW9BT1+D_~80DIbBWc?>|0r7Q?T|HTT8V+`O*e zfl2>Ru~5Z`OJUPqI5qaarub|S&{4DrFNQ$ODrYBe95x^L|4t?3-EMl6)w7?&tqQ-u zr$<2mC_gaCg8JQ~>Go^{k8kNw?O zvbTH1TqpzpGBEw_4ze~{2UYm;+y zI3GI4cMQ(xPJJU-l!s6k)g4kI{=3IsrFT}{@#-lMg_I0BAHWvpClKNah0k7c?iE_Y zn6LQ9FJ3T(1!&^)KCtP^cESCAcwF(PX8`S)3`Yu3av;QaIHEVMJoiX>7+ynRwEIH9 zc`5d5b?9kj8JIvV?^JnbKj`+?1Zhrg=?(?(-{m&AdenIgN>*ocZv80aEDYHPb@6T3 z;+Ojf5>?h+*2+*GA9n;Ov4NLS(#8P$-|s`D3{@VqHh}D(6M!u)Io1G#IMAZ=2Ea!2G0y^%9kky)yIpuKlvh89)vJHoW03)QG;qVORBdLeE#D zy+gn^!NM{T4(rskYOb&VdKe4fO1CrnTF0G>L?~u#XHK=FIBL^!i{gwWaPx^*HBa z?j%;EWBi%3)jYi?4Nd)IwW{H@!t(7KI<2`G7Oum^l&>!h{&K|UOLJj$5sgytkV?<8Bq93-He0^i-=U=>jp8t(UCfpBRdtpO33kQ)RE2?3H2Aa_C*J3F1(4?8>EPuu6qne#i(Z=QMP z|K;TPT{vfIVr7CrAWXeH-7g^!h9ClAz(X1CkT00(k)0;d&o{tBE|-hNVxdsDu&^*c zKhNXwmX?+z63O!N^5Wv+`ue&?quJix*6Z~mk!WLML#0wFl}edRwu9Ib9f7V6X;HXU zZXPM#I7HYWj;T3P-D{EVO0y!kSuwG!Q|t8U1FDAuDveGrRp|p8jhm@` z^7MW=U7#5gYW&Hv0P@7FA~IY=o|&1cudlyEp!*YFDHMvy$w>mK1Vi9- zb#>uM-=8LO@kJFB3Pr2clF4L$B0ZppzO}W*<#I_Rl3NiMTg2(^?tVh5i7x)}42k<` zk-(kAyNN8b+tVUDxtX)?!&C3Q zLcH-cHy`cGuAdLKy&&KUH|L*C7I(PDI{D#gU>*u$1EBed0FqQ-v);8ZWZ~^yT zO`~OOe%E1xobOx1qBM`^M-#gzl3t$>>=93%Wp`t?r)+TkMi!ZWOZ#c7vX?E`O7Oj? z9iBKcAWg}zFtU4%Np7cgif-aMgC91c1706D6w@4Uj<3d6IEUDNbmmQ|%21q1;LLt#;6bPar2z>MiLKyru7={#jwUW2? z*Z9KcLywnE18(PEK->M#dle-;>G_aft{grv$0(=d8`~o@t?Etro6i(K>0D2KfL4WC zj>@9MUun~BVZpUd2YfY4t5D`ayoB@Mcn2da+Y$*}TZC8pr)=(7hnt}u6dJFGq_gFz zXTY@po6%5l9Am*6ruxT$G189eu>3tSNZ@oOy!vpe{O&1?*bKGx)TmV(oX(P~T7AGZ ze=E;(>C8JK^gDhlyr;89^=Y|p#`f{PFK02rUsdEHoL68=8jEL@LjV9*c*7Rs6#8J2 zIi+jLZvKTzNsiekX!*ucB8{gUU-t8pzSY}!^_tWA%Tm9iTGifIPyG5@)-&{ zE@3b|WH+i=57DRxmrbJOG0w^GQLfJ=E6+4*&noWDdkj+``S{gW9G`6;P*nGXa~%uL zSQG+Y-$fU*f9O8?58H#5aJ1tuf}rtAdiCcr64ZRS4%w=C|0QBD$&Bq4h?NCaXC8tq>>sakou%a!{05BQINPa)V@A^NO3$MMlyRf&jb z7mX4Hs@#Lt>Qc$KYTu+iK9Uy{kfctG5ZKB|{9Sw{d%$a~!o>?jqmTd${eKr7ymd{> zTu24cCUWETW<|${%oDU&HjV!Bik7vI>S~F)o@N+VKGmmiDt82)`QpIIn2x4X-wOR< zzp4{>=35UjE`NS8(hmLercrCg?W{qR1k<5}hDASnjJ7xwLLzb7Y^bU8r z!^?JMVRdl(OWa&~~!*xF|htCz-T)GBl%ayM}oPRP>;o94pqVfHVb0pp`S!Yd;0b%-Q2i(jNM zO|otc!R_J<`b6aYlu)ghP3cv)IVFsJ9keU!*b9htH^VVOP~dWX);Go_t^k_B{+W+4 zM}_WWr~C}xzdFs18-{j&J(1nwsu~>ZVT&=f5jI#?>`IEaY9bps*pEi-Mj?%mfFS@I zz|==jL`2Rf+DPHaDB5f(Hsk=)-i2XyEIq{}IBFcjq%>Y>J5i0d302U>Iy}Z_OTAfb z;iERk(v!VKX3|x1nb2BB3oi``mz5rDJ@-SavZ{Cv+qvS@maj|{CMRfkd(v{VV=Go0 z4%ap%&@i(vk0pqiF7LLT-+AVE)u)`$?<6!I*E@*V`#b%AU8n9%$&#j=aQQai9q{tF K;NFOh$owa@f%~uk literal 0 HcmV?d00001 diff --git a/tests/ref_imgs_vg_lite/widgets/obj_pos_no_min_size.png b/tests/ref_imgs_vg_lite/widgets/obj_pos_no_min_size.png new file mode 100644 index 0000000000000000000000000000000000000000..5f2e3b3c0a1c851d29be2d04481718577a468d82 GIT binary patch literal 1669 zcmbW1Yf#c@6vh!qNwcuETC-7dNL^CfEnBm){+h0sU2L<_%2qa+tlZ4*nXLvnP1d$) zDHj1X1H-)MmZK)(CA3neaMjes@PddSAb&0*3X9v99cRC|@2B&7&hwmi-kCFRM#O*9-1Oh`rAXXv-%%Ys_GqhRYPQ<>*5Uo}_IXNkjNJd6RhK7bjBGLHx zxI&?rn3xcY#cH*BW@g4@GMUY0sZbpU~<9rB(S)5 zMmcTP8O@L08@yiuZ?JVQHvY1Ew z`~&4vD7iN&uZhezsHV+=iMf~;x=Z=Z%(6c`awc0wW_K|)o}|g5@|SYCoX6w+L~h;0 z026BU0)ap%6q0HA{^X%Z<|v25xleiOO_KVMq%>AJo6WvYDZJZeNajv&Cy9Qe6joPP z>vX#Q{{Di3f@})?XG*IlNm0~2Q`|j$lG2hxr4J7e4-5=YsnkqrL1HckOYQTej15oC zg;D$XLg~&1#xx)3Q&aS-vdnLfr3+r{Z9RF<#MT0pv^+<$A!-pw@x zeBsUWP zsLKVC)<@dBNa}nU!jhH8qLDF>9DuuOSgZ@ykc~^%L-m`T#hQONG_e9B>V};7ULx@ql+m*%CDnhCK7g`^RUNmv}%{79s^t|*0g_Rndbz{ z$nzC{`*p*yqbH2Uw}-ztZyekmXNzZbNlODtdd)Xfe}T?$Vx<%8%sCEj8D3M%iuJnJ z-K6TROD+C#;YFi33Ipw1J6^UMmVBh-5rF(Y4z)dbQtQWq`KS1ujdN_LotM6HN2YhK z!#XKn2VC7_y^-j5+z428qwcC&Jza8wTOqx-yFffPR6hVQG?k)}QB4#b}P7mBO>egZa%n z%c4CA#`8|NZgKPAtg-Uhf4|;Y;7HXq*d!%HWBd8)u#xuat9xA$5rwS|SB6vURIb>y zm^|O#qqna7yuAJd=9`YY%h|d9~BmIAh