1pub(super) mod details;
2
3#[cfg(feature = "serde")]
4use serde::{Serialize, Deserialize};
5
6#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub enum InputEvent {
10 Keyboard(KeyboardEvent),
12 Mouse(MouseEvent),
14 Other(u32),
16}
17
18#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
20#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
21pub enum IsEventInjected {
22 Injected,
24 NotInjected,
26}
27
28#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
30#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
31pub struct KeyboardEvent {
32 pub pressed: KeyPress,
34 pub key: Option<KeyboardKey>,
36 pub is_injected: Option<IsEventInjected>,
38}
39
40#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
42#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
43pub enum IsSystemKeyPress {
44 System,
46 Normal,
48}
49
50#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
52#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
53pub enum KeyPress {
54 Down(IsSystemKeyPress),
56 Up(IsSystemKeyPress),
58 Other(usize),
59}
60
61#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
63#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
64pub enum KeyboardKey {
65 A,
66 B,
67 C,
68 D,
69 E,
70 F,
71 G,
72 H,
73 I,
74 J,
75 K,
76 L,
77 M,
78 N,
79 O,
80 P,
81 Q,
82 R,
83 S,
84 T,
85 U,
86 V,
87 W,
88 X,
89 Y,
90 Z,
91 Number0,
92 Number1,
93 Number2,
94 Number3,
95 Number4,
96 Number5,
97 Number6,
98 Number7,
99 Number8,
100 Number9,
101 LeftAlt,
102 RightAlt,
103 LeftShift,
104 RightShift,
105 LeftControl,
106 RightControl,
107 BackSpace,
108 Tab,
109 Enter,
110 Escape,
111 Space,
112 PageUp,
113 PageDown,
114 Home,
115 ArrowLeft,
116 ArrowUp,
117 ArrowRight,
118 ArrowDown,
119 Print,
120 PrintScreen,
121 Insert,
122 Delete,
123 LeftWindows,
124 RightWindows,
125 Comma,
127 Period,
129 Slash,
131 SemiColon,
133 Apostrophe,
135 LeftBrace,
137 BackwardSlash,
139 RightBrace,
141 Grave,
143 F1,
144 F2,
145 F3,
146 F4,
147 F5,
148 F6,
149 F7,
150 F8,
151 F9,
152 F10,
153 F11,
154 F12,
155 F13,
156 F14,
157 F15,
158 F16,
159 F17,
160 F18,
161 F19,
162 F20,
163 F21,
164 F22,
165 F23,
166 F24,
167 NumLock,
168 ScrollLock,
169 CapsLock,
170 Numpad0,
171 Numpad1,
172 Numpad2,
173 Numpad3,
174 Numpad4,
175 Numpad5,
176 Numpad6,
177 Numpad7,
178 Numpad8,
179 Numpad9,
180 Multiply,
181 Add,
182 Separator,
183 Subtract,
184 Decimal,
185 Divide,
186 Other(u32),
187 InvalidKeyCodeReceived,
189}
190
191const VK_0: i32 = 0x30;
193const VK_1: i32 = 0x31;
194const VK_2: i32 = 0x32;
195const VK_3: i32 = 0x33;
196const VK_4: i32 = 0x34;
197const VK_5: i32 = 0x35;
198const VK_6: i32 = 0x36;
199const VK_7: i32 = 0x37;
200const VK_8: i32 = 0x38;
201const VK_9: i32 = 0x39;
202const VK_A: i32 = 0x41;
203const VK_B: i32 = 0x42;
204const VK_C: i32 = 0x43;
205const VK_D: i32 = 0x44;
206const VK_E: i32 = 0x45;
207const VK_F: i32 = 0x46;
208const VK_G: i32 = 0x47;
209const VK_H: i32 = 0x48;
210const VK_I: i32 = 0x49;
211const VK_J: i32 = 0x4A;
212const VK_K: i32 = 0x4B;
213const VK_L: i32 = 0x4C;
214const VK_M: i32 = 0x4D;
215const VK_N: i32 = 0x4E;
216const VK_O: i32 = 0x4F;
217const VK_P: i32 = 0x50;
218const VK_Q: i32 = 0x51;
219const VK_R: i32 = 0x52;
220const VK_S: i32 = 0x53;
221const VK_T: i32 = 0x54;
222const VK_U: i32 = 0x55;
223const VK_V: i32 = 0x56;
224const VK_W: i32 = 0x57;
225const VK_X: i32 = 0x58;
226const VK_Y: i32 = 0x59;
227const VK_Z: i32 = 0x5A;
228
229#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
231#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
232pub struct MouseEvent {
233 pub event: MouseEventType,
235 pub is_injected: Option<IsEventInjected>,
237}
238
239#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
241#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
242pub enum MouseEventType {
243 Press(MousePressEvent),
245 Move(MouseMoveEvent),
247 Wheel(MouseWheelEvent),
249 Other(usize)
251}
252
253#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
255#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
256pub struct MousePressEvent {
257 pub pressed: MouseButtonPress,
258 pub button: MouseButton,
259}
260
261#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
263#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
264pub enum MouseWheel {
265 Horizontal,
266 Vertical,
267 Unknown(usize),
268}
269
270#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
272#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
273pub enum MouseWheelDirection {
274 Forward,
275 Backward,
276 Unknown(u32),
277}
278
279#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
281#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
282pub struct MouseWheelEvent {
283 pub wheel: MouseWheel,
284 pub direction: Option<MouseWheelDirection>
285
286}
287
288#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
290#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
291pub struct Point {
292 pub x: i32,
293 pub y: i32,
294}
295
296#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
298#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
299pub struct MouseMoveEvent {
300 pub point: Option<Point>,
301}
302
303#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
305#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
306pub enum MouseButtonPress {
307 Down,
308 Up,
309 Other(usize),
310}
311
312#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
314#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
315pub enum MouseClick {
316 SingleClick,
317 DoubleClick,
318 Other(u32),
319}
320
321#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug)]
323#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
324pub enum MouseButton {
325 Left(MouseClick),
326 Right(MouseClick),
327 Middle(MouseClick),
328 X1(MouseClick),
330 X2(MouseClick),
332 UnkownX(MouseClick),
334 Other(usize),
336}