From f427cd58bb6420bcd28e55526578bcebecb5f67e Mon Sep 17 00:00:00 2001 From: Robin Allen Date: Fri, 15 Dec 2023 23:37:52 +0000 Subject: [PATCH] core: Fix mouse coords reported to ActionScript (#14243) The order in which Flash Player concatenates matrices causes reported mouse coords to often be rounded. --- core/src/avm1/object/stage_object.rs | 4 +- .../globals/flash/display/display_object.rs | 4 +- core/src/avm2/object/event_object.rs | 2 +- core/src/display_object.rs | 29 +- tests/tests/swfs/avm1/mouse_pos/input.json | 76 ++ tests/tests/swfs/avm1/mouse_pos/input.json.py | 15 + tests/tests/swfs/avm1/mouse_pos/output.txt | 666 ++++++++++++++++++ tests/tests/swfs/avm1/mouse_pos/test.as | 35 + tests/tests/swfs/avm1/mouse_pos/test.fla | Bin 0 -> 5843 bytes tests/tests/swfs/avm1/mouse_pos/test.swf | Bin 0 -> 1029 bytes tests/tests/swfs/avm1/mouse_pos/test.toml | 5 + .../mouse_pos_with_scale_factor/input.json | 31 + .../mouse_pos_with_scale_factor/input.json.py | 17 + .../mouse_pos_with_scale_factor/output.txt | 261 +++++++ .../avm1/mouse_pos_with_scale_factor/test.as | 35 + .../avm1/mouse_pos_with_scale_factor/test.fla | Bin 0 -> 5843 bytes .../avm1/mouse_pos_with_scale_factor/test.swf | Bin 0 -> 1029 bytes .../mouse_pos_with_scale_factor/test.toml | 5 + 18 files changed, 1173 insertions(+), 12 deletions(-) create mode 100644 tests/tests/swfs/avm1/mouse_pos/input.json create mode 100644 tests/tests/swfs/avm1/mouse_pos/input.json.py create mode 100644 tests/tests/swfs/avm1/mouse_pos/output.txt create mode 100644 tests/tests/swfs/avm1/mouse_pos/test.as create mode 100644 tests/tests/swfs/avm1/mouse_pos/test.fla create mode 100644 tests/tests/swfs/avm1/mouse_pos/test.swf create mode 100644 tests/tests/swfs/avm1/mouse_pos/test.toml create mode 100644 tests/tests/swfs/avm1/mouse_pos_with_scale_factor/input.json create mode 100644 tests/tests/swfs/avm1/mouse_pos_with_scale_factor/input.json.py create mode 100644 tests/tests/swfs/avm1/mouse_pos_with_scale_factor/output.txt create mode 100644 tests/tests/swfs/avm1/mouse_pos_with_scale_factor/test.as create mode 100644 tests/tests/swfs/avm1/mouse_pos_with_scale_factor/test.fla create mode 100644 tests/tests/swfs/avm1/mouse_pos_with_scale_factor/test.swf create mode 100644 tests/tests/swfs/avm1/mouse_pos_with_scale_factor/test.toml diff --git a/core/src/avm1/object/stage_object.rs b/core/src/avm1/object/stage_object.rs index 860576ee77a3..7878d896fe36 100644 --- a/core/src/avm1/object/stage_object.rs +++ b/core/src/avm1/object/stage_object.rs @@ -798,12 +798,12 @@ fn set_quality<'gc>( } fn x_mouse<'gc>(activation: &mut Activation<'_, 'gc>, this: DisplayObject<'gc>) -> Value<'gc> { - let local = this.mouse_to_local(*activation.context.mouse_position); + let local = this.local_mouse_position(&activation.context); local.x.to_pixels().into() } fn y_mouse<'gc>(activation: &mut Activation<'_, 'gc>, this: DisplayObject<'gc>) -> Value<'gc> { - let local = this.mouse_to_local(*activation.context.mouse_position); + let local = this.local_mouse_position(&activation.context); local.y.to_pixels().into() } diff --git a/core/src/avm2/globals/flash/display/display_object.rs b/core/src/avm2/globals/flash/display/display_object.rs index da9ffe09a5d8..b3798557d7d8 100644 --- a/core/src/avm2/globals/flash/display/display_object.rs +++ b/core/src/avm2/globals/flash/display/display_object.rs @@ -631,7 +631,7 @@ pub fn get_mouse_x<'gc>( _args: &[Value<'gc>], ) -> Result, Error<'gc>> { if let Some(dobj) = this.as_display_object() { - let local_mouse = dobj.mouse_to_local(*activation.context.mouse_position); + let local_mouse = dobj.local_mouse_position(&activation.context); return Ok(local_mouse.x.to_pixels().into()); } @@ -645,7 +645,7 @@ pub fn get_mouse_y<'gc>( _args: &[Value<'gc>], ) -> Result, Error<'gc>> { if let Some(dobj) = this.as_display_object() { - let local_mouse = dobj.mouse_to_local(*activation.context.mouse_position); + let local_mouse = dobj.local_mouse_position(&activation.context); return Ok(local_mouse.y.to_pixels().into()); } diff --git a/core/src/avm2/object/event_object.rs b/core/src/avm2/object/event_object.rs index 9cd586aa5288..1eaed8657395 100644 --- a/core/src/avm2/object/event_object.rs +++ b/core/src/avm2/object/event_object.rs @@ -104,7 +104,7 @@ impl<'gc> EventObject<'gc> { where S: Into>, { - let local = target.mouse_to_local(*activation.context.mouse_position); + let local = target.local_mouse_position(&activation.context); let event_type: AvmString<'gc> = event_type.into(); diff --git a/core/src/display_object.rs b/core/src/display_object.rs index c865b4ab3b79..1cacb34be083 100644 --- a/core/src/display_object.rs +++ b/core/src/display_object.rs @@ -1248,15 +1248,30 @@ pub trait TDisplayObject<'gc>: self.global_to_local_matrix().map(|matrix| matrix * global) } - /// Converts a mouse position on the stage to a local position on this display object. + /// Converts the mouse position on the stage to a local position on this display object. /// If the object has zero scale, then the stage `TWIPS_TO_PIXELS` matrix will be used. /// This matches Flash's behavior for `mouseX`/`mouseY` on an object with zero scale. - fn mouse_to_local(&self, global: Point) -> Point { - // MIKE: I suspect the `TWIPS_TO_PIXELS` scale should always be involved in the - // calculation somehow, not just in the non-invertible case. - self.global_to_local_matrix() - .unwrap_or(Matrix::TWIPS_TO_PIXELS) - * global + fn local_mouse_position(&self, context: &UpdateContext<'_, 'gc>) -> Point { + let stage = context.stage; + let pixel_ratio = stage.view_matrix().a; + let virtual_to_device = Matrix::scale(pixel_ratio, pixel_ratio); + + // Get mouse pos in global device pixels + let global_twips = *context.mouse_position; + let global_device_twips = virtual_to_device * global_twips; + let global_device_pixels = Matrix::TWIPS_TO_PIXELS * global_device_twips; + + // Make transformation matrix + let local_twips_to_global_twips = self.local_to_global_matrix(); + let twips_to_device_pixels = virtual_to_device * Matrix::TWIPS_TO_PIXELS; + let local_twips_to_global_device_pixels = + twips_to_device_pixels * local_twips_to_global_twips; + let global_device_pixels_to_local_twips = local_twips_to_global_device_pixels + .inverse() + .unwrap_or(Matrix::IDENTITY); + + // Get local mouse position in twips + global_device_pixels_to_local_twips * global_device_pixels } /// The `x` position in pixels of this display object in local space. diff --git a/tests/tests/swfs/avm1/mouse_pos/input.json b/tests/tests/swfs/avm1/mouse_pos/input.json new file mode 100644 index 000000000000..e8def5963503 --- /dev/null +++ b/tests/tests/swfs/avm1/mouse_pos/input.json @@ -0,0 +1,76 @@ +[ + {"type": "MouseMove", "pos": [308, 340]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [309, 340]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [309, 339]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [309, 330]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [309, 307]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [306, 265]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [297, 236]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [289, 195]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [288, 167]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [307, 110]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [328, 82]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [352, 65]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [362, 64]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [368, 59]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [381, 52]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [404, 49]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [417, 58]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [430, 82]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [435, 109]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [435, 139]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [429, 163]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [419, 192]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [410, 208]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [393, 232]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [378, 247]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [333, 269]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [305, 281]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [262, 301]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [236, 309]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [201, 312]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [178, 300]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [147, 271]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [127, 251]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [122, 241]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [122, 234]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [122, 212]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [111, 165]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [101, 146]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [84, 119]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [71, 108]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [52, 98]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [39, 90]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [29, 75]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [27, 68]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [26, 50]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [26, 37]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [29, 23]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [30, 16]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [33, 12]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [35, 11]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [38, 8]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [48, 6]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [92, 6]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [143, 14]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [237, 52]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [293, 84]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [352, 110]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [379, 113]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [401, 113]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [407, 120]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [406, 150]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [388, 171]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [348, 193]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [326, 195]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [315, 195]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [315, 194]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [340, 153]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [431, 56]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [468, 30]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [491, 19]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [499, 16]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [508, 11]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [511, 2]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [512, 0]}, {"type": "Wait"} +] diff --git a/tests/tests/swfs/avm1/mouse_pos/input.json.py b/tests/tests/swfs/avm1/mouse_pos/input.json.py new file mode 100644 index 000000000000..6ba3343e1b7a --- /dev/null +++ b/tests/tests/swfs/avm1/mouse_pos/input.json.py @@ -0,0 +1,15 @@ +# You can use this to recreate input.json from Flash Player output if necessary. + +import re + +first = True +with open('output.txt', 'rt') as f: + print('[') + for line in f: + if m := re.match('^_root (\d+) (\d+)', line): + x, y = m.groups() + if not first: + print(',') + print(f' {{"type": "MouseMove", "pos": [{x}, {y}]}}, {{"type": "Wait"}}', end='') + first = False + print('\n]') diff --git a/tests/tests/swfs/avm1/mouse_pos/output.txt b/tests/tests/swfs/avm1/mouse_pos/output.txt new file mode 100644 index 000000000000..64d9ddfebac2 --- /dev/null +++ b/tests/tests/swfs/avm1/mouse_pos/output.txt @@ -0,0 +1,666 @@ +_root 308 340 +id 308 340 +zs 15.4 17 +ip 181 131 +fp 182 20 +s42fp -133.3 471.45 +s133fp -42.1 51.9 +s133fpr15 -0.4 216.5 + +_root 309 340 +id 309 340 +zs 15.45 17 +ip 182 131 +fp 183 20 +s42fp -130.95 471.45 +s133fp -41.35 51.9 +s133fpr15 0.35 216.3 + +_root 309 339 +id 309 339 +zs 15.45 16.95 +ip 182 130 +fp 183 19 +s42fp -130.95 469.05 +s133fp -41.35 51.15 +s133fpr15 0.15 215.6 + +_root 309 330 +id 309 330 +zs 15.45 16.5 +ip 182 121 +fp 183 10 +s42fp -130.95 447.6 +s133fp -41.35 44.35 +s133fpr15 -1.6 209.05 + +_root 309 307 +id 309 307 +zs 15.45 15.35 +ip 182 98 +fp 183 -13 +s42fp -130.95 392.85 +s133fp -41.35 27.1 +s133fpr15 -6.1 192.35 + +_root 306 265 +id 306 265 +zs 15.3 13.25 +ip 179 56 +fp 180 -55 +s42fp -138.1 292.85 +s133fp -43.6 -4.5 +s133fpr15 -16.45 162.4 + +_root 297 236 +id 297 236 +zs 14.85 11.8 +ip 170 27 +fp 171 -84 +s42fp -159.5 223.8 +s133fp -50.4 -26.3 +s133fpr15 -28.6 143.1 + +_root 289 195 +id 289 195 +zs 14.45 9.75 +ip 162 -14 +fp 163 -125 +s42fp -178.55 126.2 +s133fp -56.4 -57.15 +s133fpr15 -42.4 114.9 + +_root 288 167 +id 288 167 +zs 14.4 8.35 +ip 161 -42 +fp 162 -153 +s42fp -180.95 59.5 +s133fp -57.15 -78.2 +s133fpr15 -48.6 94.75 + +_root 307 110 +id 307 110 +zs 15.35 5.5 +ip 180 -99 +fp 181 -210 +s42fp -135.7 -76.2 +s133fp -42.85 -121.05 +s133fpr15 -45.9 49.65 + +_root 328 82 +id 328 82 +zs 16.4 4.1 +ip 201 -127 +fp 202 -238 +s42fp -85.7 -142.85 +s133fp -27.1 -142.1 +s133fpr15 -36.1 25.25 + +_root 352 65 +id 352 65 +zs 17.6 3.25 +ip 225 -144 +fp 226 -255 +s42fp -28.55 -183.35 +s133fp -9.05 -154.9 +s133fpr15 -21.95 8.2 + +_root 362 64 +id 362 64 +zs 18.1 3.2 +ip 235 -145 +fp 236 -256 +s42fp -4.75 -185.7 +s133fp -1.5 -155.65 +s133fpr15 -14.9 5.55 + +_root 368 59 +id 368 59 +zs 18.4 2.95 +ip 241 -150 +fp 242 -261 +s42fp 9.55 -197.6 +s133fp 3 -159.4 +s133fpr15 -11.5 0.75 + +_root 381 52 +id 381 52 +zs 19.05 2.6 +ip 254 -157 +fp 255 -268 +s42fp 40.5 -214.3 +s133fp 12.75 -164.65 +s133fpr15 -3.4 -6.85 + +_root 404 49 +id 404 49 +zs 20.2 2.45 +ip 277 -160 +fp 278 -271 +s42fp 95.25 -221.45 +s133fp 30.05 -166.9 +s133fpr15 12.7 -13.55 + +_root 417 58 +id 417 58 +zs 20.85 2.9 +ip 290 -151 +fp 291 -262 +s42fp 126.2 -200 +s133fp 39.85 -160.15 +s133fpr15 23.9 -9.5 + +_root 430 82 +id 430 82 +zs 21.5 4.1 +ip 303 -127 +fp 304 -238 +s42fp 157.15 -142.85 +s133fp 49.6 -142.1 +s133fpr15 38 5.4 + +_root 435 109 +id 435 109 +zs 21.75 5.45 +ip 308 -100 +fp 309 -211 +s42fp 169.05 -78.6 +s133fp 53.35 -121.8 +s133fpr15 46.9 24 + +_root 435 139 +id 435 139 +zs 21.75 6.95 +ip 308 -70 +fp 309 -181 +s42fp 169.05 -7.15 +s133fp 53.35 -99.25 +s133fpr15 52.75 45.8 + +_root 429 163 +id 429 163 +zs 21.45 8.15 +ip 302 -46 +fp 303 -157 +s42fp 154.8 50 +s133fp 48.85 -81.2 +s133fpr15 53.05 64.4 + +_root 419 192 +id 419 192 +zs 20.95 9.6 +ip 292 -17 +fp 293 -128 +s42fp 130.95 119.05 +s133fp 41.35 -59.4 +s133fpr15 51.4 87.4 + +_root 410 208 +id 410 208 +zs 20.5 10.4 +ip 283 -1 +fp 284 -112 +s42fp 109.55 157.15 +s133fp 34.55 -47.35 +s133fpr15 48 100.8 + +_root 393 232 +id 393 232 +zs 19.65 11.6 +ip 266 23 +fp 267 -88 +s42fp 69.05 214.3 +s133fp 21.8 -29.3 +s133fpr15 40.3 121.5 + +_root 378 247 +id 378 247 +zs 18.9 12.35 +ip 251 38 +fp 252 -73 +s42fp 33.35 250 +s133fp 10.5 -18.05 +s133fpr15 32.35 135.35 + +_root 333 269 +id 333 269 +zs 16.65 13.45 +ip 206 60 +fp 207 -51 +s42fp -73.8 302.4 +s133fp -23.3 -1.5 +s133fpr15 3.95 160.05 + +_root 305 281 +id 305 281 +zs 15.25 14.05 +ip 178 72 +fp 179 -39 +s42fp -140.45 330.95 +s133fp -44.35 7.55 +s133fpr15 -14.05 174.25 + +_root 262 301 +id 262 301 +zs 13.1 15.05 +ip 135 92 +fp 136 -19 +s42fp -242.85 378.55 +s133fp -76.7 22.55 +s133fpr15 -41.4 197.1 + +_root 236 309 +id 236 309 +zs 11.8 15.45 +ip 109 100 +fp 110 -11 +s42fp -304.75 397.6 +s133fp -96.25 28.6 +s133fpr15 -58.7 208 + +_root 201 312 +id 201 312 +zs 10.05 15.6 +ip 74 103 +fp 75 -8 +s42fp -388.1 404.75 +s133fp -122.55 30.85 +s133fpr15 -83.55 217 + +_root 178 300 +id 178 300 +zs 8.9 15 +ip 51 91 +fp 52 -20 +s42fp -442.85 376.2 +s133fp -139.85 21.8 +s133fpr15 -102.6 212.75 + +_root 147 271 +id 147 271 +zs 7.35 13.55 +ip 20 62 +fp 21 -49 +s42fp -516.65 307.15 +s133fp -163.15 0 +s133fpr15 -130.75 197.7 + +_root 127 251 +id 127 251 +zs 6.35 12.55 +ip 0 42 +fp 1 -69 +s42fp -564.25 259.5 +s133fp -178.2 -15.05 +s133fpr15 -149.15 187.1 + +_root 122 241 +id 122 241 +zs 6.1 12.05 +ip -5 32 +fp -4 -79 +s42fp -576.15 235.7 +s133fp -181.95 -22.55 +s133fpr15 -154.75 180.8 + +_root 122 234 +id 122 234 +zs 6.1 11.7 +ip -5 25 +fp -4 -86 +s42fp -576.15 219.05 +s133fp -181.95 -27.8 +s133fpr15 -156.1 175.7 + +_root 122 212 +id 122 212 +zs 6.1 10.6 +ip -5 3 +fp -4 -108 +s42fp -576.15 166.65 +s133fp -181.95 -44.35 +s133fpr15 -160.4 159.75 + +_root 111 165 +id 111 165 +zs 5.55 8.25 +ip -16 -44 +fp -15 -155 +s42fp -602.35 54.75 +s133fp -190.25 -79.7 +s133fpr15 -177.55 127.75 + +_root 101 146 +id 101 146 +zs 5.05 7.3 +ip -26 -63 +fp -25 -174 +s42fp -626.15 9.5 +s133fp -197.75 -93.95 +s133fpr15 -188.5 115.9 + +_root 84 119 +id 84 119 +zs 4.2 5.95 +ip -43 -90 +fp -42 -201 +s42fp -666.65 -54.75 +s133fp -210.55 -114.3 +s133fpr15 -206.1 99.6 + +_root 71 108 +id 71 108 +zs 3.55 5.4 +ip -56 -101 +fp -55 -212 +s42fp -697.6 -80.95 +s133fp -220.3 -122.55 +s133fpr15 -217.65 94.1 + +_root 52 98 +id 52 98 +zs 2.6 4.9 +ip -75 -111 +fp -74 -222 +s42fp -742.85 -104.75 +s133fp -234.6 -130.05 +s133fpr15 -233.4 90.55 + +_root 39 90 +id 39 90 +zs 1.95 4.5 +ip -88 -119 +fp -87 -230 +s42fp -773.8 -123.8 +s133fp -244.4 -136.1 +s133fpr15 -244.4 87.3 + +_root 29 75 +id 29 75 +zs 1.45 3.75 +ip -98 -134 +fp -97 -245 +s42fp -797.6 -159.55 +s133fp -251.9 -147.35 +s133fpr15 -254.6 78.35 + +_root 27 68 +id 27 68 +zs 1.35 3.4 +ip -100 -141 +fp -99 -252 +s42fp -802.35 -176.2 +s133fp -253.4 -152.6 +s133fpr15 -257.4 73.65 + +_root 26 50 +id 26 50 +zs 1.3 2.5 +ip -101 -159 +fp -100 -270 +s42fp -804.75 -219.05 +s133fp -254.15 -166.15 +s133fpr15 -261.65 60.75 + +_root 26 37 +id 26 37 +zs 1.3 1.85 +ip -101 -172 +fp -100 -283 +s42fp -804.75 -250 +s133fp -254.15 -175.95 +s133fpr15 -264.15 51.3 + +_root 29 23 +id 29 23 +zs 1.45 1.15 +ip -98 -186 +fp -97 -297 +s42fp -797.6 -283.35 +s133fp -251.9 -186.45 +s133fpr15 -264.7 40.55 + +_root 30 16 +id 30 16 +zs 1.5 0.8 +ip -97 -193 +fp -96 -304 +s42fp -795.2 -300 +s133fp -251.15 -191.7 +s133fpr15 -265.35 35.3 + +_root 33 12 +id 33 12 +zs 1.65 0.6 +ip -94 -197 +fp -93 -308 +s42fp -788.1 -309.55 +s133fp -248.9 -194.75 +s133fpr15 -263.95 31.8 + +_root 35 11 +id 35 11 +zs 1.75 0.55 +ip -92 -198 +fp -91 -309 +s42fp -783.3 -311.9 +s133fp -247.4 -195.5 +s133fpr15 -262.7 30.7 + +_root 38 8 +id 38 8 +zs 1.9 0.4 +ip -89 -201 +fp -88 -312 +s42fp -776.15 -319.05 +s133fp -245.15 -197.75 +s133fpr15 -261.1 27.9 + +_root 48 6 +id 48 6 +zs 2.4 0.3 +ip -79 -203 +fp -78 -314 +s42fp -752.35 -323.8 +s133fp -237.6 -199.25 +s133fpr15 -254.2 24.5 + +_root 92 6 +id 92 6 +zs 4.6 0.3 +ip -35 -203 +fp -34 -314 +s42fp -647.6 -323.8 +s133fp -204.55 -199.25 +s133fpr15 -222.25 15.95 + +_root 143 14 +id 143 14 +zs 7.15 0.7 +ip 16 -195 +fp 17 -306 +s42fp -526.15 -304.75 +s133fp -166.2 -193.2 +s133fpr15 -183.65 11.85 + +_root 237 52 +id 237 52 +zs 11.85 2.6 +ip 110 -157 +fp 111 -268 +s42fp -302.35 -214.3 +s133fp -95.5 -164.65 +s133fpr15 -108 21.15 + +_root 293 84 +id 293 84 +zs 14.65 4.2 +ip 166 -125 +fp 167 -236 +s42fp -169.05 -138.1 +s133fp -53.4 -140.6 +s133fpr15 -61.1 33.5 + +_root 352 110 +id 352 110 +zs 17.6 5.5 +ip 225 -99 +fp 226 -210 +s42fp -28.55 -76.2 +s133fp -9.05 -121.05 +s133fpr15 -13.2 40.9 + +_root 379 113 +id 379 113 +zs 18.95 5.65 +ip 252 -96 +fp 253 -207 +s42fp 35.75 -69.05 +s133fp 11.25 -118.8 +s133fpr15 7 37.8 + +_root 401 113 +id 401 113 +zs 20.05 5.65 +ip 274 -96 +fp 275 -207 +s42fp 88.1 -69.05 +s133fp 27.8 -118.8 +s133fpr15 22.95 33.55 + +_root 407 120 +id 407 120 +zs 20.35 6 +ip 280 -89 +fp 281 -200 +s42fp 102.4 -52.4 +s133fp 32.3 -113.5 +s133fpr15 28.7 37.45 + +_root 406 150 +id 406 150 +zs 20.3 7.5 +ip 279 -59 +fp 280 -170 +s42fp 100 19.05 +s133fp 31.55 -90.95 +s133fpr15 33.8 59.45 + +_root 388 171 +id 388 171 +zs 19.4 8.55 +ip 261 -38 +fp 262 -149 +s42fp 57.15 69.05 +s133fp 18.05 -75.2 +s133fpr15 24.8 78.2 + +_root 348 193 +id 348 193 +zs 17.4 9.65 +ip 221 -16 +fp 222 -127 +s42fp -38.05 121.45 +s133fp -12.05 -58.65 +s133fpr15 0.05 101.95 + +_root 326 195 +id 326 195 +zs 16.3 9.75 +ip 199 -14 +fp 200 -125 +s42fp -90.45 126.2 +s133fp -28.6 -57.15 +s133fpr15 -15.55 107.7 + +_root 315 195 +id 315 195 +zs 15.75 9.75 +ip 188 -14 +fp 189 -125 +s42fp -116.65 126.2 +s133fp -36.85 -57.15 +s133fpr15 -23.55 109.85 + +_root 315 194 +id 315 194 +zs 15.75 9.7 +ip 188 -15 +fp 189 -126 +s42fp -116.65 123.8 +s133fp -36.85 -57.9 +s133fpr15 -23.7 109.1 + +_root 340 153 +id 340 153 +zs 17 7.65 +ip 213 -56 +fp 214 -167 +s42fp -57.1 26.2 +s133fp -18.05 -88.7 +s133fpr15 -13.55 74.45 + +_root 431 56 +id 431 56 +zs 21.55 2.8 +ip 304 -153 +fp 305 -264 +s42fp 159.55 -204.75 +s133fp 50.35 -161.65 +s133fpr15 33.65 -13.7 + +_root 468 30 +id 468 30 +zs 23.4 1.5 +ip 341 -179 +fp 342 -290 +s42fp 247.65 -266.65 +s133fp 78.2 -181.2 +s133fpr15 55.5 -39.8 + +_root 491 19 +id 491 19 +zs 24.55 0.95 +ip 364 -190 +fp 365 -301 +s42fp 302.4 -292.85 +s133fp 95.5 -189.45 +s133fpr15 70.05 -52.25 + +_root 499 16 +id 499 16 +zs 24.95 0.8 +ip 372 -193 +fp 373 -304 +s42fp 321.45 -300 +s133fp 101.5 -191.7 +s133fpr15 75.25 -56 + +_root 508 11 +id 508 11 +zs 25.4 0.55 +ip 381 -198 +fp 382 -309 +s42fp 342.9 -311.9 +s133fp 108.25 -195.5 +s133fpr15 80.85 -61.35 + +_root 511 2 +id 511 2 +zs 25.55 0.1 +ip 384 -207 +fp 385 -318 +s42fp 350 -333.35 +s133fp 110.5 -202.25 +s133fpr15 81.25 -68.5 + +_root 512 0 +id 512 0 +zs 25.6 0 +ip 385 -209 +fp 386 -320 +s42fp 352.4 -338.1 +s133fp 111.25 -203.75 +s133fpr15 81.6 -70.15 + diff --git a/tests/tests/swfs/avm1/mouse_pos/test.as b/tests/tests/swfs/avm1/mouse_pos/test.as new file mode 100644 index 000000000000..cdf420d3eaa3 --- /dev/null +++ b/tests/tests/swfs/avm1/mouse_pos/test.as @@ -0,0 +1,35 @@ +/* + Test clip names: + id: Identity transform + zs: Zero-scaled + ip: Integer position, 1:1 scale + fp: Fractional position, 1:1 scale + s42fp: Scaled to 42%, fractional position + s133fp: Scaled to 133%, fractional position + s133fpr15: Scaled to 133%, fractional position, rotated 15° +*/ + +zs._xscale = zs._yscale = 0 + +var oldX, oldY; + +function dump() { + + if (_xmouse == oldX && _ymouse == oldY) + return; + + oldX = _xmouse; + oldY = _ymouse; + + trace('_root'+" "+_xmouse+" "+ _ymouse); + var clips = [id, zs, ip, fp, s42fp, s133fp, s133fpr15]; + for (var i=0; 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 literal 0 HcmV?d00001 diff --git a/tests/tests/swfs/avm1/mouse_pos/test.swf b/tests/tests/swfs/avm1/mouse_pos/test.swf new file mode 100644 index 0000000000000000000000000000000000000000..7a2778406df3d23e08e28b504d44f9f4ff62b969 GIT binary patch literal 1029 zcmV+g1p50!S5pu72LJ$goTXLWZ`)K9KXE?0uB=^GGNG)qGN}(piNDg$vD!dByGk^j zN|6Ras$Bb~wPyPoUuQ`xA>aj&kfuIGLI`O*01rs}6Q~eR`~kdAyzs=|5bkxHHeI_h zAWF{l@0|1d`P_4lZu*ei1-SME;ARXObF%>O$$TscuFlP{^#s_;B>LJKwMuOf@GQjnyAT-uQ(ZCTdj@&^;NQPPODi2~i!1N|IN z5qCsMlge62j(F$NA|^Ji&f!1t&XV|5;knkmax*tKU*1l~5ysgh*hZa~XOo>n4+-0d z;I3~Vntmrbj?GPN!zF?48fc?Yp^l0P@ABR)wXT09b6zgg&RIMs2YC~Bm)m253 z%eArUB@(B#BHwz1%$ARx@Dx1VCx~@wEkAA*Yg5=?&AQm8hN#|Mu2t_!%8NF3fjU+* zFK*~n)y&C_j9mEtwCRNs{OQ4*_31y4v}v49sMq!F@Xj#}0ojPXjnFBT!Yjfwv<~(i zJ*eoOXIqBO1ciQq9AM*NPk)389d=!;3TKIzmLx>CUWJD`HyjS%ivJY@`0^pl17O>H zz|8xw>th`7zypyKrQ`Y1a`XhGBvVVjmIp@!EE8*@}I-M)jngsz99)$BSR zbrM6jnRB#0zB=*)B;KUA@*oWvNZ+6^Kj0t}%Wb@K{acO}lpRGD#t|;J!2(Gb#2{W7 zOwrsi@fJheI5|Y|acrG&6YCRV>r2d)%rTn^Z924>&`yQ+N@%BZgCwNWlvMkIzBEgP zQxJWqgUb$5kl+&W%+>ZiR$BuG2}r~fT$@H?Sq5U6nRZk`h+b>2Pr_^Mu$lySKh*o0 zgP(>h4olz60d|{ifc%!vdJ8ZMgXy#PXJ*&3QKbpU%&~PEGS?^TgDoZ<+Dxn(_OJ>k zaGOSB@Zrsm=RZ5959~9$fWJFF;(z_Y({9(lKZfBH`={h+^z&3I#**Hq_#`z$?Gh~% za&5vtp>q(q;>@+RcjZ%yxu%#aNnLC}BA8~7j?78wbq1#>{B7sxy~W2L{l5Jyny!-+ zJF%r{8vEtx!qXdn-umi|(Zrpk7FlG5vF<(FR>cR4KmI{}-g72KlvVgQjUXu$RKx|m literal 0 HcmV?d00001 diff --git a/tests/tests/swfs/avm1/mouse_pos/test.toml b/tests/tests/swfs/avm1/mouse_pos/test.toml new file mode 100644 index 000000000000..bb1ed2d56b80 --- /dev/null +++ b/tests/tests/swfs/avm1/mouse_pos/test.toml @@ -0,0 +1,5 @@ +num_frames = 75 + +[player_options] +viewport_dimensions = { width = 550, height = 400, scale_factor = 1.0 } +with_renderer = { optional = true, sample_count = 1 } \ No newline at end of file diff --git a/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/input.json b/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/input.json new file mode 100644 index 000000000000..24b82e09e63d --- /dev/null +++ b/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/input.json @@ -0,0 +1,31 @@ +[ + {"type": "MouseMove", "pos": [426, 623]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [137, 488]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [52, 457]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [25, 438]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [22, 428]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [34, 417]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [49, 411]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [82, 406]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [98, 405]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [99, 405]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [214, 375]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [354, 366]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [503, 432]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [513, 502]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [372, 566]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [261, 503]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [385, 125]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [527, 16]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [822, 75]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [851, 231]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [662, 395]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [508, 405]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [441, 271]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [500, 228]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [740, 310]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [1005, 474]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [1219, 626]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [1275, 674]}, {"type": "Wait"}, + {"type": "MouseMove", "pos": [1280, 678]}, {"type": "Wait"} +] diff --git a/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/input.json.py b/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/input.json.py new file mode 100644 index 000000000000..742127231c39 --- /dev/null +++ b/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/input.json.py @@ -0,0 +1,17 @@ +# You can use this to recreate input.json from Flash Player output if necessary. + +import re + +first = True +with open('output.txt', 'rt') as f: + print('[') + for line in f: + if m := re.match('^_root ([\d.]+) ([\d.]+)', line): + x, y = m.groups() + x = float(x) + y = float(y) + if not first: + print(',') + print(f' {{"type": "MouseMove", "pos": [{int(2*x)}, {int(2*y)}]}}, {{"type": "Wait"}}', end='') + first = False + print('\n]') diff --git a/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/output.txt b/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/output.txt new file mode 100644 index 000000000000..3401a348e0c9 --- /dev/null +++ b/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/output.txt @@ -0,0 +1,261 @@ +_root 213 311.5 +id 213 311.5 +zs 21.3 31.15 +ip 86 102.5 +fp 87.5 -8.5 +s42fp -360.7 403.55 +s133fp -113.55 30.45 +s133fpr15 -75.3 214.4 + +_root 68.5 244 +id 68.5 244 +zs 6.85 24.4 +ip -58.5 35 +fp -57 -76 +s42fp -704.75 242.85 +s133fp -222.2 -20.3 +s133fpr15 -193.35 193.5 + +_root 26 228.5 +id 26 228.5 +zs 2.6 22.85 +ip -101 19.5 +fp -99.5 -91.5 +s42fp -805.95 205.95 +s133fp -254.15 -31.95 +s133fpr15 -227.25 190.5 + +_root 12.5 219 +id 12.5 219 +zs 1.25 21.9 +ip -114.5 10 +fp -113 -101 +s42fp -838.1 183.35 +s133fp -264.3 -39.1 +s133fpr15 -238.9 186.2 + +_root 11 214 +id 11 214 +zs 1.1 21.4 +ip -116 5 +fp -114.5 -106 +s42fp -841.65 171.45 +s133fp -265.45 -42.85 +s133fpr15 -240.95 182.9 + +_root 17 208.5 +id 17 208.5 +zs 1.7 20.85 +ip -110 -0.5 +fp -108.5 -111.5 +s42fp -827.35 158.35 +s133fp -260.9 -47 +s133fpr15 -237.7 177.7 + +_root 24.5 205.5 +id 24.5 205.5 +zs 2.45 20.55 +ip -102.5 -3.5 +fp -101 -114.5 +s42fp -809.5 151.2 +s133fp -255.3 -49.25 +s133fpr15 -232.8 174.1 + +_root 41 203 +id 41 203 +zs 4.1 20.3 +ip -86 -6 +fp -84.5 -117 +s42fp -770.25 145.25 +s133fp -242.85 -51.1 +s133fpr15 -221.3 169.05 + +_root 49 202.5 +id 49 202.5 +zs 4.9 20.25 +ip -78 -6.5 +fp -76.5 -117.5 +s42fp -751.2 144.05 +s133fp -236.85 -51.5 +s133fpr15 -215.6 167.15 + +_root 49.5 202.5 +id 49.5 202.5 +zs 4.95 20.25 +ip -77.5 -6.5 +fp -76 -117.5 +s42fp -750 144.05 +s133fp -236.5 -51.5 +s133fpr15 -215.25 167.05 + +_root 107 187.5 +id 107 187.5 +zs 10.7 18.75 +ip -20 -21.5 +fp -18.5 -132.5 +s42fp -613.1 108.35 +s133fp -193.25 -62.75 +s133fpr15 -176.4 144.95 + +_root 177 183 +id 177 183 +zs 17.7 18.3 +ip 50 -26 +fp 51.5 -137 +s42fp -446.4 97.6 +s133fp -140.6 -66.15 +s133fpr15 -126.45 128.05 + +_root 251.5 216 +id 251.5 216 +zs 25.15 21.6 +ip 124.5 7 +fp 126 -104 +s42fp -269.05 176.2 +s133fp -84.6 -41.35 +s133fpr15 -65.9 137.55 + +_root 256.5 251 +id 256.5 251 +zs 25.65 25.1 +ip 129.5 42 +fp 131 -69 +s42fp -257.15 259.5 +s133fp -80.85 -15.05 +s133fpr15 -55.45 162 + +_root 186 283 +id 186 283 +zs 18.6 28.3 +ip 59 74 +fp 60.5 -37 +s42fp -425 335.7 +s133fp -133.85 9.05 +s133fpr15 -100.45 198.95 + +_root 130.5 251.5 +id 130.5 251.5 +zs 13.05 25.15 +ip 3.5 42.5 +fp 5 -68.5 +s42fp -557.15 260.7 +s133fp -175.6 -14.65 +s133fpr15 -146.9 186.85 + +_root 192.5 62.5 +id 192.5 62.5 +zs 19.25 6.25 +ip 65.5 -146.5 +fp 67 -257.5 +s42fp -409.5 -189.3 +s133fp -128.95 -156.75 +s133fpr15 -138.65 37.55 + +_root 263.5 8 +id 263.5 8 +zs 26.35 0.8 +ip 136.5 -201 +fp 138 -312 +s42fp -240.45 -319.05 +s133fp -75.6 -197.75 +s133fpr15 -97.65 -15.85 + +_root 411 37.5 +id 411 37.5 +zs 41.1 3.75 +ip 284 -171.5 +fp 285.5 -282.5 +s42fp 110.75 -248.8 +s133fp 35.35 -175.55 +s133fpr15 15.2 -23.15 + +_root 425.5 115.5 +id 425.5 115.5 +zs 42.55 11.55 +ip 298.5 -93.5 +fp 300 -204.5 +s42fp 145.25 -63.1 +s133fp 46.25 -116.9 +s133fpr15 40.9 30.7 + +_root 331 197.5 +id 331 197.5 +zs 33.1 19.75 +ip 204 -11.5 +fp 205.5 -122.5 +s42fp -79.75 132.15 +s133fp -24.85 -55.25 +s133fpr15 -11.75 108.65 + +_root 254 202.5 +id 254 202.5 +zs 25.4 20.25 +ip 127 -6.5 +fp 128.5 -117.5 +s42fp -263.1 144.05 +s133fp -82.7 -51.5 +s133fpr15 -66.7 127.25 + +_root 220.5 135.5 +id 220.5 135.5 +zs 22.05 13.55 +ip 93.5 -73.5 +fp 95 -184.5 +s42fp -342.85 -15.5 +s133fp -107.9 -101.85 +s133fpr15 -104.1 85.1 + +_root 250 114 +id 250 114 +zs 25 11.4 +ip 123 -95 +fp 124.5 -206 +s42fp -272.6 -66.65 +s133fp -85.75 -118.05 +s133fpr15 -86.85 63.75 + +_root 370 155 +id 370 155 +zs 37 15.5 +ip 243 -54 +fp 244.5 -165 +s42fp 13.1 30.95 +s133fp 4.5 -87.2 +s133fpr15 8.3 70.15 + +_root 502.5 237 +id 502.5 237 +zs 50.25 23.7 +ip 375.5 28 +fp 377 -83 +s42fp 328.6 226.2 +s133fp 104.1 -25.55 +s133fpr15 120.45 103.95 + +_root 609.5 313 +id 609.5 313 +zs 60.95 31.3 +ip 482.5 104 +fp 484 -7 +s42fp 583.35 407.15 +s133fp 184.6 31.6 +s133fpr15 212.95 138.3 + +_root 637.5 337 +id 637.5 337 +zs 63.75 33.7 +ip 510.5 128 +fp 512 17 +s42fp 650 464.3 +s133fp 205.65 49.65 +s133fpr15 238 150.3 + +_root 640 339 +id 640 339 +zs 64 33.9 +ip 513 130 +fp 514.5 19 +s42fp 655.95 469.05 +s133fp 207.5 51.15 +s133fpr15 240.2 151.25 + diff --git a/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/test.as b/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/test.as new file mode 100644 index 000000000000..cdf420d3eaa3 --- /dev/null +++ b/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/test.as @@ -0,0 +1,35 @@ +/* + Test clip names: + id: Identity transform + zs: Zero-scaled + ip: Integer position, 1:1 scale + fp: Fractional position, 1:1 scale + s42fp: Scaled to 42%, fractional position + s133fp: Scaled to 133%, fractional position + s133fpr15: Scaled to 133%, fractional position, rotated 15° +*/ + +zs._xscale = zs._yscale = 0 + +var oldX, oldY; + +function dump() { + + if (_xmouse == oldX && _ymouse == oldY) + return; + + oldX = _xmouse; + oldY = _ymouse; + + trace('_root'+" "+_xmouse+" "+ _ymouse); + var clips = [id, zs, ip, fp, s42fp, s133fp, s133fpr15]; + for (var i=0; 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 literal 0 HcmV?d00001 diff --git a/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/test.swf b/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/test.swf new file mode 100644 index 0000000000000000000000000000000000000000..7a2778406df3d23e08e28b504d44f9f4ff62b969 GIT binary patch literal 1029 zcmV+g1p50!S5pu72LJ$goTXLWZ`)K9KXE?0uB=^GGNG)qGN}(piNDg$vD!dByGk^j zN|6Ras$Bb~wPyPoUuQ`xA>aj&kfuIGLI`O*01rs}6Q~eR`~kdAyzs=|5bkxHHeI_h zAWF{l@0|1d`P_4lZu*ei1-SME;ARXObF%>O$$TscuFlP{^#s_;B>LJKwMuOf@GQjnyAT-uQ(ZCTdj@&^;NQPPODi2~i!1N|IN z5qCsMlge62j(F$NA|^Ji&f!1t&XV|5;knkmax*tKU*1l~5ysgh*hZa~XOo>n4+-0d z;I3~Vntmrbj?GPN!zF?48fc?Yp^l0P@ABR)wXT09b6zgg&RIMs2YC~Bm)m253 z%eArUB@(B#BHwz1%$ARx@Dx1VCx~@wEkAA*Yg5=?&AQm8hN#|Mu2t_!%8NF3fjU+* zFK*~n)y&C_j9mEtwCRNs{OQ4*_31y4v}v49sMq!F@Xj#}0ojPXjnFBT!Yjfwv<~(i zJ*eoOXIqBO1ciQq9AM*NPk)389d=!;3TKIzmLx>CUWJD`HyjS%ivJY@`0^pl17O>H zz|8xw>th`7zypyKrQ`Y1a`XhGBvVVjmIp@!EE8*@}I-M)jngsz99)$BSR zbrM6jnRB#0zB=*)B;KUA@*oWvNZ+6^Kj0t}%Wb@K{acO}lpRGD#t|;J!2(Gb#2{W7 zOwrsi@fJheI5|Y|acrG&6YCRV>r2d)%rTn^Z924>&`yQ+N@%BZgCwNWlvMkIzBEgP zQxJWqgUb$5kl+&W%+>ZiR$BuG2}r~fT$@H?Sq5U6nRZk`h+b>2Pr_^Mu$lySKh*o0 zgP(>h4olz60d|{ifc%!vdJ8ZMgXy#PXJ*&3QKbpU%&~PEGS?^TgDoZ<+Dxn(_OJ>k zaGOSB@Zrsm=RZ5959~9$fWJFF;(z_Y({9(lKZfBH`={h+^z&3I#**Hq_#`z$?Gh~% za&5vtp>q(q;>@+RcjZ%yxu%#aNnLC}BA8~7j?78wbq1#>{B7sxy~W2L{l5Jyny!-+ zJF%r{8vEtx!qXdn-umi|(Zrpk7FlG5vF<(FR>cR4KmI{}-g72KlvVgQjUXu$RKx|m literal 0 HcmV?d00001 diff --git a/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/test.toml b/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/test.toml new file mode 100644 index 000000000000..af9a8e73f53b --- /dev/null +++ b/tests/tests/swfs/avm1/mouse_pos_with_scale_factor/test.toml @@ -0,0 +1,5 @@ +num_frames = 30 + +[player_options] +viewport_dimensions = { width = 1100, height = 800, scale_factor = 2.0 } +with_renderer = { optional = true, sample_count = 1 } \ No newline at end of file