From 76683952c7789029e3082ebfe310d8d1d9987063 Mon Sep 17 00:00:00 2001 From: Pablo Fuentes Date: Tue, 23 Feb 2021 06:54:10 -0500 Subject: [PATCH] Refresh dialogs correctly, fixes #1866 (#1931) * fix modalPopUpRenderer refresh and refresh dialog when it is shown to fix #1866 * update themedBackgroundRenderer functions to respect fyne style guidelines --- dialog/base.go | 74 ++++++++------ dialog/base_test.go | 48 +++++++++ dialog/file_test.go | 4 +- dialog/progress.go | 9 +- dialog/progressinfinite.go | 9 +- .../color/dialog_expanded_theme_default.png | Bin 37534 -> 37529 bytes .../testdata/dialog-onshow-theme-changed.png | Bin 0 -> 4003 bytes .../testdata/dialog-onshow-theme-default.png | Bin 0 -> 4189 bytes internal/driver/glfw/canvas_test.go | 1 + widget/popup.go | 34 +++++-- widget/popup_test.go | 94 +++++++++++++++++- .../popup/modal-onshow-theme-changed.png | Bin 0 -> 1977 bytes .../popup/modal-onshow-theme-default.png | Bin 0 -> 2471 bytes .../popup/normal-onshow-theme-changed.png | Bin 0 -> 2150 bytes .../popup/normal-onshow-theme-default.png | Bin 0 -> 1816 bytes 15 files changed, 227 insertions(+), 46 deletions(-) create mode 100644 dialog/testdata/dialog-onshow-theme-changed.png create mode 100644 dialog/testdata/dialog-onshow-theme-default.png create mode 100644 widget/testdata/popup/modal-onshow-theme-changed.png create mode 100644 widget/testdata/popup/modal-onshow-theme-default.png create mode 100644 widget/testdata/popup/normal-onshow-theme-changed.png create mode 100644 widget/testdata/popup/normal-onshow-theme-default.png diff --git a/dialog/base.go b/dialog/base.go index 993bb27b70..ff863f910b 100644 --- a/dialog/base.go +++ b/dialog/base.go @@ -40,7 +40,7 @@ type dialog struct { desiredSize fyne.Size win *widget.PopUp - bg *canvas.Rectangle + bg *themedBackground content, label fyne.CanvasObject dismiss *widget.Button parent fyne.Window @@ -120,7 +120,6 @@ func (d *dialog) Show() { } func (d *dialog) Refresh() { - d.applyTheme() d.win.Refresh() } @@ -164,12 +163,6 @@ func (d *dialog) SetOnClosed(closed func()) { } } -func (d *dialog) applyTheme() { - r, g, b, _ := theme.BackgroundColor().RGBA() - bg := &color.NRGBA{R: uint8(r), G: uint8(g), B: uint8(b), A: 230} - d.bg.FillColor = bg -} - func (d *dialog) hideWithResponse(resp bool) { d.win.Hide() if d.callback != nil { @@ -178,8 +171,8 @@ func (d *dialog) hideWithResponse(resp bool) { } func (d *dialog) setButtons(buttons fyne.CanvasObject) { - d.bg = canvas.NewRectangle(theme.BackgroundColor()) - d.label = newDialogTitle(d.title, d) + d.bg = newThemedBackground() + d.label = widget.NewLabelWithStyle(d.title, fyne.TextAlignLeading, fyne.TextStyle{Bold: true}) var content fyne.CanvasObject if d.icon == nil { @@ -227,31 +220,56 @@ func newButtonList(buttons ...*widget.Button) fyne.CanvasObject { return list } -// dialogTitle is really just a normal title but we use the Refresh() hook to update the background rectangle. -type dialogTitle struct { - widget.Label +// =============================================================== +// ThemedBackground +// =============================================================== - d *dialog +type themedBackground struct { + widget.BaseWidget +} + +func newThemedBackground() *themedBackground { + t := &themedBackground{} + t.ExtendBaseWidget(t) + return t +} + +func (t *themedBackground) CreateRenderer() fyne.WidgetRenderer { + t.ExtendBaseWidget(t) + rect := canvas.NewRectangle(theme.BackgroundColor()) + return &themedBackgroundRenderer{rect, []fyne.CanvasObject{rect}} } -// Refresh applies the current theme to the whole dialog before refreshing the underlying label. -func (t *dialogTitle) Refresh() { - t.d.Refresh() +type themedBackgroundRenderer struct { + rect *canvas.Rectangle + objects []fyne.CanvasObject +} - t.BaseWidget.Refresh() +func (renderer *themedBackgroundRenderer) Destroy() { } -func newDialogTitle(title string, d *dialog) *dialogTitle { - l := &dialogTitle{} - l.Text = title - l.Alignment = fyne.TextAlignLeading - l.TextStyle.Bold = true +func (renderer *themedBackgroundRenderer) Layout(size fyne.Size) { + renderer.rect.Resize(size) +} - l.d = d - l.ExtendBaseWidget(l) - return l +func (renderer *themedBackgroundRenderer) MinSize() fyne.Size { + return renderer.rect.MinSize() } +func (renderer *themedBackgroundRenderer) Objects() []fyne.CanvasObject { + return renderer.objects +} + +func (renderer *themedBackgroundRenderer) Refresh() { + r, g, b, _ := theme.BackgroundColor().RGBA() + bg := &color.NRGBA{R: uint8(r), G: uint8(g), B: uint8(b), A: 230} + renderer.rect.FillColor = bg +} + +// =============================================================== +// DialogLayout +// =============================================================== + type dialogLayout struct { d *dialog } @@ -260,7 +278,7 @@ func (l *dialogLayout) Layout(obj []fyne.CanvasObject, size fyne.Size) { l.d.bg.Move(fyne.NewPos(0, 0)) l.d.bg.Resize(size) - btnMin := obj[3].MinSize().Max(obj[3].Size()) + btnMin := obj[3].MinSize() // icon iconHeight := padHeight*2 + l.d.label.MinSize().Height*2 - theme.Padding() @@ -280,7 +298,7 @@ func (l *dialogLayout) Layout(obj []fyne.CanvasObject, size fyne.Size) { func (l *dialogLayout) MinSize(obj []fyne.CanvasObject) fyne.Size { contentMin := obj[2].MinSize() - btnMin := obj[3].MinSize().Max(obj[3].Size()) + btnMin := obj[3].MinSize() width := fyne.Max(fyne.Max(contentMin.Width, btnMin.Width), obj[4].MinSize().Width) + padWidth height := contentMin.Height + btnMin.Height + l.d.label.MinSize().Height + theme.Padding() + padHeight*2 diff --git a/dialog/base_test.go b/dialog/base_test.go index f1f2395159..7c10d2127f 100644 --- a/dialog/base_test.go +++ b/dialog/base_test.go @@ -48,3 +48,51 @@ func TestShowCustom_Resize(t *testing.T) { d.Show() assert.Equal(t, size, d.(*dialog).win.Content.Size().Add(fyne.NewSize(theme.Padding()*2, theme.Padding()*2))) } + +func TestCustom_ApplyThemeOnShow(t *testing.T) { + test.NewApp() + defer test.NewApp() + w := test.NewWindow(canvas.NewRectangle(color.Transparent)) + w.Resize(fyne.NewSize(200, 300)) + + label := widget.NewLabel("Content") + label.Alignment = fyne.TextAlignCenter + d := NewCustom("Title", "OK", label, w) + + test.ApplyTheme(t, test.Theme()) + d.Show() + test.AssertImageMatches(t, "dialog-onshow-theme-default.png", w.Canvas().Capture()) + d.Hide() + + test.ApplyTheme(t, test.NewTheme()) + d.Show() + test.AssertImageMatches(t, "dialog-onshow-theme-changed.png", w.Canvas().Capture()) + d.Hide() + + test.ApplyTheme(t, test.Theme()) + d.Show() + test.AssertImageMatches(t, "dialog-onshow-theme-default.png", w.Canvas().Capture()) + d.Hide() +} + +func TestCustom_ResizeOnShow(t *testing.T) { + test.NewApp() + defer test.NewApp() + w := test.NewWindow(canvas.NewRectangle(color.Transparent)) + size := fyne.NewSize(200, 300) + w.Resize(size) + + label := widget.NewLabel("Content") + label.Alignment = fyne.TextAlignCenter + d := NewCustom("Title", "OK", label, w).(*dialog) + + d.Show() + assert.Equal(t, size, d.win.Size()) + d.Hide() + + size = fyne.NewSize(500, 500) + w.Resize(size) + d.Show() + assert.Equal(t, size, d.win.Size()) + d.Hide() +} diff --git a/dialog/file_test.go b/dialog/file_test.go index e6c7bc405c..fdb43c4754 100644 --- a/dialog/file_test.go +++ b/dialog/file_test.go @@ -387,7 +387,7 @@ func TestFileFilters(t *testing.T) { count++ } } - assert.Equal(t, 3, count) + assert.Equal(t, 5, count) f.SetFilter(storage.NewMimeTypeFileFilter([]string{"image/jpeg"})) @@ -412,7 +412,7 @@ func TestFileFilters(t *testing.T) { count++ } } - assert.Equal(t, 4, count) + assert.Equal(t, 6, count) } func TestFileFavorites(t *testing.T) { diff --git a/dialog/progress.go b/dialog/progress.go index 72da3794db..56386c0981 100644 --- a/dialog/progress.go +++ b/dialog/progress.go @@ -1,7 +1,11 @@ package dialog import ( + "image/color" + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/canvas" + "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" ) @@ -27,8 +31,9 @@ func (p *ProgressDialog) SetValue(v float64) { func NewProgress(title, message string, parent fyne.Window) *ProgressDialog { d := newDialog(title, message, theme.InfoIcon(), nil /*cancel?*/, parent) bar := widget.NewProgressBar() - bar.Resize(fyne.NewSize(200, bar.MinSize().Height)) + rect := canvas.NewRectangle(color.Transparent) + rect.SetMinSize(fyne.NewSize(200, 0)) - d.setButtons(bar) + d.setButtons(container.NewMax(rect, bar)) return &ProgressDialog{d, bar} } diff --git a/dialog/progressinfinite.go b/dialog/progressinfinite.go index af937f04fe..a78090773a 100644 --- a/dialog/progressinfinite.go +++ b/dialog/progressinfinite.go @@ -1,7 +1,11 @@ package dialog import ( + "image/color" + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/canvas" + "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/theme" "fyne.io/fyne/v2/widget" ) @@ -22,9 +26,10 @@ type ProgressInfiniteDialog struct { func NewProgressInfinite(title, message string, parent fyne.Window) *ProgressInfiniteDialog { d := newDialog(title, message, theme.InfoIcon(), nil /*cancel?*/, parent) bar := widget.NewProgressBarInfinite() - bar.Resize(fyne.NewSize(200, bar.MinSize().Height)) + rect := canvas.NewRectangle(color.Transparent) + rect.SetMinSize(fyne.NewSize(200, 0)) - d.setButtons(bar) + d.setButtons(container.NewMax(rect, bar)) return &ProgressInfiniteDialog{d, bar} } diff --git a/dialog/testdata/color/dialog_expanded_theme_default.png b/dialog/testdata/color/dialog_expanded_theme_default.png index 9021e756a6218470534fb2d27b2261ccf8056f69..4bcd2a9df938114861afdc3e27d2efaac344f3b3 100644 GIT binary patch literal 37529 zcmeFZc{r5)`#(I=BC=JoWiLWe)*?%iHDnpen(Tyxne199*~-3V-$uyJjHPZxWM_*XvhUA1_vicl{r-8LKYqvaJpX;~%E-k`8r>(*IU>fU3Gd|4q5~P zL9eNyYJfmc&%(dFG>70PO1_iM2t+VKQ}u??le7gQoxjnq^n>M@&fDatOv+-9PsM4o zu!!?Iz8O99Yp8Tk)O&2y`QEhnq445CeD+XvQ=H|+gzB1VO)53hs^aTb4 zSNr9Ny5=YC%fZj57-)ntPYqCgGz;737Hoo~mAUm*_t`Oo`!!AC9;?JM7xC;TE~3f6 zSKXo$h$qEPmL?9bmLSs+6RWPakyj?@X%Sdl{t+_yFi+y|r{vJ7D01P*psxS1;O-WM zKJr;vh2vhLhtXd0y3Tqr#N%W{ujbWLi(TAL6y!2*GLQE)e$HF3%hk0!7Ocy!-xVRp zi_7ujugl@oyi$E?k}6a3k;&J(dE2k#*%})1tXNDgs$-lg(=e>q&VAH6bRmiyMtPu< zvjdh3As3yWZu>(5D@n!p?<47SsC{FuJ^3Mzcv3o->o>6FElBJmGL82|e*WTRTy#iT zC^1(?uymbkmI3a)J&s)HX5XM%fmigA!Xce2wT;s0lDyPqnIYXPztkG6P-uURL@28} zk4k2K>5>h0d&Z9T^5_y%a;@PGMPguNQkTL!+?-7bx_R9f0q>W2q7qdlVMVK`QK_Bi#q*Zm+(LPbid|2+ll2FAM+WFBt*rBin29rz~RA)Avf;1GH(D zR|oWXdnX-f(|)&O@M{c<@XS<*o_RmQb9 z^G4R4*;qZrkvfl`2m4D0GE!3K>Iqd&18Na$9<#k!>&G@+O6%?Wb2UkIrKN6!Qj22a zlF@RTmrU8Yxzo7Gz0$bHqg75}Lm74s4ptstSX5p$?=89?Mt@W{vhC^WS`40{J$#5% zA9e55Qm_dPS$T{-)MIC{Hp7ox@9b@I?j*akvyr9c#LsA@32U2KLfPa8>y|V<^+=Aj zJn?|JgT3Yh6Jz5VpOxP;89{*?WTICj0-Ln3u&}$kJFTrd(49;yD=8@{E}s8da5R%? z{Ao=p%vb%)JJGz|FXDmasKrr@a}sXjb$2doXCR}w6}si--@jAvBahWCb;(Yic-a!h zEz%b+l;Qsvg<2nTZzdM#WgI^xxG-8hPef0;`fiw5`uu9zAFH@B6B9{cgxBR~^1UdlJ(5WX6Q|6>yVcI|ax1@6-Q{X^Q>5k+%-lQz-!=vv z?2ozON=DwNO?QOQu|~07c`#C8r=2L)_3fMAYM**4J^8IhZcRxYste$>?S?ef{r&X)8TS2SaA=k*fTY z2m2c#OxLbmtDOwo8F9!cadUNa-0X4>TxnC<*AG~%bm(b1*xza1Un^r|mzYjRPw>@I zC!e7Wp{1jff0C`xr}6srYiDQYyS21l=U`lF_wL;jO81Ik`mq#r;5T3v9v*(MqI4iB zBs3E#J2Bkgvl1t4sC(^KoZYtsi-0w}ho@1IdHutY3JeBAd4-&4MJ~F#pM*e{dk>+(pI~k?$z%vxD|Y9_})QC)zKYgB8%AmT(w+4$0LzsH5uXKuin=flt^!Yoz{IgB|Q)5%pKCJf+q!F{NF6v&n zt*xzgLe`M!xC104cp@DwZAC?essHYytL7FKi4dMCgRYGqt&F_C=|-Wqg;e=ukKNnXWmNGEt+!I zF&P8-H%^%R>+MH$3~`X=kVs01$2e@jJ0g+z1sw>#c!S@+ex0xPyKtH`Qt4o4cYcKH zs}yC!!S58jX74ObH0mjCO($9fULzYLH|F-+4EAtiUgFC}r4P$rudcysO+7s(A}R`( zk1ibPF8fwlQISIIX~@jX%+7xBF_?;A>9;5zw57d)FfK8z_Sq?bo5N^1Nx)SZPA(3Pntg-`BO&EDN{HhVbd0c zbWq89k>N z*+9#FtRLXdYgp~q7Sc^Ce72)>u%(CR4veR~+&90aMna1F$>5rAuw&nihA=^*(hhv; zl%hFdLm&`plWJm{uiP<0_4F#u&0wM1FNPELE9g6uo09PA0NpssYX){0h;e|eNA-C2By}%d2by`OTxu_kNa-1 zhNxs+v1v7b+2Z^xShu_wJG=d|u0j@>ZX4MqIn!VJJW+TNY6?uCNvLIO_i8yLay<6_SoB?_BxG zP(}RS^3uKTd+6FcL7o5YQ|e<3Jc{OP>LvqtO5(DD1OmH`k^vxti8rqHLxhj4-Y{sc zNGC(GkK~l4< z{dBn1?vH|uz|kM8+`;Q~Au8>DU#}Vz>1y^rQi!))DB5u8>FCh1WMa%zII;0AT$xqi zQqkFSa%WT`c$AvH2+CY)c0;i@GG#+{{Gy3& zxjbmFb~^8GQWwHb|mu6fC!U?rKO}agsGn@!wk8(xxF5k@bU41Y+PMk4aGIzi6fMmHsrCV z=h$Te`9JtgxF+WC8(In!OIMNS6t1bcsu)H3XW|`|RD5b`s=t{rqC^Gy1H^=O(~H4^ zipt8dJ6qJe%=?~)5FhZ%H6SIAN>V1M!pJ|`Xp%Jl`Toe; zyV{SnACj1vS!zbcWX&0=MST~KjH0qK06Uj1T+rwb5Ef>j@X? zUbcM4U_{W)=(7sGQern9Oa}%_lk)E&kt_@^PZ7%%6wXuCF#~}86JyQRHPo&l9J^ug zzN7@IdGc9PqnkHx{@pk(EiK*E^yv;>f}NAKw~+#O{}^N+pWEKvR@EQwvyLVIcispi zSp%HI{^yDdgS)q>@4Q)Vq$0-Y>gs3;wEV_Ft1EE1Uk;GaFJ1U*uO4a&HxIoalA^_qA`w z+#?ySpI!W5Ouod>dijKm<`IcVAgO{KVg}zFKJ*kY;kk{j?r!pjGjo>|O#%Z0W6I9Q zpY%ao;s<_eDtY?LBy1$u6kQW>>FEFilFB`#p(tPOQ`4uEyMi(Khs>9HtM#Lf0v#5g zn3xDxnVF6C_TEp)w`R+_a{+?#XRUzrzm>eHsR@dCR@MzIcACRb8ewO}qMc=RV%gEW zmnig@m-DClAD#;lV!zf@k;J%a8by15>5BkSCUGIYD;1IZ?B7?%-lW$I2xuhSL||zs zJMrDz-%l3tzx@iU;8JL85y6SrN2q93{=s&Hld1_jB7IP@ zLLw(RsJw6BTHyD7Z}x!FqM%)^)%tgZT??LFVKsYAj`!xVK~+O5XjRF3BZPyrz8SgY zxsmSWcwAY}tf#`YX{wng{vP%RS>r~1kPKoLGDt2^9@l(nloR`<5AuQV6X)RIXy8^+ z8zc}0^p0wXQ(o1Q6!VEF)s>RMQKnAiB~6L&hQYOGxHt+Z`zG5-CCB}VOF2J+L)v-z z>s!m{L$eFHaTXVGCMG78W+HEnU(`MFh8dDx{YtldUfjw|Pg!B%AK$CW1!ovu-pnff zBVLi>vh-l-W^ng&b~Iv+l{Ul;$_e26)y1(50PBoLpIb)L%noAJdOmBMGq`t8)A^Xh z%P9ulz29A_vi6;9-u_TtdeY?y^UPG~rk{VTT^RiZMJzr(KJY*!ST_nT?dq0aY6#j& z4D!g>+9otBdi+pbQaijE9E4`0f7zlQb@rO?>V;zcr?&;_s5J^81E1GUkWvWx87X^) zg~jIz|3@BxM|&*(d2!y}-f(#l2J;}BYnBZrW6rCEUUqf1FK2EG()ba&Gfya&8!@c= zo`%>Hc&l;sY$^0EFjtW1i;DOvsJV(n-&-H+)l7qa;QaaXVQ%RXb{$Y|_xCrN(F>V~ z$-yR#cezb3L$NUjMyu!QTH=(#wH1NK<1KR7&-Zdc5a!;v z%+~PZwWvY; z3dFy)#>R@jJi=BfB*jNTQPYmxaQyc175qd z7B1^Ho(}fEczV<$+){v*X-rYvuwZ0s6!+J_!0{~6tVea*Y@!OW# z3(CvO3keC`WMufy6Eoq8FRxhu)B;SB`tpkLqduhV`f3a$8g^e>#2mETZ@A}&O8jQC zUdEX7=9!m2_!3IbDfj4(GC?0=;oiOEuzm7VW!}@Yd3)AWxm*WXhcr?P-uaTCD}JXG zwBMU`^QYS=V1H`H>mR)5jiW=4dL4n12HQ;-Ub?$mcS&G?_2i!;@aA5=D_yc>jq9U^ zdJ1b4PT=zWV5aPb2LEpfmw-ap@O4x+$y~PwNG@{W0-xiKs2=@i4}AWcZlYHQZ5R!*D&{d{BzYdl~>T8`0aTkl>OL4nQ0EE8Ek5t z%ie!IZzSV7nj4B~b^328(+SzKcTH0`+5FgU)R_-J-~2CqBGc%ove4Q;bmF$F%LTgW zq_dNrJqnO0^RyG?+B|2vyC4g$_TKDXHfj1BAE8Kqm`nQ!!5*P#0!@5nTk_Pt>A01R zpzXHwq2Bn*06+dCj3^h=b6?;5X0=~I$Uz`7{j%UW^Jjy0m%k;7FG1^a;k57m)=VQe zTu(d#1eK|dmJ?fR%z14w>}>YA#7KaXkQuqIiXjkK30S=$Xi<9L*U-PdxsKa_H1|?z z_d9^oeZs3@l(>Pm(lpcq3`py~DV@bH*y3ZP)@`up zr*vRxb4OpncaOn$UE?m`SXo)yer=Wo?aiMO(p_~-f?qLHenohQg8aMri7^m(D5A;4 zlb?|=_KC>T2*e~LKgUG-%AHjACZ93a+WJaAfSJ#Z&|T*e1{w?WqFzh#LLekXAeBl+ z78LC|PSe^W5RQ_RSQ>^g_2+5hmtkNh?Kb91aZwDC2t*ZS=lP}qlhs`=kHgIqqm}kI z=LQP=WYs`Ih@d17m8@R7M2p{wKW#T4q2nrd(ynzMCr-b^{xMvUa272S|_LYAB zNkCJ5mjSR`p*;2K!R|_`!csRGHooCVKu4S~m!dM-Nrdq zYDBOq<(8RF=@Dk;CuV+eV1s|(32$Ph^GiYq2X`C-)S>Zw=A9pO{DSeK?Ene>9W#d!5?OM$oc~Ms zzdxd)Ohd!wkMQQ*U*fUm_fvi^1#aMget1iyLO4>xSgN*u@*HgP94zzTP>asK18qD( z4Yutu@Uh#<>3$BL)q9k$45mff2bhfJjmD)&F8TFN$)1JD=4MLp@0Qd~j5Y<}u$l1R z@D=kWe;=4I=*swCY|dL9kk$%e+Cbq8mWnmlZ;6>bQ~~APRT;1^W8ngMurq>PvK4A5 zqIU#<*prraa?tib#zfFTK-o)bgtCJ=T-Xzrm}rG2dP8xwWIPO-;Qdyv;6#l@1S0n< zo6N%`f(=6AmZ`xt4X=wY*pvbr2v)}sUUa}gI!6eenc?m8_)DFs{h;;#PHUVMp|oL%@3qf-2+_+9`D7DMXj-qPqCTo242|(*nN>4v03QW@1mevNAXELI zfjzAPGh7gu2q?EbRtUP<{{DUl7rj)O#XfZ&Z#VkGhh`vCKyinK*$WLlIGfx*jzn};;siwcuMg0EIicPdku2I-1R`n1E0fA0Xc+Pn%Dy}G9^FR z{{;}|%+KVf%AxPxCz(Kr=uVfHU0VqJbc7Wsu7<7OsV+nBlifU?0V`t))o^q9C%yoR zR*EO2B|;EPm?wqdmM7QUq?b)2-vZigodn&Jl4fDr+X3~LJCFR3Z-p)|8(7I;V z5r-pVMa9MS(kFo(hwQXYCZ^i{`}WS`RN_U0iuXST!x$8yG&qwKSO)TSPN}@NYTk!% z!W0#;Uwb_L=X(oY$7*MkU?jLt2~v1d$QVQQ1PrqH1rrbgtiTq%V2Tye>uztq=D+y| zSbKa4l;*+gTj9TZGOUb^QR5zM0W&6|tvL833N&gI71cP8<@ zm?h#iC^N%y`t-wzhOG&|r2v3$2QxwY>RR{A&EFgBbi|9oU`aq@`2ggUo%Hwo3wtYA zHOb@H^`E(@nSqzwz8B(sHlU~hy-mYs8MyW9(bWbZu3@%xGZX`Ub;PT@iitVN_ZhGW zxqgP5?=x%!xB6dayxV|9;ZgLjGbyu#<$tn9&9)}P3(XT2>-+tm5P)snUs%l_-2mdBLc;`ZJMn#P zVN|*fD-w1}h$Hmve-;6@P^2>Nqq)39x9YkcE1-=;O-iAwN|p8|4c@=}WMTM<^h}Af z5foE?mhqjnd7&3imKrw(zwiXCzV&Q_;Q{@B&GYx|bUAOR0+dY5^aHqRWUVC-K#3Np zdk6b_>GLkhQ+~f@5gkQMLLk!dK?gX~oj#v-R?4y0sUW=upqg|5_lcu;pBZJJ^$`aO z(FGyU0JJiY2lA)|%656dBKHJ^j?HXlB84um}ij}lx>3xItcXsTk%bdQ_+8Ob#9>6 zjkrBmkOA8g1u_n$$Oyds3Y68)rk!Iv{vUwU0-$Tz`ZGv3f6h zDOWvyv_^6UEr(mZX!#EN_XMaFK!k^jdfdaITmu3Ec$w}t2L{;L<;iUUo^FPf0#1pd z3LO_pd$d?h01PJ;zYH~<_^5?`srew#+WI?8uOtM!>sZZkK4_dv;aim4R9ClY@C_Jw z)WR^|3&;Pwmks!DETgHuo_5mw#oJfT^pBJ5#8DO&7N@;urhNaBfR2Fi$o`YrmW{q3 zEnQ=|TG9`Q3LbkF7Nn+TC_qtEwAg*J35X`(4j(h-y9ylcZD(O+t=(#Z`f4ERF!+PL zWoY5w3Y%?obT%dGo~d6M)S}ugcF{{ZJ-{2;bDGzjL*q>F!{5Ciwc!l8|;&rO|aZax?X@8(>6SoH(@778sd(@H~ z&N>q@Ov^gOQacL-b;-?krU z7M&Ui;afc9C0{W=vg~+QwuDK%#LJCl&erSu>%TfPM0|zO+I?dy4yRi_H)Y>ewP3S~ zC%nC*;talQv^rG1WI5exrL9%qy|$p}yE=QX(jM6PQmf`b$c9P>l(x19@B(DAskPoI z`oMFD+*eZ!UN_DgU-ILXso+$><`3uK7yI4lPTk>~c!c~~HOyR5Z}|q3LQDy8_y2R> zM$Y{@r=x$MLc1Fm={Ap)mw#<3YhJ8&h?MyF@99 z_iwcX!EFX~N9RRqAQ&bf`k|6~XPk9R29X2GBhQnmr@))81{`tngzT@EEMW(VxEHPP<~1I+Tx8~3&Z8z@qQcRfIpv($v?bLlCBty=>Ux}MW~?vMGa!=fKIMJ9K>rb>O|W&8))5$ebu?ho(ec)cPce4VYMdq0Q|ZMa^4rO|h_roTN%?2^yuy!#_R z;4tJ$&+@+oM+s&Y{`I#}C85RY*0r(!CGb&PmV+a%M{&m##B8{Es z7qO#w+0Oxn*@Qw6#zDELUOqH?8UU+*nXRvr4F@BJ$&ICeZAhvnjtW;wl(M~pPv^v@ z+;We0{%rD1!!H2C)W657TJenCNw3AsbKThvlO^A&fvhi0`Bo^m9&ChM8j`2GdBCAe z>qJ{5G?_OiN7y_cm$1A14}GHjUtCfz^lhvc?`B3l|8#$h+ji)^@!)P}inI%`d9Hrh zopbnN6A-=tBRX^@l>`0*%Ec@lmhP-l;4UDlQmsx|*HPOP`(x2vmm^@rK%MEmyMB-6 zdpO5N#J)zFM=N{2liOsIML^0dWwAQHeZ!G3#lUJnQ$gWZK((#i*QVx(u0vRsHIg_Bq92SiZr5lf+2V)3EY2?@L3VZaW5%#uIyYRmK3f^ne8 z%D+RnAXmW``0a}H=tu466K^M7zClwC02XWq`sbBeE?fG}ofrNEjnV7y@G>k319lv3 zptaCF`>0^yGu{nw=}Vr#I@jnG;MH=y&7C}3*&T8NJwWwsUXFBsZ`o+tRUzaPskr+G zEC@R$NF<<_bm&0=@9t7?s?$LJ?Lc9~D3s()WP5X*jG*_x>xCgX!{VyXT8mVE(ipGo z`Z!EK@tsGstFS;x1X=fw+)%2@;ZzrDr^HHiQKI)TPWkm>5mdDV{<7^yIj#>WBZuFI zA3}NHgd;LPJoA;R(B|5-`<#*>TXM>NZn`bxG^<-3MxeO|n9!hYCyV0P`1oqCxqg}J zUp?Bm61TsAKf$TR&~_ATEUA>i0gMFUdFY=IIv$_tw_pXZ(At7@^{L(-vXl~VWrDhC zn;oKMUem+QE-s8*a)A6Zq3`gTGpOdT6lK4BU-`Ak`of53U-qq~h80~Wry{x7Y3c2+ zKgPWPI$EMe?4U?W=CpGC$&1m}ip*q*rZ(VVlVFNd>pgt~$(=(YrayaJP#zH&}Iqr(L2VQ+u{#@!STY}kWecm6VF89~05xhccHEvB2dRjmPY*COku+-2cxed_4 zJ6A#mU#4P;v zYmiALuir+vf|R>kFfHLyN;H+k5VDRgUKD%rdP(ihsD<62ok$a%sG9bGWd_FWwdS8t zqJHBQ+f?Tx7%y>s@4c{hCR-EOaAb0hA`&mLe)8_l213otXh>I2w~m$M!7ox#yyYj~ zTg+0Nf126)Re#K+?;d}ZZZUQt0Q8>Zv)UZzI#5}63LSdhf$e1B53@9o47WhjKEi5# z$H3r6J3>NT`j2MmhYydIe|*URkqBz+!$s$zhI3{5&Cy;?Q!;QT31tMyrsRguzY-EndRA~%b5yuTJi%qvtJ4wv6g?Dnq-E{sS&+nlw zawOb@rCH5G_N$NXzh-qGt0~z#Kj$Q6`}GZ^42q!&=rv$50FKE0iZcYBaPpcgG>v{B z+kzn>RlyH+?&L^=Po>b$aU6OHtW-M``yT8*s4q$o?ERza8s%NurWY+6p0q}=3tR4j zo$GuvuaZ&_OvU#{oAD-=9;Us}3ITf!!P~8LunUGLAY&Y0j})Xm?tqSxP+~?Pmz_{P z3S^*?@RmvO(+H;xf2qYoY%RKrq3NSKjl6?2ch`P8cNH>Uaz+mo(E8!>T9d{%6IH6( zBLdE)x{ylU9-sGdQ7v6ecv0LtGM=@)0r1x z`Jv;|RkDqLx<*Ica`Dm@K7_N0KsC9(ZdPfp^IBL(tKPmVr8BzFyJ;I=W(jDG6fg|j z#k(gzj^laFwS1PrO695ZQ~tt$6dJ&m|JGj;$+@g`YtT?H06J2|?=McB5i@@R?3u50 zgi-E>`UB|6z_D~jg+e)Xw?n5i>A%vYX_@os`7uhh#+VoY0S1*qZt<@<;`R3lPlnkC zxu(C9{<)ED!}l5Jtj2x0su=fsMHYpoUPNjOLL{AEHqofve7Nl&F%MR%;v=@ocN_5` z9~g4I4Gx#+(a&GK--R=CSZ&WF&4{V?_8ueUD!%EH#Iokf)fjhTCdgFQhmq<}kW&Jy zI*~JY+F{2wp8-pSd6IOQ+0P`BvX%WM6BYx@y6Y^9L{;U9&L4U-R}sJ$Nlh+j9ZspOQ&73hl*@O!x!=O3-+F})haAX07g!=sCC8Xz|Ts5bhCg%;D z-|dg1!J5O%7I{7{tVpg&`o@!k9|UkjS2Y?FOOwPRA%nS*J9IZgDtD!})kmWrZUj~t z=gT=+Rwwq+TQ4xgZ+on|)2})k@hyHWMQP)&O-#JNdwHkoZ(06&GXD`>nnjlL*sr4s>RvXtE3PtA>jVQN)&TO~$e3hPJ4) zHjZRL@_#?mL{ALsyO)QNuc9GN-J<#KkEzi+iCV^r7^4~U=iD>%Ea=^b{c=c7XbYFJ z3A$N1v}p$-ziZV2$q@>3_FYq1He(yTe?A@@Y}cdsy?2097Uu(6a*}DgL=}$g3i1>}cE9 z5l2mY_57w-_N_&1t7_eY09E%?lACbOUu@QV$F0@7S7oIw6Q&8Cp^qe*NUUWkowHnq zd09$^zvf7WMaG>n`|hfRRGe7$$aJE&HhZI*admnhYZA1WEVCi$3-Y8j$6AUeG^4cf zsf?!Adh;#f4L>xeMe&{Dc-LNP)Z`hY_Q}C70wQx5^NA$?=crp@S|kILu=#gnDwc8^ ze%uG4DP)IWoS9{d#%*NP;X2k82vmew~DZ8TEqd1^EO-~$f=>NG4jEzm!DBB={Gqgt6(O?cPBHp z{#`MFPx1c7GpQ2}hb+IK9ZW6cq*vDm{mcb4TwYr!)HBS7#uIf!S5o`mp*MQcD0<9| zN5|xfVnXud%8F^(9TJFxc@oB`+JxeiAp;{PlUjMs%Om*3zWg`N&yCW5EIuk-5)+0CRQ^f3{&T z^~31-C1XZ*Ts9Gl)axIsTpDuI<68dW_BtE6JV9N;~ zO&<#He^y4wHl9^-5ZdsYR`dg;^P_=U9ttu;D?^x`EX+5N1Q zG6(96iKt14uVGf`lq#yAir7u=ZorvFVrGbI@*%Be$hQ#~04p!ljl3j)j112bn)Z&?AP)E8nfo0} zqj4RRm_@AOsoq7wMeete87aO$jrgehBb@#^j-KDzjwpVPa~mg{J2h56;!#~l^|I1f zBZ^*{8#J>AjYbAmen5DOvDgKd;>B9dY+kT3+dj*Eo2noTw|~lU*AdG&-ZhmsP)&3$ zDmADc7$7>0m-0XHGRqrQ3VkH&#kxH_F{OF_$$Zv(y^>!aP*P}y+XI*Fcpva2VV>$r zrK?Lez5@B-ZkhO<2o0xp32`eRcO`-i*fR(EJjRRMnSEIWh>LxXXvfzc+_4Z5NW&MF zW}{%}cuW#HzJ1txv6MlQq?}kYc1vOzzgV83p`hDRTHYs3_LWB##70=^IyayCAUH`c zkZ;=RgcMF0>ZHNb88lOUD0Y0or!(L9Qu3^l_sfOr?}GMyDAe0q0d-%67v0YYG_${< zC6h~xSxTgh|GJioW3f%&@-CjX(EB*Q&0aL7D(AVV_Uv!ctQ|ko8?`$+_QeGsWUt`o zjdh${yPX&9og0ykZdePfAQ8WV*z@WW_D}zZljjb;hen~qO)r+NpyLZt#>UkBPMXh# zV^_ou2TSiQbN$F$jg`Wew)EVsv=E4X(B(2c%L~RVc#y}jiUQs`uV0~@YsD+IO^tXN zhnAFf{zkh6_iQqAn6Y(#)yhxlL)dFzht`ud&c36;kXtAskX$(0MBsU)cQ^IhTS??0>gkyYcq1xREz1;c@<0 zdZ~nOy|Yt$*F;k$sHe=p>Rr?#R}JNwzEvGkrKBZ^YA=df7;-i;B)yEpDYH&oK)p(Zh8 zj$XUZ+Ma}R!nuuP3p9OyuO{ssa$C78B(>ZHN$+>Q_zge*>d-BbOuFwEO{7jzN}- zz9GfmQ^I5y?B3sSStpWpPL({-M~Yq#{$QVki3p z^WZjN=Y$~}^L*p2&qzsuRHN=!j>R30pCVGsO~UO$J|vc#PHIWdHTBLXvLb?|K-Qj> zI)su!J~b>6i*%(QVY^3-jm$|w*SZ)i&>cd}v?Z<28>`7Kmc9*b!ly(KN`~;ARa{LW zRSrEN1Ht_hLU_ElK3iYw8)s8ulP>9!!J;(Acia5)QY5Jpmx?_-F*1n%AZvg({M%hq zg!Q%5sU7qD6FFleNJs|jgV#04M25XxJOaAa5oAp14*yZ3IFnR{k?JLE8y3&ehZM=7 zZk*HF4YlC28LgbYk(K|!yEr-c!#C^I9qNLN2&=%}5Xe?+o0uh8J|;)KKvzY+`%AAyUF zu%JHG8-A}V*zY;=rreiHp~$XmxlS5fnf9)M(N1(VM%um-pR{PQ_995N^`c7kP%a5y zh*8O(gZ=3pR!+AffJ$##yMtAaWUtgh&i*E=Bo54);eW;@bZ%@)A4OymAzL*RVDKT9 ztj@RY6wF{pr8Rqk=B10A8O&T|Pp5~Pbn)x#*mV9iw%|L}3y0w%jTTintb4|BzF2ul zGU<~=3qGTmpUt7wBFGKxW+IoN#Y$s1FcInj0h8h(lYkzc_ zC#QrmYRyDce#OuIc0)VVF4=8(vEEQv6H8Nd*ZDY)VR7JAs1eBhPCCNwdUUC?&TL+* zBy7Eod$Aw?U0=X%XuaQIg$2)U^0ui7ydw|*wx%9E0G(jw6A`O3<-@sIYFrUZ) zI)*jS3n?yG1*|ouF}Hu8t;CnL+X$Ot$1r>Jt?x@g`S+N96mzxg6?lD3(kl!OC z$&n)7^K3U+8_bURCcl>s6U#Y8(#^vuNX?twU#fD}Yy1|`90zjE$xmE=l3ea#7!pM) zVRe0vV0!H&hq4WrtG+p9ACdfLj#x@aC9$Mp?Q+R{ISHkhY7Etk;f}Ihz(Dei+7`C~ zXZBR0Mr-@L?lVH;_gGX+IcYBM)r5%AH?;6#+|ubzn#QwuDX&XWBEjXS>Z`uluPT=m zyvcXtDHC-DlMW&%$LQ!EgLZ12ggh<6?;>NJaGbpwE510%G;OaEx{|JN=9A`AOVwPjfB1I)K}t1l zJt_uMaf^c)HzAlU*CG3^kB3-nqC>o4pt@5x7H$Zo$?KAS74kU}&-(h``G3Kts^by~iCVeyx=UtRXi6eQX zv6`2EzH_w0SVtm984DeTykDwI=5x1(5&JEZF(wVB8~p>M?ibiWE*t zDpE3?|19A|z&}w5U||Cb-=7$1Rx&2`Ez0|K`c(SpDeF4SM4rX19Q1>Va3WF+jhVp9 z+(zj%F#IURYz&i74o@9#>!ER`f+jsDzQL`7Psi~QD)IDf46tN*G&M`w7YHFCjmhjELsBCP#* z2%l>9YZO`;Ekek9h=N`IEkBj9H8=Zdmcxk595A-_#O>w} znkHa`zU8cp8VG%NOpl23I6hI7+()>(LPWhML}z1MR&#MFPh`9$pD4_^v39bppR1kl zMvjgUd<+P>B@8>RA(axySu`V7MvX>3s2IbB>$tTMTP{S ztwjztKVrV~Re^4nPVE&6Q=rihKad6xE=(dNSXmEcFe ziO5%k624U3+G5)>`H!Eg-g*RhZL7$X#J=rQB$vjyV=J0QF!^u59}ji_{B(OPs3~R^ z7LA~7JG}F;2gcB8|H{{-@$qp^w>pXpLyo1s1QNwv@T!4d^^TQQ#x`{nhcpQs2|E<0 zq}{hO8?SO&SkdjMP$GH~P-=wk4jY=TuI09exgjW1uWf-%V+ zY{+n|5*#Dk@+df!^AL|g!a2yVy#v)ZMy(YB$_vu`@&d-ZYwyw3d*maYB1=|H(2?N=TTF!5Gmt?$NvO9b` z*LcP7HYdCAsyfat@|Ehw>xz!8#pu@&iWPf(Vwat7J)-yu#hZ8k0=+kc$Af4O3WCqq zH+<|{`d@<^8X73RF)?ARPKM$h9Pn!gukSLIIG9JlMd=0t7jS{(6$(2G9$}MGbBa;0 z4rtAZ1|QNc{Ai{tbp!l<+mxf#sXa%#)mQTm z=Cjh|F@C~wMa7b&oE<$aATFc>cc1Wm29Xg6-vE#@cBh4uD5Rg{=E@smx-%EqB<*ki zbgNuug zF9G_q=bgelp^Res2lvWQQ&|za)&Aea=Jo2b<9yICZGD3k{1Glr@w#E*NUH9dR^CRn zqw&p~EnMjF<~9LC6$h1IZKl}s$9AXblWwWQ5K2rai3nKlg;Oaq1=CJ#h!a;xuoqSEfiF`*euke z999H(I5s-5@4^^AcYiL&GSyb;Mg=++8ZZZ7Zx6}D1*7uhvFyG)iX0!h<*uU%>5A|*?n2Z6Ow4V zmB3o~TR6?KJEs?<^=;+QSE(}vhq#Z=Hf}A(7nPoQV^Fs)S;2XObmqz#;8B|rQ>++< z=Z&e?D~up3RmUKueNL}O)JsN+9ooLP_Kc9E={YdBDP|EVoWnJq4h{!2t}&pIkl6V9_b>cu0U{iZg@LxWx7UN#RRAYe>N9A{;B5xMXhCoC$eeXDhyUMAGA9yn5=7jSfE7{Ugm-+|53T<;aiLMY}e7;q!yP*YwW z={B&@Of=@8O1Kb8_rO6mwv~&JI|0D!RdJ~WA(PHTGh%?L_4s^fX{-mbTT1v5x;npH z`}@y?V!1`fw3M}31CxTmiF*kgCB6h!+)x45Bp<6aocC&|^OZgA{oLZ!FT%c8ESe9! zDV5lGwa0mEriq!oB(hvGKq^PxyHP?WC-usa<&u%GcBw8{yziqfWdWdcfH`%$KT+aO z&XmndMjkN{k;k?CAb1lfds>G)BnH;F7z3F_m0@l;6C{$K5x704@(K$6Z}|RVHxdqO ztlq71>?^gvar-S?nX%0#IR5w?b`#7CG7pD0E@HI6(YmFZ=#QrLVu!N88T$6ov+KUG zr-q15ijD<78=w7Gd21GL^U8E_F1uLUNHi9|P_UnKUWmXkznVM3Zq>(q$ukjqB$tTQ zR~?g(>pI&toL5M)`K(L&C%##LT<FEkj{@h=4f|J~Es=jdaC7fA?)61IO@o_n(ht3 zUv?1WvZ4)+$OJ_H%9pU<+?&0j7b%KLEGaZv7m! z__(<1-~x3G%vJ>p%3H7~Ls|0x+%^ftz}Uh<0Yq;ZB~wAmq9~tB;E!b$r=&>`%2*1d zb*`R;lf>w3!dIy-My1_epBHdLkks$NpCGvH`z;xf%Ss6auJOpa^NFP)nDq`ld4Bnj z$#qnoNK@PRx3H8=7#LR;$wwf*?E{zi-VKbv!}~&zSd%a^{Jqnoe(2C$MJl!}^MeMK|YxYOYp0)l9^mdiv>p z@7N-xNStQUvJjp_f1{vVv-+jeKdI)8cB_{MZ?dCYw7e~cpU3g@>U?hsU)#LGlUm=t zEto{o{J+|J^Kh#7w*PyzwZoQ(BnqJjnWr*DLNd>a)>4TKA;nr+vQ$)($doB5Q^qCp zune0FnKHLbiy~xPrez+U^Ly>p585FZtZht?R~+T>0E^Mk4C@Dkh;`JmZz(#nrh?jKyO`=<{2Ei2$K$ggg z1r5((YlVzkq4CdIgUgqbNL z+KHa%^fLGRX|>E`0}s>lT=$|5#8S?eGg&;^hERHF#zY-1$WaZFe2#*$p%a{S5w|^Y zpA{k+)?!5F`cAqjJOp+Zy5#-Kx#csSVt6aTI3d4XH6Pp`wiaI09lspk@HcOyp0QpO zy4Vo(z$C>ujQ`IR^BEndqGNj)y{vO9N3~q|wyx(`@AX#WD>1gk7_C=cXP(i!aEWfq z2MGjzI4GcT(V@J` zvMO5)&Rs3KEiw8@&T^~&?^9lWO&N)GQGe;*U1%s~uz9T5ay3iumneU>*x|d(;kzya zVaqQQ&qhua8?FChTUQfma~ZxvH|6Jm7$@Vv!TIK_n-^E5Gy1yul`0ErW^o)wJ}}-l zgiYz2LExH%klWedoy=BO_b)=rqP4BXi;!i#5EA|z5ox%r&>jC(Vpc5v9Zw&-=&{C~ z#3qxMYW8>2L!x(+pQuwyMs=cMmgXAi3Jf?M(xTwcXR9G z)z6l-IRlGH)p1^_rqPw`CFf|0O0=~ry*5df4vwiaGf#qiZrED*ewkSR+cLYx_okh# z#dW*#>Z}M`JkET`;+6WE-o0CChkg?tvAmBpwq^Og^dEPPac7*MRpHD@dL!T*f&VO! z^GE%Cve?^K0jcQ<$*=mp?d1(VF+9dGG$hy8!aK-Tv{ct;Nqo!Mnp&w)%_jNO0!z&@ zSZ?MMPmGz0dZUz0dcx_^c5!O0&%8h|J99hYEO%+<4}AZRPw%9@Hi zu&N`9MPbV_ZppWpyTKyb3?v_g*4^>*wfzYcQMh zoJBMvI6_0 zbbOejLOol(V>4YWD&KRVJvpB=m%r!9_)joVnxb<;ca@lo*dp9(u3E#^9|{MlMAPuWII^qiv5_xG4(smr-!tvXuK z;Apv;x^~02o&-^%-xrdU6S1S>*5i$|I7Znn_o&6oZRZpkv(!t1udQaLxF(YCSQ2_a zs+9IvWc+=i>F?(T0{5=%s{OH!R;qa@)7gOc*@sHEGR&7mIez?WNyz7#1(kt&%X!aC z0BfAl{CR3ROl*-hKF?znGmR3fNJmCMz_}SDOX<3_F%Y1eTGad#qoPakflzmg(3DH+I3zdUGx3 zNF)umpTrVFj^ve>nlDDt)Z2qsGG|RC6?%ELY8-GJeLtFB+6IYExzVHKz+rsSX;iz) zJb~ZNzi7v~o$=6%m$X)f?){Q&_>O=O>`jv6HvQ(#3|5;I-J2Snv2(ok_+gP&K~HU~ zJcYHtk8s|cp6PO1aCUF3!lP#~ht(uH8oj>EJd{am&fU6Qkt=XZ`F0BBSTElhk+EVI zj#>$8TDkvrZq&%-ESu|0D0LkGz@579I;V1#cU89BvBbtk z{M59u8@1^4MjtA+xiRi|$b}kggVhD&2JPm)AX0Y5sM~}Tp5;jS9m-5|m_m^?G}`c|Fu)De#M2F?$oO_NZoA zAvvp5BDxN3;w3*ojWDUnC7d39^|eM?ChY*lXtHHO8StJ}+gti?razi-hkWLNE1?auxs|gS<)z#yv?_1u68f6J zxqCo=vHA>G&bH2*wL9EHEAbnL|H*w`}aVZ1d)E#Dky4DOWr4WvmgDkFGLR;ZzaOk(6pb}pX;>MHvi-hS7n0* zxu?>NYbs8kZ}4N&*#|VAk!OMF>VhPhgvGGG8?p``pGU|4pfj`A{Cqs|0MH=|00$i2 zqp|? zq=Y}6tTHXt4x6saQYh>D!X_*#ERlU7&96bOH->B-nAN(9c#z0ozE-YE`{qw)druRSC`@VwNo47u=c4;?}4&HhN{9-^!gXF zn7d{r!wGq_W2v#Uc@~c~>nkf8*ypdDY&;B34|$-ua#U)D0tcGr9m+lx$__k>t;TG; zGmX2su=%j!@DyXgFm1)t9j`y`M`SPk$wM~lYwG|-B=q$YT!lhRV8S|Y=cg&bVJp=| z)pIlGf!sK|nVA~K`H-($eB1!=;n#-UKxPm%hHGKy{(UQJHg8`DMitYLxkT`w_^?$! zb<3Q>dfdrQn;&4m<&)fCF|_j?D{FTkH1Zt^Ca)HjvaEHQ273N zE4-RyGODTLYlACf;wiPeHZ((2d}S~V zI?tZ{e5r|=jJa1Dh|N^ROq zr9Sixaf*_Luweij7g*V{+WUKKSoT$)*uaae&LPiEoo=aQANQsApNtNmSl!Hrp8Q(o zMrU42%A7rRAHB1Bx!JqkYp+yH>xSRy;`ZZyft6<5$?Apy+1FAc8X5g^tYeAVDzLud$$fpKHy>F$ntj3 z|G|)0qJnWa^2r?sjXmhYb5ByOEZ(Naxn~`v(A9g92Q73sJChwU(l;#Y|C+1)K2YgT z#8^$AAxlVk8AuNw`4*K-ei7{fAPti%vO5b)u zu=Y#~i}hZ)ij;VM!M4XbzG>C1J+p*q7PmFgnO$e|%CEiEH;avXU(ez%ev*m8xfdsg z=a)xitTwyyl^v8Ym+!?Dgk`!Y>U(V~mCrdUrh1NBb-g_$_815|_+S(rN6C`jA zFJ8zwhYcaAWvBfa>`oo2-UCNG0{j^oy3St*Hddr$0w5vxzR&#q(chmgNT3`~Kz~J3 zhs&iXm;CZ*{nYu`&b%s_Dn0aN@;)p2mA^f)1ySMX*V7}ZR>_-_b*FtIw!H3;LfWIA zT-%tF))n1C-=#})o@}XOj?H8L!Q<3WYyRActdgkT_wmYfBBpU=y(p8IuuhykWYE0Q z%Rp9W9DE`xotDs`xg8M!W?3j-oV6*Q1uMH+(6M>#nW!@EWxSl;o#yxd)cvIXL!|FoOrl`JgHwXY&p!q?^JwLeD+ykuKTX7#Hs{Vm$C;*j7R<>KM55O@W`hzX>L9j! z(Brqm_29tQuMX#htoB{fXR{(s`G>xaemNM^^b+sSfgb$oRz69a+&5nGIX)pgfMGT= zrPZ%CvW7>t(IgJDakZLMI7jU=DJQ8GcZR>`9doaY9F2P-o9AO^<`@vGWp}@pu+lT zH%NGTXKf@AylYTKRCFI!;jaTDMF*5}w7n?}k2phI0w%$fE-5a~%nM|RNqFrFpt$G` z0v8m<;2l!*S@|87kdV`|3?G25db9!B<99$fK&fnO_Z%ubYh$k5i z*gL#e9h|@5@6wqUyv&dyB?Vo@;^v&qIcx%^OLetr%zOK%5>9$ame~#5oxQDH?OJcK zSa6a(I_oc<-&#XQGeg{*J7pZ+ScrZG3l{%vKQ88Hv!6!fgbb759d3HeU8gGf7aR=8wf{(10^hiqTbOhf! zVrR;}`jhr10}2Sw37x;Hm@JTbJqVl&U`gi@UUXmm;eH8M``ca&-n%Jq$$-OsB~13) zIXf^oGW#Z=4F806qw&|$ZV6|d*1gZcT~DsI8_V_L*hzMDxAmQ^o;)pQFuWIoj;o_Hr}xP<*Mv+B~+)j-4mv+nj#bo{=?+tqsmk#j`hSU9U&`SqH|`+{6}5 z56si(%eQ(xE9fS%DT?2^D67u&1TvcMyP~ z_HiHV`cRFjw=lC41ky))_0C{51s?pr;1?Bu2(GWMXWmJ=@`y9j0)rud@;CN=73^FH z8>qj;J&|=Zac_GP>LFm7lfK*c88JV4yi*+ZPX3t7{&&WQMjl6N{mJsb2o?^XgAdK) zPnCJvi5aw^heyBlX;>(pt5KCw7y3R$ylwtsxOsBHp+wBRgTzZAHhvhST+K>s6Bt`H zqH*SkavYnHpksGf!CM#jWy-v!%5WcFbBpslaWk#%3@O}VAi)@IZw8qMUCo(1UI=n#uJs|*Q!4l5c1nQ$ZKwyH7 zk4<1~C(MfdX)Fkx{J;71A1X1v8$RJd{%hkC{;6D;RcxcuZufrC==5+v{q>E3+a z`uj={b|^WBqa%tKsYi;)WccPnW;3lgcsF_acd*2mQ0p1LG!naGJg!1HD-FxjZ-3)E z>AhO=UFYa#qXmrX@S(sS&hDW*CBiLmt|mrAEYFju-#u#qi2=lytUIxaX`l}Kfp<(J z5Go$bU}Ke+_kvRt3O{bYS{$3<7I*>nsuFrNfTT@hfg7N4C?*gGo{=IRd{Ij+%;FFt~$pF{|=~jIZ zd@|Wn1O5OMB)s-Kk(4Liy5+KJ6_fB!s1=vOiW>pqY=9qQ)7P&H^yM>L+aY7%s1+LH z-q!=90hF_>=kE@9LT!7iY4L7Ko%q|8eukw`eQXTnvu%v12C@|1>HR!8*A`k106fH{ z(gz+~33Pcjv>v3V1JiO19E`!*$-95YYA25*udH~gRzHFxt!D1U^nAc@MoI;fFk;Mx znolDXX~AbcOv1VQE`WO$v1~Lj@6LI^Z$l+ex7q8DbSBV;_Iowa ze>tkZ{MN2KWC?qogGlC0s*W07)hG7sNJilpNt5YW?lHyeKdD-o?xnTL{fCs+8bx(Q zH0!n$l7x%JxE6zU54+oER=K97GCimxeH0MDYG@90R}f@k%heR)nQi;ujX;jm^Eof82IYVB$+(`|$4V+wXaHm-hx!^bM{^L2X7!TRSz9 z*Of30Ph$(%UA}NyF}C~Fb6EYFoSZrDZwr_lSkwe?apND>mv>W5#hlNzcwcD=zK|j?q0JaVKQY>^J6= zDV;pg(dz9xlqsR;TrM7POvU?NKGCo5>7eMPG8e1~?T>Q42WVM)twtPG;-*GLe$((N zH2b*SB3dg_ZDvRt>z=O{B;_OB?3o=?T>_`58`uxQ|%j9p2trk9R=V;ek4^`GvV2vQG+G zR43FgIc>0L1QnP1D>?+#lX8;kq?}DjtR=RznA~(IpUFF0QwfTQvNP2S&1JEvc9_PS z{-TJaYjlO2rIKolpE*s6j*zlRo#sfy>X}a|JyDIh`$z%yfJ#R58!SQ@w)JjbQmC}F z0@Cg|>|qnry~#S)u9QUaVy*}&A1RCXlCyNr687_%;8h;wkK{E#nA{Hg5NASOjjW%yadMEN|lUU5HsD*QMCXti;LPb=<-nU(T&YxSfprw7he zrR=>bHx&_{rh;Hu&ba2Fo1_@1O?_}X-bC|kRpVUMkv^8*5nqv;ENP|w&Ck6u62Es& z*={86uTYJ-KJMPh?cw#8B747J?JMdqHuJERcExdgiv_hbR%gup=P&mdZfV)m%Y@#i z6KZeYz6B0b<=ZA-fbs)E;($~3#YIR+Zm&S%l%Pnjn(5g#FvGn#sWE*V1T>uc-I3D; zg5ffurn*K?j^Njm6%$QDaV29Mm24GV5BU5^k{j&2E}N5g_9VDs7(`kx|LI+EGFHhl4q-#PUtzrAMO& z^d0PkoZbe+d5c#vn?{w;!ZC|eu8F5AJF@AjOVpgs=Cs_<4pnx(Trsma=MY%V{JZ)6 zFZVB}+Jy9LJ!Xxul^;!O&)_cmVHX6dIJ?`}dINW?_B)Y=d7^NanM6zIT?Y!MfPJL9 zYEkG}!Gz+b&yi7QIPzv(2sRgG;>fJFfH*foRx=7t)Wi&&Zr+v+&7BOS&8_-h4}Q`?!jZ zpM8jy#*1gf@^I1UmGSKSXs%hE#R2oD95^&jbeGq*phDeDkWY3tC?#&M7Kdd_kAL^V ztO+&6M>F-%qMXQK4wp}Jy>HRY%g%W4S#XSeMj9KHIkA1q53qrcj|TiW6rg`` z*j8V@Ql?j%U5Qe;5nAr54Qmlkzw6NcmWR~$Y^89Rf$xZz&u^l6ESGW?C zL*cum_^ep@sYcwMf51%J)0G3|q!3TU_2#e*D?RLNHBCh)6=WcjdjZTu%GfBRe#9@`)c}p2su3ZfCueMN}mc4-0W`RG?BB+VvOCvNiam}PAkB*X>A2C3?bATh>Nf7NW zKW(Hl$9xNt)TXL{Y1-VNVt;gp`2z1gaTtEYkoC0Uyhh+nCW*DAQZc(rL(hg|nr0-) zG*@(A@t>Z@$7uxZnhN6Gr;3BIf00TubcTj?EXzJ_J@}*10HZkL_$-itnssE?)z|B= zTBDCmQo|^zni^jCWkC3FKfIjK)xl8mw4&sN__0qo^WMQgd>BRVS9vIZ738TBU#s!Bg_A8on zsfrRKiGopM>y^|rtE%T7Z*~tEXt?+NnqG`dbEVh@OdAn`#oy2r1G;eM@!CH3(tPR; zx%}(JP!XM1e_;GZal|E_YpS=K(tK>zAjtEsU9gyWoeSEkIBlMC+8}K3+s)`S6j5)f zT%YLKc6}|~YHd{X=b`FRVg=!t4URK}e9CM?W0;Xp?eif)TWf_LHO~BOMM!@FedRVi zN*#o`xTvQUxVAT3mqTBg@0xQ7fBtE5Pa;Li4zrTHy*N#*rq4{5VKN1Y?j<|F-BwP6 zQ9uu_sV@>ItKBfD)I8IW7co(Jex4X{YtT+89CijNklNaGFAlTiu3XU9nfm<~$<3Rb zFgL7ZP9ctZk6F*&;8L|}C{Eh4zn_Y`5hQ+|d3c4?I~KY>i<%a#>Ya}}?SM(K6Pq7C z!kv3@M68u5b*X_J9%>+RKz@8$(cGhat44}6AjdiqMXa&fRTEaYs@>Q0#=$=GVOP`Ee&H=SIx~;GY594&X}-}nwN#t?!63`x?i;Sg5gibWzs{ggJpkfz zyto@09iF@L*8*lu-~KAj^Zd|C0sZQgUR%T4bZMEw(-t}` z*6;ciq-{%X#PEGjH4h0&^*Y=#LO7V~bj>-Kmz}EEq(d+Z3C{azw*EN#>j z?+S`ZTCod}703D=sbvDy_T_sf*9l%|md=;lhkE?H_5?yhJ-HvT%%Id65H3IJF)Pxi z0PO?+jC$1gXV6=~KQkg3{+SWU3gEAQ{bJvF4pcDYnZjFa#;>9C=kyj^T#(R~n#r)> z2M>7f;fFLH2SIwk#K-j(s#Tp0LuPMg^?)B2VDj((3KeD)>c9B&|M`2}2vJ7$_=Bbk zjI2_NEK4!VY@j$?f~*R9t%f0F2Z_)Rdb^vdl;oTs=}P>+;+g;?AwuFB!qyy2VL7$c zg_0A8Ye>(6zPf`vN-IWwn`X|=(}2G4gO)I@WD|bPXbCisIe}e@Byh?h5#ix7&_)lW z2tc=95Eq{dz$5_;4AL@JkXa*5K|V-O^;rcqkcLK=d&bH+nS##L+|r^33`h`MNyI@Z zHOH^lJv(7*1Ij1}CqIE-sJ}Y??(xdX3M9?GAg9#$qg7z=nIH6TBC|_?Ob$ zcLI$JVbDSXAqFFE^z;BZH~?+($VeYZ5Ga5-0-7O&v`&u`Wga0q>iEQjXsVLebYw(? z8O&gq70ZkW4i0YQ^|=d%2KfXj$Ryn;Ia#m2mUhOD&RH?Vt?5$8Y{b$uZzzz8foBFl zagpKSqiPR9r~_$Utq_{V#`z>gMK`5xKszdJF=C(N8S|liKhBw&nF$-jrRYs%WMsgH ztBeK9Mw%jRiI@3&JpsXmwDN|G4MEQ{aAx}90^aanN{NIf$6VG?C;?=orB&^UXu}_3#hgLkOl7zG=+mLpfn{V1)#8-V>MiN-u*0}hqeBU6=@QN z_uQ+}mLU&bfWpE;@P~9BP=!|-{y(ft@$04cU^*J~+-`#(D17#nQWXfQ!k%Aye!)Xa zl)V!&B5e_|v~+*3c+dT!HC!;LiCGs;iHXgCa^*51B1F6oz1T?v8+Jh?5fTKNGO)l?UK zz5QQe-06tL7E55kZS(*%E2t4rU~Pay3nYCG%6ccH$v5Ozpo-AxC?_oZ z;>U%5joX5oTj<=I2`!~G*n{A;gPVJ0)r+SQDo%#Ke}VEcF--xn{|0O1*+ zd)ENq5*McgKM8Uqs7~1uEPLN@RR!=RfDCBvcc84ta?x24mvnEV1Po7G$#X^5izE~ zo}qJ!P3642d@uE#Q=UZSifN+<>{CFG$>C&U;FloH=0`Bi8(1RjUT*};NG%-;LEh7= zpVj{dqUaJZ_}o|4aY+9r`T7IotZ#;+=-vs~{DGFV46}W}Aho=_3}pkD2}vOA!oApD zjTty^C?A2!+~egsU;Zs=mLhKE0u+(9J|xnpdA|-y9Efo@1EcOt!mOY2qQx*K-BN< z>Y6_Hm`!~Q`cwY)XkAo+BL{3f&=WewtT^-;-c^J-?Dc3Jn)z35#{?kAdN&Q7=C5DR zh>9-R+)C>FjVNB--CiTx^5pAd=R)QUK~7AZDL1H&AYJsDAA0!X?k4ak`W*1 zf488;9)Q8U@1FXgcW(;A%7wD!5NwRFjip3pP8Gu24fUhVYT^g@x`48c>^UR{C^Xc$ zDyT}p_PSAUlE&7nWDQFa2G+qiNWiq2irB-S1@UwZ+O+`!>IN$uOhO~@fbpxdWgyJM z;eFk!*8RmksaKg0Q&C{kI{FgQ_h`mHBd<|0HQur52(Fa z(HE{_FuO2R(i4PnkcmM9h2_)S)>gUHESB8)8>CYhG6>5L44(P$W#K{*#5z0%5Zsl< z6A!A>!N7pO7rmys5E~J!%#g8nuvgdc&o?5AQ*Cdf9T{E*oOEmcI@n>Igv^zGHTL8Eo9Da6moZ zetAiqehol7=dRw^g+m7#_>p@9=RXW01TFh&JXmCUrAx(9;WMqa&cm59`#mR~b=0bQ zGs+JZm_O7>t#py8m|zmsU?6*e^x1+Sso{mj7xcp3i^)wm2OZ-u#4&CbfLU>{%ihV) zg#)YEEc&=S<*3F%h}niE@BS40GQD%&1ZOudlD_HeM^uI(s(=#& zsYvr4%RxBr85xXsHjPZLU%w7J&b{b?9vB8I0y*x<|0HK_7MwKN^h=73jpgFv0_%g$ zx>X>Y^zgRl=gaVn8(I5SUdB6RudIU-i{4`Xa4l){5bAXe-~QMS13dSfx#g~PN1O~s z0xk$kkTIWcA0Rai@aQINx^O(qEK8}F?CDh4Sh^1Bl zQ+9ew6r$i983=~|t3bRyL!GUsa34^()eRv3gP-JAujfGp!|Cv^_#2k6(Em98MjbO} z?yOr>Gx_i=8Ls@l8E^l0@&J*hDilfzY8#QJO;tgx5vFOMJ_(=rRe}%7+{yVv-4u3w zIYxNVVdZ6~r|Yaf3%CkD4Bj|@k%*D$jI2$YKOf(QnLUndk){wt!V_$&dc%r@nP-SI zBh%$pM5AG?XTyKIG%SYI%mb;ME9 z8rQz(yIc{9+xa>2ZT_~RX~id7QY%*?RLuyFE5 zQ+wh@c1ml-r^yw!wVv76q(hOS{BFl6V=0M8Q5rDF=|ikHxL)qxzYowr!GKZ#5ki`k!qvTA6m!V+!$`gI-5$bEronh~qpBZ}3F!>jHz$L=CK?IPhb zsl4yX=D!qeiTN#u1fRSAWi`3pzOzY?l-N8Yv9+XrB{n{6LdE+_NfJ@1+Gq>@gJ1Df zN9rA%O4O%6A9o;cgwSO!z54$fA4kgj$h1uEqep00n+rT^t$kjHPBr86Hdj)nmWag{C z)+Ve$Brk(J0lCS*`-f2%Iic_)I{-fQM6c-?(e2?4qY?-Bn)o6+MNQ|&ZwAwuQY3T zc&FGsa^wW6=Qs!h6N22Yhr!)Tz~WBaf!G{O)5tS+F@gyQkVaZF2{k0TuDLw!3|Hp@RqzPu&%?XKCNeFFlJl z**l~b-vN`bT~~QUx8}rVlAn}JrN6Vq(dw;82f2RG-eO%Bi?BXU}G@21LCFaRVZE@Z)bI^NL_eE(9Q^!suya zj5sm`2J(AWjo@R_0?>c}0R^ZdV&bpuHPIEe`L~;3F$Spo%eiFKlD->8yg21$E~}TUFQn64#l?JzB(*43Tf?%MWsW9Q(iR zoX%3@xlkRtG0wu*<21b{=9fkPs@c{i-__=)G=E(^U4F^D$nL$l-QpaxZ4H8ji52Am zy4qxNQs_kW+UBn6eVeuU@P})Dei8xe8+EcT2w7wHlU~-Fd@TX2u%Av8x_AjxpF-&f z!FqGh%GK`mog=jC*S?F*gb+B*9W<4+0d@k+RYC}+pAxWfes%7CWW`%;grM_Yvg;(cL8kWCq>XX%h4iDbF4|_lPMVgc68)sOu_a*{Or_-njA6dSu!Xnyc z57JGtpi;`JH5obu6)%NGJ4MIFQG~pxAM;(G)f4VfACx0jGL%m8iFoL>{Zy)zul97m7Bd>#n4 z&qH#kU%Ccq{2okSHvts`-dJBqJjWVdZ$X+Ec`sz%(ddJZ0*DmsAv0pv0O}5?dMW~m z|M7CKjwU2Os)AqsFeUj&8s0uKhhnJmSb!;s9Q8gNzVlw#QjradE#A!fsFqKtD2}B<`cE$_}Z3yNWL6pr6ToS+SMn6q~ zqSSV1)?nf%Eco*w(-t>%oSif0UjTOZ1M6r(`vo6R&>+4>27or|!NlV%)+Eq_${%PO zg&)@V%_RfM!$XLvF(uBD+Y@MN=9i-J) zADR&y=a{d?ax(HC@N^dpSjXS#eD5EXc&};*`)eWZFMiDtVlTK4QRZ6pJnFI@WHj#e ziSzfNa#Pb3T5}%Q39}F3{B_2!!x`@ft(fC5MhT=j;8?@@2i;{0vH&~;CUbpxml!-? zBJnoxDOBbPyTQbdY1BjVD0so34-I)Xxz`GWgoPWuDA1mSY$r%2{^6oO@Kws7PTtzu z3hfL(!2XMdeo56G8AH<<%dpE!^pxdB$?vYJ_me;#TpTl@Fjbuy@=MwNHff1#GBh%J zP|SHWv71Dpx^c^u`n|aD>5kiwi5zXJ{o8DK*={`arY>(4LJF!*0dcoOzXGx%#5ddf za1Q^i6}kbPZ8woT5=J$hwJt;kAA?wdkV(?h0VR{eI*Od^kX1kn2NoVqBEZ#Q%2B}x zyDbTEZ-aCThz^*rTn;BW96&T+{xa|vyN?jSS@{TrHBfS6`0UUaX)Nc2MqeLs1lGwB-pU%T9i=B8%ylzM?vBpQsVUf0hJ2 zUj||2cRfGeH?T0X@}IoM;s9z?Gr1EaEelnG=&Q>tKAF5~6X&Nsx#kOmw7S~v#MB2{ zig4wuXVIe!5ByKljsJ!)|Jj%4vCu``*zj;ubMweqCdNF-`UBdAY3^P>LT&XRa>w+J zh@wt0!2rC7H}BtrNbi$so-cW-E+rEBo@)fREsfCs=TDejRB>k5w%qrjA6f_@%KyI? z8~$J7`u~+_&A-bVrs2N()Xmo5HlNyJgTJ3%np_rPDm3I62xID||MYXDEBY`RGNG@V z5vlZ1mfdZE3=@*_GcRtR(opF*dw8hxzQt==3Kr$~m-EZn?WW+j!IoTw3^mnsY`Yz6 zp{KT0O=$X%PG)T-Ho?8{czyI~kg|1pT)E@ZB5cq+s$)Imc;iL{mpIJl6xT7Rl&*;} zbf$ltl9e%JIC;?e+*9SavH)Yu+~GZaQ)QIgVfkK47WP}mNZ?z4UR>c>d1kTn0n;YP zOWqvmeZFM&PJvF2#eAr9dqZpGM_9m=G~?;j8?L3x%Sp8BrfzrdNg~%wr4X;NNTZN|+m5 zjj(PMx7vrI5uKIp+*4M+cbVz_(C{(jLQ;B$e;AhWh_fOWBHo{%fI~UP>C8P2{Sopu zHN;1}Qyt#Q=l|?Jkvg_C*T?t^;p}|%iVle{{X|h z<5Xq?Zr2U;4tr;q3Ex3))pknSB8r7OG#?GI_r{>pwgQR;$YESL{M(D$Of zJq|UoxI@DIobdcnKj7EkfBvfs{lBqf{=e7Q{`V*TFI6o5y|n-LUH#v8_5TkG`N!S? c6l!lTo0;}Q`Q)KgWRtq0WvEHixbgJ=0I7o=RR910 literal 37534 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°t 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

