Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 8 additions & 9 deletions core/src/display_object/loader_display.rs
Original file line number Diff line number Diff line change
Expand Up @@ -178,22 +178,21 @@ impl<'gc> TInteractiveObject<'gc> for LoaderDisplay<'gc> {
options.set(HitTestOptions::SKIP_MASK, self.maskee().is_none());

if self.visible() {
// We have at most one child
// A loader has at most one child.
if let Some(child) = self.iter_render_list().next() {
if let Some(int) = child.as_interactive() {
if int.as_displayobject().movie().is_action_script_3() {
return int
.mouse_pick_avm2(context, point, require_button_mode)
.combine_with_parent(self.into());
} else {
let avm1_result = int.mouse_pick_avm1(context, point, require_button_mode);
if let Some(result) = avm1_result {
return Avm2MousePick::Hit(result);
} else {
return Avm2MousePick::Miss;
}
} else if let Some(result) =
int.mouse_pick_avm1(context, point, require_button_mode)
{
return Avm2MousePick::Hit(result).combine_with_parent(self.into());
}
} else if child.hit_test_shape(context, point, options) {
}

if child.hit_test_shape(context, point, options) {
Comment thread
ChrisCPI marked this conversation as resolved.
if self.mouse_enabled() {
return Avm2MousePick::Hit(self.into());
} else {
Expand Down
4 changes: 0 additions & 4 deletions core/src/focus_tracker.rs
Original file line number Diff line number Diff line change
Expand Up @@ -262,10 +262,6 @@ impl<'gc> FocusTracker<'gc> {
.or_else(|| {
// The current focus as the stage is only used
// if the interactive object is AVM2.
//
// TODO: Clicking a non-interactive AVM1 object should
// fire the focus event with the related object
// as the root LoaderDisplay.
if related_object
.is_none_or(|ro| ro.as_displayobject().movie().is_action_script_3())
{
Expand Down
50 changes: 50 additions & 0 deletions tests/tests/swfs/avm2/mouse_pick_loader_avm1/Test.as
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package {

import flash.display.MovieClip;
import flash.display.Loader;
import flash.events.Event;
import flash.events.FocusEvent;
import flash.net.URLRequest;
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;

public class Test extends MovieClip {

var avm1Loader:Loader = new Loader();

var avm1Container:Sprite = new Sprite();

public function Test() {
super();

avm1Container.name = "avm1Container";
addChild(avm1Container);

avm1Loader.contentLoaderInfo.addEventListener("complete", onAVM1Loaded);
avm1Loader.load(new URLRequest("avm1.swf"));

stage.addEventListener("click", function(e) {
trace("Clicked on:", e.target, "(" + e.target.name + ")");
});

stage.addEventListener("keyDown", onKeyPress);
}

public function onKeyPress(e:KeyboardEvent) {
if (e.keyCode == Keyboard.SHIFT) {
avm1Container.mouseEnabled = !avm1Container.mouseEnabled;
trace("avm1Container.mouseEnabled is now", avm1Container.mouseEnabled);
} else if (e.keyCode == Keyboard.SPACE) {
avm1Container.mouseChildren = !avm1Container.mouseChildren;
trace("avm1Container.mouseChildren is now", avm1Container.mouseChildren);
}
}

public function onAVM1Loaded(e:Event):void {
avm1Container.addChild(avm1Loader);
}

}

}
Binary file not shown.
Binary file not shown.
51 changes: 51 additions & 0 deletions tests/tests/swfs/avm2/mouse_pick_loader_avm1/input.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
[
{ "type": "Wait" },
{ "type": "Wait" },

{ "type": "MouseDown", "pos": [90, 190], "btn": "Left" }, { "type": "MouseUp", "pos": [90, 190], "btn": "Left" },
{ "type": "MouseDown", "pos": [155, 175], "btn": "Left" }, { "type": "MouseUp", "pos": [155, 175], "btn": "Left" },
{ "type": "MouseDown", "pos": [160, 140], "btn": "Left" }, { "type": "MouseUp", "pos": [160, 140], "btn": "Left" },
{ "type": "MouseDown", "pos": [140, 230], "btn": "Left" }, { "type": "MouseUp", "pos": [140, 230], "btn": "Left" },
{ "type": "MouseDown", "pos": [290, 90], "btn": "Left" }, { "type": "MouseUp", "pos": [290, 90], "btn": "Left" },
{ "type": "MouseDown", "pos": [350, 125], "btn": "Left" }, { "type": "MouseUp", "pos": [350, 125], "btn": "Left" },
{ "type": "MouseDown", "pos": [275, 200], "btn": "Left" }, { "type": "MouseUp", "pos": [275, 200], "btn": "Left" },
{ "type": "MouseDown", "pos": [275, 240], "btn": "Left" }, { "type": "MouseUp", "pos": [275, 240], "btn": "Left" },
{ "type": "MouseDown", "pos": [130, 200], "btn": "Left" }, { "type": "MouseUp", "pos": [130, 200], "btn": "Left" },

{ "type": "KeyDown", "key": "Space" },

{ "type": "MouseDown", "pos": [90, 190], "btn": "Left" }, { "type": "MouseUp", "pos": [90, 190], "btn": "Left" },
{ "type": "MouseDown", "pos": [155, 175], "btn": "Left" }, { "type": "MouseUp", "pos": [155, 175], "btn": "Left" },
{ "type": "MouseDown", "pos": [160, 140], "btn": "Left" }, { "type": "MouseUp", "pos": [160, 140], "btn": "Left" },
{ "type": "MouseDown", "pos": [140, 230], "btn": "Left" }, { "type": "MouseUp", "pos": [140, 230], "btn": "Left" },
{ "type": "MouseDown", "pos": [290, 90], "btn": "Left" }, { "type": "MouseUp", "pos": [290, 90], "btn": "Left" },
{ "type": "MouseDown", "pos": [350, 125], "btn": "Left" }, { "type": "MouseUp", "pos": [350, 125], "btn": "Left" },
{ "type": "MouseDown", "pos": [275, 200], "btn": "Left" }, { "type": "MouseUp", "pos": [275, 200], "btn": "Left" },
{ "type": "MouseDown", "pos": [275, 240], "btn": "Left" }, { "type": "MouseUp", "pos": [275, 240], "btn": "Left" },
{ "type": "MouseDown", "pos": [130, 200], "btn": "Left" }, { "type": "MouseUp", "pos": [130, 200], "btn": "Left" },

{ "type": "KeyDown", "key": "Space" },
{ "type": "KeyDown", "key": "LeftShift" },

{ "type": "MouseDown", "pos": [90, 190], "btn": "Left" }, { "type": "MouseUp", "pos": [90, 190], "btn": "Left" },
{ "type": "MouseDown", "pos": [155, 175], "btn": "Left" }, { "type": "MouseUp", "pos": [155, 175], "btn": "Left" },
{ "type": "MouseDown", "pos": [160, 140], "btn": "Left" }, { "type": "MouseUp", "pos": [160, 140], "btn": "Left" },
{ "type": "MouseDown", "pos": [140, 230], "btn": "Left" }, { "type": "MouseUp", "pos": [140, 230], "btn": "Left" },
{ "type": "MouseDown", "pos": [290, 90], "btn": "Left" }, { "type": "MouseUp", "pos": [290, 90], "btn": "Left" },
{ "type": "MouseDown", "pos": [350, 125], "btn": "Left" }, { "type": "MouseUp", "pos": [350, 125], "btn": "Left" },
{ "type": "MouseDown", "pos": [275, 200], "btn": "Left" }, { "type": "MouseUp", "pos": [275, 200], "btn": "Left" },
{ "type": "MouseDown", "pos": [275, 240], "btn": "Left" }, { "type": "MouseUp", "pos": [275, 240], "btn": "Left" },
{ "type": "MouseDown", "pos": [130, 200], "btn": "Left" }, { "type": "MouseUp", "pos": [130, 200], "btn": "Left" },

{ "type": "KeyDown", "key": "Space" },

{ "type": "MouseDown", "pos": [90, 190], "btn": "Left" }, { "type": "MouseUp", "pos": [90, 190], "btn": "Left" },
{ "type": "MouseDown", "pos": [155, 175], "btn": "Left" }, { "type": "MouseUp", "pos": [155, 175], "btn": "Left" },
{ "type": "MouseDown", "pos": [160, 140], "btn": "Left" }, { "type": "MouseUp", "pos": [160, 140], "btn": "Left" },
{ "type": "MouseDown", "pos": [140, 230], "btn": "Left" }, { "type": "MouseUp", "pos": [140, 230], "btn": "Left" },
{ "type": "MouseDown", "pos": [290, 90], "btn": "Left" }, { "type": "MouseUp", "pos": [290, 90], "btn": "Left" },
{ "type": "MouseDown", "pos": [350, 125], "btn": "Left" }, { "type": "MouseUp", "pos": [350, 125], "btn": "Left" },
{ "type": "MouseDown", "pos": [275, 200], "btn": "Left" }, { "type": "MouseUp", "pos": [275, 200], "btn": "Left" },
{ "type": "MouseDown", "pos": [275, 240], "btn": "Left" }, { "type": "MouseUp", "pos": [275, 240], "btn": "Left" },
{ "type": "MouseDown", "pos": [130, 200], "btn": "Left" }, { "type": "MouseUp", "pos": [130, 200], "btn": "Left" }
]
42 changes: 42 additions & 0 deletions tests/tests/swfs/avm2/mouse_pick_loader_avm1/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
Clicked on: [object Loader] (instance2)
Clicked on: [object Loader] (instance2)
Clicked on: [object Loader] (instance2)
input_txt.onSetFocus
input_txt.onKillFocus
Clicked on: [object MovieClip] (rect_mc)
Clicked on: [object Stage] (null)
avm1 button clicked
avm1 button clicked
Clicked on: [object Loader] (instance2)
avm1Container.mouseChildren is now false
Clicked on: [object Sprite] (avm1Container)
Clicked on: [object Sprite] (avm1Container)
Clicked on: [object Sprite] (avm1Container)
Clicked on: [object Sprite] (avm1Container)
Clicked on: [object MovieClip] (rect_mc)
Clicked on: [object Stage] (null)
Clicked on: [object Sprite] (avm1Container)
Clicked on: [object Sprite] (avm1Container)
Clicked on: [object Sprite] (avm1Container)
avm1Container.mouseChildren is now true
avm1Container.mouseEnabled is now false
Clicked on: [object Loader] (instance2)
Clicked on: [object Loader] (instance2)
Clicked on: [object Loader] (instance2)
input_txt.onSetFocus
input_txt.onKillFocus
Clicked on: [object MovieClip] (rect_mc)
Clicked on: [object Stage] (null)
avm1 button clicked
avm1 button clicked
Clicked on: [object Loader] (instance2)
avm1Container.mouseChildren is now false
Clicked on: [object Stage] (null)
Clicked on: [object MovieClip] (rect_mc)
Clicked on: [object MovieClip] (rect_mc)
Clicked on: [object MovieClip] (rect_mc)
Clicked on: [object MovieClip] (rect_mc)
Clicked on: [object Stage] (null)
Clicked on: [object MovieClip] (rect_mc)
Clicked on: [object MovieClip] (rect_mc)
Clicked on: [object MovieClip] (rect_mc)
Binary file not shown.
Binary file not shown.
1 change: 1 addition & 0 deletions tests/tests/swfs/avm2/mouse_pick_loader_avm1/test.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
num_ticks = 3
Loading