From a49ac3d8233178f2652019f3d5752c4c6f1d00ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Tu=CC=88rk?= Date: Tue, 8 Nov 2022 22:36:31 +0100 Subject: [PATCH] Fix scale and translation for different content modes --- Sources/PlayButton/PlayButton.swift | 21 ++++++- Tests/PlayButtonTests/PlayButtonTests.swift | 56 +++++++++++++++++- ...caleAspectFillHeightGreaterThanWidth.1.png | Bin 0 -> 1725 bytes ...caleAspectFillWidthGreaterThanHeight.1.png | Bin 0 -> 1768 bytes ...ScaleAspectFitHeightGreaterThanWidth.1.png | Bin 0 -> 1859 bytes ...ScaleAspectFitWidthGreaterThanHeight.1.png | Bin 0 -> 1783 bytes ...estScaleToFillHeightGreaterThanWidth.1.png | Bin 0 -> 2572 bytes ...estScaleToFillWidthGreaterThanHeight.1.png | Bin 0 -> 2294 bytes 8 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleAspectFillHeightGreaterThanWidth.1.png create mode 100644 Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleAspectFillWidthGreaterThanHeight.1.png create mode 100644 Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleAspectFitHeightGreaterThanWidth.1.png create mode 100644 Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleAspectFitWidthGreaterThanHeight.1.png create mode 100644 Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleToFillHeightGreaterThanWidth.1.png create mode 100644 Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleToFillWidthGreaterThanHeight.1.png diff --git a/Sources/PlayButton/PlayButton.swift b/Sources/PlayButton/PlayButton.swift index 980d4e8..9d4c78f 100644 --- a/Sources/PlayButton/PlayButton.swift +++ b/Sources/PlayButton/PlayButton.swift @@ -179,8 +179,25 @@ public class PlayButton: UIButton { yScale = scale } - let xTranslate = (xScale - 1) * scaleLayer.bounds.width / 2 - let yTranslate = (yScale - 1) * scaleLayer.bounds.height / 2 + var xTranslate = (xScale - 1.0) * scaleLayer.bounds.height / 2.0 + var yTranslate = (yScale - 1.0) * scaleLayer.bounds.width / 2.0 + + switch contentMode { + case .scaleToFill: + break + case .scaleAspectFill: + if bounds.width < bounds.height { + xTranslate += (bounds.width - xScale * scaleLayer.bounds.width) / 2.0 + } else if bounds.width > bounds.height { + yTranslate += (bounds.height - yScale * scaleLayer.bounds.height) / 2.0 + } + default: + if bounds.width > bounds.height { + xTranslate += (bounds.width - xScale * scaleLayer.bounds.width) / 2.0 + } else if bounds.width < bounds.height { + yTranslate += (bounds.height - yScale * scaleLayer.bounds.height) / 2.0 + } + } scaleLayer.transform = CATransform3DConcat( CATransform3DMakeScale(xScale, yScale, 1), diff --git a/Tests/PlayButtonTests/PlayButtonTests.swift b/Tests/PlayButtonTests/PlayButtonTests.swift index 0006def..fa0c1bb 100644 --- a/Tests/PlayButtonTests/PlayButtonTests.swift +++ b/Tests/PlayButtonTests/PlayButtonTests.swift @@ -21,7 +21,7 @@ final class PlayButtonTests: XCTestCase { windowView = vc.view SnapshotTesting.diffTool = "ksdiff" - // isRecording = true +// isRecording = true } func testPlayToPause() { @@ -225,6 +225,60 @@ final class PlayButtonTests: XCTestCase { button.setStop(true, animated: false) XCTAssertEqual(button.isStop, true) } + + func testScaleAspectFillWidthGreaterThanHeight() { + let button = PlayButton(frame: CGRect(x: 0, y: 0, width: 60, height: 30)) + button.backgroundColor = .blue + button.contentMode = .scaleAspectFill + + windowView.addSubview(button) + assertSnapshot(matching: button, as: .image) + } + + func testScaleAspectFillHeightGreaterThanWidth() { + let button = PlayButton(frame: CGRect(x: 0, y: 0, width: 30, height: 60)) + button.backgroundColor = .blue + button.contentMode = .scaleAspectFill + + windowView.addSubview(button) + assertSnapshot(matching: button, as: .image) + } + + func testScaleAspectFitWidthGreaterThanHeight() { + let button = PlayButton(frame: CGRect(x: 0, y: 0, width: 60, height: 30)) + button.backgroundColor = .blue + button.contentMode = .scaleAspectFit + + windowView.addSubview(button) + assertSnapshot(matching: button, as: .image) + } + + func testScaleAspectFitHeightGreaterThanWidth() { + let button = PlayButton(frame: CGRect(x: 0, y: 0, width: 30, height: 60)) + button.backgroundColor = .blue + button.contentMode = .scaleAspectFit + + windowView.addSubview(button) + assertSnapshot(matching: button, as: .image) + } + + func testScaleToFillWidthGreaterThanHeight() { + let button = PlayButton(frame: CGRect(x: 0, y: 0, width: 60, height: 30)) + button.backgroundColor = .blue + button.contentMode = .scaleToFill + + windowView.addSubview(button) + assertSnapshot(matching: button, as: .image) + } + + func testScaleToFillHeightGreaterThanWidth() { + let button = PlayButton(frame: CGRect(x: 0, y: 0, width: 30, height: 60)) + button.backgroundColor = .blue + button.contentMode = .scaleToFill + + windowView.addSubview(button) + assertSnapshot(matching: button, as: .image) + } } private enum CompletionCondition { diff --git a/Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleAspectFillHeightGreaterThanWidth.1.png b/Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleAspectFillHeightGreaterThanWidth.1.png new file mode 100644 index 0000000000000000000000000000000000000000..dfab58d6e984dcae9d6f4def36040bbf0000460e GIT binary patch literal 1725 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 literal 0 HcmV?d00001 diff --git a/Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleAspectFitHeightGreaterThanWidth.1.png b/Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleAspectFitHeightGreaterThanWidth.1.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ba7fd0ca9dbea01b5a4981b7c78d10f6d79b27 GIT binary patch literal 1859 zcma)*dpOi-8^?d+HyDE%rz~S=k#eXpG?Ag4Pic|FIK-4DhAD%=*rZ~yWt>`v71lYt z7?Wd^HN%!d49a224wJ&FtkCB8{_ML~f4}#2eV@<$+|PYq&-Gl-^}X%tY%h((AOQf7 zc66|DgJ=eci4cQU_OVO^1XzTdy%oS7z%J~aP)LrKzxxi*g>nP{hhYHGy%tC(VJcs9 zJD4^A{!g%Y z06lKQIoepdGhs`4ogpd)3Oy8g z)J6J_@1F~vFzGx}YIcj1(D$vTv;7tf$802B;$oKr}EXKSmk#U6a-tDe= zabnKOY`wg!&u!X5d1K`5Bw=jB>gx96O8?Jk26n6MIP})A<_FCs&8;rQW9H@C8SB=> z3GsdA$=lfVi1EQ0n>z5eTu8w6zqm$^=NqK=U&t*Bu+C5CNb9%Ly6wm3=EwPOHEG=` zxXESNC=;Sl(-*|#a%rE@#XEGFtup+Ut*PlB)XZ3C2Rn&NE57 zuHunHVpoJth9tP3&!+X{r1|{({P$7>EJ~+WG?^<#P)y`ZS9Yy&Rxod;!==rOt49LcyM`i)TR9) z^AUlBLQC^Y(RGN&4J$=a(Va(Bv%pWL1j~HlLy_ghMSr5%)*I~M?S)|Hvn z)r3Y47K3@!!cpcfd&`jzmAtd}7GcHAtl-~f%&OiC9HdHcQY5nwhpr_>eTj_|Q|jyJ zC%N^``Q!jB>DP(ZM_)c5Gk543fc_^q1*y{_-ZxTm0>+B?&$#x&pv&O2JU1m)mXxK* zBdE@a3xd~1wc9)V(vgWG6>d7c?>@Z@Ze}e_Fc9NvCHrswH9#G9tn*M&rkwRW_*2Q{ zM(U+88~ISl79BG7`Dy=Yr;1^Pr30}t@RvaZJFg6$n}D~@T*BHaRV#c*t@`Z6#hxs5 zKHK3}8P^#)Rm672Pus`9SzDQG*n?k@c<~-HbazJkYj#*?DQe=VQV;i;j0W{!O_etr z?B|8myX(GOV6ZleD&<*1n)Yz%C*7K@{ri6I{wBpXxOLK_>Dg+0w)!`RYl_caMfUR| z+I(p~7?QG_fJkm=Z@Fp0#O`eyb_@}P;gei!K`52zeJPUHyIgJUVOeR0BcuFqxv7!y z*)yAIsGn=EPI1S3FI}(6NywfUzstWc#hsvyDk;@QLk8L1B?-eJ!-8si?s%VP8lqyU zkZ6C=AiOcE;*>*`ukw_HZw-TTEAG}*8@?($@RIOpqN~s<)$$c4%fhW3sjlPpg8~(# zj=(p?f6EXzCjQQ9o^CzineP>NhZ3dM9`UP*<_qht$f6ON(b>4*W{iZo$BKK+IZS#_ zFNUX!)A!dE@48thGTw3pBPDitqgb|fc6N53lZCV3RE5=cT#;?=jrI6*1%(|KB>G`A zFU815=M_)Hxqd-;gwdBXE5Ln%@V3*1&dI)GlpzgRf)44)^mJg3vl{5Dn_cz#>Ij2K z8IplZz2)h)w01sVthwRPJCE?R39I(l^IH;00<^t8nQ7Wv7r zCcW^hDq^c^1A+QKd>=&KuzG{YC8(dK5#L7b^*V*y^**tm1B^?Q9J zT3U=#E>gxD7#QmU6V#$2}zgxHdLR#3402Z zgAvHNeS)uAEu~pZ{>`q}`x5nkcH2iVr5bga$c9d!Veu$QDA= zIw4w_pmifqtLpSok!vG7p9Ti0vP3;@A(MV)0lWoE6W#Xz@Qfe5dS3&HC#@sM3r6eJ zF>1&8p3G1z{8XPFpwA0cd`Erd^h1@r!o^v$$>1;POscEnniN+qHb9s|&yL^J%ucb4 zRWy*%n{@jLu2dTU&k;C;S^pSvW=d2jf^FUTy9V6-2q4hYXOf6bmOimhADx#%&h^$K z#?kd-k6>@_5!;^{p#EHx%EbxsV-Aa$p5wJOM}6B_-M*UDAy^@YJwRVDL`9^Qv%^^3 o?ZobizT^GJ?*1P`8-v&#P)_aJ74THjI%FBZ(bn09ZAFg%FL{O}7ytkO literal 0 HcmV?d00001 diff --git a/Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleAspectFitWidthGreaterThanHeight.1.png b/Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleAspectFitWidthGreaterThanHeight.1.png new file mode 100644 index 0000000000000000000000000000000000000000..26f21a916d5736da53a26dc3185d145fff1fc2f6 GIT binary patch literal 1783 zcmX|Cdpy(o8~=VcHup+A3g9GU zvaM9h+(sd!w4qRo;; z9rA!U1p+|^0p*5^$+&@Vb+V>&xlXSkb03i^@Q2?=g2 z4%K;c6KMd7qg3dwto;4sh03E9uLM=qracFcJ1 z0dOO!S(J0)6E8;D0Pn+vcpNhWULM*P+)FblHev|J=BYnd4*X(XcE`_@+<$twhKoZ2 z(ap+2^S~zwmhq8nA8}&v`!_cz)wM(6Xm(W9Z}+lenh<%0`-e-`x`LNcZ(478O1MR-;PWP@?zoJomN)Q>V;S0<23oRxlK6eH8eTufip1dsW8-hg3&e-aC zC3V31=nR>rz^Ffg5A`s0i;9&-a9_AmQzENowtYkZ@~aJub3gruEM4kQa>OvCqS2B{ zTTU-ja`Jjx0~)YA*6gEgqVu&UagICj_()!v3m=V(W=ns8p5E40Lr3W(XxF$S5<_%ebf_8L{MT)(;7W$zcWIF177Cd^d3ABsC=o+6v#!P~k4ft15aX%FuTTAob zcpBTKp=jYJ*`uuV)F*y+3!qdF*Lm01wgm=u<=_UF_WGzHQ?#W4?V8hO zs#e1jktOI{Mk;Q8Ve!{})C;wqn5!~KyXb*1RK_i@YowC>R5^Ufd3S4TvphZP^8Qxf zUZkm={N$6>aAHU>Xz)!WVyFgcDTvOs5KL!m2(z}Vmh8Ed%cKi;&&4X>Bjb8GxtvZo zADo$)HuLSZwXd5S6zMQ&I(ceT>cR*Ub-X@#fR>f~WqG-posoBgZuMZ3p(7fhId6`Q z9U$HAINp?-hhRA^eeOi))ApW@T|ECM$Z$~d(;t|m6P1)(J2lKXNOq3^^(rg=@{HKK zx>`3FsabBnxU9Kkp1d|a?Ut0fVP#d=q+VV!q#?F!Piv$C`cLr(`K0x!o>a5vjv)Nz zDgD%ke5)4w<3yAKx`$9?_%tP`sP7CDQGaxbwpQ5x7qK03m&i5SqAw!M1%TfKGJ7wh zVtVC*UErAgC{$VY2_)bQIiOV;mxt7;;mke7E ztIWLaMmHk3>@^%^OMmOx&g<7ER&?(Od;a^i4~}8_!g&}AL(RN9wZC6=X}1YbU-~RF tfdmWl(_b9xw)E?b9Y1{_r%hmU5r(zaTj3-0+o68|a6U{q#B>bI{2$wo{eu7i literal 0 HcmV?d00001 diff --git a/Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleToFillHeightGreaterThanWidth.1.png b/Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleToFillHeightGreaterThanWidth.1.png new file mode 100644 index 0000000000000000000000000000000000000000..ab8c95ca911b8a2e28625dda1982d46a0814506f GIT binary patch literal 2572 zcmX|@dpOhWAIHCA#u$DnGYlynrQpT+K7wFi2?v1jjerQm*g@fnG+GIxyzO-?x49&knquUu$t zNmKBWf=^l;+u;80{D<_ea`b*MdW~o+tWnXgDEOj_8-v3ON%kFL6iRO=?i>W8Wu4bP zyB?69`eAuZtFLn;uBmzP)4+1k_x7>d>nOVM^5f0zfzP~8kHh`x;TJ!0FKy2m7zF?P z_Qi%08JYBaz>6y;*6%46$2tCUd9>ajV{^QK)D~LAN|AWDy0gx=Ae!HY%p$76!apE6&m`8 z>vr-kOj80Fx0+ZS@?ZJzW@SH!NASC@$E*gh;CCv1GPntyALSl}!18ij?y(wHg`?c~ zp_b}}C{De=+u^n3cqU*PvvznP*aqC(${B&{;vY0($l+hY6jQx=2~khYEg=5KGLJ(| zul|U8Q!kLN#Y_ly&^i&(Cs!~~rmE@X+Q`0p_o%T1{dCW7nYrN24byO>J6+e`MRX(P z$%XYAEuwXBanlWF32o=uGUboO_vk}C_rR3*Ju)3F>V_o-qBm1{J<;D*WT26Sq9rEZ zS@k7nc~q-6Yi?N3Ms(b$?%XSg+q#?!#vhxG1zrAHFgAa%%FItb{_V23%Vq^#z(2-# znWo$peoLICtvyyG?kp+AD1v0tYu*p^+Qr6ay*)6xw4K|4r>2-IJ=Cjg2v@TNyEPr} z&?^_ru&Vt)N%G0MPewoeSlpfFEMTuoaG4z(l-Yv7>~`0=QShK)o1GSLA6QPXbUhO6D)i5kytJYZT3kDwML78s1EOHuN2a?x>d zaX%kj4SmnNH}rO^i=t@ThJ>A*XLVN(J9DNa9Csi9CwzSKY6#nPB`(( z71q0VBfYnaK!WLFIkU4qm!2>J5c{Pwtml*@^%q%Mi228lO%!1ey@cd&G0Mu!QB?&3 z-%BEsoiLCJ-|M_O#{K(_b|)(0smn`CF4>kdYj5fpt*x7OC(0A3%k%S2*=R{xXdPo? zBhT)HGYHb!)Z~UyJgHw(^I++(YzbE?l^Oh}kfuB$`n?fq=<+}#k#u2jGC~Cr@LEqB zKQ`9TtRMy<%$*ib0#EyCD(nj^ZqXW-_NQmRDo zF|I?H=$9Gg@&rS3l&y*SArT$0`Qv$Wp+wPy1kr>vaO&lX2{ybeM(> z^S<`Mv{ygC;(%yNQVz*D*RfOH`=ncpDoV zjBgsN6JCRV@!eEH$4<;i%mjrxs9=BKzy=ZgKq=bCJdRlfX=!US)~Ev@en51{CuU=o z70Wf4pgo3GKtbZ$TJOw@PEJm0@w_$f;UwvxndD@{mkCESHMh49Q;Jez93BAI@30X7 z6W?JgIP&^68WsXld#OWM3L_J5%ARhX`x z*(`4*7fN#9H?k2WcE~ih=dfMb*iQqV9xT~*6d{{DyS8RNZebZ4IcmgOFoC8Phky-v z>JD;YYG%9nVWGWY(|v1}+EHb)<4JmSQS8Tejlpk*kn+c|H?6C<+|M0H?*+znSE+iI zN0mw!8VFW!XJ)n=dvzN*DGpgat~y6|2d-S1yH>4MsO=mZ@P~UK(Fmc~QS|jpGUxBQ zBf2oP^Q(s5-nkPT>1X-ZPd1t#mPH|dznzIY-aquGggYsDb|ApyLvXMMPC~A*G#!bM zSX!E{LZbAmQ>1(9xRL%UQ4mysb7ZyImhRoD{MCd6Z;krfG@eJmz87&pnj&;NH#ep1 z6G48i$&hfoxB~&|+pHF5KXUO})joFt#7ys~toiA=s$k>bfR}7)OpM~4v7U51yT0kH zy@1~3OTYE^ydsr+tzwRzlKs@yYe7u- EAAz!W4*&oF literal 0 HcmV?d00001 diff --git a/Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleToFillWidthGreaterThanHeight.1.png b/Tests/PlayButtonTests/__Snapshots__/PlayButtonTests/testScaleToFillWidthGreaterThanHeight.1.png new file mode 100644 index 0000000000000000000000000000000000000000..88c027312076aa36c5d2a4b0fc05835b620cbc14 GIT binary patch literal 2294 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