event.rs

 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}