1use crate::{geometry::vector::Vector2F, keymap::Keystroke};
2
3#[derive(Copy, Clone, Debug)]
4pub enum NavigationDirection {
5 Back,
6 Forward,
7}
8
9#[derive(Clone, Debug)]
10pub enum Event {
11 KeyDown {
12 keystroke: Keystroke,
13 input: Option<String>,
14 is_held: bool,
15 },
16 ScrollWheel {
17 position: Vector2F,
18 delta: Vector2F,
19 precise: bool,
20 },
21 LeftMouseDown {
22 position: Vector2F,
23 ctrl: bool,
24 alt: bool,
25 shift: bool,
26 cmd: bool,
27 click_count: usize,
28 },
29 LeftMouseUp {
30 position: Vector2F,
31 },
32 LeftMouseDragged {
33 position: Vector2F,
34 },
35 RightMouseDown {
36 position: Vector2F,
37 ctrl: bool,
38 alt: bool,
39 shift: bool,
40 cmd: bool,
41 click_count: usize,
42 },
43 RightMouseUp {
44 position: Vector2F,
45 },
46 NavigateMouseDown {
47 position: Vector2F,
48 direction: NavigationDirection,
49 ctrl: bool,
50 alt: bool,
51 shift: bool,
52 cmd: bool,
53 click_count: usize,
54 },
55 NavigateMouseUp {
56 position: Vector2F,
57 direction: NavigationDirection,
58 },
59 MouseMoved {
60 position: Vector2F,
61 left_mouse_down: bool,
62 },
63}
64
65impl Event {
66 pub fn position(&self) -> Option<Vector2F> {
67 match self {
68 Event::KeyDown { .. } => None,
69 Event::ScrollWheel { position, .. }
70 | Event::LeftMouseDown { position, .. }
71 | Event::LeftMouseUp { position }
72 | Event::LeftMouseDragged { position }
73 | Event::RightMouseDown { position, .. }
74 | Event::RightMouseUp { position }
75 | Event::NavigateMouseDown { position, .. }
76 | Event::NavigateMouseUp { position, .. }
77 | Event::MouseMoved { position, .. } => Some(*position),
78 }
79 }
80}