From 6b76af2d4048b03cd303b534629129e8f5c07351 Mon Sep 17 00:00:00 2001 From: Nathan Adams Date: Tue, 20 Jun 2023 22:55:10 +0200 Subject: [PATCH] core: Fix avm2button bounding box --- core/src/display_object/avm2_button.rs | 3 ++- tests/tests/swfs/avm2/button_bounds/Test.as | 14 ++++++++++++++ tests/tests/swfs/avm2/button_bounds/output.txt | 1 + tests/tests/swfs/avm2/button_bounds/test.fla | Bin 0 -> 5276 bytes tests/tests/swfs/avm2/button_bounds/test.swf | Bin 0 -> 1719 bytes tests/tests/swfs/avm2/button_bounds/test.toml | 5 +++++ 6 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 tests/tests/swfs/avm2/button_bounds/Test.as create mode 100644 tests/tests/swfs/avm2/button_bounds/output.txt create mode 100644 tests/tests/swfs/avm2/button_bounds/test.fla create mode 100644 tests/tests/swfs/avm2/button_bounds/test.swf create mode 100644 tests/tests/swfs/avm2/button_bounds/test.toml diff --git a/core/src/display_object/avm2_button.rs b/core/src/display_object/avm2_button.rs index 6f1d1db5a..381866d01 100644 --- a/core/src/display_object/avm2_button.rs +++ b/core/src/display_object/avm2_button.rs @@ -617,7 +617,8 @@ impl<'gc> TDisplayObject<'gc> for Avm2Button<'gc> { // Add the bounds of the child, dictated by current state let state = self.0.read().state; if let Some(child) = self.get_state_child(state.into()) { - let child_bounds = child.bounds_with_transform(matrix); + let matrix = *matrix * *child.base().matrix(); + let child_bounds = child.bounds_with_transform(&matrix); bounds = bounds.union(&child_bounds); } diff --git a/tests/tests/swfs/avm2/button_bounds/Test.as b/tests/tests/swfs/avm2/button_bounds/Test.as new file mode 100644 index 000000000..89c1b350f --- /dev/null +++ b/tests/tests/swfs/avm2/button_bounds/Test.as @@ -0,0 +1,14 @@ +package { + + import flash.display.MovieClip; + + + public class Test extends MovieClip { + + + public function Test() { + trace(button.getBounds(this)); + } + } + +} diff --git a/tests/tests/swfs/avm2/button_bounds/output.txt b/tests/tests/swfs/avm2/button_bounds/output.txt new file mode 100644 index 000000000..83bf1d168 --- /dev/null +++ b/tests/tests/swfs/avm2/button_bounds/output.txt @@ -0,0 +1 @@ +(x=188.8, y=112.6, w=91.64999999999998, h=21.200000000000017) diff --git a/tests/tests/swfs/avm2/button_bounds/test.fla b/tests/tests/swfs/avm2/button_bounds/test.fla new file mode 100644 index 0000000000000000000000000000000000000000..5b1ebd71a3361f319f3bc8c688f956d5c1528983 GIT binary patch literal 5276 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 No`Pn4^Kay$WOK@^ZW{mq literal 0 HcmV?d00001 diff --git a/tests/tests/swfs/avm2/button_bounds/test.toml b/tests/tests/swfs/avm2/button_bounds/test.toml new file mode 100644 index 000000000..f47277724 --- /dev/null +++ b/tests/tests/swfs/avm2/button_bounds/test.toml @@ -0,0 +1,5 @@ +num_frames = 1 + +[approximations] +number_patterns = ["\\(x=(.+?), y=(.+?), w=(.+?), h=(.+?)\\)"] +epsilon = 0.01