craft_core/events/
mod.rs

1mod keyboard_input;
2mod mouse_wheel;
3mod pointer_button;
4mod pointer_moved;
5
6pub(crate) mod internal;
7pub(crate) mod resource_event;
8pub mod update_queue_entry;
9
10pub use keyboard_input::KeyboardInput;
11pub use mouse_wheel::MouseWheel;
12pub use pointer_button::PointerButton;
13pub use pointer_moved::PointerMoved;
14pub use winit::event::ButtonSource;
15pub use winit::event::ElementState;
16
17use crate::components::ComponentId;
18use crate::events::CraftMessage::PointerButtonEvent;
19use std::any::Any;
20use winit::event::Ime;
21pub use winit::event::MouseButton;
22
23#[derive(Clone, Copy, Debug)]
24pub enum EventDispatchType {
25    Bubbling,
26    Direct(ComponentId),
27}
28
29#[derive(Clone, Debug)]
30pub enum CraftMessage {
31    Initialized,
32    PointerButtonEvent(PointerButton),
33    KeyboardInputEvent(KeyboardInput),
34    PointerMovedEvent(PointerMoved),
35    MouseWheelEvent(MouseWheel),
36    ModifiersChangedEvent(winit::event::Modifiers),
37    ImeEvent(Ime),
38    TextInputChanged(String),
39    /// Generated when a dropdown is opened or closed. The boolean is the status of is_open after the event has occurred.
40    DropdownToggled(bool),
41    /// The index of the item selected in the list.
42    /// For example, if you select the first item the index will be 0.
43    DropdownItemSelected(usize),
44    /// Generated when a switch is toggled. The boolean is the status of toggled after the event has occurred.
45    SwitchToggled(bool),
46    SliderValueChanged(f64),
47}
48
49impl CraftMessage {
50    pub fn clicked(&self) -> bool {
51        if let PointerButtonEvent(pointer_button) = self {
52            if pointer_button.button.mouse_button() == MouseButton::Left
53                && pointer_button.state == ElementState::Released
54            {
55                return true;
56            }
57        }
58
59        false
60    }
61}
62
63impl PointerButton {
64    pub fn clicked(&self) -> bool {
65        self.button.mouse_button() == MouseButton::Left && self.state == ElementState::Released
66    }
67}
68
69#[cfg(target_arch = "wasm32")]
70pub type UserMessage = dyn Any;
71#[cfg(not(target_arch = "wasm32"))]
72pub type UserMessage = dyn Any + Send + Sync;
73
74pub enum Message {
75    CraftMessage(CraftMessage),
76    #[cfg(target_arch = "wasm32")]
77    UserMessage(Box<UserMessage>),
78    #[cfg(not(target_arch = "wasm32"))]
79    UserMessage(Box<UserMessage>),
80}
81
82impl Message {
83    pub fn clicked(&self) -> bool {
84        if let Message::CraftMessage(message) = self {
85            return message.clicked();
86        }
87
88        false
89    }
90}