&{YCScF{hK^MQE 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 YC#XLcJ-;czmq2J=y{>^(zx(`u08NKU?*IS* diff --git a/dialog/testdata/dialog-onshow-theme-changed.png b/dialog/testdata/dialog-onshow-theme-changed.png new file mode 100644 index 0000000000000000000000000000000000000000..210755985d12cf26a22e8167a6c9b9693033389d GIT binary patch literal 4003 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 literal 0 HcmV?d00001 diff --git a/dialog/testdata/dialog-onshow-theme-default.png b/dialog/testdata/dialog-onshow-theme-default.png new file mode 100644 index 0000000000000000000000000000000000000000..94e19a061569ece458146ba599b51a30e1ee7602 GIT binary patch literal 4189 zcmd5=c{r49+gAyZ>}%6Qk4iFQ2ty)SdZfX4tV71|C}ZD?v5aj*Ns>^uK_SFgvSb@e z22F!Pb`qM#l6^9mnfHGG{Qmlm_xS$!-s_+HK9A!%?(;f+=kNTTzw3TzX<;JBFU!xx z#U*HZ)7T1l_Hl6?0rMRN-cG#mrgL!#pEET!unEguory3Lx99Y3)=^Zdo$NadGoHg= z-!M0x9DgU0f){=(EqI|=jbZ5M?emXm+AXshhT+jKa7Qa&^ENWv*H^q;8sCssQvbrk z3!+gITfEByLp=>bW!|M_h2vy;^JWrwe_U-jNf?tulyq00TsgQBe1AMo?cBL@s$9kN zsJ3GT=6nJ-<-zi?)iK;%M@9e30v_~w2S<#%bF8I6L?>@xtfeDTCbRY2J54MQEqU(P zVy^KebAI$C#g$@gS*TfcIdY1(2TBUiU~$%k7E&$Df`$mk<5UsCNPTF zg&^21ih(^{RqE6J6r%Xr_9bVB6o_UmDbt4@oVQylhTw190==158DcqgRXddjDV@+u z+X^vT6u9*6hQwFx3Pb0R*CyBLftGmf?nl_l$KsLv^YR{U8cuv46M>Y*zRDG8;2K z-0xNVW*-M`^bYu9;Na}cDuX#G$$Z_TY_PpVE_D0aE~J`vu0Gclw{Y?3;f6b~w-Mi< za-8py5XZ$8)Qc_^=hmMqs3u-H-p1ZO^~saw8F?ras-x3f zR!09l7i}N4UQ$*j^0k84o}HO_0gXnXqBg(x6cznRMtXa%WGLISPvdv@3ku|Os2AGL z2Qjyn`uqE5W@h-{n$`+$$H&L4P{4_WiO)t)Z`AvJ& zAZ_NX_o9K_TU$Z#^CT2RSvg0`-`U)pI^Ufr;|9wyFCE^DeH6{#ap&^V;-V_~#~?vY zLSppu=fIV(5azLgY)xedgh~%_1ZOrhz|e;lvRay5vLMi+z^TM|HJGmM^wbn(44;sY zk(H%R26B$i%&;afgc~L%+piSeR+FLa+5z8UD6b^M#oyj;v^X3jlgVeU-Ve(rbbjzy zww>?myLs=PCYrrPfrkE?o){Tftfelb>bLvN=;ToC?CcuuQZjEh`ay0tfT7Sqse_8U z+58nG5~-@{2~-OP!);Tw?1|3zCN5mPnxl4~eaJ*dv+CR0SUdFLy%6DqvcQWrmQGF} zH}Hx|;9X;5JR-P5TXf{R)d_ z9|DkCms&hjY}WNXDOOTn&BMd9zrWwr-QDOnvp7Jc&$9aYR&<*{SyUuWo*U-e$q~yozy|bw95gVPngvc$^SD$~@8elM(z`#H_ z9DeK8EobN1ttHAm9TWyrn#!=R3-KHDK*a2PG@F&ug(&YWgH=^k0rC)uL=tIk7zQLE zKbB#!Sl^Xu%ATNG3_`P-zIjd@bS-+WS@un=G1Pbq3tL7eUwN8%CmL>u{r~D69_BAE z{}EVJs=1k&hHQ#m#qO74cuVLynQCKOuv85Ia9Lg5+so_8A9`MmQ(|Ib7;3iW%kq;v z-J1)&V{aYQ`_ELod7~Y^;{k_L&dK!>JYjEvwYs{hH5X~!3Uv(*t_z7TC@8oR{Nv~D zK7+xCjXe^`Iwqv+Qtx=|=us;xt6U3AL`2Js9}WGnua8eqFeN4B?&IB^os&XB+XsW6 zUaI%rx$FRz+zd1{G(5>;1vGmL^`HuyMrdeV1S#-f=^Qtbvf9D9XG!mUke zruXl3^2)VtbP4#k?b<~}wRO*5R8qq3(@T2@wNVH6lY6Wj9IgOd3|jhFR8*vFU$xPx zq^H+bQsO>ZZW||m$KAbslYAO8kn8E~J@w9WxW=uw!GEr5&8QHDmdG|MiHYGtXf0Ad zeq3H(*AH6cBW0o7+}whLw;xF;e-MP@O^@W<)o-dN=Pg*D(WzU?STsqLL~ib zkdk1eJR4(TlGvoHp&=o2rDjP&v6AiSq{lX>LVpgw2uZ|An~dxuxa zB>S?{FZUt712xiay{U2}?6x}=iv{%0%*+glL;^Jq57%*9ZCP)xn_5dqNDvVb0R&)e zvfk9xbaZso?V7v2eU?S(f{>`N@X+Ms{**sSLPCO?qc!NFicd_0I=7Ddz#^ib&d$yP zoa+4};xR$m`j-|1n$7C*f!%g>oqr&B8sl9ujEbt<*UYmQ_F0S(ZPQnbhw=I->W zZ$J3e0`LvU1k?$k&$4lF@NAr_C@%-fHH$k~>+0%Cy|#ao$XVwUY57e9gxO@v14!|n z0wGDbC>##w=C%;A-c~vdT{C%ytqW9Ya|T9@gs^Y`ZQ#tNjiQu{jHiZdOLOxcLar1T z3-O&pqoe1mPVnY=_%lQYL12DQ!dSRC_gN(+&+Z3;@GO-m=28~+c1=wU;1MK~6QU_Us5$ED>XmjYG(z;Rm6_iP z+Tydc_q2Rq*obi#wzfw0KRXX7NpW%UsYC@$&3ml<-L19Y;9vswhfHF3&0UHlU80W5 zbp`{p^x^V^A|f9IY(I0Rl1S8#V1V6xmOf^vNS%*ZOf$I!hcl_%PJR(b_*U|PnYp(Y zMn+m&r-!frihq($e)8nW!-pdFK;r`gprfM$XbK{UJt=jtGN#(wY!ca+8D{ER)zXp! zH8wUr+#b}AyrQ5G4{dV7iE2Ma{!VH{@(T%NRT0$Oc+gLs|FIFq%i;E7)f(KX*$Dzt zS4mq=Gc zoH})i{Nclgo}LMxhT&3#KId>-PfyQ}wA7cTAer3bq2V{xV7{$&Sw??t?t08=S=r^~ zWm!&XNQh3}gwNNNUBL43U4Q=AsUgZ;(DByH;3v@K${DV$&VIzZb6q7 zReS$0mmWO{LE?%YlquXVO2We1nDxcQ5x%b3#TN)RHzF>AXzwjSyh>qL-WLoIK6}uR`9Ey6m2OdoHQ-JK zIQHm^RyfT{MGOlPG)=jZT>9#ZTp=@#qHF*Xlc2GPu_Lsq*CP@7nN8s6go|@L7y5?@ ze6~|ZZ0ELB1_ku~w$@h~;FT-c*nxky)W&+XtC6n~qHdX7>+BjT=F`W@vX&OmxUG;F otBqLO|I%wO;7SkCz@GvR=PfVafwn&W5D2(TZ&(;t8M?&%3!+rPU;qFB literal 0 HcmV?d00001 diff --git a/internal/driver/glfw/canvas_test.go b/internal/driver/glfw/canvas_test.go index fae107ec97..694288f104 100644 --- a/internal/driver/glfw/canvas_test.go +++ b/internal/driver/glfw/canvas_test.go @@ -451,6 +451,7 @@ func TestGlCanvas_ResizeWithPopUpOverlay(t *testing.T) { content := widget.NewLabel("Content") over := widget.NewPopUp(widget.NewLabel("Over"), w.Canvas()) + over.Show() // to ensure popup content size is not zero w.SetContent(content) w.Canvas().Overlays().Add(over) diff --git a/widget/popup.go b/widget/popup.go index 848f33e321..955607160b 100644 --- a/widget/popup.go +++ b/widget/popup.go @@ -63,6 +63,7 @@ func (p *PopUp) Show() { p.Canvas.Overlays().Add(p) p.overlayShown = true } + p.Refresh() p.BaseWidget.Show() } @@ -172,26 +173,27 @@ type popUpRenderer struct { } func (r *popUpRenderer) Layout(_ fyne.Size) { - r.popUp.Content.Resize(r.popUp.innerSize.Subtract(r.padding())) + innerSize := r.popUp.innerSize.Max(r.popUp.MinSize()) + r.popUp.Content.Resize(innerSize.Subtract(r.padding())) innerPos := r.popUp.innerPos - if innerPos.X+r.popUp.innerSize.Width > r.popUp.Canvas.Size().Width { - innerPos.X = r.popUp.Canvas.Size().Width - r.popUp.innerSize.Width + if innerPos.X+innerSize.Width > r.popUp.Canvas.Size().Width { + innerPos.X = r.popUp.Canvas.Size().Width - innerSize.Width if innerPos.X < 0 { innerPos.X = 0 // TODO here we may need a scroller as it's wider than our canvas } } - if innerPos.Y+r.popUp.innerSize.Height > r.popUp.Canvas.Size().Height { - innerPos.Y = r.popUp.Canvas.Size().Height - r.popUp.innerSize.Height + if innerPos.Y+innerSize.Height > r.popUp.Canvas.Size().Height { + innerPos.Y = r.popUp.Canvas.Size().Height - innerSize.Height if innerPos.Y < 0 { innerPos.Y = 0 // TODO here we may need a scroller as it's longer than our canvas } } r.popUp.Content.Move(innerPos.Add(r.offset())) - r.background.Resize(r.popUp.innerSize) + r.background.Resize(innerSize) r.background.Move(innerPos) - r.LayoutShadow(r.popUp.innerSize, innerPos) + r.LayoutShadow(innerSize, innerPos) } func (r *popUpRenderer) MinSize() fyne.Size { @@ -200,9 +202,16 @@ func (r *popUpRenderer) MinSize() fyne.Size { func (r *popUpRenderer) Refresh() { r.background.FillColor = theme.BackgroundColor() - if r.background.Size() != r.popUp.innerSize || r.background.Position() != r.popUp.innerPos { + expectedContentSize := r.popUp.innerSize.Max(r.popUp.MinSize()).Subtract(r.padding()) + shouldRelayout := !r.popUp.Content.Size().Subtract(expectedContentSize).IsZero() + + if r.background.Size() != r.popUp.innerSize || r.background.Position() != r.popUp.innerPos || shouldRelayout { r.Layout(r.popUp.Size()) } + if !r.popUp.Canvas.Size().Subtract(r.popUp.BaseWidget.Size()).IsZero() { + r.popUp.BaseWidget.Resize(r.popUp.Canvas.Size()) + } + r.popUp.Content.Refresh() r.background.Refresh() } @@ -238,8 +247,15 @@ func (r *modalPopUpRenderer) MinSize() fyne.Size { func (r *modalPopUpRenderer) Refresh() { r.underlay.FillColor = theme.ShadowColor() r.background.FillColor = theme.BackgroundColor() - if r.background.Size() != r.popUp.innerSize { + expectedContentSize := r.popUp.innerSize.Max(r.popUp.MinSize()).Subtract(r.padding()) + shouldRelayout := !r.popUp.Content.Size().Subtract(expectedContentSize).IsZero() + + if r.background.Size() != r.popUp.innerSize || shouldRelayout { r.Layout(r.popUp.Size()) } + if !r.popUp.Canvas.Size().Subtract(r.popUp.BaseWidget.Size()).IsZero() { + r.popUp.BaseWidget.Resize(r.popUp.Canvas.Size()) + } + r.popUp.Content.Refresh() r.background.Refresh() } diff --git a/widget/popup_test.go b/widget/popup_test.go index f693beb572..5356c31042 100644 --- a/widget/popup_test.go +++ b/widget/popup_test.go @@ -144,7 +144,7 @@ func TestPopUp_Move(t *testing.T) { label := NewLabel("Hi") win := test.NewWindow(NewLabel("OK")) defer win.Close() - win.Resize(fyne.NewSize(50, 50)) + win.Resize(fyne.NewSize(70, 70)) pop := newPopUp(label, win.Canvas()) defer test.Canvas().Overlays().Remove(pop) @@ -208,7 +208,7 @@ func TestPopUp_Resize(t *testing.T) { pop.Show() defer test.Canvas().Overlays().Remove(pop) - size := fyne.NewSize(50, 40) + size := fyne.NewSize(60, 50) pop.Resize(size) assert.Equal(t, size.Subtract(fyne.NewSize(theme.Padding()*2, theme.Padding()*2)), pop.Content.Size()) @@ -289,7 +289,7 @@ func TestPopUp_Layout(t *testing.T) { pop.ShowAtPosition(pos) defer test.Canvas().Overlays().Remove(pop) - size := fyne.NewSize(50, 40) + size := fyne.NewSize(60, 50) pop.Resize(size) r := cache.Renderer(pop) require.GreaterOrEqual(t, len(r.Objects()), 3) @@ -306,6 +306,50 @@ func TestPopUp_Layout(t *testing.T) { assert.Equal(t, r.Objects()[2], content) } +func TestPopUp_ApplyThemeOnShow(t *testing.T) { + test.NewApp() + defer test.NewApp() + w := test.NewWindow(canvas.NewRectangle(color.Transparent)) + w.Resize(fyne.NewSize(200, 300)) + + pop := NewPopUp(NewLabel("Label"), w.Canvas()) + + test.ApplyTheme(t, test.Theme()) + pop.Show() + test.AssertImageMatches(t, "popup/normal-onshow-theme-default.png", w.Canvas().Capture()) + pop.Hide() + + test.ApplyTheme(t, test.NewTheme()) + pop.Show() + test.AssertImageMatches(t, "popup/normal-onshow-theme-changed.png", w.Canvas().Capture()) + pop.Hide() + + test.ApplyTheme(t, test.Theme()) + pop.Show() + test.AssertImageMatches(t, "popup/normal-onshow-theme-default.png", w.Canvas().Capture()) + pop.Hide() +} + +func TestPopUp_ResizeOnShow(t *testing.T) { + test.NewApp() + defer test.NewApp() + w := test.NewWindow(canvas.NewRectangle(color.Transparent)) + size := fyne.NewSize(200, 300) + w.Resize(size) + + pop := NewPopUp(NewLabel("Label"), w.Canvas()) + + pop.Show() + assert.Equal(t, size, pop.Size()) + pop.Hide() + + size = fyne.NewSize(500, 500) + w.Resize(size) + pop.Show() + assert.Equal(t, size, pop.Size()) + pop.Hide() +} + func TestModalPopUp_Tapped(t *testing.T) { label := NewLabel("Hi") pop := NewModalPopUp(label, test.Canvas()) @@ -363,3 +407,47 @@ func TestModalPopUp_Resize_Constrained(t *testing.T) { assert.Equal(t, float32(80), pop.Size().Width) assert.Equal(t, float32(80), pop.Size().Height) } + +func TestModalPopUp_ApplyThemeOnShow(t *testing.T) { + test.NewApp() + defer test.NewApp() + w := test.NewWindow(canvas.NewRectangle(color.Transparent)) + w.Resize(fyne.NewSize(200, 300)) + + pop := NewModalPopUp(NewLabel("Label"), w.Canvas()) + + test.ApplyTheme(t, test.Theme()) + pop.Show() + test.AssertImageMatches(t, "popup/modal-onshow-theme-default.png", w.Canvas().Capture()) + pop.Hide() + + test.ApplyTheme(t, test.NewTheme()) + pop.Show() + test.AssertImageMatches(t, "popup/modal-onshow-theme-changed.png", w.Canvas().Capture()) + pop.Hide() + + test.ApplyTheme(t, test.Theme()) + pop.Show() + test.AssertImageMatches(t, "popup/modal-onshow-theme-default.png", w.Canvas().Capture()) + pop.Hide() +} + +func TestModalPopUp_ResizeOnShow(t *testing.T) { + test.NewApp() + defer test.NewApp() + w := test.NewWindow(canvas.NewRectangle(color.Transparent)) + size := fyne.NewSize(200, 300) + w.Resize(size) + + pop := NewModalPopUp(NewLabel("Label"), w.Canvas()) + + pop.Show() + assert.Equal(t, size, pop.Size()) + pop.Hide() + + size = fyne.NewSize(500, 500) + w.Resize(size) + pop.Show() + assert.Equal(t, size, pop.Size()) + pop.Hide() +} diff --git a/widget/testdata/popup/modal-onshow-theme-changed.png b/widget/testdata/popup/modal-onshow-theme-changed.png new file mode 100644 index 0000000000000000000000000000000000000000..8f3730535b52b96100be1a2071777a37ce004881 GIT binary patch literal 1977 zcmeH|+glO_7{;kNLDOiO(JIt>GF#}(Q>c@8EX+)lW|^jeF+t4}8y;wh(9B%u(^$Dy zYGFxc^MF&)L{c0qPpMQ0#uN=th)O6PC=;1~LKj_j_5I$<_jmDrjFTY&mgYOm0RVty z;Bi#w`t1Y&HaLMcu9MlFL^S{ayc~$~JALu)tRgu6E^%YqJiM!CJh6y-k4h>HhR+_0 zEAD?bH&&mXEk0nVbaF=O?7C|79 zmGJMJgHF3YPCq$lD2Y|CQ!!0?YEV}0(7ZjTKiEXSt5A7#ZT@=WY*`7Ml)o|BHv zv6)Mcg9Q+&Y&%XxLhu18H$5>KgYiNl-F7;@UQHhPqiVj7t@t`~U}>pAJB(OTm$SjXTPDfR%$DFILq>UAEr%mNRbKH!ZDToW znmSoX(zd|$BJjlES^2v&P3K2j^sOx_7P6s{mij>>+6iZkJgGTci1uBbd*waTm|T3( zXt3639D$~5O(}}9E5LzaI(?vCyshSpKU?6P_IRJIaYYt|*=(`O6Brkdf<1@G&##kO z&ptxjD#SbAfqwmdeopyJ-@u>@n`PhMU3kvNQE$+zaF@Pu+L~>@pHNTFTu}>q(1T-4 zNDZe&+uB^5veJ=QgEdT7j&_!Tkx$99uUCL}Rg8|?Sw|;SQA*4n1`10erN_iPEF&u0 zxEY#PmElY~uu26n_F#gs2pY8)N`!Y4@y zyN&-+gYm6Zw*8`J2M7YoVsn4pBv0b9$Mj=k4w8hT;-F&{J9p%jY|9r{*n>h8S(MnM zDncYJ%y!rk7N0d+d;jEiMWb^`2qYi@p45~Pxn4wlJUaSL@8sIjP&ex^)WnZltS~opnO$Sa4hLuJj-rV&b>*;(@&de|h#V zPBoSjRuf-2#gKY=Md*}BcQ-OVK7M8DWxI0}&G42FS=KT=;Es(XW_hS`HmOUKs_HW= z7hw7XYnNivxSSeoxQk%dBw4lm)){vX3Wd_guJ=K3?-UGc2zXcLUGGzp{;eZ*4l)Iz zF{Z=qEx9bhA1__fQx^3uP#$%>^Xh{K^_lwiX1?{{6UU5MkZ?|?6w!GLeXUo3K`F)= zHnW|?uZ|mO9mT`k4`sxv`e4yCo|jUaxlCyNz?tExQm8Z4qn%WrEWB}zC?Co@Wpi5S zvgRaWdPqGypEWm=AuivtxNFtZ5l%9Rbzd)0%ran7OOumd%4Dnk{lbo8Z|K`$qX9)0 zmAccY2;1SSpKfYP-CDPzY&snO+>+~%gEzxR9NGREKf=Sjc>N0-ja3errft{i4y*@2 MpnnL8bL4#X|A9bw(f|Me literal 0 HcmV?d00001 diff --git a/widget/testdata/popup/modal-onshow-theme-default.png b/widget/testdata/popup/modal-onshow-theme-default.png new file mode 100644 index 0000000000000000000000000000000000000000..ccabfa6efb411760be287fa8928a3ef6d955b153 GIT binary patch literal 2471 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 literal 0 HcmV?d00001