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 000000000..5b1ebd71a Binary files /dev/null and b/tests/tests/swfs/avm2/button_bounds/test.fla differ diff --git a/tests/tests/swfs/avm2/button_bounds/test.swf b/tests/tests/swfs/avm2/button_bounds/test.swf new file mode 100644 index 000000000..33c19cf78 Binary files /dev/null and b/tests/tests/swfs/avm2/button_bounds/test.swf differ 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