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 click_count: usize,
32 },
33 LeftMouseDragged {
34 position: Vector2F,
35 },
36 RightMouseDown {
37 position: Vector2F,
38 ctrl: bool,
39 alt: bool,
40 shift: bool,
41 cmd: bool,
42 click_count: usize,
43 },
44 RightMouseUp {
45 position: Vector2F,
46 click_count: usize,
47 },
48 NavigateMouseDown {
49 position: Vector2F,
50 direction: NavigationDirection,
51 ctrl: bool,
52 alt: bool,
53 shift: bool,
54 cmd: bool,
55 click_count: usize,
56 },
57 NavigateMouseUp {
58 position: Vector2F,
59 direction: NavigationDirection,
60 },
61 MouseMoved {
62 position: Vector2F,
63 left_mouse_down: bool,
64 },
65}
66
67impl Event {
68 pub fn position(&self) -> Option<Vector2F> {
69 match self {
70 Event::KeyDown { .. } => None,
71 Event::ScrollWheel { position, .. }
72 | Event::LeftMouseDown { position, .. }
73 | Event::LeftMouseUp { position, .. }
74 | Event::LeftMouseDragged { position }
75 | Event::RightMouseDown { position, .. }
76 | Event::RightMouseUp { position, .. }
77 | Event::NavigateMouseDown { position, .. }
78 | Event::NavigateMouseUp { position, .. }
79 | Event::MouseMoved { position, .. } => Some(*position),
80 }
81 }
82}