core: Add Player::mouse_pressed_object

This commit is contained in:
Mike Welsh 2021-06-15 11:27:55 -07:00
parent 6146502b1a
commit b0143ff918
4 changed files with 18 additions and 2 deletions

View File

@ -788,6 +788,7 @@ mod tests {
log: &mut NullLogBackend::new(), log: &mut NullLogBackend::new(),
video: &mut NullVideoBackend::new(), video: &mut NullVideoBackend::new(),
mouse_hovered_object: None, mouse_hovered_object: None,
mouse_pressed_object: None,
mouse_position: &(Twips::ZERO, Twips::ZERO), mouse_position: &(Twips::ZERO, Twips::ZERO),
drag_object: &mut None, drag_object: &mut None,
player: None, player: None,

View File

@ -60,6 +60,7 @@ where
log: &mut NullLogBackend::new(), log: &mut NullLogBackend::new(),
video: &mut NullVideoBackend::new(), video: &mut NullVideoBackend::new(),
mouse_hovered_object: None, mouse_hovered_object: None,
mouse_pressed_object: None,
mouse_position: &(Twips::ZERO, Twips::ZERO), mouse_position: &(Twips::ZERO, Twips::ZERO),
drag_object: &mut None, drag_object: &mut None,
player: None, player: None,

View File

@ -95,6 +95,9 @@ pub struct UpdateContext<'a, 'gc, 'gc_context> {
/// The display object that the mouse is currently hovering over. /// The display object that the mouse is currently hovering over.
pub mouse_hovered_object: Option<DisplayObject<'gc>>, pub mouse_hovered_object: Option<DisplayObject<'gc>>,
/// If the mouse is down, the display object that the mouse is currently pressing.
pub mouse_pressed_object: Option<DisplayObject<'gc>>,
/// The location of the mouse when it was last over the player. /// The location of the mouse when it was last over the player.
pub mouse_position: &'a (Twips, Twips), pub mouse_position: &'a (Twips, Twips),
@ -266,6 +269,7 @@ impl<'a, 'gc, 'gc_context> UpdateContext<'a, 'gc, 'gc_context> {
rng: self.rng, rng: self.rng,
stage: self.stage, stage: self.stage,
mouse_hovered_object: self.mouse_hovered_object, mouse_hovered_object: self.mouse_hovered_object,
mouse_pressed_object: self.mouse_pressed_object,
mouse_position: self.mouse_position, mouse_position: self.mouse_position,
drag_object: self.drag_object, drag_object: self.drag_object,
player: self.player.clone(), player: self.player.clone(),

View File

@ -59,7 +59,11 @@ struct GcRootData<'gc> {
/// accessed in AVM2. /// accessed in AVM2.
stage: Stage<'gc>, stage: Stage<'gc>,
mouse_hovered_object: Option<DisplayObject<'gc>>, // TODO: Remove GcCell wrapped inside GcCell. /// The display object that the mouse is currently hovering over.
mouse_hovered_object: Option<DisplayObject<'gc>>,
/// If the mouse is down, the display object that the mouse is currently pressing.
mouse_pressed_object: Option<DisplayObject<'gc>>,
/// The object being dragged via a `startDrag` action. /// The object being dragged via a `startDrag` action.
drag_object: Option<DragObject<'gc>>, drag_object: Option<DragObject<'gc>>,
@ -265,6 +269,7 @@ impl Player {
library: Library::empty(gc_context), library: Library::empty(gc_context),
stage: Stage::empty(gc_context, movie_width, movie_height), stage: Stage::empty(gc_context, movie_width, movie_height),
mouse_hovered_object: None, mouse_hovered_object: None,
mouse_pressed_object: None,
drag_object: None, drag_object: None,
avm1: Avm1::new(gc_context, NEWEST_PLAYER_VERSION), avm1: Avm1::new(gc_context, NEWEST_PLAYER_VERSION),
avm2: Avm2::new(gc_context), avm2: Avm2::new(gc_context),
@ -1354,6 +1359,7 @@ impl Player {
self.gc_arena.mutate(|gc_context, gc_root| { self.gc_arena.mutate(|gc_context, gc_root| {
let mut root_data = gc_root.0.write(gc_context); let mut root_data = gc_root.0.write(gc_context);
let mouse_hovered_object = root_data.mouse_hovered_object; let mouse_hovered_object = root_data.mouse_hovered_object;
let mouse_pressed_object = root_data.mouse_pressed_object;
let focus_tracker = root_data.focus_tracker; let focus_tracker = root_data.focus_tracker;
let ( let (
stage, stage,
@ -1384,6 +1390,7 @@ impl Player {
gc_context, gc_context,
stage, stage,
mouse_hovered_object, mouse_hovered_object,
mouse_pressed_object,
mouse_position, mouse_position,
drag_object, drag_object,
player, player,
@ -1430,7 +1437,10 @@ impl Player {
.map(|clip| clip.current_frame()); .map(|clip| clip.current_frame());
// Hovered object may have been updated; copy it back to the GC root. // Hovered object may have been updated; copy it back to the GC root.
root_data.mouse_hovered_object = update_context.mouse_hovered_object; let mouse_hovered_object = update_context.mouse_hovered_object;
let mouse_pressed_object = update_context.mouse_pressed_object;
root_data.mouse_hovered_object = mouse_hovered_object;
root_data.mouse_pressed_object = mouse_pressed_object;
ret ret
}) })