1#[derive(Clone, Copy, Debug, PartialEq, Eq)]
8pub enum Key {
9 Char(char),
11
12 Enter,
14 Backspace,
15 Delete,
16 Escape,
17 Tab,
18 Space,
19
20 Up,
22 Down,
23 Left,
24 Right,
25 Home,
26 End,
27 PageUp,
28 PageDown,
29
30 LeftShift,
32 RightShift,
33 LeftCtrl,
34 RightCtrl,
35 LeftAlt,
36 RightAlt,
37
38 F(u8),
40
41 Unknown,
43}
44
45#[derive(Clone, Copy, Debug, PartialEq, Eq)]
47pub enum MouseButton {
48 Left,
49 Right,
50 Middle,
51}
52
53#[derive(Clone, Copy, Debug)]
55pub enum Event {
56 KeyDown(Key),
58 KeyUp(Key),
60
61 MouseMove { x: i32, y: i32 },
63
64 MouseButton {
66 x: i32,
67 y: i32,
68 button: MouseButton,
69 pressed: bool,
70 },
71
72 Scroll { delta: i32 },
74
75 Close,
77
78 Resize { width: u32, height: u32 },
80}
81
82impl Event {
83 pub fn is_close(&self) -> bool { matches!(self, Event::Close) }
84
85 pub fn as_char(&self) -> Option<char> {
87 if let Event::KeyDown(Key::Char(c)) = self { Some(*c) } else { None }
88 }
89
90 pub fn as_key_down(&self) -> Option<Key> {
92 if let Event::KeyDown(k) = self { Some(*k) } else { None }
93 }
94
95 pub fn as_mouse_btn(&self) -> Option<(i32, i32, MouseButton, bool)> {
97 if let Event::MouseButton { x, y, button, pressed } = self {
98 Some((*x, *y, *button, *pressed))
99 } else { None }
100 }
101
102 pub fn as_mouse_move(&self) -> Option<(i32, i32)> {
104 if let Event::MouseMove { x, y } = self { Some((*x, *y)) } else { None }
105 }
106}