From 221647a265ff4d4a6bca0515802278bc5ce78253 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Mon, 20 Mar 2023 01:12:19 -0400 Subject: [PATCH] Made icons a bit better There is a new IconNone and an IconUpward, and buttons don't expand awkwardly when they have an icon. --- elements/basic/button.go | 42 ++++++++++------------- theme/assets/wintergreen-icons-small.png | Bin 1842 -> 1882 bytes theme/theme.go | 7 +++- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/elements/basic/button.go b/elements/basic/button.go index 7b63b48..853a67c 100644 --- a/elements/basic/button.go +++ b/elements/basic/button.go @@ -100,19 +100,18 @@ func (element *Button) SetText (text string) { element.drawAndPush() } -// SetIcon sets the icon of the button. +// SetIcon sets the icon of the button. Passing theme.IconNone removes the +// current icon if it exists. func (element *Button) SetIcon (id theme.Icon) { - if element.hasIcon && element.iconId == id { return } - element.hasIcon = true - element.iconId = id - element.updateMinimumSize() - element.drawAndPush() -} - -// ClearIcon removes the button's icon, if it exists. -func (element *Button) ClearIcon () { - if !element.hasIcon { return } - element.hasIcon = false + if id == theme.IconNone { + element.hasIcon = false + element.updateMinimumSize() + element.drawAndPush() + } else { + if element.hasIcon && element.iconId == id { return } + element.hasIcon = true + element.iconId = id + } element.updateMinimumSize() element.drawAndPush() } @@ -145,26 +144,21 @@ func (element *Button) SetConfig (new config.Config) { } func (element *Button) updateMinimumSize () { - padding := element.theme.Padding(theme.PatternButton) - margin := element.theme.Margin(theme.PatternButton) - var minimumSize image.Rectangle + padding := element.theme.Padding(theme.PatternButton) + margin := element.theme.Margin(theme.PatternButton) - if element.showText { - minimumSize = element.drawer.LayoutBounds() - } - - minimumSize = minimumSize.Sub(minimumSize.Min) + textBounds := element.drawer.LayoutBounds() + minimumSize := textBounds.Sub(textBounds.Min) if element.hasIcon { icon := element.theme.Icon(element.iconId, theme.IconSizeSmall) if icon != nil { bounds := icon.Bounds() - minimumSize.Max.X += bounds.Dx() if element.showText { + minimumSize.Max.X += bounds.Dx() minimumSize.Max.X += margin.X - } - if minimumSize.Max.Y < bounds.Dy() { - minimumSize.Max.Y = bounds.Dy() + } else { + minimumSize.Max.X = bounds.Dx() } } } diff --git a/theme/assets/wintergreen-icons-small.png b/theme/assets/wintergreen-icons-small.png index ae4209ae59beed48f2c7950be4fa6b9be375ca3f..9ddeec0f1eae7931580a96fc491000e91103cce4 100644 GIT binary patch delta 1831 zcmV+?2iW+s4%!ZoHGc;WNklxU!i|$(8)g57O6PQZ82T`|SlxfDQawX2*o=wKl(R)`(f^@8T zbyQ$=VmY7^AQQ=@lW{kcIDy6@al~F5Jwb&tNQO8^5{x}gB~EOoduhauT*_*|2{zcl zWQsK%?uU%QViB<;PbQ3gPG{`%Mga;?fC3bt00k&O0SZvy{}-^W?>y9>T=E1}UghCW z#Cj)8$$tr|fd+4Ip5O@)vIMqlgM$}(tQs)52LA-0ujp013J316&0jp6Zt(C#tGYYB zJDw4C$F+JNnCf=*j%7Fa;u8zcqE^@HD=oy{VZTmU_O}GMf2el+q5M$3EbQFw=npu= zu1#G$taobDyD`M>Pq3(!H8X!+>7t`cXKP0q{C~%D23I?`Ik7pBVV81U<-uvhcBkU6 ze=$=(zB~Q|@cE2Z(*6Q~C@z<4N518ke)-v@+VRbW&4oy%u-FS5B!Mq+Rucg3Lz^5^H4MDg7a^nn^MC99ebE@sJv2nc{{u#8yxfjBzW#Q zDCHr5UeZ_LfGF<9w&lnA+W2aTyw{o5iAa))Zi(SIL# z!Z$pbOhJPqlPTQAM%WXe4&dnT0}L~CG7X!;dWW9UC_n)UP=Epypa2CZKmiK;+kt<* z@?cQV6ATV^5j>$>RD~W{=3wmb4sS}PiYaDK^;BKtRWHkU_7s22*a`$7k zBLG;kCFk9|>x2P_1)XMDGK&V+`!!s0K^mqT?89m77RyX_1zrHV2pE$D)jU#<1ELkt> z_5Drg1A``%mF`;tG+_Y-Mz3q7`XmAB&=aH+FOdu-OWWUxPRN;d2Ax>G_T?vG=)^>< z8EfiMExMNgfSu?LdK7(xo-&M)glk|J#(uBsc`XkK)I$ScJHMUpoPX+^dP*U2Z@tmP zq>z*=eITkwE!j=9CkBO7eWuEIQ4c+(l=(=ZgGnhP=o(f%q#kPUU8NEDM+;O{b){|dl& zDXYBSLaO>Ls!OF?%4O z5LsOGgioIL0epJaO&omHz>rnrYi=S^I4}?q(QD0^C>|IPMX}%$fXxLTO(;YP5mWNf ziHnOs_!vegB)I0mS1BXbM=1|B)qG4QdPbrE1t>rP3Q&Lo6q5o67aRZuDDZs&e+OPy V%CS8aSit}Q002ovPDHLkV1iTqUf2Kt delta 1781 zcmV=KZXeXBlN%ZuMom= zj8Q`RkN+^jP$;H^l0U{6WfcG6g?kr~ogh%fv}y?1I4Q0*pm>le7cXm?|=8+J9tkDbcL>fN4N!i z-jflB7{rqYgRq4Wi#VSzl!gR6xl&OpN?Da|rxIg1p^4KS5=UVmv` zEaT*h2}p2vNPj@~6f2Wd%DI~#q^`fDUM%DHTML)~Cx!$9fmtz~l&p`Qxiy;@%OuN- z@4t~=sB@?OG9;h{)6D!)rTk&^gH)!a#_xH_)*N<2Lj%hTapnf8!L8riBE6s{HBW7P zDEj>0hV91t&!!pGlB_f$HHec0d9{^|cZI(X3lxiSGJgVSDZ~stl(nE6sx$q` z6l=Kb&jTidMZ^p}nJ^x4I^z*<6rcbFC_n)UP=Epypa2E_e*wq--b-Wuk|(5b8V7$O z#y??6ZhuG%);W{)d7qDvC9v(7ES%^wTF_+c+&;iqF)Bs{4%}fHzk4)Y=irTYWoLY6 zJk9Tn>$M&*)#(^*+o^MfeGAWmUejwUO~l+`zDnB8Hw3tUsCxX7@<_SNZ{Kbk4_U;l zPF*}~w5!uQF~samu&9@GD|cS)prcD?t4HeG$A5DsTRpciu`!Wmma-l7;c3KlrsA)E zF;hFfGrkY_d`2(o{{lc1mrKl;nAJ17*^_;q{t~;A|ehmdBfDym=#mWB?;Ig>425pjH{pMi+ z(tl^RCwCL1&!^8jR`yks-Es(k=R5y72}OKY9GD0#wCCjlzHE)NPiaWGR$Cs+{vwexVeHmu|^=H0|2`SCcB=!AFCb# zz*cM}=jA+C03a4}8zspqm~8it@RJMDFvDaXO=GW63S?H`1lUEum?Wt56WCYmD{4z^ zxjX<8SGS-+TF`&f7kr_K@k(AaYPeA<1Txp4HL#0dvX=CD$<}uhsGjP%A%8e6!kT$g zvREzXg}rI-Rq|Pdg0;4WOO03{lL7$NuQn-?QL8GjPW@j34gfKziLjPL%!TlU$qQ#R z1_hD>fI(|>601yC4GqCS9c{8A19aJAQjlD=3w*2);W3Fd6YC>gcA zP3QsrCY039TRb#j0XoL0>BZV40cubQQp8InL($gv7SRp6({8_rrE6b)B0v%4SR>Xj zqIz^U0RY?4ZS*+$7(JyMBeG{==*C{vjhvo?1lplKu$9}&wNJHAJ%42&v2VT6z+@n) zS9(Cyh}w!LwrQ$@3!spPu#PPtP70AgjjLJUNm-Fc1;ZYmJyF9vBcsF+U;z zn+qc}As@*{ENO%yE-nHwLN~%dg5NxhG?WoD!cgvSs*Nz2=oN_q6rhtG2O$~2PX&An XWF*n9Ryh&B00000NkvXXu0mjf&qG>6 diff --git a/theme/theme.go b/theme/theme.go index 277e8fe..44a45ac 100644 --- a/theme/theme.go +++ b/theme/theme.go @@ -64,6 +64,9 @@ type Color int; const ( // Icon lists a number of cannonical icons, each with its own ID. type Icon int; const ( + // IconNone specifies no icon. + IconNone = -1 + // Place icons IconHome Icon = iota Icon3DObjects @@ -168,7 +171,9 @@ const ( IconHistory IconYes - IconNo) + IconNo + + IconUpward) const ( // Status icons