avm2: Prevent loader mouse pick from targeting direct child
Loaders have a similar behavior to the main stage - if a mouse pick would target their direct child (the root movieclip in the stage case, and the loaded MovieClip in the Loader case), the Stage/Loader is targeted instead.
This commit is contained in:
parent
60000d6930
commit
4d2b2893ae
|
@ -219,9 +219,19 @@ impl<'gc> TInteractiveObject<'gc> for LoaderDisplay<'gc> {
|
||||||
if let Some(child) = self.iter_render_list().next() {
|
if let Some(child) = self.iter_render_list().next() {
|
||||||
if let Some(int) = child.as_interactive() {
|
if let Some(int) = child.as_interactive() {
|
||||||
if int.as_displayobject().movie().is_action_script_3() {
|
if int.as_displayobject().movie().is_action_script_3() {
|
||||||
return int
|
let res = int
|
||||||
.mouse_pick_avm2(context, point, require_button_mode)
|
.mouse_pick_avm2(context, point, require_button_mode)
|
||||||
.combine_with_parent((*self).into());
|
.combine_with_parent((*self).into());
|
||||||
|
if let Avm2MousePick::Hit(target) = res {
|
||||||
|
if target.as_displayobject().as_ptr() == child.as_ptr() {
|
||||||
|
if self.mouse_enabled() {
|
||||||
|
return Avm2MousePick::Hit((*self).into());
|
||||||
|
} else {
|
||||||
|
return Avm2MousePick::PropagateToParent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
} else {
|
} else {
|
||||||
let avm1_result = int.mouse_pick_avm1(context, point, require_button_mode);
|
let avm1_result = int.mouse_pick_avm1(context, point, require_button_mode);
|
||||||
if let Some(result) = avm1_result {
|
if let Some(result) = avm1_result {
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package {
|
||||||
|
|
||||||
|
import flash.display.MovieClip;
|
||||||
|
|
||||||
|
|
||||||
|
public class Loadable extends MovieClip {
|
||||||
|
|
||||||
|
public var mouseDisabled:MovieClip;
|
||||||
|
|
||||||
|
|
||||||
|
public function Loadable() {
|
||||||
|
this.mouseDisabled.mouseEnabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
package {
|
||||||
|
|
||||||
|
import flash.display.MovieClip;
|
||||||
|
import flash.display.Shape;
|
||||||
|
import flash.geom.Rectangle;
|
||||||
|
import flash.net.URLRequest;
|
||||||
|
import flash.events.MouseEvent;
|
||||||
|
import flash.display.Loader;
|
||||||
|
import flash.display.Sprite;
|
||||||
|
|
||||||
|
|
||||||
|
public class Test extends MovieClip {
|
||||||
|
|
||||||
|
|
||||||
|
public function Test() {
|
||||||
|
var child = new Shape();
|
||||||
|
child.graphics.beginFill(0xFF0000);
|
||||||
|
child.graphics.drawRect(0, 0, 100, 100);
|
||||||
|
child.graphics.endFill();
|
||||||
|
this.addChild(child);
|
||||||
|
|
||||||
|
this.stage.addEventListener(MouseEvent.CLICK, function (e) {
|
||||||
|
trace("Clicked at: " + e.stageX + " " + e.stageY + " on: " + e.target + " (" + e.target.name + ")");
|
||||||
|
});
|
||||||
|
|
||||||
|
var loaderWrapper = new Sprite();
|
||||||
|
loaderWrapper.name = "LoaderWrapper";
|
||||||
|
|
||||||
|
var firstLoader = new Loader();
|
||||||
|
firstLoader.name = "firstLoader";
|
||||||
|
firstLoader.load(new URLRequest("loadable.swf"));
|
||||||
|
loaderWrapper.addChild(firstLoader);
|
||||||
|
|
||||||
|
var secondLoader = new Loader();
|
||||||
|
secondLoader.name = "secondLoader";
|
||||||
|
secondLoader.load(new URLRequest("loadable.swf"));
|
||||||
|
secondLoader.y = 150;
|
||||||
|
secondLoader.mouseEnabled = false;
|
||||||
|
loaderWrapper.addChild(secondLoader);
|
||||||
|
|
||||||
|
var thirdLoader = new Loader();
|
||||||
|
thirdLoader.name = "thirdLoader";
|
||||||
|
thirdLoader.load(new URLRequest("loadable.swf"));
|
||||||
|
thirdLoader.y = 300;
|
||||||
|
thirdLoader.mouseChildren = false;
|
||||||
|
loaderWrapper.addChild(thirdLoader);
|
||||||
|
|
||||||
|
var fourthLoader = new Loader();
|
||||||
|
fourthLoader.name = "fourthLoader";
|
||||||
|
fourthLoader.load(new URLRequest("loadable.swf"));
|
||||||
|
fourthLoader.y = 450;
|
||||||
|
fourthLoader.mouseEnabled = false;
|
||||||
|
fourthLoader.mouseChildren = false;
|
||||||
|
loaderWrapper.addChild(fourthLoader);
|
||||||
|
|
||||||
|
this.addChild(loaderWrapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [45, 47]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [45, 47],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [45, 47],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [140, 218]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [140, 218],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [140, 218],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [248.25, 217.25]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [248.25, 217.25],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [248.25, 217.25],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [358, 217]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [358, 217],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [358, 217],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [131, 370]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [131, 370],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [131, 370],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [255.25, 367.25]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [255.25, 367.25],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [255.25, 367.25],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [361, 370]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [361, 370],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [361, 370],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [148, 516]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [148, 516],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [148, 516],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [246, 516]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [246, 516],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [246, 516],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [351, 518]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [351, 518],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [351, 518],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [136, 660]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [136, 660],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [136, 660],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [267, 663]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [267, 663],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [267, 663],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseMove",
|
||||||
|
"pos": [352, 673]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseDown",
|
||||||
|
"pos": [352, 673],
|
||||||
|
"btn": "Left"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "MouseUp",
|
||||||
|
"pos": [352, 673],
|
||||||
|
"btn": "Left"
|
||||||
|
}
|
||||||
|
]
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,13 @@
|
||||||
|
Clicked at: 45 47 on: [object Stage] (null)
|
||||||
|
Clicked at: 140 218 on: [object Loader] (firstLoader)
|
||||||
|
Clicked at: 248.25 217.25 on: [object MovieClip] (mouseChild)
|
||||||
|
Clicked at: 358 217 on: [object Loader] (firstLoader)
|
||||||
|
Clicked at: 131 370 on: [object Sprite] (LoaderWrapper)
|
||||||
|
Clicked at: 255.25 367.25 on: [object MovieClip] (mouseChild)
|
||||||
|
Clicked at: 361 370 on: [object Sprite] (LoaderWrapper)
|
||||||
|
Clicked at: 148 516 on: [object Loader] (thirdLoader)
|
||||||
|
Clicked at: 246 516 on: [object Loader] (thirdLoader)
|
||||||
|
Clicked at: 351 518 on: [object Loader] (thirdLoader)
|
||||||
|
Clicked at: 136 660 on: [object Sprite] (LoaderWrapper)
|
||||||
|
Clicked at: 267 663 on: [object Sprite] (LoaderWrapper)
|
||||||
|
Clicked at: 352 673 on: [object Sprite] (LoaderWrapper)
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
num_ticks = 1
|
Loading…
Reference in New Issue