event.rs

 1use crate::{geometry::vector::Vector2F, keymap::Keystroke};
 2
 3#[derive(Clone, Debug)]
 4pub struct KeyDownEvent {
 5    pub keystroke: Keystroke,
 6    pub input: Option<String>,
 7    pub is_held: bool,
 8}
 9
10#[derive(Clone, Debug)]
11pub struct KeyUpEvent {
12    pub keystroke: Keystroke,
13    pub input: Option<String>,
14}
15
16#[derive(Clone, Debug)]
17pub struct ModifiersChangedEvent {
18    pub ctrl: bool,
19    pub alt: bool,
20    pub shift: bool,
21    pub cmd: bool,
22}
23
24#[derive(Clone, Debug)]
25pub struct ScrollWheelEvent {
26    pub position: Vector2F,
27    pub delta: Vector2F,
28    pub precise: bool,
29}
30
31#[derive(Copy, Clone, Debug)]
32pub enum NavigationDirection {
33    Back,
34    Forward,
35}
36
37#[derive(Copy, Clone, Debug)]
38pub enum MouseButton {
39    Left,
40    Right,
41    Middle,
42    Navigate(NavigationDirection),
43}
44
45#[derive(Clone, Debug)]
46pub struct MouseEvent {
47    pub button: MouseButton,
48    pub position: Vector2F,
49    pub ctrl: bool,
50    pub alt: bool,
51    pub shift: bool,
52    pub cmd: bool,
53    pub click_count: usize,
54}
55
56#[derive(Clone, Copy, Debug)]
57pub struct MouseMovedEvent {
58    pub position: Vector2F,
59    pub pressed_button: Option<MouseButton>,
60    pub ctrl: bool,
61    pub cmd: bool,
62    pub alt: bool,
63    pub shift: bool,
64}
65
66#[derive(Clone, Debug)]
67pub enum Event {
68    KeyDown(KeyDownEvent),
69    KeyUp(KeyUpEvent),
70    ModifiersChanged(ModifiersChangedEvent),
71    MouseDown(MouseEvent),
72    MouseUp(MouseEvent),
73    MouseMoved(MouseMovedEvent),
74    ScrollWheel(ScrollWheelEvent),
75}
76
77impl Event {
78    pub fn position(&self) -> Option<Vector2F> {
79        match self {
80            Event::KeyDown { .. } => None,
81            Event::KeyUp { .. } => None,
82            Event::ModifiersChanged { .. } => None,
83            Event::MouseDown(event) | Event::MouseUp(event) => Some(event.position),
84            Event::MouseMoved(event) => Some(event.position),
85            Event::ScrollWheel(event) => Some(event.position),
86        }
87    }
88}