From b5808cdd56792bdca0d65b9b405ffbb24c7a6b1f Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Sat, 15 Jul 2023 12:58:31 +0200 Subject: [PATCH] Solutions: Enable theming and dpr for spinner images Change-Id: I2105b9c1032940d26f3f3bf2083f88e1133e8757 Reviewed-by: Marcus Tillmanns --- .../solutions/spinner/icons/spinner_large.png | Bin 1346 -> 850 bytes .../spinner/icons/spinner_large@2x.png | Bin 0 -> 1698 bytes .../spinner/icons/spinner_medium.png | Bin 765 -> 447 bytes .../spinner/icons/spinner_medium@2x.png | Bin 0 -> 875 bytes .../solutions/spinner/icons/spinner_small.png | Bin 315 -> 210 bytes .../spinner/icons/spinner_small@2x.png | Bin 0 -> 302 bytes src/libs/solutions/spinner/spinner.cpp | 21 ++++++++++++++++-- src/libs/solutions/spinner/spinner.qrc | 3 +++ src/tools/icons/qtcreatoricons.svg | 21 ++++++++++++++++++ 9 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/libs/solutions/spinner/icons/spinner_large@2x.png create mode 100644 src/libs/solutions/spinner/icons/spinner_medium@2x.png create mode 100644 src/libs/solutions/spinner/icons/spinner_small@2x.png diff --git a/src/libs/solutions/spinner/icons/spinner_large.png b/src/libs/solutions/spinner/icons/spinner_large.png index c24ff1b77cf26d49561c2719f5160070a7affffc..0a3f894397bbce4cc5d572368016c71a8122b057 100644 GIT binary patch delta 838 zcmX@ab%||)WIY1|14BQP9uortv!thsV@Sl|x6`Bjg&jqX|Md7PlK1uGksk_%c~{tb z)fQchc)XZx-U_MCSpq!zyHvEMGaU5Z@nbE zP|RSz!L)ac#qN)G3`Z7;2FzsnYvV4nW*(DMzvu*pT7}cX9{LOgR;g?vcFYN#+CtyY zF)h5y)6rD7=Y;sF!wetv>L)eCo^8$E63};Nmtj!WpYWYrEz`6n_HJGi@1jR5kdT z{Hoc)5po@39Qrw1lA9{@53Q5GeK|t!{M*Po68jb_&s+BLQ;o~?_HAz-EikEJ6^`P| z_*E1T|HrFU$isSWh4v#8hhsY`etX2!X>^&tGE`Suyz=|cTQ?Yj`0HC9Gy8aFM3-!Dx$@s)gXglRALNv0PVzgs zMe*m~xvXK1iOY(={Z+QV@k@}~>!)|STKNpdy-RfW9x3|&;N8TotX=-o%hhkpp0`o| z_0I#zI`wwt6?J0Uy_VfH=AU-NSf}17N_+Xvx=aQ4ANm^XlJ3#s*S?$0x=`pjDM^nn zocF@s`a2T;guh(cHLu3wp~XGn*ty1R=R@2b{;!<&Z^gX?A3xgmd*ZNu_wR~y5Jt-k|vnIx+n`ko)U$p1_7s@wtl(x;LWmTYI0YIuHWtD(t` zm6sT@tVFzaYrj@&_+9+)2182h7VCzjy{~7z;paH9PP66n#&l4Y@pScbS?83{1OOtF Bf&Tyi literal 1346 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4rT@hhPm4t-!L#RwgvcvxH61_K@b9;vm^gA zFfcTg1o;IsFfuW-u(GjpaB^|;@bd8s2nq>{h>D3zNJ`1b%E>DzDyyifscUFz>FDVj z7#bOyn3|beSXx=z*xK1UIJ&sHxqEnd`}p|>1O^3%ghxb1#V01Eq-SJi=j7!V6c$xf zR@bz&wRd!N_xANqm^@|L^x1Rf&R?)-$pGn(70-qwaEd?PTn1S4fg408SgPMDDgO)S6A3$z^>vrf9u9PLuLlkbT*F0IH8+$ z6>JPgFY;|jb(sI8;K_-61(Dl~ffvO0*eom%XV~B5*6>+~;n>ckli!&+M3oizezCI0 zo9HnwFmq)3Wg^aZS)}uN{`9IS`CR#i4gP75OQUU?pFWicH6VNNMz++@jFjUZ~pnVc=^Ff9sMJ7k2Dpq3Qu{? zna$68CTZuCPg|!?nqGROnIZO_-<78~CuAz=)gNi875B|Qf0f_f%lqU%p?zHvybsK+ zZ8DSnMV|83vU^Orv|OUlrnI!--{Nc+5x+He)xNK)x;=YKoSu?rzK4iM?bcn{yb52V z=D(CmusHP2CEcB49!q1S-LhJ-lOl<#!4Z1Xz5P}o-At;&bz_%T2vj|mrntnt3B=B_gb6Mw<&;$U2+?2oo diff --git a/src/libs/solutions/spinner/icons/spinner_large@2x.png b/src/libs/solutions/spinner/icons/spinner_large@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..910a11bc75636b951c4ab4d771f593df37b685e7 GIT binary patch literal 1698 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4h9AWhG(I6;tULInVv3=Ar-gY&i)-N9V&AC zv-(HtvOj{WznU(7^uzlAdstxmEx{@BPJbP(o7rA$IeIFg-QByQ1iq_0w&i(9{9quj#7 zm+XTlY%#t!hcQHC$(y8e3|yBPS}mD15_I@K>}R{NBPQm~hJ}0zM#f2n?jIPg-PiZJ z#h#tTaOkkhCAUKn4Ex2FzNt24FjGqP(`hKb%-|aKlwsc%JI5r(J!cuF$Y`-HSi{pG z$$j7egGi}1Yedo)PHV9Pe=q?oQy)65?W*caT9RvHj8FAO(Yy>=Ep>+O6}s-54J%?ucQ?5@D!`Qdyj( zkTIG20pnjy-%SrMz2-SETly2jB6V+r6~0#c_?$mXwqa1`Ik3m=>w$yS4i6?UKVYx@ z6tKGKi9f@SNt4(-e3%YwN)r_uc&(xWiuHq)ZYXKuIJ!e-~HQ*)u!2<7s;tVs&-+z{ZqC}d=t53KQg|H^3vho z{PgFX3E!?NvHZ$9XK^gM|7*P<=SR-(A1^Prl-pt4cS3j@N4`SQ-v*^C>(cB_+`RT~ z(uzfU<@%W0=C0UN8mu97OuoKRpr*z<%|_IBshqJ={N2{8o#HP$YrG!KKcI7?WsDm(WHrQmAV4n2W!jEb$jZ5{b}mq8_nkhnl`mhk^0#Z zUh>KH@<%`AS6us7GoJYIb6v-xs)TK9iUAKfsyqI)#AiA>O}xK>p=t_q#f`>%(}jza zxJv7am@afP8*C|9vPmU+J$r-YQwH_l!qps$)k>BuE}mSaE_3^sw%23-)!tg{A+3jx zEV^p4PiJdWX-S_h{{;3E%ug6gzJ#q_=yic7H@f0H|4mP)3nx-$UC51HCA8H$f<;mA zr-+ls^(fWEw-yX#PKRWynnfBI*&C)X8F({aNfB+hvelFE&be127OHbU9Ct9ATVOFO zrY$$=^oKHrVo9qrN_-D`o+&5FDezBV|M8wVV4K)u-`Ts?-rO`*;_%&BmC-%N%~r4- z=-qF5_pPbXwn^P@D|>PnY8QWfDj%RCW8UMI%Mc=aam^O#o6C~8z7_JV{Ko!Dpf=QR z#lIQvGQMyr)u+bXH43Q?_~~z~l>a6)R%E5ss=IGop56{Gcr@qH;a3}0%1zvF_cf^h z^~#mm9W~9GZppKoxVx8%m3(<$wCF|OUB!)|U#e|>&zyg9&!&&}ou5XFTkb!4Yof{O z6H6Y%M7=dt`qXP9dEx3rqwNL^=eFJz-d1CKP}sC7HnYJlkzr2v>H9Y(pRe{z_IzDl z!o~a`=I*>@^X$bc=Hj$3m4Y?mttx7*|Sz%^3)f`(CgnD zugF}n6dv2bx%r1O6Bhjadwt!vb=+s)CGs<@DeRMv$X&g=D9Xa)l4M|v zsDGo~Zg24`Km1h0w&vPnepv&GLf0j|X$g!nyio{0wH9nG9A7DxDvzyok=QWZ1%OH~%u5LP7h*_gp8L zFYH=*m4*4if~Slbcdq?r`cmEhgel|J4Vm}M41S$z91AkDw@ZJSf8i6O-|XAsg^Wsf zd;ZPMRb{xf_4|KTW&=NM#tUy)+hrq~?h2+dMD2Z4IEl3~yHJo}ZCnu}|BG&I)(bC8 z=kMlWsE-q5zVO0T{TRFNmLi7SxUXFI{HH29nld~T-10AUJ5TdsTmCgpmaZ}leLHk- ztpD9Po5kT9|LV^Smh1|tYrp6)-2jtIwm(07aSo%*eIEJy{~z7hpKh>4Vzp9qDX8-C MboFyt=akR{0K@M9ZU6uP literal 0 HcmV?d00001 diff --git a/src/libs/solutions/spinner/icons/spinner_medium.png b/src/libs/solutions/spinner/icons/spinner_medium.png index d64cc514e1b6f5a8a7b4f0672301c9ea4751c247..6cb735f18ac8e275a5dc174d0c55b5c5ab3f7759 100644 GIT binary patch delta 432 zcmey%x}SN1WIY1|14Edgss;lCW1FXoV~EA+*2(_fOo1XtpDX{=Ra@kmt*F)%<920H zXm^IVkII#0Q7#Weazna0UMy=&&J?(k5H!&#OJ&5^Yo_iq3vz#%ftjTc1Hdh*|bWO@ihrW{0oS zl6*N5R6R6D*vKs9DKmq~(Niz${tDwVBRL%Y3{?@xt}u66LcgN*C9p4XhXjaRcmrmt*5 oGjGKlxvUrLZ2i~eHn0A`E*7q^BQh&!Q?&-hp{GRiC&U?%AmFH}ym;JC?-}o`4@ysu=`d{-iy&ovobd|Fi z>=VmR2$p85Pv)o=tuW@7&GG#Ee~V%PkGNqQ|8$3h%?dT_=C=eI{0-XqT_S!z%-l2Q zvG?B=Z;qHFg*?gejemCB*!Frx6j$T-4Z&~XW#=bLsiwIm z@ZLLKCv$A|R@dzxT>JPl`s(jg+^av@eCv+Zn*(8YWg;KEW%<_8GW&3*%+a@Vd-^yhw4oP_Yj87H34{vom7^u+a#I@?}e>)ZdKSpShTFW0i8Vt+b%SJuBc z{qxN41UBhQ4^-B59g&exeZIeMq8ZzK2`h^rh4KuCzq@~NP6;{mpK&qs8cnZ5%aS7= zss=9F{&3Ex^}90yRLixlL)mm(6X90an28} z^bZB|8rLq`bMJ6#&35kf54t+8SqXlNyqlI1R&y>tIrW^qe$>{PT@G8#pBFAVxO=W- z>ts(Ssp%|Fet%W!s*lJBl3t z=~36+_0ci;%fabWCrAkS`1puCUd*ZAw$+VSMe690Wu_Th<1Q%VWKP^>lEK}?>zX;S z$S@|yIs4_bb8FJmqsz8iZ{F;b#PNKi@&EYr=P}D&H*QT%_+}l&C!cUTIGMR%+bPB? zZ0C0}+oU`^P~m+O7p~%7z%nXGrV3f-RwtU0W*WsRW1j^3+l2gmo9NC{8-bV^P*W* zec}!FhTz#}87x^E-uF4}tPta{J=-Ai;`k~ahEL)>`}Z;*_-JXI5MBCkQ{nVI4c{3K zA37So`;s8Pz*RG_3%-4O(xL+7+ow3t8`CC|K z*lOebk8iyccJ-D~S)ax6-D-DTXwWR1O>W#vZUwL_ZmB+1VtJ~i!)A(OkB5%Ug>{Rj z^UW}=wXvNdzT2@rv6D}MHFZ(jqA*KCw3t0K=|KK;w@g71^PoxfE5D{C)yJwDd7 z{CCG4+dC_sA5D*2Uw*7GyE}9F_xyL9#~kEutX1dVzcZ}L@t;L*2it|}&0TyOwte5R zaj&-L$Gj^BNsqrT_`gDeG3CIF1YQZQz8TBbS6=vSc9!9{;PRD*KNtmq&oKN}Je@P& z(LNxLZGvI`JC2QjD_@6D3G3AQy2gcK@xTlL~A9%PSwwk-jb0OoL z-rt&E87i#~oNQif#PG|rm9ODv!|x|E+5Q&KWG(pc;*jKi^R*ioUTxNIw~SkHM!~G% k|A!@C4>6Z6`_J%$d#YJ`q;4_S_Zwlv~+sHi7RW_9c>v; zU9)_3%Omw6-savC6d1Kt^TaOxvA)mSmY7@$ecT~pF}4f1i9AJ)z4*}Q$iB}_*GX1 delta 299 zcmcb_xSMH$WIY=L1B3kM|A`C?j7**`jv*GkOE1}aH9HC%`#Aq+fFrM?wysU%BC%_e z%;ssd3IuHUBsI@LKwoj*K`#Lple!j_q>t~kAHP=9l#z%?`~LsTn==Nt^CtUmjk3^B z%FVdQ I&MBb@072e|`Tzg` diff --git a/src/libs/solutions/spinner/icons/spinner_small@2x.png b/src/libs/solutions/spinner/icons/spinner_small@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..36821a92e19f7d4e286da4a890d5f9a1962f01f7 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4h9AWhA=@@4F(2=ubwWBAr`0iPPXN1HsEQs z40=Cl)8^1Q3(7fz+gB}T;Os2maEb7~)v4#fF=f&O3;Td+VP8{z)^eWP%(+9j-SUpt z2jvB7*$sPnF1Q@O!yYlMTq;AUMTC*z^ra9XCIv+&4V|0?bHAD-{}NuR@I;m?A!z?> zwZ;er@9XEUw6NsJ)@ZN@@+-~lxDb7R#m~OUTHjdC-S(Td(eB7^p_1FL4lbFT`c?AK zJO{3i{0Bsizg1IQygl#xOp}Ax^Nz2uIw*1fSbtdX!pB}_+f8-W>K~}Ovq1Ymyu?a% zQ}c%HMd!P%@)^oASpy5j3$D%k%>LBw!5@ovJa #include +#include #include #include #include @@ -81,7 +83,7 @@ private: int m_rotationStep = 45; int m_rotation = 0; QTimer m_timer; - QPixmap m_pixmap; + mutable QPixmap m_pixmap; UpdateCallback m_callback; }; @@ -98,6 +100,18 @@ static QString imageFileNameForSpinnerSize(SpinnerSize size) return {}; } +static QPixmap themedPixmapForSpinnerSize(SpinnerSize size, qreal dpr) +{ + QImage mask(qt_findAtNxFile(imageFileNameForSpinnerSize(size), dpr)); + mask.invertPixels(); + QImage themedImage(mask.size(), QImage::Format_ARGB32); + themedImage.fill(qApp->palette().text().color()); + themedImage.setAlphaChannel(mask); + QPixmap themedPixmap = QPixmap::fromImage(themedImage); + themedPixmap.setDevicePixelRatio(mask.devicePixelRatio()); + return themedPixmap; +} + SpinnerPainter::SpinnerPainter(SpinnerSize size) { m_timer.setSingleShot(false); @@ -114,11 +128,14 @@ void SpinnerPainter::setSize(SpinnerSize size) m_size = size; m_rotationStep = size == SpinnerSize::Small ? 45 : 30; m_timer.setInterval(size == SpinnerSize::Small ? 100 : 80); - m_pixmap = QPixmap(imageFileNameForSpinnerSize(size)); + m_pixmap = themedPixmapForSpinnerSize(size, qApp->devicePixelRatio()); } void SpinnerPainter::paint(QPainter &painter, const QRect &rect) const { + const qreal dpr = painter.device()->devicePixelRatioF(); + if (!qFuzzyCompare(m_pixmap.devicePixelRatio(), dpr)) + m_pixmap = themedPixmapForSpinnerSize(m_size, dpr); painter.save(); painter.setRenderHint(QPainter::SmoothPixmapTransform); QPoint translate(rect.x() + rect.width() / 2, rect.y() + rect.height() / 2); diff --git a/src/libs/solutions/spinner/spinner.qrc b/src/libs/solutions/spinner/spinner.qrc index 5ad85953e8d..0b8a980272e 100644 --- a/src/libs/solutions/spinner/spinner.qrc +++ b/src/libs/solutions/spinner/spinner.qrc @@ -1,7 +1,10 @@ icons/spinner_large.png + icons/spinner_large@2x.png icons/spinner_medium.png + icons/spinner_medium@2x.png icons/spinner_small.png + icons/spinner_small@2x.png diff --git a/src/tools/icons/qtcreatoricons.svg b/src/tools/icons/qtcreatoricons.svg index 17583cb29a2..155b5ee2729 100644 --- a/src/tools/icons/qtcreatoricons.svg +++ b/src/tools/icons/qtcreatoricons.svg @@ -1200,6 +1200,27 @@ y="0" x="0" /> + + +