From 8d78ee5172429de064a0df30e60e737ee1b4312b Mon Sep 17 00:00:00 2001 From: Mike Welsh Date: Fri, 20 Nov 2020 20:32:07 -0800 Subject: [PATCH] avm1: Use f64 when calculating scale/rotation (fix #1622) --- core/src/display_object.rs | 24 +++++++++--------- core/tests/regression_tests.rs | 2 +- .../avm1/stage_object_properties/output.txt | 7 +++++ .../avm1/stage_object_properties/test.fla | Bin 12690 -> 15440 bytes .../avm1/stage_object_properties/test.swf | Bin 1382 -> 1534 bytes 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/core/src/display_object.rs b/core/src/display_object.rs index 2f8558d65..1bbc621cc 100644 --- a/core/src/display_object.rs +++ b/core/src/display_object.rs @@ -171,10 +171,10 @@ impl<'gc> DisplayObjectBase<'gc> { fn cache_scale_rotation(&mut self) { if !self.flags.contains(DisplayObjectFlags::ScaleRotationCached) { let (a, b, c, d) = ( - self.transform.matrix.a, - self.transform.matrix.b, - self.transform.matrix.c, - self.transform.matrix.d, + f64::from(self.transform.matrix.a), + f64::from(self.transform.matrix.b), + f64::from(self.transform.matrix.c), + f64::from(self.transform.matrix.d), ); // If this object's transform matrix is: // [[a c tx] @@ -190,14 +190,14 @@ impl<'gc> DisplayObjectBase<'gc> { // This can produce some surprising results due to the overlap between flipping/rotation/skewing. // For example, in Flash, using Modify->Transform->Flip Horizontal and then tracing _xscale, _yscale, and _rotation // will output 100, 100, and 180. (a horizontal flip could also be a 180 degree skew followed by 180 degree rotation!) - let rotation_x = f32::atan2(b, a); - let rotation_y = f32::atan2(-c, d); - let scale_x = f32::sqrt(a * a + b * b); - let scale_y = f32::sqrt(c * c + d * d); - self.rotation = Degrees::from_radians(rotation_x.into()); - self.scale_x = Percent::from_unit(scale_x.into()); - self.scale_y = Percent::from_unit(scale_y.into()); - self.skew = (rotation_y - rotation_x).into(); + let rotation_x = f64::atan2(b, a); + let rotation_y = f64::atan2(-c, d); + let scale_x = f64::sqrt(a * a + b * b); + let scale_y = f64::sqrt(c * c + d * d); + self.rotation = Degrees::from_radians(rotation_x); + self.scale_x = Percent::from_unit(scale_x); + self.scale_y = Percent::from_unit(scale_y); + self.skew = rotation_y - rotation_x; self.flags.insert(DisplayObjectFlags::ScaleRotationCached); } } diff --git a/core/tests/regression_tests.rs b/core/tests/regression_tests.rs index 9880b8fb1..cf7c7d479 100644 --- a/core/tests/regression_tests.rs +++ b/core/tests/regression_tests.rs @@ -416,7 +416,7 @@ swf_tests! { // Some will probably always need to be approx. (if they rely on trig functions, etc.) swf_tests_approx! { (local_to_global, "avm1/local_to_global", 1, epsilon = 0.051), - (stage_object_properties, "avm1/stage_object_properties", 5, epsilon = 0.051), + (stage_object_properties, "avm1/stage_object_properties", 6, epsilon = 0.051), (stage_object_properties_swf6, "avm1/stage_object_properties_swf6", 4, epsilon = 0.051), (movieclip_getbounds, "avm1/movieclip_getbounds", 1, epsilon = 0.051), (edittext_letter_spacing, "avm1/edittext_letter_spacing", 1, epsilon = 15.0), // TODO: Discrepancy in wrapping in letterSpacing = 0.1 test. diff --git a/core/tests/swfs/avm1/stage_object_properties/output.txt b/core/tests/swfs/avm1/stage_object_properties/output.txt index 8ab84a1e9..2ef23bcd3 100644 --- a/core/tests/swfs/avm1/stage_object_properties/output.txt +++ b/core/tests/swfs/avm1/stage_object_properties/output.txt @@ -233,3 +233,10 @@ _yscale: _root._target: / +90-degree rotations: + +// clip1: 0 +// clip2: 90 +// clip3: 180 +// clip4: -90 + diff --git a/core/tests/swfs/avm1/stage_object_properties/test.fla b/core/tests/swfs/avm1/stage_object_properties/test.fla index 3fbee74a4a96f1a10abed3310387216e367a9f4e..ccbdfde3d1eff9c59f1055a93c831b0e950dba6c 100644 GIT binary patch delta 12393 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∓sF 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 A^#A|> diff --git a/core/tests/swfs/avm1/stage_object_properties/test.swf b/core/tests/swfs/avm1/stage_object_properties/test.swf index 3fd0732c969e4e3bb728d6d69acae06990ace237..c190ce7bb1fe3343ee986d035ff058373db708ac 100644 GIT binary patch literal 1534 zcmVbo9h7uLvku85cMMo!60gbL=9r3_!moz0TE*O;3q>uA|ZkyQG!9E z!Sn6j?B48Nm-xZp2QRtVdB5Mx+nISYzj-?bq5|MM0#GSIO9|j_IiJa7nuIF?z}|)2 z1JIp{BvY|OG%%7J9#OHXj)nk~u@LmdVqjMg^4Q za4M3D4JSgmDs~_3i^SECQ9(xru!91T_{d-+M4zB+i;c!M=?!QNltg4mv$Y2(INYeJ zy*68cZZ)M3e|s!77(io{I8XULIb#0^87Mc;)K0Feq!=yW5wceSily)M_QCm%LsI)mrK5WC)QVB$gly z;bsY$AqrT+!w`im;bn*-mhdq|F-w#%L@7)78KR6OrZGf0OH?pKB}-H>b)*R{40#rJ zT~`i}NSLz#Zt}IYMFCl0ZBaxf|H@<-pxExTkbG!uQA!$^7A~Ban6;)m1aO8^0IQt> zSmPAHnN9(m1#pg20OuM6OoD*R$U&me_eOfp%rp;;jR)Z%E=!>1`RD3a zHF|!UvHRT1M_)bE@z7xXJFDU1Yp~{{kE0WxWLjPcPFr|<*X@qqPIwMo?2g@e{PM3q z#M^d_RW)y{`EuFBmXUS--rKFmK1jPNntuQ6>LdR1{>#2kEBiLgZU{8{zTu=>JAdAH z{qVl|KR$LU^H%KSP@}(DS+bvuozPU$>w@uDvp(UOOY+NG~ngJkWBmtFtfNF||%jAv7MWOF(~f*i%-kZFi1v zHrz#Vw+$C5F57U4;srLGP@K2nZi)*wT&B2W!wV=*Y`BNwUK?IWagPo68uem!MMysu za}N|6E1^pYwY3!>>v+@FW==lO+1kv=dd{@98Ie7BOHx}~5waoYPkSk;(rww8k;u)} zh4_CEGxI6Or|W`-csrK`vx!499=0nkJZzVs3VPI0ef!4}+amE; ze*nv^>ZrE)Ety7Vq|?kc{+(>1Z)-BCCQ<{*>~UmGJe=q^uGh8PfU$D9M-T=g@lh2P z;ScmtcMUk_0eH>0++wwH>+oh;fQEpE;K=a#j2U6mH?jIAtOp`EGJHN`?grDhZ1pXh z9x(ngImz6m`Rv3!*_D~x#hlM}II%c#S#V_de8$|d=A1m%IeAzQ9>I~}^BGf;Oy6Fs zZ!hb?D>yQIK9lub#Q64EefwAsKEaXU^O<61txHImHBKejHl<7(zpgM$8-KP<88bQ~ zk+S5AlyXmVrpl+JaNuQvb0^C}SbOo#y(*@pP>st>HD2!AyYi5zwUD%PE^FGm#HhIuxj!K+GwpeAOA60p2hw*WhmviKakRCumzX-c> zfXfbu`c=jNQZD@_h9}`)@W7*s7WS*rq^bst zjjiR>_4NU5_Xk4({S*Y5ZBMBNN;McjBLx}_U@-+2TlYPlSKhoeTXkD>OBS2B-4PVm1te{e5v}Te`8vtQ`27hH;3eFi%bs#DF6Tf literal 1382 zcmV-s1)2IoS5psb5C8ypoaI+-OdLfRes}lw=9atTfIGe{v`0}IV+*CEnw$|hpaS7j zJ}PZuH&<9-+vB+0U0c93IX|jxqy8izm|B%!qo&qa>bEq;v{s4XhrbL7iA`f`Oth(~ z{;B8e-tOM)?rq}_Q-65L&CdHgGw;sKJM+xDQ^4{7p3?v&EVSeU{x#F7RH}hlX8?|G zqwa_PL@1UJBV+z(Y%(g~st^wV@KXU84vSG-0e(7w|G*y+M-t-!T9O6i}YP9~R@{ez}2C13nU(kZkDzJRa_t zAiXwSfqo$&5C4dm824kNOPJU%#Hy>S;c+n%3hSoD4*|ai_$S+22HJpc+tuFMHUNBI z&p>dXy{8+~{msG7UAT?%40iUm1%cn)-rwGY?O7TeP$iX=T+(vMlu4znn;=+%u#*HL z2nR`U1d&4$PJ(cegqt98Ny0-Ac_fif5CtURB?uo$6cR)cNfZ-A2}zU^bxb3?Fz9K# z>v}SP9R(>J;6PvNTjZdv`WCrp`L9%p0P>7ZUFZXSivqNRXko(>W7F1s76IH~6~Hp9 z0G3+?aHCZKH(3SHZxz4_s{n4c3Sgy5z%np+87YXkJg+B@ZA{WoS2qW9cv<}A&puPr zRpcm4oJ$fParg(m$&f7{|WQvP!+Nz^V3)DNOVKG^MGFf$pTbe-?W509-haY}1_uQE+ zz-_wys-*2sA3^-D7+JHM0oH5{>g4+#vj)Eft?o@EM0e305(}26xdLFqVXapCP zvo3WdWJytMX$8;_t=ZDd(PtT3ni<+dX|^;YbPV5;iY=`O+MDqwy%d$oHmA;rr7C41 z{vQMlUa;FKe3qaQgUfawE~_Yfy1tbVcXv~5I&o;khi%=458En~!hjH$x4#%U914pg zeq0_B;?m~VWg6X~ZY|sRce07$L$R0;NsPwQ$B{Jg;lzH!a$U*|2rH9&)WT>e92a0a z{((H|o>A*O0ADjU2V17zI<%G+V1vO1W698FMvJiK8|i%`(gR{F8QRQfyFv5K>3wsW z2ONJ6ohR;6GrM$GwlkHvn9Xd56^lpCF_sK%X0#ov&B>{slaut|WGorl%xIFN`F87l zyGajj#*(4UOxkxY;oGD4?IAsQ7)ypWGkL^X=Odp!PWkCJ1wGDN|auixqMOi64a35pcNw*OCUbJfzh3*0t+T&qxX+kHb4>jrJL6$j1;&ie_Dx30AWlB5Lk1JEoVGei4Ojmrr1MmsTmS$7