avm2: Fire right & middle click events

This commit is contained in:
Kamil Jarosz 2024-07-07 01:04:09 +02:00 committed by TÖRÖK Attila
parent c7f1f33843
commit 57e90d947b
1 changed files with 35 additions and 19 deletions

View File

@ -281,30 +281,35 @@ pub trait TInteractiveObject<'gc>:
let mut activation = Avm2Activation::from_nothing(context.reborrow()); let mut activation = Avm2Activation::from_nothing(context.reborrow());
match event { match event {
ClipEvent::Press { .. } => { ClipEvent::Press { .. } | ClipEvent::RightPress | ClipEvent::MiddlePress => {
let avm2_event = Avm2EventObject::mouse_event( let button = match event {
ClipEvent::Press { .. } => MouseButton::Left,
ClipEvent::RightPress => MouseButton::Right,
ClipEvent::MiddlePress => MouseButton::Middle,
_ => unreachable!(),
};
let avm2_event = Avm2EventObject::mouse_event_down(
&mut activation, &mut activation,
"mouseDown",
self.as_displayobject(), self.as_displayobject(),
None, button,
0,
true,
MouseButton::Left,
); );
Avm2::dispatch_event(&mut activation.context, avm2_event, target); Avm2::dispatch_event(&mut activation.context, avm2_event, target);
ClipEventResult::Handled ClipEventResult::Handled
} }
ClipEvent::MouseUpInside => { ClipEvent::MouseUpInside
let avm2_event = Avm2EventObject::mouse_event( | ClipEvent::RightMouseUpInside
| ClipEvent::MiddleMouseUpInside => {
let avm2_event = Avm2EventObject::mouse_event_up(
&mut activation, &mut activation,
"mouseUp",
self.as_displayobject(), self.as_displayobject(),
None, match event {
0, ClipEvent::MouseUpInside => MouseButton::Left,
true, ClipEvent::RightMouseUpInside => MouseButton::Right,
MouseButton::Left, ClipEvent::MiddleMouseUpInside => MouseButton::Middle,
_ => unreachable!(),
},
); );
Avm2::dispatch_event(&mut activation.context, avm2_event, target); Avm2::dispatch_event(&mut activation.context, avm2_event, target);
@ -340,13 +345,9 @@ pub trait TInteractiveObject<'gc>:
self.raw_interactive_mut(context.gc_context).last_click = None; self.raw_interactive_mut(context.gc_context).last_click = None;
} else { } else {
let avm2_event = Avm2EventObject::mouse_event( let avm2_event = Avm2EventObject::mouse_event_click(
&mut activation, &mut activation,
"click",
self.as_displayobject(), self.as_displayobject(),
None,
0,
true,
MouseButton::Left, MouseButton::Left,
); );
@ -357,6 +358,21 @@ pub trait TInteractiveObject<'gc>:
ClipEventResult::Handled ClipEventResult::Handled
} }
ClipEvent::RightRelease | ClipEvent::MiddleRelease => {
let avm2_event = Avm2EventObject::mouse_event_click(
&mut activation,
self.as_displayobject(),
match event {
ClipEvent::RightRelease => MouseButton::Right,
ClipEvent::MiddleRelease => MouseButton::Middle,
_ => unreachable!(),
},
);
Avm2::dispatch_event(&mut activation.context, avm2_event, target);
ClipEventResult::Handled
}
ClipEvent::ReleaseOutside => { ClipEvent::ReleaseOutside => {
let avm2_event = Avm2EventObject::mouse_event( let avm2_event = Avm2EventObject::mouse_event(
&mut activation, &mut activation,