Skip to main content

ohos_xcomponent_binding/events/
mod.rs

1use crate::raw::{WindowRaw, XComponentRaw};
2use napi_ohos::Result;
3use ohos_arkui_input_binding::ArkUIInputEvent;
4use std::{cell::RefCell, rc::Rc};
5
6#[cfg(feature = "multi_mode")]
7use std::collections::HashMap;
8
9mod key_event;
10mod mouse_event;
11mod native_callbacks;
12mod raw_window;
13mod touch_event;
14
15pub use key_event::*;
16pub use mouse_event::*;
17pub use native_callbacks::*;
18pub use raw_window::*;
19pub use touch_event::*;
20
21pub type OnSurfaceCreated = Option<Rc<dyn Fn(XComponentRaw, WindowRaw) -> Result<()>>>;
22pub type OnSurfaceChanged = Option<Rc<dyn Fn(XComponentRaw, WindowRaw) -> Result<()>>>;
23pub type OnSurfaceDestroyed = Option<Rc<dyn Fn(XComponentRaw, WindowRaw) -> Result<()>>>;
24pub type DispatchTouchEvent =
25    Option<Rc<dyn Fn(XComponentRaw, WindowRaw, TouchEventData) -> Result<()>>>;
26pub type OnFrameChange = Option<Rc<dyn Fn(XComponentRaw, u64, u64) -> Result<()>>>;
27pub type OnKeyEvent = Option<Rc<dyn Fn(XComponentRaw, WindowRaw, KeyEventData) -> Result<()>>>;
28pub type OnMouseEvent = Option<Rc<dyn Fn(XComponentRaw, WindowRaw, MouseEventData) -> Result<()>>>;
29pub type OnHoverEvent = Option<Rc<dyn Fn(XComponentRaw, bool) -> Result<()>>>;
30pub type OnUIInputEvent = Option<Rc<dyn Fn(XComponentRaw, ArkUIInputEvent) -> Result<()>>>;
31
32#[derive(Default, Clone)]
33pub struct XComponentCallbacks {
34    pub on_surface_created: OnSurfaceCreated,
35    pub on_surface_changed: OnSurfaceChanged,
36    pub on_surface_destroyed: OnSurfaceDestroyed,
37    pub dispatch_touch_event: DispatchTouchEvent,
38    pub on_frame_change: OnFrameChange,
39    pub on_key_event: OnKeyEvent,
40    pub on_mouse_event: OnMouseEvent,
41    pub on_hover_event: OnHoverEvent,
42    pub on_ui_input_event: OnUIInputEvent,
43}
44
45thread_local! {
46    #[cfg(not(feature = "multi_mode"))]
47    pub static X_COMPONENT_CALLBACKS: RefCell<XComponentCallbacks> = RefCell::new(XComponentCallbacks::default());
48
49    #[cfg(feature = "multi_mode")]
50    pub static X_COMPONENT_CALLBACKS_MAP: RefCell<HashMap<String, XComponentCallbacks>> = RefCell::new(HashMap::default());
51}