1use crate::events::{
2 KeyPress, KeyRelease, KeyRepeat, Message, MouseDown, MouseDrag, MouseHover, MouseScroll,
3 MouseUp, Resize,
4};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7pub enum ModifierKeyCode {
8 Shift,
9 Ctrl,
10 Alt,
11 Super,
12 Hyper,
13 Meta,
14 IsoLevel3Shift,
15 IsoLevel5Shift,
16}
17
18#[derive(Debug, Clone, Copy, PartialEq, Eq)]
19pub enum ModifierKeyDirection {
20 Left,
21 Right,
22}
23
24#[derive(Debug, Clone, Copy, PartialEq, Eq)]
25pub enum MouseButton {
26 Left,
27 Right,
28 Middle,
29}
30
31#[derive(Debug, Clone, Copy, PartialEq, Eq)]
32pub enum MouseScrollDirection {
33 Up,
34 Down,
35 Left,
36 Right,
37}
38
39#[derive(Debug, Clone, Copy, PartialEq, Eq)]
40pub enum MediaKeyCode {
41 Play,
42 Pause,
43 PlayPause,
44 Reverse,
45 Stop,
46 FastForward,
47 Rewind,
48 TrackNext,
49 TrackPrevious,
50 Record,
51 LowerVolume,
52 RaiseVolume,
53 MuteVolume,
54}
55
56#[derive(Debug, Clone, Copy, PartialEq, Eq)]
57pub enum KeyCode {
58 Backspace,
59 Enter,
60 Left,
61 Right,
62 Up,
63 Down,
64 Home,
65 End,
66 PageUp,
67 PageDown,
68 Tab,
69 Delete,
70 Insert,
71 F(u8),
72 Char(char),
73 Esc,
74 CapsLock,
75 ScrollLock,
76 NumLock,
77 PrintScreen,
78 Pause,
79 Menu,
80 KeypadBegin,
81 Media(MediaKeyCode),
82 Modifier(ModifierKeyCode, ModifierKeyDirection),
83}
84
85pub enum Input {
86 MouseDown {
87 x: u16,
88 y: u16,
89 button: MouseButton,
90 },
91 MouseUp {
92 x: u16,
93 y: u16,
94 button: MouseButton,
95 },
96 MouseHover {
97 x: u16,
98 y: u16,
99 },
100 MouseDrag {
101 x: u16,
102 y: u16,
103 button: MouseButton,
104 },
105 MouseScroll {
106 x: u16,
107 y: u16,
108 direction: MouseScrollDirection,
109 },
110 KeyPress {
111 key: KeyCode,
112 },
113 KeyRepeat {
114 key: KeyCode,
115 },
116 KeyRelease {
117 key: KeyCode,
118 },
119 Resize {
120 width: u16,
121 height: u16,
122 },
123}
124
125impl Input {
126 pub fn to_message(self) -> Message {
127 match self {
128 Input::MouseDown { x, y, button } => Message::new(MouseDown { x, y, button }),
129 Input::MouseUp { x, y, button } => Message::new(MouseUp { x, y, button }),
130 Input::MouseHover { x, y } => Message::new(MouseHover { x, y }),
131 Input::MouseDrag { x, y, button } => Message::new(MouseDrag { x, y, button }),
132 Input::MouseScroll { x, y, direction } => Message::new(MouseScroll { x, y, direction }),
133 Input::KeyPress { key } => Message::new(KeyPress { key }),
134 Input::KeyRepeat { key } => Message::new(KeyRepeat { key }),
135 Input::KeyRelease { key } => Message::new(KeyRelease { key }),
136 Input::Resize { width, height } => Message::new(Resize { width, height }),
137 }
138 }
139}