From d0dc7cec78e182f04726c5a2adade80dc2983bcf Mon Sep 17 00:00:00 2001 From: Andy Nichols Date: Thu, 6 Nov 2014 11:30:45 -0800 Subject: [PATCH] BorderImage support for @2x assets MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Despite being a subclass of QQuickImageBase, BorderImage components did not support using @2x assets like Image components. The 9 patch image logic now accounts for device pixel ratio when needed. Manual tests added for stretch, repeat and round tiling modes. [ChangeLog][BorderImage] Add support for @2x HiDPI border images. This means, no more need to multiply the border sizes by the device pixel ratio. Change-Id: I79958739929964c816ba5dacedd9eaf93a60a183 Reviewed-by: Gabriel de Dietrich Reviewed-by: Morten Johan Sørvig --- src/quick/items/qquickborderimage.cpp | 71 ++++++++++--------- tests/manual/highdpi/BorderImage.png | Bin 0 -> 9420 bytes tests/manual/highdpi/BorderImage@2x.png | Bin 0 -> 15852 bytes tests/manual/highdpi/TiledBorderImage.png | Bin 0 -> 2029 bytes tests/manual/highdpi/TiledBorderImage@2x.png | Bin 0 -> 11799 bytes tests/manual/highdpi/borderimage.qml | 99 +++++++++++++++++++++++++++ 6 files changed, 138 insertions(+), 32 deletions(-) create mode 100644 tests/manual/highdpi/BorderImage.png create mode 100644 tests/manual/highdpi/BorderImage@2x.png create mode 100644 tests/manual/highdpi/TiledBorderImage.png create mode 100644 tests/manual/highdpi/TiledBorderImage@2x.png create mode 100644 tests/manual/highdpi/borderimage.qml diff --git a/src/quick/items/qquickborderimage.cpp b/src/quick/items/qquickborderimage.cpp index fc35480..f345a77 100644 --- a/src/quick/items/qquickborderimage.cpp +++ b/src/quick/items/qquickborderimage.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include @@ -321,7 +322,13 @@ void QQuickBorderImage::load() if (d->cache) options |= QQuickPixmap::Cache; d->pix.clear(this); - d->pix.load(qmlEngine(this), d->url, options); + + const qreal targetDevicePixelRatio = (window() ? window()->effectiveDevicePixelRatio() : qGuiApp->devicePixelRatio()); + d->devicePixelRatio = 1.0; + + QUrl loadUrl = d->url; + resolve2xLocalFile(d->url, targetDevicePixelRatio, &loadUrl, &d->devicePixelRatio); + d->pix.load(qmlEngine(this), loadUrl, d->sourcesize * d->devicePixelRatio, options); if (d->pix.isLoading()) { if (d->progress != 0.0) { @@ -329,8 +336,19 @@ void QQuickBorderImage::load() emit progressChanged(d->progress); } d->status = Loading; - d->pix.connectFinished(this, SLOT(requestFinished())); - d->pix.connectDownloadProgress(this, SLOT(requestProgress(qint64,qint64))); + + static int thisRequestProgress = -1; + static int thisRequestFinished = -1; + if (thisRequestProgress == -1) { + thisRequestProgress = + QQuickImageBase::staticMetaObject.indexOfSlot("requestProgress(qint64,qint64)"); + thisRequestFinished = + QQuickImageBase::staticMetaObject.indexOfSlot("requestFinished()"); + } + d->pix.connectFinished(this, thisRequestFinished); + d->pix.connectDownloadProgress(this, thisRequestProgress); + + update(); //pixmap may have invalidated texture, updatePaintNode needs to be called before the next repaint } else { requestFinished(); return; @@ -495,7 +513,7 @@ void QQuickBorderImage::requestFinished() } } - setImplicitSize(impsize.width(), impsize.height()); + setImplicitSize(impsize.width() / d->devicePixelRatio, impsize.height() / d->devicePixelRatio); emit statusChanged(d->status); if (sourceSize() != d->oldSourceSize) { d->oldSourceSize = sourceSize(); @@ -569,40 +587,29 @@ QSGNode *QQuickBorderImage::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDat QRectF innerTargetRect = targetRect; if (d->border) { const QQuickScaleGrid *border = d->getScaleGrid(); - innerSourceRect = QRectF(border->left() / qreal(d->pix.width()), - border->top() / qreal(d->pix.height()), - qMax(0, d->pix.width() - border->right() - border->left()) / d->pix.width(), - qMax(0, d->pix.height() - border->bottom() - border->top()) / d->pix.height()); + innerSourceRect = QRectF(border->left() * d->devicePixelRatio / qreal(d->pix.width()), + border->top() * d->devicePixelRatio / qreal(d->pix.height()), + qMax(0, d->pix.width() - (border->right() + border->left()) * d->devicePixelRatio) / d->pix.width(), + qMax(0, d->pix.height() - (border->bottom() + border->top()) * d->devicePixelRatio) / d->pix.height()); innerTargetRect = QRectF(border->left(), border->top(), - qMax(0, width() - border->right() - border->left()), - qMax(0, height() - border->bottom() - border->top())); + qMax(0, width() - (border->right() + border->left())), + qMax(0, height() - (border->bottom() + border->top()))); } qreal hTiles = 1; qreal vTiles = 1; - if (innerSourceRect.width() != 0) { - switch (d->horizontalTileMode) { - case QQuickBorderImage::Repeat: - hTiles = innerTargetRect.width() / qreal(innerSourceRect.width() * d->pix.width()); - break; - case QQuickBorderImage::Round: - hTiles = qCeil(innerTargetRect.width() / qreal(innerSourceRect.width() * d->pix.width())); - break; - default: - break; - } + const QSizeF innerTargetSize = innerTargetRect.size() * d->devicePixelRatio; + if (innerSourceRect.width() != 0 + && d->horizontalTileMode != QQuickBorderImage::Stretch) { + hTiles = innerTargetSize.width() / qreal(innerSourceRect.width() * d->pix.width()); + if (d->horizontalTileMode == QQuickBorderImage::Round) + hTiles = qCeil(hTiles); } - if (innerSourceRect.height() != 0) { - switch (d->verticalTileMode) { - case QQuickBorderImage::Repeat: - vTiles = innerTargetRect.height() / qreal(innerSourceRect.height() * d->pix.height()); - break; - case QQuickBorderImage::Round: - vTiles = qCeil(innerTargetRect.height() / qreal(innerSourceRect.height() * d->pix.height())); - break; - default: - break; - } + if (innerSourceRect.height() != 0 + && d->verticalTileMode != QQuickBorderImage::Stretch) { + vTiles = innerTargetSize.height() / qreal(innerSourceRect.height() * d->pix.height()); + if (d->verticalTileMode == QQuickBorderImage::Round) + vTiles = qCeil(vTiles); } node->setTargetRect(targetRect); diff --git a/tests/manual/highdpi/BorderImage.png b/tests/manual/highdpi/BorderImage.png new file mode 100644 index 0000000000000000000000000000000000000000..8fa6b40d78443fd726f4657358068b3b8f97542b GIT binary patch literal 9420 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 literal 0 HcmV?d00001 diff --git a/tests/manual/highdpi/BorderImage@2x.png b/tests/manual/highdpi/BorderImage@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1bbc52781f2ab72831c86b326064f969d9765c77 GIT binary patch literal 15852 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 H3HpBkHN?Md literal 0 HcmV?d00001 diff --git a/tests/manual/highdpi/TiledBorderImage.png b/tests/manual/highdpi/TiledBorderImage.png new file mode 100644 index 0000000000000000000000000000000000000000..b17288ecddcae1be30faf7cecdbd410e58b5b464 GIT binary patch literal 2029 zcmZ{ldpy(oAIHCQ9gaqdl8jMF$`~1PZG}T}lp{LX5``3 zn4x-)V|p@`t|0wb1=Gt)Xa13!$~W+D){U5>EH(y}o6wy!Ej9<}Z5~Ie%ToEC42gt< zJFme9jPR%r74#tm6RegDuM<*MKP1`)$^ck8rD+?4wz(9NO0{~ydi-BNR$p1I)QGK^ zGTw4rvx9YmK5)Wn9XqZ$fN(u30L>3__Ym_l)tEA!ZNm;- z>&};zO1DTA2WPGLRKGe|1a_7`Tj@g+gUyne4rOk*PhAI8A(NE?e+VEz$H7R7S`?z0c zN@A@BaX_9h@9)!*lDzPZeAKE{q}aCc!v)btUollS6tA0=Hk2in&iO)B=GuZzOVq-a zc))v%fv#7V=S{?M=4d_lofPSEUfzV@N;<2l)=EDu2C4q>5`oBwvF^`sO3YUl(N4+t z1Rb7>yQM#QB&5VF`6k(3@zfoi9B;3pXh)8z_=NZTfV%x*Cg|4+?`bspfp^1xeY69% zuUCFv4L~Kz*@0kDi5j*S0ECxLYNck{lNW^iFFP- zTY-|dEFn6Ss{>;5tk#ZaH5Qz9JUXUF2?%6Go-azA9#i|sc{J2is{BjSC3yae_B+BP^epLh;%x(#~8zHw8?}S1gKl- zMuLanrBnU-1qf_U>#fAz3)fvanU_3!rcl7&_MbXBuJ7xH-Y}tZ)H#!n<;LoFR$(&! zh%D@zQkpX4*16I(+sxDb$1)4OiC9+y=|(|=2_%7*;o;jJJQf+hPj_=M{7*rXh?^$%NR+!xpH#IDZ2t$Gf`^_bE8(p@en{=2qO_s@jThO1o1wrtYL~ zT+MuQqqmo%KL|d+>E9zExRzu*~kp3ZFt*K;_i9$oP zaNuLSJBQOdVr2rArm_{@XD*KsOJ^BwmO*BZz7Y;~ki$D4@q298W});ZQouL{G4AVZ zJ{V0@x&O>2sHFwFH8*)ywx6HMi;%Po3c0wqHLMXJMmN^)Ld@xz1IMx{J2|=zSfLxUsk(du`Qy_FC0DnL&J-FZ9Vmls6LOxZO z-QBq?{9TzAkvC$#^RQO{$LT7(n~e%Rszzl4a1PdA@m|Ce?seVGt}B$=78TncW#+Kl zIkOWfqP1T>2i>FKW46D=8a#Cpx>HmH_9MG8{ngurdCVuf8=o`D>+*fOuXi;Tb3Lk} zf-aZ4Th$l3zGY2(F8Q@@Wx?fCFn6Q)U}ae7pfuC0(NBEgI~MqFjJn$OJpGKD3zzyk zccZf`yr6g+T^F`B+rVJI*^4rJn^h~h9-?pS3x_QiR~8KWC}E+OD!-4!+5gow|In>| z*ZF+cHT=;1z%-_En=;NMg>4=iu-(9_2+f=Pgj>tpp3_HPDy#@`ycdhfkT??sR%RX}v)6O&>y9-x)FLBhCI$e2Oh;S86#LnI z^CHB@zMC#TB>(_UKu1H(JTUK9i08+=0e=i4FMB13ZQx5oOq{M;VbkX>kIe`nPxxe8 z3#{^hrz5*;GUYx`qX~E$Z(hbAUAUB&43|KSP2*ch<*am?P!R;|$(?RLCD0Ht=%(G` z<4MTVg7R>{;r+XkFTaa%aDMml@8#u_fX*Pq$`z|eXZyr&WhuDSdBI`qYBsG&%=da8pn5ouZ^J@qVokHEzz~v6Qgt-Jfl_Y4QT<^9%M211Vz^8sQ{``O*juHp#XNN6QG6k_Pb>W z6fwvskpHuci^$mJD4#3PhZ}SC?Hr2!g;D+zN*;%u84ir9D6GLh`rP!3Qo0=o765jV zSElLUX4K=POe4Gp>pcX#2RN_f1+X23qHsO~&G0|N7Oq=Yg_BVM#I$9Uc*gznPekoS zcF*;7OUA|^Hh)G7FBJ%@j>JiCnlBE@AWCt&q=}{}$%TWJ?;U~2B4sH7Qm|@94C4~e z;bk1chHHUjz(;q9c8?pZp_mYZELDq?T4adQjiu=$_7A`l1TF9Kkn}T=Xjd5Tg22TS zPh$?Lb!HNpcMfxcP0|DUX8NI3wz6gj%;A3K)xabLHk=IFj2d=@IT~g*hKz?r1wM<> z?Yrw4GanToH*)uN0P!yEDiKc?epmqk<%tF%K=qNg!dWy4#xhdJEA>#3lrELqIjlPR zykE{Wt4yEGY&46j*W5F&%r5wMV@NLMgzZ;ome~eJ2#O7S^lezl<;rd8$em@s^j27u zhnu=)sEOjE*bC-W;f@gs1}09awX1I2%T&JQeU(*EJF(jr~8xM&!NW zvi&xcK%&eq+4z>YgC;QX3+^6Z*Oh@%;Y7X!?DgIAb=RG>QKSa;qD3-;I{Q8N8%hM# z_8vp-(ZNbxHBvDE9yyLesU2qT%(BE{1JZ%~-n{Jv3PJhU1tS=?Y|unlExNL z(W%-7$5jtuwH8WR%_O@SN`y3wR#5i^PjYRVWSJmvjU$EP9t(28RExxu!-HG$IZs&K?~qve@=>ja(7qcEoQ;X>UG&MoKMPqREWSdRssH{E$={YNaT zWzGbm9pquPz69Q-tL8>$=_Cb!N&<4MXU6d;tPf5>2Tpu&_FXQ;2OP4c!^U~1v(A@6 zQrD_s)pRsvIJma$FGfx}vm%91@f1)kg;W0kne(>2zX~y3xVVBPKN;>13A@9*$J&2# zfRBE${?Mi2o1Y_Jn{3AU96W3((lwt!$va7_5Fh$ZkJ=zR)_mGHGBJlo`K+=3*U@F^ z-ix4>V|;ioT<)0TGspU3`<&tyBSZX1aNlic83fmlCA%4J=6*$Apk3+Oyy3`W9|?ws|Id$FMEWZUbV2bXlSF zy>`i2^Y~!%aWeBx^YpFj9ca<5F#wQbkR}vxjed+Da=J(Dose$;r0``YE4=+QCn&8t zi|+uNEMkgVqqL(xW~hZf88~c?QIJM|f< zKp&&fQHkQ)OS$*T<7|615l7kg58U0&UEiD%u6-+B=`Z}bmM#<@`L^Qc0oTG&O=2x- zZukg$7n4PsEz-g-NW7pn!(I`a+HLg9wUcTxw8k{{?xfZvdgFqR(`)e7C5N~}Gk`~W z16=pP7OrW<10oksKT$lC;P%^!sd(1${L?YA(*DDd_%l?w4c+FTxZM%i8G2=Ka>{Rv zXFWzouYP9I^hLqmn_a7s3h{c0#*ai#6G$q>JqTEs7_{TBTw)W2gJV_Rystv9-K;yAvlaG8W0)H^ITJG)kG^ z`%P4u2g;IGoo3zmEO1ds%8o1Js`m4%$1|_cP8R)}<$xcwsd8LgL0)Na<^pc~_QTpf zxO3Uxw5Aa6!7`+Q10I=+HVFv%e4h<*{KDvz)H3Ap9`&5?>9hnHPH8^e>Y>(_cwFW(uASC7jQS~i!lbVr~ia&oN8`UJ>nLuLI z&EAI_Rxe->+8agqV^ptbZ{^zlXS5KCgaZlzcR$G8(Tq#0tdeZXeLmQ?&C3vG^bKSl zuED?d`{5C9R2J)R#}T(Bmb3!{KxL0WtJZu2f<#_X15PbWy>Pc-?kBkTGxtmC8V|3= zPFv!z4$aoLkk_A< z-{pGp^nxueOWd49hd@E^aT>3RC+r8c6QS$h@FEWEb|4saJq9Ap!DGD_9VwNuo(B^h z@bn)_$-Z?x=S=4KH3gE^Bj5ox(9im;g1vF~4z2kzo_2`_jk9xKnJ!#&57_C)Zb%f; zqH~IfoK1&#zC`>4q~cB(hFrtQXS4yfi&h7YI-3m+GL(`vte)AxyPibMPhSzxt6+J1 zwp#g^T+gIV!^#RR2HJfn%LmJ=ByzOPDglvlRu}<{`y8r~Q0b#{5#Wwf?$9>3 zdVt~ywUglTh+su%9_KI?_MX2FOSUIfqPP2}N1CtEmwlMlr+d?~ti(Hl&+%%^8-*r5e|p0)8CQ;Q!zqPF#P#O>jT*y!POOi`{WD3HfBGNsc?o>FRitzcBz_Cwmoq3f4HITVLb z6U*$jRo#!#S)isYlkXn%G+&Aqz3lP5@x|G4Sd2F~*ifCVs-t7lI-sNwg+9tDC%*e? zUmJGt+K-^<)cLjMAI29iQZaRHc+d1i zs0|3^soCK49YDdr?xjUtA1(O=MGbbG=y$l?vy-$1j-5Fn?c05~F2YabzO21Er%uv+IfjHf};-7A2e{kZD`&TLcI@%^MmaB#?o@h02_*E zy1G~zuBlG@l@}NM50qv{u4!yTm#p6bM;?jG^8S&MKW0WBGA$Z88^=sBZ66n0cq!wc3oV;oZ8Z-YKc~AikxavEpBuf>B{QCQD zWwP)5P|0bJx?P=!gU`MLmF;^n!r=J`z0J8)dz46zuCe80FXtQBA(yFI-SGN0!cmJ^ zh+}B$v=ndH_>o={G6MNumxfEx`b)aZ0 z@@sip=g?kZBZti~7U(~D7257kn@QTygWbsuLKXIIusGOnzKdkHje~BCY%Ka1;i2~!Uef&+`FzXf z@B8A`q6-PMl2`0uW>=H%nzhFp1Q;NivpJdC!Q8P7sdPn3Lk8jHk6UKc21ow-=@wdk z4?TgHOY34!|2sOabZwC?xM=~a@36p~YXr^XYs}6?G>>aSgqW4b%8#+wi`=gc8lRID zc{%=2M9?dVGn{*sO+H{@M@fiTY^?dF#eaZtBu%d-Ko#kAKy8o8a5yh7-k1(%!4z4+ zCNNV{dYM*=6a$}5&Kk~XCi`j|j!0ye>-QTS{(dOlm<(pUX~xTCZKIdjn$g>sa?0I7 zK5Q|Pal481vk@Ix;*Txl|AUL=GZUigaU9f|$!}W50s4+9A$rYm0vfcxG748x zsJW90`bu06c=&doCf5|t=>2(#ik|*50bQ^9VBs1mhdqeZB8~fBzvm;I0G~bd`8}3f z!+!st%)2-7Du!g{saswUhP0CJQ4G09xzN&ZpEY zO5C)Yo?~0p+k@qezkhzB6Gm-B6I%`qFVvs}(>fEtgz>*m#Nn%xIG_leLC>JOsUIc> z&u1zL2a1M|F}So}%E3S8^VXyUlVxO~K4Vhh`yQI*1@vE$6r*5QmZgqNYUDJJwz}NM zqYJ_w0_n=O4q)9lxR093i3N5}R#i)vA8IAAwbqQc(7Knavb7SZZo#ryvC)a;KIT;? zy28W!;)tuP!Gs-3vN~KAUie3{eJ6YyCx>3CQH6nwvMjf_VWY+a=l$yf+w13WMxp(D z`b%U%3b2fcHkyN7KBt%N_fAogiFgAp3dJkrnz1`L?q;b|&CuVwBgx?c}6XladdYEj~TF zJY{nxuLHmcs%%cS?veQuhhc%YU!@1KP0Ycv>YFaEU=N~3NkdZ#8A60p?BVnJx!^YK zHg?E76Ybj!1=62sudd4*b2E*|e@wVJOgeHv|B7C)04|k|kG$tLK?JxFQtxQ1HmDe> zRk(#ii!QsPG+K|#7t;ZbyxD0Fv-MdiZnL#LrdXc`dRH!%%z!KG8hE8?C^ zc^shI=@C8qV4l9ENxVVzz%?-cxmrp1tm^i{Z||=@wE*njAR*@SB`E-*~Yom!D~lCbY5?! zoMXUH+Ir{LRLU8<~}USjlNA#^re?EX{S0q%iU*ba)x)CE3)vvK5XDf!?q=UCVS_9i>$}0~YviN4e4^!j_S%9sQ}%;~Wks{JdC4r06*`+{5WQvcT1d{b=6MS!YN#9=d+3m$w_eA}_BC*@12>`6yD0aUId!g+-sZ}5bnqT;i%juTF zRJkSKk$(?I!;=!9kS(VONw)EX3VM8L{UF#&<|7@OUc4LX-$HRQIHpWml5^}wh;-0! z1g}(XuidKK7gCWm=~YX;#lrQ8`qQ|;fW0Ri9*6Sm<8jXA1Gmxq%hVSH=hYWYasf=V zwdqUR3P76WA3$hxU@u<7AthzhG-n~APNe5QxY%7NmC8%2w8`W#^@|E((Y61=#eTt7 zq+8Hwr5+CChvpEy4H?xl|E5;SCMNGsigVAY?HSea-lYwhaJbA4wQ{edQ!3B6+8QJf zCnU3Pv|BagGSXhRn?9+Zq@oM4#bsGNJ5FCyVCsr9)PJvxE^iPF{ll<|Zb?}q97y&P zZGjYpKNTqC>z-w7qR+@P`yymZ((UwC3nc>jBok5hwU9W$v>}VPz~C>4#5v*_E7i9I zOG6oU6}qQ%`FZzWqKsOF`V$}>>n!`%?FmKi_i}W)sZui>%YE}?`6WvOYZ~8NQj?gC zHZ&&Va)MVdvHi4*t5Q(W-6>*`QIm|aL|I2Uw}n6LIllcgpyL}cQM?^~JCJgr z5U)tMwzc!(?3sjx-@bI*)|$U!ug_c^1(D@s^zm5JsBxLhhmV{p9d86R!Twt?t zR;VyQg0H5=!|BM#lI7se`loG1+{yLB0yDwrGEEN0f5qd9iU8)wV}u^C;QqNoJ9(xi z{H3n^mcvO3Nl*DcP^DHpl3VEF{`$G}t;qI;=Zk;wcV5wS8(sF8n0QGOZ>?nljD2I2 zXahZVL2ijG8Lr6cCu?41LlzP3#YSIbMErRE4DsII4k?K7+3d&l1XpmW_^Q5_Kwr12 zX7Hy0T48l#QevhH#(13O*TngFl&03)lhaB-+Q^nqy{f4>I3`Fnb=G$pUxV|8jsJUJ zXTZj0g%Y|`a3{vx)T~c43BHeH8sk+3z`Ltb5HfiHX3K|QQFrU49Gc~dV z60Sc+`TZWsIT4K$Etswr$cK-T?lsGJP?}|+ib?N3qH%S+#|!vsU^}N2t%g|ow0kJ| zNj!2z#q@9>jgcHjccYdm$DYq$KTJP{T;ja|)aMP~Pl*KF$>f3$*Qp*Bg-w!Q)7K`#%PJ)jl>R^G=;be%WjsJ3Y*)nlt-&ot8%W_R)79cmuO`6VZCTUA_6N(oIGY zV03X-?!uwWCJZb$xN8Q?Z9iXNJJ*qVmBvIxlTY{vCvW|=JG+D*bNcar0po@8;be-U zaZ=*Ky~>5^U92uIHuY13dUgGgh4ngA6c@Ff%6TQr?4P!AghMMv!+g3+Qp<2t1 zv68^K_+@8OoQS1ZZ@V~r36}zi0%q-(n>4&C5<(qNTZq!1xI`Q876wH+f35e@Xj=pU z0Q>(3i>sFlZ%qj#K)u8$eWeUcfyV{o-Xd0u@{+`+WuoE>k(fUP9q6t*(O;W$QPJN- zfq)RVs{puhbE67qBYf1HAa3AoAf`V}QJ#1n#Ptk}bT$eU+JAfB6%|Acv&!eccR})% zhCM#HCtp&e*(Ff=JS^lQf1Mth~IH|Ia7X0`F z)K_f6jQPL7Vj*g25$4ikgbuLa{aHX01UuNM1Izf_<7s2~xFm+@uZn)v3N0S-3L2pS zLVqRSEw7On49;N^R=*l1bx*c7oYV!PG;XHaD2!wI?35+@xa_&${&sHiRQTLi0|L81 z|FfL}*HgSMeRyNz@#JR}xsDvtmB;&XScq!U?K9Ihfu!sy`!#;Cf z4M7w#Uq=UuM#J9~ukn!K z^1&3R+w36xN~i8q)t5o+ZWLO5utp9G4f*r696>^EPKs z#437KRF2NmNCOnU1b%;KNOUT+WQ2~ND#qH&ZWVs|^`c>pJnIj+olgZ@?1^PXpY71y z<$ISKk0#B<3Pb`--b29Y1Q8WjEQA7LH3`M&|=-+pFTt-Z;i%dLWW{h{VT z5#1*3Can-I-90LTw>g}OB(qKft+HNiuNXsE@Ubdh99={Rd-c>;^tDIyWadE<+WVt( z;C)F+Q=_G*sb&Y`e}W--0_XkLT50<+q}zQ{)PfBa)XR@<$sNjCq@2kH|E|W|{;5o! zf}J52O!rJtzI~8_o{h_c7|ZTvy0ZKA?-X|_fTW^d0R8FBV>S9}8kRV&q%u91aWgX*9H?HGTuYWI$ z_skV^c*RXw6$H|mmGtPhaE z5$iZP=C*c#w?LOeY)m~__Z9xPc{S|l9o7*`;KSw9v4Z1g9Ys}SKC?%5%w3{nh7%x+YLbjM6opl4w8XRKW<_cq+f?|*+AXHf#gwH-?da6Q!9Fm8NA zuGMtoi=ER34bQe>eI_LgvK7j*BsC){7v&5(k;@)eGMJsai`Nq6y(*W;ySVEgQiI0- z&NOX&lbO|1$0eJej*3GS2Y#adbEm^HFq1>n+6- z8pT(aVa&3%`BC8CAo4sU`N56)bXiM*gS<0@GVokP*}YZO9uEkc_i;<`gx)s?{Eu%b z=Mk{HOU~Y;tKRz}&7Y-gw;+K$p z@slD?ToLZl&z!-9HhnurT*b?|ldw04z$fYX*K)ex{pRG))xtLnD;4XD*It1{79f+y3OjZuA~jsYS!N*)H4e<_4|!1+i&B zz+tqerzG#U=XIMd0#9bkP^Kh#mby$X`;6J_=IfK@#JL9$YeH!faaG79u7M`=kUGOz8c)xJ8u z%w^`cHLN`n7ejr17SoEB8bdT%h&}i@l4HG>gg${!COHE@UOYjT$t3wO>E+KE-gV}? zxd4yBZEk`KAbq3-r0Eri3g-Cddbj{MWgDrjW?XRJ$G&!@j*Ij(PCKHlg`{uLV3Yxt|BX4+>s z<`9=$7N=Yg|A><)KPXDld|l@y>zU8}ki5IownQ6J33K0OD<&EDsJcFAw#TYX!G$g8 zN!U!L<~8d!Y&jqo)u|i*(!Bo%Xq*wJ`3ARYQb05Q(aHD69Ch~he-2WatOV{n-a0nx zd2r+1|5s#ORC=g9!!*&DVFGbriDjo?es>p{$;7y>QGj99wq6Q`BY4%G>)`xXdXc2VVy41xjU1f)iz*u zGseAbNOu13w*ATv{adg9HY{w3hLoSq)Bf?79Q2ssi(#hgP9ZYjlgysD{paIOOTX<` zOihpEa8S+4OSI*y0n?iTnjm@rXxTa`54BW6|JJxze}Ye2%?p>j3@A^bP?mW{yxtG1 zW^g`VT!RN~j$E(*O#hem&E51&2q1~vYX;ZZQ_^aHxuWV{GnLWnLbe&bNIgv!nHd^j zN>N0(P9{012r{bC?96*J?N>ejlsPG*yKrIEG9&S{f@T&@Pi1%BL=WqU;TBZkRN%)N zcCFN}>yb*zFArqQG|39g=K`VA6mRV+d*MgN=e)q6w^RglCPnKjA!%8Hwu8s_^V~fj zx{aEjG@r;w*oIL)u~aYD_#N})B-L^OeEJJHDr`xDG8%2eIYOfg<5pYv!Nef=v;s_7 z6&g7XcE~gYTeT6up1r@g)#RWBba zcsFEf`}@gVT1iL+eG0i>#uov-&_!U3caU=OkU(AKUw%6mhf$hDE`prIMWja_WF5D( z|CU!u{jz$Dxj&5;E)Z@qhntfn;c`>>hPCj!5k#__OT5OC|mG&{WE<)-i)TdO+p8UQPsErkeIy@)mWeV2yh>iNl$iysD4?pSLM~N zAhZ`TKBN~iQDDN=PR$|Ba}2wWubjJ``2c5F2BbJAoMDIEa${4{1J0iAc_;}pF*OkD z)*nH@af?CBa~l_-@GHK8i~-tH{`jaOGtdgGRselaA`8aP(*mQ@kNYK;|tcIySi(SbyXFV`SM-!6&t> zdM;utUQr38x8#TCQVPoK=kh*%-IEd$b^LiNX|)Xl_4{`9A|KOzb}r4afGMuI?cbUH zkU|pYspR`l^CEmn>WypNr0b-13evLw$k8C**IBu4DPYbkzo=WqL;7#R(%eQ!UTk1c z{Izhev7(b-d>99Rl5ShbB6>x9*7KK+$^il^+7CQRbPArcC84YM&RzKTtQhDpoN`W*q(-8qd2Ii?bnIX z$5$1ZSNv_Lre;OZ`aFB9?>@29XnA)1?S_KULi*MnT(-rVy}RF0fD%!tH&S^7i%I+@Sgddi}`#wqI)Hmi;QTC9xw_C)TMN!H@kK zUn*ivKUVwp6(+8>BiPK}V<>BPj^<79e*cZ$F=OGg>{|S#)Ls;g_#QMk&HEynT3Nq4 z@Iq>LJ5zk|6KYtk338);|3C0C>FJI4wnDZu0MmS`oEcEw^lJEVQM!?TP~wc5hf2#P z9x#vSf+AMzgZQcDBD=^ku%bQke+$S=f#G!M standard DPI; purple => @2x" + } + + Row { + id: row + anchors.centerIn: parent + spacing: 10 + Repeater { + model: 3 + delegate: Item { + width: animMax + height: animMax + BorderImage { + source : index === 0 ? "BorderImage.png" : "TiledBorderImage.png" + anchors.centerIn: parent + + border { + left: imageBorder; right: imageBorder + top: imageBorder; bottom: imageBorder + } + + horizontalTileMode: index === 0 ? BorderImage.Stretch : + index === 1 ? BorderImage.Repeat : BorderImage.Round + verticalTileMode: index === 0 ? BorderImage.Stretch : + index === 1 ? BorderImage.Repeat : BorderImage.Round + + width: animMin + SequentialAnimation on width { + NumberAnimation { to: animMax; duration: animDuration } + NumberAnimation { to: animMin; duration: animDuration } + loops: Animation.Infinite + } + + height: animMax + SequentialAnimation on height { + NumberAnimation { to: animMin; duration: animDuration } + NumberAnimation { to: animMax; duration: animDuration } + loops: Animation.Infinite + } + } + + Text { + anchors.top: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + font.pixelSize: 18 + text: index === 0 ? "Stretch" : + index === 1 ? "Repeat" : "Round" + } + } + } + } +} -- 2.7.4