web: Inline all the Closures for JsCallback::register

This commit is contained in:
Nathan Adams 2024-06-02 00:11:35 +02:00
parent e7fc1a7a4d
commit a9c5928b62
1 changed files with 185 additions and 205 deletions

View File

@ -847,7 +847,10 @@ impl RuffleHandle {
}));
// Create mouse move handler.
let mouse_move_callback = Closure::new(move |js_event: PointerEvent| {
instance.mouse_move_callback = Some(JsCallback::register(
&canvas,
"pointermove",
Closure::new(move |js_event: PointerEvent| {
let _ = ruffle.with_instance(move |instance| {
let event = PlayerEvent::MouseMove {
x: f64::from(js_event.offset_x()) * instance.device_pixel_ratio,
@ -860,50 +863,44 @@ impl RuffleHandle {
js_event.prevent_default();
}
});
});
instance.mouse_move_callback = Some(JsCallback::register(
&canvas,
"pointermove",
mouse_move_callback,
}),
false,
));
// Create mouse enter handler.
let mouse_enter_callback = Closure::new(move |_js_event: PointerEvent| {
instance.mouse_enter_callback = Some(JsCallback::register(
&canvas,
"pointerenter",
Closure::new(move |_js_event: PointerEvent| {
let _ = ruffle.with_instance(move |instance| {
let _ = instance.with_core_mut(|core| {
core.set_mouse_in_stage(true);
});
});
});
instance.mouse_enter_callback = Some(JsCallback::register(
&canvas,
"pointerenter",
mouse_enter_callback,
}),
false,
));
// Create mouse leave handler.
let mouse_leave_callback = Closure::new(move |_js_event: PointerEvent| {
instance.mouse_leave_callback = Some(JsCallback::register(
&canvas,
"pointerleave",
Closure::new(move |_js_event: PointerEvent| {
let _ = ruffle.with_instance(move |instance| {
let _ = instance.with_core_mut(|core| {
core.set_mouse_in_stage(false);
core.handle_event(PlayerEvent::MouseLeave);
});
});
});
instance.mouse_leave_callback = Some(JsCallback::register(
&canvas,
"pointerleave",
mouse_leave_callback,
}),
false,
));
// Create mouse down handler.
let mouse_down_callback = Closure::new(move |js_event: PointerEvent| {
instance.mouse_down_callback = Some(JsCallback::register(
&canvas,
"pointerdown",
Closure::new(move |js_event: PointerEvent| {
let _ = ruffle.with_instance(move |instance| {
if let Some(target) = js_event.current_target() {
let _ = target
@ -927,50 +924,44 @@ impl RuffleHandle {
js_event.prevent_default();
});
});
instance.mouse_down_callback = Some(JsCallback::register(
&canvas,
"pointerdown",
mouse_down_callback,
}),
false,
));
// Create player mouse down handler.
let player_mouse_down_callback = Closure::new(move |_js_event| {
instance.player_mouse_down_callback = Some(JsCallback::register(
&js_player,
"pointerdown",
Closure::new(move |_js_event| {
let _ = ruffle.with_instance_mut(|instance| {
instance.has_focus = true;
// Ensure the parent window gets focus. This is necessary for events
// to be received when the player is inside a frame.
instance.window.focus().warn_on_error();
});
});
instance.player_mouse_down_callback = Some(JsCallback::register(
&js_player,
"pointerdown",
player_mouse_down_callback,
}),
false,
));
// Create window mouse down handler.
let window_mouse_down_callback = Closure::new(move |_js_event| {
instance.window_mouse_down_callback = Some(JsCallback::register(
&window,
"pointerdown",
Closure::new(move |_js_event| {
let _ = ruffle.with_instance_mut(|instance| {
// If we actually clicked on the player, this will be reset to true
// after the event bubbles down to the player.
instance.has_focus = false;
});
});
instance.window_mouse_down_callback = Some(JsCallback::register(
&window,
"pointerdown",
window_mouse_down_callback,
}),
true, // Use capture so this first *before* the player mouse down handler.
));
// Create mouse up handler.
let mouse_up_callback = Closure::new(move |js_event: PointerEvent| {
instance.mouse_up_callback = Some(JsCallback::register(
&canvas,
"pointerup",
Closure::new(move |js_event: PointerEvent| {
let _ = ruffle.with_instance(|instance| {
if let Some(target) = js_event.current_target() {
let _ = target
@ -995,21 +986,23 @@ impl RuffleHandle {
js_event.prevent_default();
}
});
});
instance.mouse_up_callback = Some(JsCallback::register(
&canvas,
"pointerup",
mouse_up_callback,
}),
false,
));
// Create mouse wheel handler.
let mouse_wheel_callback = Closure::new(move |js_event: WheelEvent| {
instance.mouse_wheel_callback = Some(JsCallback::register(
&canvas,
"wheel",
Closure::new(move |js_event: WheelEvent| {
let _ = ruffle.with_instance(|instance| {
let delta = match js_event.delta_mode() {
WheelEvent::DOM_DELTA_LINE => MouseWheelDelta::Lines(-js_event.delta_y()),
WheelEvent::DOM_DELTA_PIXEL => MouseWheelDelta::Pixels(-js_event.delta_y()),
WheelEvent::DOM_DELTA_LINE => {
MouseWheelDelta::Lines(-js_event.delta_y())
}
WheelEvent::DOM_DELTA_PIXEL => {
MouseWheelDelta::Pixels(-js_event.delta_y())
}
_ => return,
};
let _ = instance.with_core_mut(|core| {
@ -1019,17 +1012,15 @@ impl RuffleHandle {
}
});
});
});
instance.mouse_wheel_callback = Some(JsCallback::register(
&canvas,
"wheel",
mouse_wheel_callback,
}),
false,
));
// Create keydown event handler.
let key_down_callback = Closure::new(move |js_event: KeyboardEvent| {
instance.key_down_callback = Some(JsCallback::register(
&window,
"keydown",
Closure::new(move |js_event: KeyboardEvent| {
let _ = ruffle.with_instance(|instance| {
if instance.has_focus {
let mut paste_event = false;
@ -1063,21 +1054,19 @@ impl RuffleHandle {
}
}
});
});
instance.key_down_callback = Some(JsCallback::register(
&window,
"keydown",
key_down_callback,
}),
false,
));
let paste_callback = Closure::new(move |js_event: ClipboardEvent| {
instance.paste_callback = Some(JsCallback::register(
&window,
"paste",
Closure::new(move |js_event: ClipboardEvent| {
let _ = ruffle.with_instance(|instance| {
if instance.has_focus {
let _ = instance.with_core_mut(|core| {
let clipboard_content = if let Some(content) = js_event.clipboard_data()
{
let clipboard_content =
if let Some(content) = js_event.clipboard_data() {
content.get_data("text/plain").unwrap_or_default()
} else {
"".into()
@ -1090,17 +1079,15 @@ impl RuffleHandle {
js_event.prevent_default();
}
});
});
instance.paste_callback = Some(JsCallback::register(
&window,
"paste",
paste_callback,
}),
false,
));
// Create keyup event handler.
let key_up_callback = Closure::new(move |js_event: KeyboardEvent| {
instance.key_up_callback = Some(JsCallback::register(
&window,
"keyup",
Closure::new(move |js_event: KeyboardEvent| {
let _ = ruffle.with_instance(|instance| {
if instance.has_focus {
let _ = instance.with_core_mut(|core| {
@ -1111,25 +1098,18 @@ impl RuffleHandle {
js_event.prevent_default();
}
});
});
instance.key_up_callback = Some(JsCallback::register(
&window,
"keyup",
key_up_callback,
}),
false,
));
let unload_callback = Closure::new(move |_| {
let _ = ruffle.with_core_mut(|core| {
core.flush_shared_objects();
});
});
instance.unload_callback = Some(JsCallback::register(
&window,
"unload",
unload_callback,
Closure::new(move |_| {
let _ = ruffle.with_core_mut(|core| {
core.flush_shared_objects();
});
}),
false,
));
})?;