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}