avm2: Allow `Stage` to receive button presses

This commit is contained in:
David Wendt 2021-12-05 00:19:55 -05:00 committed by Mike Welsh
parent 9d4b222b29
commit 35f020f482
2 changed files with 10 additions and 4 deletions

View File

@ -717,11 +717,11 @@ impl<'gc> TInteractiveObject<'gc> for Stage<'gc> {
fn event_dispatch(
self,
_context: &mut UpdateContext<'_, 'gc, '_>,
_event: ClipEvent,
context: &mut UpdateContext<'_, 'gc, '_>,
event: ClipEvent,
) -> ClipEventResult {
//NOTE: Stage does not appear to fire common InteractiveObject events
//within AVM2.
self.event_dispatch_to_avm2(context, event);
ClipEventResult::Handled
}
}

View File

@ -1172,6 +1172,8 @@ impl Player {
if let Some(over_object) = context.mouse_over_object {
events.push((over_object, ClipEvent::Press));
context.mouse_down_object = context.mouse_over_object;
} else {
events.push((context.stage.into(), ClipEvent::Press));
}
} else {
let released_inside = DisplayObject::option_ptr_eq(
@ -1182,11 +1184,15 @@ impl Player {
// Released inside the clicked object.
if let Some(down_object) = context.mouse_down_object {
events.push((down_object, ClipEvent::Release));
} else {
events.push((context.stage.into(), ClipEvent::Release));
}
} else {
// Released outside the clicked object.
if let Some(down_object) = context.mouse_down_object {
events.push((down_object, ClipEvent::ReleaseOutside));
} else {
events.push((context.stage.into(), ClipEvent::ReleaseOutside));
}
// The new object is rolled over immediately.
if let Some(over_object) = context.mouse_over_object {