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        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}