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());
match event {
ClipEvent::Press { .. } => {
let avm2_event = Avm2EventObject::mouse_event(
ClipEvent::Press { .. } | ClipEvent::RightPress | ClipEvent::MiddlePress => {
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,
"mouseDown",
self.as_displayobject(),
None,
0,
true,
MouseButton::Left,
button,
);
Avm2::dispatch_event(&mut activation.context, avm2_event, target);
ClipEventResult::Handled
}
ClipEvent::MouseUpInside => {
let avm2_event = Avm2EventObject::mouse_event(
ClipEvent::MouseUpInside
| ClipEvent::RightMouseUpInside
| ClipEvent::MiddleMouseUpInside => {
let avm2_event = Avm2EventObject::mouse_event_up(
&mut activation,
"mouseUp",
self.as_displayobject(),
None,
0,
true,
MouseButton::Left,
match event {
ClipEvent::MouseUpInside => MouseButton::Left,
ClipEvent::RightMouseUpInside => MouseButton::Right,
ClipEvent::MiddleMouseUpInside => MouseButton::Middle,
_ => unreachable!(),
},
);
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;
} else {
let avm2_event = Avm2EventObject::mouse_event(
let avm2_event = Avm2EventObject::mouse_event_click(
&mut activation,
"click",
self.as_displayobject(),
None,
0,
true,
MouseButton::Left,
);
@ -357,6 +358,21 @@ pub trait TInteractiveObject<'gc>:
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 => {
let avm2_event = Avm2EventObject::mouse_event(
&mut activation,