From 43659799bc075cd19e43a9ebd3978c122d223e19 Mon Sep 17 00:00:00 2001 From: Panayot Cankov Date: Thu, 27 Jul 2017 15:36:47 +0300 Subject: [PATCH] Implement non uniform border corner radiuses and fix blinking image-view radiuses (#4573) * Image corners were blinking in #4322 and CSS border will now draw non uniform corner radiuses if the border color is uniform * Implement per-side corner radiuses for iOS * Update stretch-mode example * Update matrix-mode example * Update image resources * Add clipping for non uniform radii without border width, don't throw for missing image resources in css --- .../Android/drawable-nodpi/i18x32.png | Bin 0 -> 3441 bytes .../Android/drawable-nodpi/i32x18.png | Bin 0 -> 3419 bytes .../Android/drawable-nodpi/i32x32.png | Bin 0 -> 3428 bytes .../Android/drawable-nodpi/tile.png | Bin 0 -> 3491 bytes .../Android/drawable-nodpi/up.png | Bin 0 -> 5192 bytes .../Android/drawable-nodpi/upccw.png | Bin 0 -> 5276 bytes .../Android/drawable-nodpi/upcw.png | Bin 0 -> 5274 bytes .../Android/drawable-nodpi/upflip.png | Bin 0 -> 5147 bytes apps/app/App_Resources/iOS/i18x32.png | Bin 0 -> 3441 bytes apps/app/App_Resources/iOS/i18x32@2x.png | Bin 0 -> 3441 bytes apps/app/App_Resources/iOS/i18x32@3x.png | Bin 0 -> 3441 bytes apps/app/App_Resources/iOS/i32x18.png | Bin 0 -> 3419 bytes apps/app/App_Resources/iOS/i32x18@2x.png | Bin 0 -> 3419 bytes apps/app/App_Resources/iOS/i32x18@3x.png | Bin 0 -> 3419 bytes apps/app/App_Resources/iOS/i32x32.png | Bin 0 -> 3428 bytes apps/app/App_Resources/iOS/i32x32@2x.png | Bin 0 -> 3428 bytes apps/app/App_Resources/iOS/i32x32@3x.png | Bin 0 -> 3428 bytes apps/app/App_Resources/iOS/tile.png | Bin 0 -> 3491 bytes apps/app/App_Resources/iOS/tile@2x.png | Bin 0 -> 3491 bytes apps/app/App_Resources/iOS/tile@3x.png | Bin 0 -> 3491 bytes apps/app/App_Resources/iOS/up.png | Bin 0 -> 5192 bytes apps/app/App_Resources/iOS/up@2x.png | Bin 0 -> 5192 bytes apps/app/App_Resources/iOS/up@3x.png | Bin 0 -> 5192 bytes apps/app/App_Resources/iOS/upccw.png | Bin 0 -> 5276 bytes apps/app/App_Resources/iOS/upccw@2x.png | Bin 0 -> 5276 bytes apps/app/App_Resources/iOS/upccw@3x.png | Bin 0 -> 5276 bytes apps/app/App_Resources/iOS/upcw.png | Bin 0 -> 5274 bytes apps/app/App_Resources/iOS/upcw@2x.png | Bin 0 -> 5274 bytes apps/app/App_Resources/iOS/upcw@3x.png | Bin 0 -> 5274 bytes apps/app/App_Resources/iOS/upflip.png | Bin 0 -> 5147 bytes apps/app/App_Resources/iOS/upflip@2x.png | Bin 0 -> 5147 bytes apps/app/App_Resources/iOS/upflip@3x.png | Bin 0 -> 5147 bytes apps/app/ui-tests-app/css/main-page.ts | 4 +- .../css/missing-background-image.css | 31 +++ .../css/missing-background-image.xml | 23 ++ .../ui-tests-app/css/non-uniform-radius.css | 64 ++++++ .../ui-tests-app/css/non-uniform-radius.xml | 27 +++ apps/app/ui-tests-app/image-view/main-page.ts | 3 + .../ui-tests-app/image-view/missing-image.xml | 23 ++ .../ui-tests-app/image-view/mode-matrix.css | 9 + .../ui-tests-app/image-view/mode-matrix.ts | 57 +++++ .../ui-tests-app/image-view/mode-matrix.xml | 8 + .../ui-tests-app/image-view/stretch-modes.ts | 52 +++++ .../ui-tests-app/image-view/stretch-modes.xml | 7 + tests/app/ui/animation/animation-tests.ts | 4 +- tests/app/ui/animation/css-animation-tests.ts | 2 +- tests/app/ui/progress/progress-tests.ts | 2 +- tests/app/ui/slider/slider-tests.ts | 2 +- tests/app/ui/styling/style-tests.ts | 3 +- tests/app/ui/switch/switch-tests.ts | 2 +- tests/app/ui/view/view-tests-common.ts | 30 +-- tests/app/ui/view/view-tests.android.ts | 2 +- tests/app/ui/view/view-tests.ios.ts | 4 +- .../ui/action-bar/action-bar.ios.ts | 2 +- tns-core-modules/ui/core/view/view.d.ts | 2 +- tns-core-modules/ui/styling/background.ios.ts | 203 +++++++++++++++--- .../ui/text-base/text-base.ios.ts | 4 +- 57 files changed, 499 insertions(+), 71 deletions(-) create mode 100644 apps/app/App_Resources/Android/drawable-nodpi/i18x32.png create mode 100644 apps/app/App_Resources/Android/drawable-nodpi/i32x18.png create mode 100644 apps/app/App_Resources/Android/drawable-nodpi/i32x32.png create mode 100644 apps/app/App_Resources/Android/drawable-nodpi/tile.png create mode 100644 apps/app/App_Resources/Android/drawable-nodpi/up.png create mode 100644 apps/app/App_Resources/Android/drawable-nodpi/upccw.png create mode 100644 apps/app/App_Resources/Android/drawable-nodpi/upcw.png create mode 100644 apps/app/App_Resources/Android/drawable-nodpi/upflip.png create mode 100644 apps/app/App_Resources/iOS/i18x32.png create mode 100644 apps/app/App_Resources/iOS/i18x32@2x.png create mode 100644 apps/app/App_Resources/iOS/i18x32@3x.png create mode 100644 apps/app/App_Resources/iOS/i32x18.png create mode 100644 apps/app/App_Resources/iOS/i32x18@2x.png create mode 100644 apps/app/App_Resources/iOS/i32x18@3x.png create mode 100644 apps/app/App_Resources/iOS/i32x32.png create mode 100644 apps/app/App_Resources/iOS/i32x32@2x.png create mode 100644 apps/app/App_Resources/iOS/i32x32@3x.png create mode 100644 apps/app/App_Resources/iOS/tile.png create mode 100644 apps/app/App_Resources/iOS/tile@2x.png create mode 100644 apps/app/App_Resources/iOS/tile@3x.png create mode 100644 apps/app/App_Resources/iOS/up.png create mode 100644 apps/app/App_Resources/iOS/up@2x.png create mode 100644 apps/app/App_Resources/iOS/up@3x.png create mode 100644 apps/app/App_Resources/iOS/upccw.png create mode 100644 apps/app/App_Resources/iOS/upccw@2x.png create mode 100644 apps/app/App_Resources/iOS/upccw@3x.png create mode 100644 apps/app/App_Resources/iOS/upcw.png create mode 100644 apps/app/App_Resources/iOS/upcw@2x.png create mode 100644 apps/app/App_Resources/iOS/upcw@3x.png create mode 100644 apps/app/App_Resources/iOS/upflip.png create mode 100644 apps/app/App_Resources/iOS/upflip@2x.png create mode 100644 apps/app/App_Resources/iOS/upflip@3x.png create mode 100644 apps/app/ui-tests-app/css/missing-background-image.css create mode 100644 apps/app/ui-tests-app/css/missing-background-image.xml create mode 100644 apps/app/ui-tests-app/css/non-uniform-radius.css create mode 100644 apps/app/ui-tests-app/css/non-uniform-radius.xml create mode 100644 apps/app/ui-tests-app/image-view/missing-image.xml create mode 100644 apps/app/ui-tests-app/image-view/mode-matrix.css create mode 100644 apps/app/ui-tests-app/image-view/mode-matrix.ts create mode 100644 apps/app/ui-tests-app/image-view/mode-matrix.xml create mode 100644 apps/app/ui-tests-app/image-view/stretch-modes.ts create mode 100644 apps/app/ui-tests-app/image-view/stretch-modes.xml diff --git a/apps/app/App_Resources/Android/drawable-nodpi/i18x32.png b/apps/app/App_Resources/Android/drawable-nodpi/i18x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a232174190aaf1199002f08627f1a138662b9ac4 GIT binary patch literal 3441 zcmZ`*c{r478=tY0Nk}BZOx9u$GGlBr#xjzzrjW>3jUK0Hmj@WqkPM zI$XjmOowlwAc=JVfbE4d3We1}p@gvncL!%Y4gk=NNlRxoHMz#$wH63%9OMEEi*AbP zzA#2|paUv7xiAuPOyRLb(d_Xp7T6>Qpg>9ZEuj5{XvSj^cJwQu>}((5766{K;1(_) zpMg)gdrLuU`~4Za`)h&Ql)!#wKw$#pq*$9gpn&BMEzMk+-ssm7Vj+MQ4YtHEgzUVB zN#wIofKBLcZnUSJLI9_L1{VeD*R_L#tKA!RCba+!phVYa<623HJmfs$ssx4}ph@pU zHsHQOl0ye{0M^8^->KKTUZkiOQ}%gRbX`||b_7sqcn@1aOV_Z*RmL#5vw=Pic$E_`F)*8$H`;$RkD^Immmn z-kg?vAvf@MCjL~0q^l?3@`H*`4X#rmwwk@h2e8F24vPaG;bZ5$;%ke^M#SFvnw{R4 z%95#yT>@`ujWh+H*8*|o%z8A&Zv9}<{g-&wuE%xE1D*mi5vpCMSw-fEIsF`#@UCLL zR<$ogD^dR>WnE)p&TG_0ykzm0N>A9A0gOJ&de#dOq%j9{q|Z8;_YP+9*pSt^+*j{I zcfO~nitY?=-t2C4US`Uk*NXRTX)p}64-P%!!Q8Z*z={kzT?%--{Ej2EV$6FekiUj} zip;w{&;7^!3!B63^5b;mb@1cNm|{i1kfX;I_wD6unB|EG**xw?`&G+L=#oXE90pMF za2J`RoHtYg)PU24E?yv8q^f1NUA8F=Whej&O3;}-WZewqyq?KZ%G~eNG2J3`CsenT z%R`e+7YHsrWgjjr%=i>mXf!c-*X14Xazk?yTH0Gip|mk8%Dc zSGX`jE7B-0gZf%MVt$5$BI?(^hB|djEm?>B0|FYHF!xY zSdPsT{Gr+pw+DIo!X#w{&BMHBJ4!*l;lZ;f{1^o|UW8qo74T!WV!!%IXU^dpIEcH6 zW4rCeoE(F&{hhEPh;}sS&)9DeBV7S7Qc1*Lm(w^#0qm+PPT>8ZGcBAar_2s&Yv;3F zmAi2t%g$TQRL*J=D%mk?mnD}W=PO5l->BF30?*UCitQ7&<6|s%gpafmujQTRow=Pi zTBo~?+je;>3(!A_EARB51AE5QfNJQbfL7dO!O@5_?f2%^{m=~})4;WarP-m+wcogC zMl?p6Ann9Hci3et#6zaR z$2rCI%FbCQ(@Wk-)tx{}i76(N6LS;Q61(j|Wzw+3UUA2yxbCj*(bx3v2TsCbfgNdO zIpD{u4~MZ6k{pskMW!Xk-(~Wn4e~!d95I3#%5dylX4B!wbvde^t|b|d>z&O zA_bbFE(2azTF;4O-$kdeIMB0+V%aPBJxyY1P!I99| z%V^(@a~+ge=~%-wSqu{<4C9h^T*}%gpggf@Fhs=HcKQ|fF(Jve9;P16o-?UWQ|nW^ zOij%YW_P4Sr7}#Xi{woom~oqJm*id*G|DfAm8`$pDzU}}cBDF%-S6(TTf{9E)s@v{ z)LAql8!dy4QCA_R5X*eM`C>7>A?=G-h%X$X7K_re((}w8n@5a5Tpv~4^9kPyp!1ku+cct%o-*@WJY0{_Kdnvm*tGQgZBDzx9>8+z)`DXc)!?^8E zU(W=_{+*Me-E*9vtF;@&1y#*jDp^|V5LfB_l7bH$*(!gKW}QW0tyibsTTNMAp+;pa z%fwg{?7JUE{7&CRdPSN^`oKr^8+$pUM~Rs?{jfQ8Z76feib_i^9KhHM;u^i>JUMG~ zd@?;MiInAuPrujr*Dcg~*T1QaI#g5r%i!neZKuzCUn@4JX2(B8e%)A~puT%!Zc7~Z zUNv%eS-Ur#5iFtBs#d5r5DW@JH@SwC=2g#}Z5G$B%wS8e`bK}d>fr3b6JQ;EQcrS_~{L0Q>dxH1gDr_72=r;9y}%8AlsmB=h@yF zot=b9qP-rG2r{)W^&TFR-^T5xgQTmia_ecWY!sdqb1R$T3VHv9TC+c%DnGrVeJj5$ zeFOCrf$9c%7%>uXZX z2MZZ_OQqIE2&u9sjhSU8RpfsS+;5D(l(N7C0>7}l|RGs|l8E)l~~c@9h`Z z_h)xdD6%P8qS`lmuL`AZ7xMmKtdSBF*uAyp-_USoM{EbZV{@#A@luHVUh%gl#e$wH zb-vfBh?-;7`lTzaZciwck!6vmBO?N7TMBEqPkocSo--xEqj48vk5k2|ylZRFEonFD zw^HL~8^a)ymXsbG3*k{5vPu}@aa)4Fi zaQDXskG{Ey@fDxZfvM8kw}hdO4#W)H=!cmLw^b;v?Id}Cc-9fu z$&-|)+hf~q(>4LkOPb3OP16gFd%+D&b5Y$KGpd-|3OmXxtXq21CYevr1F3mt`{aW_ zlV-DnT3~e;d8u_kh=agvbCC4CYm}73JIsrQzPm93$_C{LuJhII{WkuTH2P{Z#hq{< zwp+bX9pG-b_krd(>eRkGsPeYHc$-n^r224B#kVoJQ?grl1TKgGUQ7A&$;5zCo=Wqb z+y1cHt@HaX>zDT2U1x%u)H5-eSzH9IoJ{k>TUUG>{jBPQI2HnYNMQ;+r#J~2V9BDc zII_^hbE)}`_KX^4DgcpdfNzg(vBEz-6rr+f0Qg1v0ZNxL+SOC}9o>{x&~BQRDUXVa zIh@?1N110W*M^7f-wY2||5h=k1E@$C*jgM)*4#a4JM928Z?YEmYH9ws7Msp!YF0^l zet3gr_0YXW1OSe4A1xptD~AsNpkr`0weYeqxD3DL?kZzz?{0^a@pJV!L<0Z_KltI+ z73XCu?B|MiBf|Yu!9Ni2!~KyN3KsqW@p4fGTNq%4QSJnsu%e8Dj4W7Zex^el1%qRq{c!keTF$OGH{xMwY6>tV#E&%p^88ciFHDPHn2O53 zGJo;>!aS-3Zb)#(9g1`$g_;}!`Y+pGcm(uFr(bmYIg}sP!>OpTA)tRxSdEQg{^rEt z&@J?|G);9u)De;609h9Lma@;H`v;+_v2tc+khb Kw8+St;r{_w!aKtN literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/Android/drawable-nodpi/i32x18.png b/apps/app/App_Resources/Android/drawable-nodpi/i32x18.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ba2f305ea974dc3fa02327c5d1e56781080178 GIT binary patch literal 3419 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/Android/drawable-nodpi/i32x32.png b/apps/app/App_Resources/Android/drawable-nodpi/i32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..0f778f86e92176943a6c0658a14d2fe23e464221 GIT binary patch literal 3428 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/Android/drawable-nodpi/tile.png b/apps/app/App_Resources/Android/drawable-nodpi/tile.png new file mode 100644 index 0000000000000000000000000000000000000000..7ebde26a0e80acc0de0169d548b3c7a9d60c8cb2 GIT binary patch literal 3491 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/Android/drawable-nodpi/upccw.png b/apps/app/App_Resources/Android/drawable-nodpi/upccw.png new file mode 100644 index 0000000000000000000000000000000000000000..6ad441c51a7d30ea0fc9079d4dbb1fcd53791407 GIT binary patch literal 5276 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/i18x32.png b/apps/app/App_Resources/iOS/i18x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a232174190aaf1199002f08627f1a138662b9ac4 GIT binary patch literal 3441 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 Kw8+St;r{_w!aKtN literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/i18x32@2x.png b/apps/app/App_Resources/iOS/i18x32@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a232174190aaf1199002f08627f1a138662b9ac4 GIT binary patch literal 3441 zcmZ`*c{r478=tY0Nk}BZOx9u$GGlBr#xjzzrjW>3jUK0Hmj@WqkPM zI$XjmOowlwAc=JVfbE4d3We1}p@gvncL!%Y4gk=NNlRxoHMz#$wH63%9OMEEi*AbP zzA#2|paUv7xiAuPOyRLb(d_Xp7T6>Qpg>9ZEuj5{XvSj^cJwQu>}((5766{K;1(_) zpMg)gdrLuU`~4Za`)h&Ql)!#wKw$#pq*$9gpn&BMEzMk+-ssm7Vj+MQ4YtHEgzUVB zN#wIofKBLcZnUSJLI9_L1{VeD*R_L#tKA!RCba+!phVYa<623HJmfs$ssx4}ph@pU zHsHQOl0ye{0M^8^->KKTUZkiOQ}%gRbX`||b_7sqcn@1aOV_Z*RmL#5vw=Pic$E_`F)*8$H`;$RkD^Immmn z-kg?vAvf@MCjL~0q^l?3@`H*`4X#rmwwk@h2e8F24vPaG;bZ5$;%ke^M#SFvnw{R4 z%95#yT>@`ujWh+H*8*|o%z8A&Zv9}<{g-&wuE%xE1D*mi5vpCMSw-fEIsF`#@UCLL zR<$ogD^dR>WnE)p&TG_0ykzm0N>A9A0gOJ&de#dOq%j9{q|Z8;_YP+9*pSt^+*j{I zcfO~nitY?=-t2C4US`Uk*NXRTX)p}64-P%!!Q8Z*z={kzT?%--{Ej2EV$6FekiUj} zip;w{&;7^!3!B63^5b;mb@1cNm|{i1kfX;I_wD6unB|EG**xw?`&G+L=#oXE90pMF za2J`RoHtYg)PU24E?yv8q^f1NUA8F=Whej&O3;}-WZewqyq?KZ%G~eNG2J3`CsenT z%R`e+7YHsrWgjjr%=i>mXf!c-*X14Xazk?yTH0Gip|mk8%Dc zSGX`jE7B-0gZf%MVt$5$BI?(^hB|djEm?>B0|FYHF!xY zSdPsT{Gr+pw+DIo!X#w{&BMHBJ4!*l;lZ;f{1^o|UW8qo74T!WV!!%IXU^dpIEcH6 zW4rCeoE(F&{hhEPh;}sS&)9DeBV7S7Qc1*Lm(w^#0qm+PPT>8ZGcBAar_2s&Yv;3F zmAi2t%g$TQRL*J=D%mk?mnD}W=PO5l->BF30?*UCitQ7&<6|s%gpafmujQTRow=Pi zTBo~?+je;>3(!A_EARB51AE5QfNJQbfL7dO!O@5_?f2%^{m=~})4;WarP-m+wcogC zMl?p6Ann9Hci3et#6zaR z$2rCI%FbCQ(@Wk-)tx{}i76(N6LS;Q61(j|Wzw+3UUA2yxbCj*(bx3v2TsCbfgNdO zIpD{u4~MZ6k{pskMW!Xk-(~Wn4e~!d95I3#%5dylX4B!wbvde^t|b|d>z&O zA_bbFE(2azTF;4O-$kdeIMB0+V%aPBJxyY1P!I99| z%V^(@a~+ge=~%-wSqu{<4C9h^T*}%gpggf@Fhs=HcKQ|fF(Jve9;P16o-?UWQ|nW^ zOij%YW_P4Sr7}#Xi{woom~oqJm*id*G|DfAm8`$pDzU}}cBDF%-S6(TTf{9E)s@v{ z)LAql8!dy4QCA_R5X*eM`C>7>A?=G-h%X$X7K_re((}w8n@5a5Tpv~4^9kPyp!1ku+cct%o-*@WJY0{_Kdnvm*tGQgZBDzx9>8+z)`DXc)!?^8E zU(W=_{+*Me-E*9vtF;@&1y#*jDp^|V5LfB_l7bH$*(!gKW}QW0tyibsTTNMAp+;pa z%fwg{?7JUE{7&CRdPSN^`oKr^8+$pUM~Rs?{jfQ8Z76feib_i^9KhHM;u^i>JUMG~ zd@?;MiInAuPrujr*Dcg~*T1QaI#g5r%i!neZKuzCUn@4JX2(B8e%)A~puT%!Zc7~Z zUNv%eS-Ur#5iFtBs#d5r5DW@JH@SwC=2g#}Z5G$B%wS8e`bK}d>fr3b6JQ;EQcrS_~{L0Q>dxH1gDr_72=r;9y}%8AlsmB=h@yF zot=b9qP-rG2r{)W^&TFR-^T5xgQTmia_ecWY!sdqb1R$T3VHv9TC+c%DnGrVeJj5$ zeFOCrf$9c%7%>uXZX z2MZZ_OQqIE2&u9sjhSU8RpfsS+;5D(l(N7C0>7}l|RGs|l8E)l~~c@9h`Z z_h)xdD6%P8qS`lmuL`AZ7xMmKtdSBF*uAyp-_USoM{EbZV{@#A@luHVUh%gl#e$wH zb-vfBh?-;7`lTzaZciwck!6vmBO?N7TMBEqPkocSo--xEqj48vk5k2|ylZRFEonFD zw^HL~8^a)ymXsbG3*k{5vPu}@aa)4Fi zaQDXskG{Ey@fDxZfvM8kw}hdO4#W)H=!cmLw^b;v?Id}Cc-9fu z$&-|)+hf~q(>4LkOPb3OP16gFd%+D&b5Y$KGpd-|3OmXxtXq21CYevr1F3mt`{aW_ zlV-DnT3~e;d8u_kh=agvbCC4CYm}73JIsrQzPm93$_C{LuJhII{WkuTH2P{Z#hq{< zwp+bX9pG-b_krd(>eRkGsPeYHc$-n^r224B#kVoJQ?grl1TKgGUQ7A&$;5zCo=Wqb z+y1cHt@HaX>zDT2U1x%u)H5-eSzH9IoJ{k>TUUG>{jBPQI2HnYNMQ;+r#J~2V9BDc zII_^hbE)}`_KX^4DgcpdfNzg(vBEz-6rr+f0Qg1v0ZNxL+SOC}9o>{x&~BQRDUXVa zIh@?1N110W*M^7f-wY2||5h=k1E@$C*jgM)*4#a4JM928Z?YEmYH9ws7Msp!YF0^l zet3gr_0YXW1OSe4A1xptD~AsNpkr`0weYeqxD3DL?kZzz?{0^a@pJV!L<0Z_KltI+ z73XCu?B|MiBf|Yu!9Ni2!~KyN3KsqW@p4fGTNq%4QSJnsu%e8Dj4W7Zex^el1%qRq{c!keTF$OGH{xMwY6>tV#E&%p^88ciFHDPHn2O53 zGJo;>!aS-3Zb)#(9g1`$g_;}!`Y+pGcm(uFr(bmYIg}sP!>OpTA)tRxSdEQg{^rEt z&@J?|G);9u)De;609h9Lma@;H`v;+_v2tc+khb Kw8+St;r{_w!aKtN literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/i18x32@3x.png b/apps/app/App_Resources/iOS/i18x32@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..a232174190aaf1199002f08627f1a138662b9ac4 GIT binary patch literal 3441 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 Kw8+St;r{_w!aKtN literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/i32x18.png b/apps/app/App_Resources/iOS/i32x18.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ba2f305ea974dc3fa02327c5d1e56781080178 GIT binary patch literal 3419 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/i32x18@2x.png b/apps/app/App_Resources/iOS/i32x18@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ba2f305ea974dc3fa02327c5d1e56781080178 GIT binary patch literal 3419 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/i32x18@3x.png b/apps/app/App_Resources/iOS/i32x18@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..f0ba2f305ea974dc3fa02327c5d1e56781080178 GIT binary patch literal 3419 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/i32x32.png b/apps/app/App_Resources/iOS/i32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..0f778f86e92176943a6c0658a14d2fe23e464221 GIT binary patch literal 3428 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/i32x32@2x.png b/apps/app/App_Resources/iOS/i32x32@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0f778f86e92176943a6c0658a14d2fe23e464221 GIT binary patch literal 3428 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/i32x32@3x.png b/apps/app/App_Resources/iOS/i32x32@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0f778f86e92176943a6c0658a14d2fe23e464221 GIT binary patch literal 3428 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/tile.png b/apps/app/App_Resources/iOS/tile.png new file mode 100644 index 0000000000000000000000000000000000000000..7ebde26a0e80acc0de0169d548b3c7a9d60c8cb2 GIT binary patch literal 3491 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/up@2x.png b/apps/app/App_Resources/iOS/up@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..04dca794a7db34141c8da2fe25f2da8f93e86f3e GIT binary patch literal 5192 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/up@3x.png b/apps/app/App_Resources/iOS/up@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..04dca794a7db34141c8da2fe25f2da8f93e86f3e GIT binary patch literal 5192 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/upccw.png b/apps/app/App_Resources/iOS/upccw.png new file mode 100644 index 0000000000000000000000000000000000000000..6ad441c51a7d30ea0fc9079d4dbb1fcd53791407 GIT binary patch literal 5276 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 literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/upflip@2x.png b/apps/app/App_Resources/iOS/upflip@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..af39cee601f3bf9f7a2011e67ef1b6f03f4b9f02 GIT binary patch literal 5147 zcmZ`*XH-+`whc8@5fSOql%hcB5C|=F5a|dCQVdN(4ZT;TC>^O1QIsN0I-&R85kdz+ zKp;lCKp+p#x$oXH#(i&(@$LQXwdP!9u0JbA@1Z(11v3Qz0HD^?P%*grDqfvCWTaPb zFcl;j0H7#$R94p0R95ED^Ki9ugxdlD8Zl{afJTO9%)QtEQ1jRgE{?m0JR0Q&P#RVL z8rmCLd?KXbv4zo8@olDhNp=LR#o^BgU;@!3lo2*WJE2q*+cKsA`m~_78{XcdKXWfO z1F@GQ>F1Z&fRn|55g_1W0{2axPEkNU*@TKxuFz0)A0JOJpiPk?F$^NS=4KdG5(=;k zeeQz$+`|rV@NaSw#~fkt_(%QwHiiuVMFPIwUj_~Qd`RdTc!-?bL)DKFKp53Y+fAf+8NHGDW5IXoB~*P@rEQH;&s%vm zDZ6boFDGLEeQN60$v{@y=8Ta27<`=ltFDyJnDk$}jYH8ZJ-YNfh-o}>aIZBjSs*vy z1u1hXanhsfGNNM=pLHH%xUH3j4DjHM1G|k;w{Y}*&-jL-GJV9*TK(zJ7is=fiC)%m zTr*DGyN@-_1gME4>DLard-(-U-unp!9Cc@1j*#nRBIjI10ygxhDfaq%1QG(xgG1Fr)Md0cTcAd zt@@iCw@9n=xSDMgjwAW++bA8#ZGKRf1x`_;d z!>KOOS;DeCu1}dUMG}BXd$(h{kgaU+lj{+}NV@lzwOcK!#Ty6_EkO0Vb7+z@amMz!8V;r8f4+P>qTkZc2n21Y8xj zVBvxs4C@gVR_uHvFBRzvNqXDJ#|THl<5up~ledNhaEnM2jy zos2OshVcutnS^<*bXQOhg$J!%_a$MaDGw7{Vf6)?Q$6ZXU$y(q6-d`YbJAJ9DniTw ziwrB|R*R%s6teTf4pB27iz*~MtREAli$kBXs+ zw2Is?l)rn*CQBq;#7BfELx0Fefd2C8Su`0O;w>o2@FcRdC%5Nm`%>>U>t1(h zR-%Hqsvf^pF87#v>UzQj0&}`DwwVZ)uGg!3zN$@}O9a@2&6UYt4Zm;T^l>COHr(|~ zy08a&+!?eGGJRqK&TKuELf#zS1!UZpu>{>|l{s9WcHd3u z&GFOlvlki_U;CQLtg7?j=eucrkUmmhL32F+)km}eq-fZ{)?nDcCx1zc?qkhIvx)m3 z#q#6wb+wk0gSnMc$CKRCR{P+|{3&4W$@^kF+9?ugN9j6Af{CT+%|fyQFViQJ5b10E z-}{XFEs|OCImLCd?!VTa*OG-cLRsFgZJ|6R<&tuB71Xew5(WnQpY*-#FHZrbDDW|A)5``jY3oh#_aQcK%6Gef7FH$X%F7o;t$?-Nz_^0`w9J-%Lo@t%|4_#T>NZ*i>liHHjQCTbBS8iD) z=*(3`tJcO5$K7K%V%C3Us`f*TT8*fO>Y3#leC^g+U0lsAb-|_Pdc>X&opuT=g_|cq z=lg?ZohqIA2g}(^8ScXaLq9VOhvkN(vg@*1tAwkgYor~_>&PqkD;n(LYP`NI!ULv{tKOzrWG#|6DqvpkrtI!uUZ!se#aMX2 z`rk#oAnMKQ$XibO!HDrie_7UCj9D}KakyYMnYn3>!6knj)q=6vHhYP<(>COIXS&rO z7PsbpzNq&@eQ)q;9Bg=brKZBc*stglhhL0G)rSi!vp=Jb_V?y6Uk6RB5wl*q`mRpc z*GuU^eDdw`ALU1br~_47oP#Tnb<4L~d9`cODc;onCJL#=-^LdZpa`4@gQ>enNQvK& zw2+BX4^VAWeIhBRD5JSe<4!)yv@dN0GGd*h zeban_My5tyQ)tl>+w(Wnf_3J(jktD-Mfx2RbIYP?QNQmE#uJ~VKR;A^_M!8`&WBbH z95^lK3#0b~zahSvv_|B4*5=UsAWMu_wBV~Crp@b*7^PUT*IRjm@3iyh@vTxXr&$h! zq;IA9^0{;MD-`iK-UCA#_@feUy!BAy;MKTc{Md-R%h%}h7Mb{gw!Vd_Q3v7@gj6Cx%zt@JY~0IH{nTVUG4Y6b=Y^R%av1Q zR#0kV+!|-AluvpNspo`%6y;Gj4Z4zVZO`kpiutb&)!nIMbulbZ|#4mOK4zoau$DH;$S2GogLWQ z-D`Pq<6 z$pw5Ce2S1AO&QtDL821ftxGJ>mm4;??)G?Nwgix>Im!q8%j1L|d4HzN-@JLMf4j+T zcy(@e$9raUp`u~jV{+RLk#0NlV_6_XcG3CkV&LGJ$&T~EF7kv=z~^^u75asHtW3Wk1cboK}eVsq_x{vF4ItW`XKxD$@9}3?E?FYK(6n zs0%CGY#(K(@c>%llg@f)@^Toa7*s)DpH5R}QzO~-7#l90&wkFE>6l4z^}zF-*X`H& zyXs#2z}e3@bZw2vjyD#akg(rWm~cFO1eLX0Faf#2mlZgI~tjKn(91|dFJXYWDRq*u@&-lcDq6Y01#i9tE;oEr!|MK zGu#Cs<15GY7eeOh{>KdB;`j^V=_JQxs-wrD?CN35At59#B+MmG!NI`+@qpRM7^tZI zi+=Sd$K~MZ=_UgL`S|z<`G^U*df05-_PH5+WI>FCzA`}Uu|7A2>Rmzi3kaU{x6!R zquu{Q`{VhW_E%qjr-S?nCZp%*YYR71adftIL0pw4FAkQ3{FUavJpU>5A57DKFeRk_ z$^3`sAIv|M$mn`F+FptDM+$in2c5!93LNh+5KVUSZkzYn^zHJ3jKE2!Xml4kLWf<0%A9f~ zxr;Y-RXZ)#P^u;^~$7;_HrmQkhETj4PJhzNp0voig!po0Z;>K$zJFPv0QFh*WqlXg% zUwx$FbeCl~t;X|@lH!+xD?~ciWAgebLM?dTrk0AAFHP%7pJ&Fc%`9_l>ZB(LR*6Bp zQeJKjvL|M|z%|>uD#TjBq7Ey1b{Y$$1uuW8zBu|SOLCmrR+N6biS|~5|6nprzV5^I z;cUPrSXXiP8ya^Zq-HjmKr($}MW)(Yy1){HX1WNA(VAEQ@HLIUU#_0f8rw@-YB_*vPEYC6i zG@@$*hK@yb*zWeQFGp7Ir?3hS1SHRPmN>FQPGWAkIzlJ=8DvR#gi8A@W!!@bDGPt8 znkYx>m{1f(mqVP={5!6jMxRELHQ_7Qs?)A*VEe(zgYA&5qQJyLm zNJwR5UfM`&LD$<8D7C5WjzQ0-0`QuNPEdW!neYjJg4Nm7U1W3NgPaOitfPI@r|O^1 zF=1>zN*;M-pUXWegGhi~Lvx|ZlaIukA&5m&Ev4vw{U1Hgr8_`xXObOO-Pv)CsZ&mjS#=5O>WTP=ON{l_gakzj2{!7K>DUfdP zRbeAJEJD~Uv_v#iAX{UstM}qZdPZBXF1i{nyItCJ64?lm1bcM#JtSB+RV%rzcMqzo zDcoGOO?a&XJ@pP~OY!bSZ?wcSaX>V6(Q2`aILVl(on@2$%I_mev^Y~&C{KK2;AEDi z*e}Oo&D{ng@UlT`c7y%?&BI}PN{90a z9q@NygW6Kgr%ByK{hu@e;t#MD;2w&{iC&%5B%|&360Nw-gzY?A|VGYGZS|N z{@M#ZZ8?9{;C(U0q^220=gMkXSjpJTrdt+KRGPrUZ)I1y8Rk}iDVV{Wh#FC~nC~Y0 ziQG)h*#loZH#cgPV~2rCEe%diQ%P*x9VZ*- z2X#jK^KvfHEYFL{)Q-&`aGbC31B|=`(WxIZSEMkgva|7o zzW8?DmnGLSF%DnO=*hU_!qB_$*2~HY9BBd#I@`sUx`V@APlD{dlGSLxu=|UU2UKls z&q(%0&1>j_jvi(ab$N?g?olki1IpLgq(lG#eUs$DR5P4mZEkEZCNir@;v~)l^J>Aa zp=pOvu`yFXCHVp?60bqlLIe!-I7m%w4KZsgGJL#s(TJMu&K0haGI7nk#^M$g!#SCM z7C|d67Y~u8I;hB5=XMLhjU&MF@FK$5iS|C89(Ggvmzoyl* xNra@&;1dHnriOr00hW@DaKkn$FIKq)5`acNPLby@L;cSVq^bH)r3`8n{y$j=t&9Kw literal 0 HcmV?d00001 diff --git a/apps/app/App_Resources/iOS/upflip@3x.png b/apps/app/App_Resources/iOS/upflip@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..af39cee601f3bf9f7a2011e67ef1b6f03f4b9f02 GIT binary patch literal 5147 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 literal 0 HcmV?d00001 diff --git a/apps/app/ui-tests-app/css/main-page.ts b/apps/app/ui-tests-app/css/main-page.ts index a5bf105c0..85baa75c3 100644 --- a/apps/app/ui-tests-app/css/main-page.ts +++ b/apps/app/ui-tests-app/css/main-page.ts @@ -37,6 +37,8 @@ export function loadExamples() { examples.set("padding-and-border", "css/padding-and-border"); examples.set("combinators", "css/combinators"); examples.set("styled-formatted-text", "css/styled-formatted-text"); - + examples.set("non-uniform-radius", "css/non-uniform-radius"); + examples.set("missing-background-image", "css/missing-background-image"); + return examples; } \ No newline at end of file diff --git a/apps/app/ui-tests-app/css/missing-background-image.css b/apps/app/ui-tests-app/css/missing-background-image.css new file mode 100644 index 000000000..3ae94f0bf --- /dev/null +++ b/apps/app/ui-tests-app/css/missing-background-image.css @@ -0,0 +1,31 @@ +.c1, .c2, .c3, .c4, .c5, .c6, .c7, .c8, .c9, .c10, .c11, .c12 { + width: 30; + height: 30; + background-size: 100% 100%; + background-color: yellow; + margin: 1; +} + +.c1, .c3, .c5 { + background-image: url("~/ui-tests-app/the-never-found-unicorn.png"); +} + +.c2, .c4, .c6 { + background-image: url("~/ui-tests-app/resources/images/no-image.png"); +} + +.c7, .c9, .c11 { + background-image: url("res://theneverfoundunicorn"); +} + +.c8, .c10, .c12 { + background-image: url("res://testlogo"); +} + +.c3, .c4, .c9, .c10 { + border-radius: 10; +} + +.c5, .c6, .c11, .c12 { + border-radius: 5 10 15 20; +} diff --git a/apps/app/ui-tests-app/css/missing-background-image.xml b/apps/app/ui-tests-app/css/missing-background-image.xml new file mode 100644 index 000000000..c6506a036 --- /dev/null +++ b/apps/app/ui-tests-app/css/missing-background-image.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/app/ui-tests-app/css/non-uniform-radius.css b/apps/app/ui-tests-app/css/non-uniform-radius.css new file mode 100644 index 000000000..9e3eb6b89 --- /dev/null +++ b/apps/app/ui-tests-app/css/non-uniform-radius.css @@ -0,0 +1,64 @@ +GridLayout>GridLayout { + width: 60; + height: 60; + margin: 2; + border-color: rgba(0, 255, 0, 0.5); + background-color: rgba(0, 0, 255, 0.5); +} + +.b1, .b2, .b3, .b4, .b5 { + background-image: url("res://tile"); +} + +.b1 { + background-repeat: no-repeat; + background-position: 50% 50%; +} + +.b2 { + background-repeat: repeat-x; + background-position: 0% 0%; +} + +.b3 { + background-repeat: repeat-y; + background-position: 0% 0%; +} + +.b4 { + background-repeat: repeat; + background-position: 0% 0%; +} + +.b5 { + background-repeat: no-repeat; + background-position: 100% 100%; +} + +.g1 { + border-width: 15; + border-color: red; + border-radius: 0 10 20 30; + background-color: blue; +} + +.g2 { + border-width: 15 10 5 0; + border-color: red; + border-radius: 0 10 20 30; + background-color: blue; +} + +.g3 { + border-width: 5 10 5 10; + border-color: red; + border-radius: 20 20 20 20; + background-color: blue; +} + +.g4 { + border-width: 10 5 10 5; + border-color: red; + border-radius: 20 20 20 20; + background-color: blue; +} \ No newline at end of file diff --git a/apps/app/ui-tests-app/css/non-uniform-radius.xml b/apps/app/ui-tests-app/css/non-uniform-radius.xml new file mode 100644 index 000000000..2f0ca5c65 --- /dev/null +++ b/apps/app/ui-tests-app/css/non-uniform-radius.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/app/ui-tests-app/image-view/main-page.ts b/apps/app/ui-tests-app/image-view/main-page.ts index d29438eb8..2e714d423 100644 --- a/apps/app/ui-tests-app/image-view/main-page.ts +++ b/apps/app/ui-tests-app/image-view/main-page.ts @@ -13,6 +13,9 @@ export function loadExamples() { const examples = new Map(); examples.set("roundbtn", "image-view/rounded-buttons"); examples.set("roundimg", "image-view/rounded-images"); + examples.set("mode-matrix", "image-view/mode-matrix"); + examples.set("stretch-modes", "image-view/stretch-modes"); + examples.set("missing-image", "image-view/missing-image"); return examples; } \ No newline at end of file diff --git a/apps/app/ui-tests-app/image-view/missing-image.xml b/apps/app/ui-tests-app/image-view/missing-image.xml new file mode 100644 index 000000000..9f13b3408 --- /dev/null +++ b/apps/app/ui-tests-app/image-view/missing-image.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apps/app/ui-tests-app/image-view/mode-matrix.css b/apps/app/ui-tests-app/image-view/mode-matrix.css new file mode 100644 index 000000000..7d5c0b661 --- /dev/null +++ b/apps/app/ui-tests-app/image-view/mode-matrix.css @@ -0,0 +1,9 @@ +Image { + margin: 1; +} + +GridLayout { + background-image: url("res://tile"); + background-repeat: repeat; + background-size: 78 78; +} \ No newline at end of file diff --git a/apps/app/ui-tests-app/image-view/mode-matrix.ts b/apps/app/ui-tests-app/image-view/mode-matrix.ts new file mode 100644 index 000000000..72c73029d --- /dev/null +++ b/apps/app/ui-tests-app/image-view/mode-matrix.ts @@ -0,0 +1,57 @@ +import { Image, Stretch } from "tns-core-modules/ui/image"; +import { GridLayout } from "tns-core-modules/ui/layouts/grid-layout"; +import { Color } from "tns-core-modules/color"; +import * as imageSource from "tns-core-modules/image-source"; + +const sources = [ + { src: "up", rotation: 0 }, + { src: "upcw", rotation: -90 }, + { src: "upflip", rotation: 180 }, + { src: "upccw", rotation: 90 } +].map(({ src, rotation }) => ({ src: `res://${src}`, rotation })); +const stretchModes: Stretch[] = ["none", "aspectFill", "aspectFit", "fill"]; + +export function navigatingTo(args) { + const grid: GridLayout = args.object.getViewById("root"); + for (let x = 0; x < 12; x++) { + for (let y = 0; y < 16; y++) { + const image = new Image(); + + const img = sources[x % 4]; + const src = imageSource.fromFileOrResource(img.src); + src.rotationAngle = img.rotation; + image.src = src; + + image.stretch = stretchModes[y % 4]; + image.row = y; + image.col = x; + + grid.addChild(image); + + switch(Math.floor(x / 4)) { + case 1: + image.borderWidth = "3"; + break; + case 2: + image.borderWidth = "3"; + image.borderColor = "blue"; + break; + } + + switch(Math.floor(y / 4)) { + case 1: + image.borderRadius = "12"; + break; + case 2: + image.borderRadius = "6 18 6 18"; + break; + case 3: + image.borderWidth = "0 2 4 6"; + image.borderRadius = "6 18 6 18"; + break; + } + + image.backgroundColor = new Color(0x6600FFFF); + } + } +} \ No newline at end of file diff --git a/apps/app/ui-tests-app/image-view/mode-matrix.xml b/apps/app/ui-tests-app/image-view/mode-matrix.xml new file mode 100644 index 000000000..873f76983 --- /dev/null +++ b/apps/app/ui-tests-app/image-view/mode-matrix.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/apps/app/ui-tests-app/image-view/stretch-modes.ts b/apps/app/ui-tests-app/image-view/stretch-modes.ts new file mode 100644 index 000000000..c75ab9a56 --- /dev/null +++ b/apps/app/ui-tests-app/image-view/stretch-modes.ts @@ -0,0 +1,52 @@ +import { Image, Stretch } from "tns-core-modules/ui/image"; +import { Label } from "tns-core-modules/ui/label"; +import { LayoutBase } from "tns-core-modules/ui/layouts/layout-base"; +import { Color } from "tns-core-modules/color"; +import * as imageSource from "tns-core-modules/image-source"; +import { isAndroid } from "tns-core-modules/platform"; + +const sources = [ + { w: 32, h: 18, src: "i32x18" }, + { w: 32, h: 32, src: "i32x32" }, + { w: 18, h: 32, src: "i18x32" } +].map(({w, h, src}) => ({w, h, src: `res://${src}` })); +const stretchModes: Stretch[] = ["none", "aspectFill", "aspectFit", "fill"]; +const widths = [ +8, 0, -8 ] +const heights = [ +8, 0, -8 ] + +export function navigatingTo(args) { + const variants: { src: string, stretch: Stretch, width: number, height: number }[] = []; + + // Better way for cartesian product? + sources.forEach(src => + stretchModes.forEach(stretch => + widths.forEach(width => + heights.forEach(height => + variants.push({ src: src.src, stretch, width: src.w + width, height: src.h + height }))))); + + const grid: LayoutBase = args.object.getViewById("root"); + const label: Label = args.object.getViewById("label"); + let lastTap = null; + variants.forEach(({ src, stretch, width, height}) => { + const image = new Image(); + image.src = src; + + image.backgroundColor = "yellow"; + image.width = (width + "px"); + image.height = (height + "px"); + + image.stretch = stretch; + image.borderColor = "yellow"; + image.margin = "1px"; + (image).tag = `${width} ${height} ${stretch} ${src.substr(src.lastIndexOf("/") + 1)}`; + image.addEventListener("tap", (args: any) => { + if (lastTap) { + lastTap.borderColor = "yellow"; + } + label.text = args.object.tag; + args.object.borderColor = "red"; + lastTap = args.object; + }); + grid.addChild(image); + }); +} \ No newline at end of file diff --git a/apps/app/ui-tests-app/image-view/stretch-modes.xml b/apps/app/ui-tests-app/image-view/stretch-modes.xml new file mode 100644 index 000000000..a40448aba --- /dev/null +++ b/apps/app/ui-tests-app/image-view/stretch-modes.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/tests/app/ui/animation/animation-tests.ts b/tests/app/ui/animation/animation-tests.ts index 0efa5b4cb..235114943 100644 --- a/tests/app/ui/animation/animation-tests.ts +++ b/tests/app/ui/animation/animation-tests.ts @@ -303,7 +303,7 @@ export function test_AnimateBackgroundColor(done) { label.animate({ backgroundColor: red, duration: 20 }) .then(() => { - TKUnit.assert(label.backgroundColor.equals(red)); + TKUnit.assert((label.backgroundColor).equals(red)); done(); }) .catch((e) => { @@ -318,7 +318,7 @@ export function test_AnimateBackgroundColor_FromString(done) { label.animate({ backgroundColor: expected, duration: 20 }) .then(() => { - TKUnit.assert(label.backgroundColor.equals(clr)); + TKUnit.assert((label.backgroundColor).equals(clr)); done(); }) .catch((e) => { diff --git a/tests/app/ui/animation/css-animation-tests.ts b/tests/app/ui/animation/css-animation-tests.ts index d43b23a57..e78ec0db6 100644 --- a/tests/app/ui/animation/css-animation-tests.ts +++ b/tests/app/ui/animation/css-animation-tests.ts @@ -362,7 +362,7 @@ export function test_ExecuteCSSAnimation() { TKUnit.waitUntilReady(() => label.isLoaded); label.className = "l"; let green = new color.Color("green"); - TKUnit.waitUntilReady(() => green.equals(label.backgroundColor), 1); + TKUnit.waitUntilReady(() => green.equals(label.backgroundColor), 1); TKUnit.assertEqual(label.backgroundColor, green); } diff --git a/tests/app/ui/progress/progress-tests.ts b/tests/app/ui/progress/progress-tests.ts index c068b9c2e..4ad5705a8 100644 --- a/tests/app/ui/progress/progress-tests.ts +++ b/tests/app/ui/progress/progress-tests.ts @@ -74,7 +74,7 @@ if (platform.device.os === platform.platformNames.ios) { progress.backgroundColor = new color.Color("red"); function testAction(views: Array) { - TKUnit.assertEqual(progress.backgroundColor.ios.CGColor, progress.ios.trackTintColor.CGColor, "progress.color"); + TKUnit.assertEqual((progress.backgroundColor).ios.CGColor, progress.ios.trackTintColor.CGColor, "progress.color"); }; helper.buildUIAndRunTest(progress, testAction); diff --git a/tests/app/ui/slider/slider-tests.ts b/tests/app/ui/slider/slider-tests.ts index a8e537c2f..7a18954d1 100644 --- a/tests/app/ui/slider/slider-tests.ts +++ b/tests/app/ui/slider/slider-tests.ts @@ -118,7 +118,7 @@ if (isIOS) { slider.backgroundColor = new Color("red"); function testAction(views: Array) { - TKUnit.assertEqual(slider.backgroundColor.ios.CGColor, slider.ios.minimumTrackTintColor.CGColor, "slider.backgroundColor"); + TKUnit.assertEqual((slider.backgroundColor).ios.CGColor, slider.ios.minimumTrackTintColor.CGColor, "slider.backgroundColor"); }; helper.buildUIAndRunTest(slider, testAction); diff --git a/tests/app/ui/styling/style-tests.ts b/tests/app/ui/styling/style-tests.ts index d204830c6..a6c9aa17b 100644 --- a/tests/app/ui/styling/style-tests.ts +++ b/tests/app/ui/styling/style-tests.ts @@ -11,6 +11,7 @@ import * as types from "tns-core-modules/utils/types"; import * as viewModule from "tns-core-modules/ui/core/view"; import { resolveFileNameFromUrl } from "tns-core-modules/ui/styling/style-scope"; import { unsetValue } from "tns-core-modules/ui/core/view"; +import * as color from "tns-core-modules/color"; export function test_css_dataURI_is_applied_to_backgroundImageSource() { const stack = new stackModule.StackLayout(); @@ -164,7 +165,7 @@ export function test_type_selector() { stack.addChild(btn); TKUnit.assert(btn.backgroundColor, "backgroundColor property not applied correctly."); - TKUnit.assertEqual(btn.backgroundColor.hex, "#FF0000", "backgroundColor"); + TKUnit.assertEqual((btn.backgroundColor).hex, "#FF0000", "backgroundColor"); TKUnit.assertNull(label.backgroundColor, "backgroundColor should not have a value"); } diff --git a/tests/app/ui/switch/switch-tests.ts b/tests/app/ui/switch/switch-tests.ts index 0d4ead850..6d80f20a7 100644 --- a/tests/app/ui/switch/switch-tests.ts +++ b/tests/app/ui/switch/switch-tests.ts @@ -60,7 +60,7 @@ if (platform.device.os === platform.platformNames.ios) { mySwitch.backgroundColor = new color.Color("red"); function testAction(views: Array) { - TKUnit.assert(CGColorEqualToColor(mySwitch.backgroundColor.ios.CGColor, mySwitch.ios.onTintColor.CGColor), "mySwitch.color"); + TKUnit.assert(CGColorEqualToColor((mySwitch.backgroundColor).ios.CGColor, mySwitch.ios.onTintColor.CGColor), "mySwitch.color"); }; helper.buildUIAndRunTest(mySwitch, testAction); diff --git a/tests/app/ui/view/view-tests-common.ts b/tests/app/ui/view/view-tests-common.ts index 690b65e87..c96016a48 100644 --- a/tests/app/ui/view/view-tests-common.ts +++ b/tests/app/ui/view/view-tests-common.ts @@ -880,35 +880,7 @@ export function testSetInlineStyle() { helper.buildUIAndRunTest(lbl, function (views: Array) { TKUnit.assertEqual(lbl.color.hex, expectedColor); - TKUnit.assertEqual(lbl.backgroundColor.hex, expectedBackgroundColor); - }); -}; - -export function testBorderWidth() { - helper.buildUIAndRunTest(_createLabelWithBorder(), function (views: Array) { - const lbl = views[0]; - helper.waitUntilLayoutReady(lbl); - const expectedValue = Math.round(lbl.borderWidth * utils.layout.getDisplayDensity()); - const actualValue = definition.getUniformNativeBorderWidth(lbl); - TKUnit.assertAreClose(actualValue, expectedValue, 0.01, "borderWidth"); - }); -}; - -export function testCornerRadius() { - helper.buildUIAndRunTest(_createLabelWithBorder(), function (views: Array) { - const lbl = views[0]; - helper.waitUntilLayoutReady(lbl); - const expectedValue = Math.round(lbl.borderRadius * utils.layout.getDisplayDensity()); - const actualValue = definition.getUniformNativeCornerRadius(lbl); - TKUnit.assertAreClose(actualValue, expectedValue, 0.01, "borderRadius"); - }); -}; - -export function testBorderColor() { - helper.buildUIAndRunTest(_createLabelWithBorder(), function (views: Array) { - const lbl = views[0]; - helper.waitUntilLayoutReady(lbl); - TKUnit.assertEqual(definition.checkUniformNativeBorderColor(lbl), true, "BorderColor not applied correctly!"); + TKUnit.assertEqual((lbl.backgroundColor).hex, expectedBackgroundColor); }); }; diff --git a/tests/app/ui/view/view-tests.android.ts b/tests/app/ui/view/view-tests.android.ts index b688227f4..47af9c9b0 100644 --- a/tests/app/ui/view/view-tests.android.ts +++ b/tests/app/ui/view/view-tests.android.ts @@ -286,7 +286,7 @@ export function getUniformNativeCornerRadius(v: view.View): number { export function checkNativeBackgroundColor(v: view.View): boolean { const bkg = (v.android).getBackground(); - return v.backgroundColor && bkg && bkg.getBackgroundColor() === v.backgroundColor.android; + return v.backgroundColor && bkg && bkg.getBackgroundColor() === (v.backgroundColor).android; } export function checkNativeBackgroundImage(v: view.View): boolean { diff --git a/tests/app/ui/view/view-tests.ios.ts b/tests/app/ui/view/view-tests.ios.ts index d83f943ab..d8c442cbf 100644 --- a/tests/app/ui/view/view-tests.ios.ts +++ b/tests/app/ui/view/view-tests.ios.ts @@ -37,11 +37,11 @@ export function getUniformNativeCornerRadius(v: view.View): number { export function checkNativeBackgroundColor(v: view.View): boolean { if (v.ios instanceof UILabel) { var cgColor1 = (v.ios).layer.backgroundColor; - var cgColor2 = (v.backgroundColor.ios).CGColor; + var cgColor2 = ((v.backgroundColor).ios).CGColor; return v.backgroundColor && !!CGColorEqualToColor(cgColor1, cgColor2); } - return v.backgroundColor && (v.ios).backgroundColor.isEqual(v.backgroundColor.ios); + return v.backgroundColor && (v.ios).backgroundColor.isEqual((v.backgroundColor).ios); } export function checkNativeBackgroundImage(v: view.View): boolean { diff --git a/tns-core-modules/ui/action-bar/action-bar.ios.ts b/tns-core-modules/ui/action-bar/action-bar.ios.ts index 3d8f68438..6b7102d34 100644 --- a/tns-core-modules/ui/action-bar/action-bar.ios.ts +++ b/tns-core-modules/ui/action-bar/action-bar.ios.ts @@ -218,7 +218,7 @@ export class ActionBar extends ActionBarBase { navBar.tintColor = null; } - let bgColor = this.backgroundColor; + let bgColor = this.backgroundColor; navBar.barTintColor = bgColor ? bgColor.ios : null; } diff --git a/tns-core-modules/ui/core/view/view.d.ts b/tns-core-modules/ui/core/view/view.d.ts index 725d83f32..9af4011cd 100644 --- a/tns-core-modules/ui/core/view/view.d.ts +++ b/tns-core-modules/ui/core/view/view.d.ts @@ -168,7 +168,7 @@ export abstract class View extends ViewBase implements ApplyXmlAttributes { /** * Gets or sets the background color of the view. */ - backgroundColor: Color; + backgroundColor: string | Color; /** * Gets or sets the background image of the view. diff --git a/tns-core-modules/ui/styling/background.ios.ts b/tns-core-modules/ui/styling/background.ios.ts index 3aadcd891..455083352 100644 --- a/tns-core-modules/ui/styling/background.ios.ts +++ b/tns-core-modules/ui/styling/background.ios.ts @@ -9,6 +9,12 @@ export * from "./background-common"; interface NativeView extends UIView { hasNonUniformBorder: boolean; + + borderLayer: CAShapeLayer; + + hasBorderMask: boolean; + borderOriginalMask: CALayer; + topBorderLayer: CAShapeLayer; rightBorderLayer: CAShapeLayer; bottomBorderLayer: CAShapeLayer; @@ -30,11 +36,13 @@ export module ios { const background = view.style.backgroundInternal; const nativeView = view.nativeView; - if (background.hasUniformBorder()) { - if (nativeView.hasNonUniformBorder) { - clearNonUniformBorders(nativeView); - } + if (nativeView.hasNonUniformBorder) { + clearNonUniformBorders(nativeView); + } + if (background.hasUniformBorderColor() && background.hasBorderRadius()) { + drawUniformColorNonUniformBorders(nativeView, background); + } else if (background.hasUniformBorder()) { const layer = nativeView.layer; const borderColor = background.getUniformBorderColor(); layer.borderColor = !borderColor ? undefined : borderColor.ios.CGColor; @@ -42,9 +50,8 @@ export module ios { const renderSize = view.getActualSize() || { width: 0, height: 0 }; const cornerRadius = layout.toDeviceIndependentPixels(background.getUniformBorderRadius()); layer.cornerRadius = Math.min(Math.min(renderSize.width / 2, renderSize.height / 2), cornerRadius); - } - else { - drawNonUniformBorders(nativeView, background); + } else { + drawNoRadiusNonUniformBorders(nativeView, background); } // Clip-path should be called after borders are applied. @@ -63,6 +70,16 @@ export module ios { } function clearNonUniformBorders(nativeView: NativeView): void { + if (nativeView.borderLayer) { + nativeView.borderLayer.removeFromSuperlayer(); + } + + if (nativeView.hasBorderMask) { + nativeView.layer.mask = nativeView.borderOriginalMask; + nativeView.hasBorderMask = false; + nativeView.borderOriginalMask = null; + } + if (nativeView.topBorderLayer) { nativeView.topBorderLayer.removeFromSuperlayer(); } @@ -103,10 +120,12 @@ function setUIColorFromImage(view: View, nativeView: UIView, callback: (uiColor: if (isDataURI(imageUri)) { const base64Data = imageUri.split(",")[1]; if (base64Data !== undefined) { - bitmap = fromBase64(base64Data).ios + const imageSource = fromBase64(base64Data); + bitmap = imageSource && imageSource.ios } } else if (isFileOrResourcePath(imageUri)) { - bitmap = fromFileOrResource(imageUri).ios; + const imageSource = fromFileOrResource(imageUri); + bitmap = imageSource && imageSource.ios; } else if (imageUri.indexOf("http") !== -1) { style[symbolUrl] = imageUri; fromUrl(imageUri).then((r) => { @@ -260,13 +279,14 @@ function getDrawParams(this: void, image: UIImage, background: BackgroundDefinit } function uiColorFromImage(img: UIImage, view: View, callback: (uiColor: UIColor) => void, flip?: boolean): void { + const background = view.style.backgroundInternal; + if (!img) { - callback(null); + callback(background.color && background.color.ios); return; } const nativeView = view.nativeView as UIView; - const background = view.style.backgroundInternal; const frame = nativeView.frame; const boundsWidth = view.scaleX ? frame.size.width / view.scaleX : frame.size.width; const boundsHeight = view.scaleY ? frame.size.height / view.scaleY : frame.size.height; @@ -342,7 +362,151 @@ function cssValueToDeviceIndependentPixels(source: string, total: number): numbe } } -function drawNonUniformBorders(nativeView: NativeView, background: BackgroundDefinition) { +function drawUniformColorNonUniformBorders(nativeView: NativeView, background: BackgroundDefinition) { + const layer = nativeView.layer; + layer.backgroundColor = undefined; + layer.borderColor = undefined; + layer.borderWidth = 0; + layer.cornerRadius = 0; + + const { width, height } = layer.bounds.size; + const { x, y } = layer.bounds.origin; + + const left = x; + const top = y; + const right = x + width; + const bottom = y + height; + + const { min, max } = Math; + + const borderTopWidth = max(0, layout.toDeviceIndependentPixels(background.borderTopWidth)); + const borderRightWidth = max(0, layout.toDeviceIndependentPixels(background.borderRightWidth)); + const borderBottomWidth = max(0, layout.toDeviceIndependentPixels(background.borderBottomWidth)); + const borderLeftWidth = max(0, layout.toDeviceIndependentPixels(background.borderLeftWidth)); + + const borderVWidth = borderTopWidth + borderBottomWidth; + const borderHWidth = borderLeftWidth + borderRightWidth; + + const cappedBorderTopWidth = borderTopWidth && borderTopWidth * min(1, height / borderVWidth) + const cappedBorderRightWidth = borderRightWidth && borderRightWidth * min(1, width / borderHWidth); + const cappedBorderBottomWidth = borderBottomWidth && borderBottomWidth * min(1, height / borderVWidth); + const cappedBorderLeftWidth = borderLeftWidth && borderLeftWidth * min(1, width / borderHWidth); + + const outerTopLeftRadius = layout.toDeviceIndependentPixels(background.borderTopLeftRadius); + const outerTopRightRadius = layout.toDeviceIndependentPixels(background.borderTopRightRadius); + const outerBottomRightRadius = layout.toDeviceIndependentPixels(background.borderBottomRightRadius); + const outerBottomLeftRadius = layout.toDeviceIndependentPixels(background.borderBottomLeftRadius); + + const topRadii = outerTopLeftRadius + outerTopRightRadius; + const rightRadii = outerTopRightRadius + outerBottomRightRadius; + const bottomRadii = outerBottomRightRadius + outerBottomLeftRadius; + const leftRadii = outerBottomLeftRadius + outerTopLeftRadius; + + function capRadius(a: number, b: number, c: number): number { + return a && Math.min(a, Math.min(b, c)); + } + + const cappedOuterTopLeftRadius = capRadius(outerTopLeftRadius, outerTopLeftRadius / topRadii * width, outerTopLeftRadius / leftRadii * height); + const cappedOuterTopRightRadius = capRadius(outerTopRightRadius, outerTopRightRadius / topRadii * width, outerTopRightRadius / rightRadii * height); + const cappedOuterBottomRightRadius = capRadius(outerBottomRightRadius, outerBottomRightRadius / bottomRadii * width, outerBottomRightRadius / rightRadii * height); + const cappedOuterBottomLeftRadius = capRadius(outerBottomLeftRadius, outerBottomLeftRadius / bottomRadii * width, outerBottomLeftRadius / leftRadii * height); + + // Outer contour + const clipPath = CGPathCreateMutable(); + CGPathMoveToPoint(clipPath, null, left + cappedOuterTopLeftRadius, top); + CGPathAddArcToPoint(clipPath, null, right, top, right, top + cappedOuterTopRightRadius, cappedOuterTopRightRadius); + CGPathAddArcToPoint(clipPath, null, right, bottom, right - cappedOuterBottomRightRadius, bottom, cappedOuterBottomRightRadius); + CGPathAddArcToPoint(clipPath, null, left, bottom, left, bottom - cappedOuterBottomLeftRadius, cappedOuterBottomLeftRadius); + CGPathAddArcToPoint(clipPath, null, left, top, left + cappedOuterTopLeftRadius, top, cappedOuterTopLeftRadius); + CGPathCloseSubpath(clipPath); + + nativeView.borderOriginalMask = layer.mask; + const clipShapeLayer = CAShapeLayer.layer(); + clipShapeLayer.path = clipPath; + layer.mask = clipShapeLayer; + nativeView.hasBorderMask = true; + + if (cappedBorderLeftWidth > 0 || cappedBorderTopWidth > 0 || cappedBorderRightWidth > 0 || cappedBorderBottomWidth > 0) { + const borderPath = CGPathCreateMutable(); + CGPathAddRect(borderPath, null, CGRectMake(left, top, width, height)); + + // Inner contour + if (cappedBorderTopWidth > 0 || cappedBorderLeftWidth > 0) { + CGPathMoveToPoint(borderPath, null, left + cappedOuterTopLeftRadius, top + cappedBorderTopWidth); + } else { + CGPathMoveToPoint(borderPath, null, left, top); + } + + if (cappedBorderTopWidth > 0 || cappedBorderRightWidth > 0) { + const innerTopRightWRadius = max(0, cappedOuterTopRightRadius - cappedBorderRightWidth); + const innerTopRightHRadius = max(0, cappedOuterTopRightRadius - cappedBorderTopWidth); + const innerTopRightMaxRadius = max(innerTopRightWRadius, innerTopRightHRadius); + const innerTopRightTransform: any = CGAffineTransformMake( + innerTopRightMaxRadius && innerTopRightWRadius / innerTopRightMaxRadius, 0, + 0, innerTopRightMaxRadius && innerTopRightHRadius / innerTopRightMaxRadius, + right - cappedBorderRightWidth - innerTopRightWRadius, top + cappedBorderTopWidth + innerTopRightHRadius + ); + CGPathAddArc(borderPath, innerTopRightTransform, 0, 0, innerTopRightMaxRadius, Math.PI * 3 / 2, 0, false); + } else { + CGPathMoveToPoint(borderPath, null, right, top); + } + + if (cappedBorderBottomWidth > 0 || cappedBorderRightWidth > 0) { + const innerBottomRightWRadius = max(0, cappedOuterBottomRightRadius - cappedBorderRightWidth); + const innerBottomRightHRadius = max(0, cappedOuterBottomRightRadius - cappedBorderBottomWidth); + const innerBottomRightMaxRadius = max(innerBottomRightWRadius, innerBottomRightHRadius); + const innerBottomRightTransform: any = CGAffineTransformMake( + innerBottomRightMaxRadius && innerBottomRightWRadius / innerBottomRightMaxRadius, 0, + 0, innerBottomRightMaxRadius && innerBottomRightHRadius / innerBottomRightMaxRadius, + right - cappedBorderRightWidth - innerBottomRightWRadius, bottom - cappedBorderBottomWidth - innerBottomRightHRadius + ); + CGPathAddArc(borderPath, innerBottomRightTransform, 0, 0, innerBottomRightMaxRadius, 0, Math.PI / 2, false); + } else { + CGPathAddLineToPoint(borderPath, null, right, bottom); + } + + if (cappedBorderBottomWidth > 0 || cappedBorderLeftWidth > 0) { + const innerBottomLeftWRadius = max(0, cappedOuterBottomLeftRadius - cappedBorderLeftWidth); + const innerBottomLeftHRadius = max(0, cappedOuterBottomLeftRadius - cappedBorderBottomWidth); + const innerBottomLeftMaxRadius = max(innerBottomLeftWRadius, innerBottomLeftHRadius); + const innerBottomLeftTransform: any = CGAffineTransformMake( + innerBottomLeftMaxRadius && innerBottomLeftWRadius / innerBottomLeftMaxRadius, 0, + 0, innerBottomLeftMaxRadius && innerBottomLeftHRadius / innerBottomLeftMaxRadius, + left + cappedBorderLeftWidth + innerBottomLeftWRadius, bottom - cappedBorderBottomWidth - innerBottomLeftHRadius + ); + CGPathAddArc(borderPath, innerBottomLeftTransform, 0, 0, innerBottomLeftMaxRadius, Math.PI / 2, Math.PI, false); + } else { + CGPathAddLineToPoint(borderPath, null, left, bottom); + } + + if (cappedBorderTopWidth > 0 || cappedBorderLeftWidth > 0) { + const innerTopLeftWRadius = max(0, cappedOuterTopLeftRadius - cappedBorderLeftWidth); + const innerTopLeftHRadius = max(0, cappedOuterTopLeftRadius - cappedBorderTopWidth); + const innerTopLeftMaxRadius = max(innerTopLeftWRadius, innerTopLeftHRadius); + const innerTopLeftTransform: any = CGAffineTransformMake( + innerTopLeftMaxRadius && innerTopLeftWRadius / innerTopLeftMaxRadius, 0, + 0, innerTopLeftMaxRadius && innerTopLeftHRadius / innerTopLeftMaxRadius, + left + cappedBorderLeftWidth + innerTopLeftWRadius, top + cappedBorderTopWidth + innerTopLeftHRadius + ); + CGPathAddArc(borderPath, innerTopLeftTransform, 0, 0, innerTopLeftMaxRadius, Math.PI, Math.PI * 3 / 2, false); + } else { + CGPathAddLineToPoint(borderPath, null, left, top); + } + + CGPathCloseSubpath(borderPath); + + const borderLayer = CAShapeLayer.layer(); + borderLayer.fillColor = background.borderTopColor && background.borderTopColor.ios.CGColor || UIColor.blackColor.CGColor; + borderLayer.fillRule = kCAFillRuleEvenOdd; + borderLayer.path = borderPath; + layer.addSublayer(borderLayer); + nativeView.borderLayer = borderLayer; + } + + nativeView.hasNonUniformBorder = true; +} + +function drawNoRadiusNonUniformBorders(nativeView: NativeView, background: BackgroundDefinition) { const layer = nativeView.layer; layer.borderColor = undefined; layer.borderWidth = 0; @@ -378,21 +542,6 @@ function drawNonUniformBorders(nativeView: NativeView, background: BackgroundDef let hasNonUniformBorder: boolean; - // TODO: This is inefficient. - // We need to know what caused the change and reuse as much as possible. - if (nativeView.topBorderLayer) { - nativeView.topBorderLayer.removeFromSuperlayer(); - } - if (nativeView.rightBorderLayer) { - nativeView.rightBorderLayer.removeFromSuperlayer(); - } - if (nativeView.bottomBorderLayer) { - nativeView.bottomBorderLayer.removeFromSuperlayer(); - } - if (nativeView.leftBorderLayer) { - nativeView.leftBorderLayer.removeFromSuperlayer(); - } - const borderTopColor = background.borderTopColor; if (top > 0 && borderTopColor && borderTopColor.ios) { const topBorderPath = CGPathCreateMutable(); diff --git a/tns-core-modules/ui/text-base/text-base.ios.ts b/tns-core-modules/ui/text-base/text-base.ios.ts index 2d85ae595..d018f94cb 100644 --- a/tns-core-modules/ui/text-base/text-base.ios.ts +++ b/tns-core-modules/ui/text-base/text-base.ios.ts @@ -246,9 +246,9 @@ export class TextBase extends TextBaseCommon { } // We don't use isSet function here because defaultValue for backgroundColor is null. - const backgroundColor = style.backgroundColor + const backgroundColor = (style.backgroundColor || (span.parent).backgroundColor - || ((span.parent).parent).backgroundColor; + || ((span.parent).parent).backgroundColor); if (backgroundColor) { attrDict[NSBackgroundColorAttributeName] = backgroundColor.ios; }