1use winit::keyboard::PhysicalKey;
2
3use crate::*;
4
5pub fn mouse_wheel() -> (f32, f32) {
6 GLOBAL_STATE.borrow().mouse_wheel
7}
8
9pub fn is_mouse_button_down(button: MouseButton) -> bool {
10 GLOBAL_STATE.borrow().mouse_pressed.contains(&button)
11}
12
13pub fn is_mouse_button_pressed(button: MouseButton) -> bool {
14 GLOBAL_STATE.borrow().mouse_just_pressed.contains(&button)
15}
16
17pub fn is_mouse_button_released(button: MouseButton) -> bool {
18 GLOBAL_STATE.borrow().mouse_just_released.contains(&button)
19}
20
21pub fn set_cursor_hidden(hidden: bool) {
22 GLOBAL_STATE.borrow_mut().cursor_hidden = hidden;
23}
24
25pub fn set_mouse_locked(locked: bool) {
26 GLOBAL_STATE.borrow_mut().mouse_locked = locked;
27}
28
29pub fn is_key_pressed(keycode: KeyCode) -> bool {
30 GLOBAL_STATE.borrow().just_pressed.contains(&keycode)
31}
32
33pub fn is_key_released(keycode: KeyCode) -> bool {
34 GLOBAL_STATE.borrow().just_released.contains(&keycode)
35}
36
37pub fn is_key_down(keycode: KeyCode) -> bool {
38 GLOBAL_STATE.borrow().pressed.contains(&keycode)
39}
40
41#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
42pub enum MouseButton {
43 Left,
44 Right,
45 Middle,
46 Back,
47 Forward,
48 Other(u16),
49}
50
51#[allow(dead_code)]
52#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
53pub enum KeyCode {
54 Backspace,
55 Tab,
56 Return,
57 Escape,
58 Space,
59 Exclaim,
60 Quotedbl,
61 Hash,
62 Dollar,
63 Percent,
64 Ampersand,
65 Quote,
66 LeftParen,
67 RightParen,
68 Asterisk,
69 Plus,
70 Comma,
71 Minus,
72 Period,
73 Slash,
74 Num0,
75 Num1,
76 Num2,
77 Num3,
78 Num4,
79 Num5,
80 Num6,
81 Num7,
82 Num8,
83 Num9,
84 Colon,
85 Semicolon,
86 Less,
87 Equals,
88 Greater,
89 Question,
90 At,
91 LeftBracket,
92 Backslash,
93 RightBracket,
94 Caret,
95 Underscore,
96 Backquote,
97 A,
98 B,
99 C,
100 D,
101 E,
102 F,
103 G,
104 H,
105 I,
106 J,
107 K,
108 L,
109 M,
110 N,
111 O,
112 P,
113 Q,
114 R,
115 S,
116 T,
117 U,
118 V,
119 W,
120 X,
121 Y,
122 Z,
123 Delete,
124 CapsLock,
125 F1,
126 F2,
127 F3,
128 F4,
129 F5,
130 F6,
131 F7,
132 F8,
133 F9,
134 F10,
135 F11,
136 F12,
137 PrintScreen,
138 ScrollLock,
139 Pause,
140 Insert,
141 Home,
142 PageUp,
143 End,
144 PageDown,
145 Right,
146 Left,
147 Down,
148 Up,
149 NumLockClear,
150 KpDivide,
151 KpMultiply,
152 KpMinus,
153 KpPlus,
154 KpEnter,
155 Kp1,
156 Kp2,
157 Kp3,
158 Kp4,
159 Kp5,
160 Kp6,
161 Kp7,
162 Kp8,
163 Kp9,
164 Kp0,
165 KpPeriod,
166 Application,
167 Power,
168 KpEquals,
169 F13,
170 F14,
171 F15,
172 F16,
173 F17,
174 F18,
175 F19,
176 F20,
177 F21,
178 F22,
179 F23,
180 F24,
181 Execute,
182 Help,
183 Menu,
184 Select,
185 Stop,
186 Again,
187 Undo,
188 Cut,
189 Copy,
190 Paste,
191 Find,
192 Mute,
193 VolumeUp,
194 VolumeDown,
195 KpComma,
196 KpEqualsAS400,
197 AltErase,
198 Sysreq,
199 Cancel,
200 Clear,
201 Prior,
202 Return2,
203 Separator,
204 Out,
205 Oper,
206 ClearAgain,
207 CrSel,
208 ExSel,
209 Kp00,
210 Kp000,
211 ThousandsSeparator,
212 DecimalSeparator,
213 CurrencyUnit,
214 CurrencySubUnit,
215 KpLeftParen,
216 KpRightParen,
217 KpLeftBrace,
218 KpRightBrace,
219 KpTab,
220 KpBackspace,
221 KpA,
222 KpB,
223 KpC,
224 KpD,
225 KpE,
226 KpF,
227 KpXor,
228 KpPower,
229 KpPercent,
230 KpLess,
231 KpGreater,
232 KpAmpersand,
233 KpDblAmpersand,
234 KpVerticalBar,
235 KpDblVerticalBar,
236 KpColon,
237 KpHash,
238 KpSpace,
239 KpAt,
240 KpExclam,
241 KpMemStore,
242 KpMemRecall,
243 KpMemClear,
244 KpMemAdd,
245 KpMemSubtract,
246 KpMemMultiply,
247 KpMemDivide,
248 KpPlusMinus,
249 KpClear,
250 KpClearEntry,
251 KpBinary,
252 KpOctal,
253 KpDecimal,
254 KpHexadecimal,
255 LCtrl,
256 LShift,
257 LAlt,
258 LGui,
259 RCtrl,
260 RShift,
261 RAlt,
262 RGui,
263 Mode,
264 AudioNext,
265 AudioPrev,
266 AudioStop,
267 AudioPlay,
268 AudioMute,
269 MediaSelect,
270 Www,
271 Mail,
272 Calculator,
273 Computer,
274 AcSearch,
275 AcHome,
276 AcBack,
277 AcForward,
278 AcStop,
279 AcRefresh,
280 AcBookmarks,
281 BrightnessDown,
282 BrightnessUp,
283 DisplaySwitch,
284 KbdIllumToggle,
285 KbdIllumDown,
286 KbdIllumUp,
287 Eject,
288 Sleep,
289}
290
291#[rustfmt::skip]
292impl KeyCode {
293 pub fn try_from_winit(code: PhysicalKey) -> Option<KeyCode> {
294 match code {
295 PhysicalKey::Code(known_code) => match known_code {
296 winit::keyboard::KeyCode::KeyA => Some(KeyCode::A),
297 winit::keyboard::KeyCode::KeyB => Some(KeyCode::B),
298 winit::keyboard::KeyCode::KeyC => Some(KeyCode::C),
299 winit::keyboard::KeyCode::KeyD => Some(KeyCode::D),
300 winit::keyboard::KeyCode::KeyE => Some(KeyCode::E),
301 winit::keyboard::KeyCode::KeyF => Some(KeyCode::F),
302 winit::keyboard::KeyCode::KeyG => Some(KeyCode::G),
303 winit::keyboard::KeyCode::KeyH => Some(KeyCode::H),
304 winit::keyboard::KeyCode::KeyI => Some(KeyCode::I),
305 winit::keyboard::KeyCode::KeyJ => Some(KeyCode::J),
306 winit::keyboard::KeyCode::KeyK => Some(KeyCode::K),
307 winit::keyboard::KeyCode::KeyL => Some(KeyCode::L),
308 winit::keyboard::KeyCode::KeyM => Some(KeyCode::M),
309 winit::keyboard::KeyCode::KeyN => Some(KeyCode::N),
310 winit::keyboard::KeyCode::KeyO => Some(KeyCode::O),
311 winit::keyboard::KeyCode::KeyP => Some(KeyCode::P),
312 winit::keyboard::KeyCode::KeyQ => Some(KeyCode::Q),
313 winit::keyboard::KeyCode::KeyR => Some(KeyCode::R),
314 winit::keyboard::KeyCode::KeyS => Some(KeyCode::S),
315 winit::keyboard::KeyCode::KeyT => Some(KeyCode::T),
316 winit::keyboard::KeyCode::KeyU => Some(KeyCode::U),
317 winit::keyboard::KeyCode::KeyV => Some(KeyCode::V),
318 winit::keyboard::KeyCode::KeyW => Some(KeyCode::W),
319 winit::keyboard::KeyCode::KeyX => Some(KeyCode::X),
320 winit::keyboard::KeyCode::KeyY => Some(KeyCode::Y),
321 winit::keyboard::KeyCode::KeyZ => Some(KeyCode::Z),
322 winit::keyboard::KeyCode::Backquote => Some(KeyCode::Backquote),
323 winit::keyboard::KeyCode::Tab => Some(KeyCode::Tab),
324 winit::keyboard::KeyCode::Enter => Some(KeyCode::Return),
325 winit::keyboard::KeyCode::Escape => Some(KeyCode::Escape),
326 winit::keyboard::KeyCode::Space => Some(KeyCode::Space),
327 winit::keyboard::KeyCode::Comma => Some(KeyCode::Comma),
328 winit::keyboard::KeyCode::Minus => Some(KeyCode::Minus),
329 winit::keyboard::KeyCode::Period => Some(KeyCode::Period),
330 winit::keyboard::KeyCode::Slash => Some(KeyCode::Slash),
331 winit::keyboard::KeyCode::NumpadAdd => Some(KeyCode::KpPlus),
332 winit::keyboard::KeyCode::Numpad0 => Some(KeyCode::Kp0),
333 winit::keyboard::KeyCode::Numpad1 => Some(KeyCode::Kp1),
334 winit::keyboard::KeyCode::Numpad2 => Some(KeyCode::Kp2),
335 winit::keyboard::KeyCode::Numpad3 => Some(KeyCode::Kp3),
336 winit::keyboard::KeyCode::Numpad4 => Some(KeyCode::Kp4),
337 winit::keyboard::KeyCode::Numpad5 => Some(KeyCode::Kp5),
338 winit::keyboard::KeyCode::Numpad6 => Some(KeyCode::Kp6),
339 winit::keyboard::KeyCode::Numpad7 => Some(KeyCode::Kp7),
340 winit::keyboard::KeyCode::Numpad8 => Some(KeyCode::Kp8),
341 winit::keyboard::KeyCode::Numpad9 => Some(KeyCode::Kp9),
342 winit::keyboard::KeyCode::Semicolon => Some(KeyCode::Semicolon),
343 winit::keyboard::KeyCode::Equal => Some(KeyCode::Equals),
344 winit::keyboard::KeyCode::Backslash => Some(KeyCode::Backslash),
345 winit::keyboard::KeyCode::Delete => Some(KeyCode::Delete),
346 winit::keyboard::KeyCode::F1 => Some(KeyCode::F1),
347 winit::keyboard::KeyCode::F2 => Some(KeyCode::F2),
348 winit::keyboard::KeyCode::F3 => Some(KeyCode::F3),
349 winit::keyboard::KeyCode::F4 => Some(KeyCode::F4),
350 winit::keyboard::KeyCode::F5 => Some(KeyCode::F5),
351 winit::keyboard::KeyCode::F6 => Some(KeyCode::F6),
352 winit::keyboard::KeyCode::F7 => Some(KeyCode::F7),
353 winit::keyboard::KeyCode::F8 => Some(KeyCode::F8),
354 winit::keyboard::KeyCode::F9 => Some(KeyCode::F9),
355 winit::keyboard::KeyCode::F10 => Some(KeyCode::F10),
356 winit::keyboard::KeyCode::F11 => Some(KeyCode::F11),
357 winit::keyboard::KeyCode::F12 => Some(KeyCode::F12),
358 winit::keyboard::KeyCode::Pause => Some(KeyCode::Pause),
359 winit::keyboard::KeyCode::Insert => Some(KeyCode::Insert),
360 winit::keyboard::KeyCode::Home => Some(KeyCode::Home),
361 winit::keyboard::KeyCode::PageUp => Some(KeyCode::PageUp),
362 winit::keyboard::KeyCode::End => Some(KeyCode::End),
363 winit::keyboard::KeyCode::PageDown => Some(KeyCode::PageDown),
364 winit::keyboard::KeyCode::ArrowRight => Some(KeyCode::Right),
365 winit::keyboard::KeyCode::ArrowLeft => Some(KeyCode::Left),
366 winit::keyboard::KeyCode::ArrowDown => Some(KeyCode::Down),
367 winit::keyboard::KeyCode::ArrowUp => Some(KeyCode::Up),
368 winit::keyboard::KeyCode::Power => Some(KeyCode::Power),
369 winit::keyboard::KeyCode::F13 => Some(KeyCode::F13),
370 winit::keyboard::KeyCode::F14 => Some(KeyCode::F14),
371 winit::keyboard::KeyCode::F15 => Some(KeyCode::F15),
372 winit::keyboard::KeyCode::F16 => Some(KeyCode::F16),
373 winit::keyboard::KeyCode::F17 => Some(KeyCode::F17),
374 winit::keyboard::KeyCode::F18 => Some(KeyCode::F18),
375 winit::keyboard::KeyCode::F19 => Some(KeyCode::F19),
376 winit::keyboard::KeyCode::F20 => Some(KeyCode::F20),
377 winit::keyboard::KeyCode::F21 => Some(KeyCode::F21),
378 winit::keyboard::KeyCode::F22 => Some(KeyCode::F22),
379 winit::keyboard::KeyCode::F23 => Some(KeyCode::F23),
380 winit::keyboard::KeyCode::F24 => Some(KeyCode::F24),
381 winit::keyboard::KeyCode::MediaStop => Some(KeyCode::Stop),
382 winit::keyboard::KeyCode::Cut => Some(KeyCode::Cut),
383 winit::keyboard::KeyCode::Copy => Some(KeyCode::Copy),
384 winit::keyboard::KeyCode::Paste => Some(KeyCode::Paste),
385 winit::keyboard::KeyCode::AudioVolumeMute => Some(KeyCode::Mute),
386 winit::keyboard::KeyCode::AudioVolumeUp => Some(KeyCode::VolumeUp),
387 winit::keyboard::KeyCode::AudioVolumeDown => Some(KeyCode::VolumeDown),
388 winit::keyboard::KeyCode::ControlLeft => Some(KeyCode::LCtrl),
389 winit::keyboard::KeyCode::ShiftLeft => Some(KeyCode::LShift),
390 winit::keyboard::KeyCode::AltLeft => Some(KeyCode::LAlt),
391 winit::keyboard::KeyCode::SuperLeft => Some(KeyCode::LGui),
392 winit::keyboard::KeyCode::ControlRight => Some(KeyCode::RCtrl),
393 winit::keyboard::KeyCode::ShiftRight => Some(KeyCode::RShift),
394 winit::keyboard::KeyCode::AltRight => Some(KeyCode::RAlt),
395 winit::keyboard::KeyCode::SuperRight => Some(KeyCode::RGui),
396 winit::keyboard::KeyCode::BracketLeft => Some(KeyCode::LeftBracket),
397 winit::keyboard::KeyCode::BracketRight => Some(KeyCode::RightBracket),
398 winit::keyboard::KeyCode::Digit0 => Some(KeyCode::Num0),
399 winit::keyboard::KeyCode::Digit1 => Some(KeyCode::Num1),
400 winit::keyboard::KeyCode::Digit2 => Some(KeyCode::Num2),
401 winit::keyboard::KeyCode::Digit3 => Some(KeyCode::Num3),
402 winit::keyboard::KeyCode::Digit4 => Some(KeyCode::Num4),
403 winit::keyboard::KeyCode::Digit5 => Some(KeyCode::Num5),
404 winit::keyboard::KeyCode::Digit6 => Some(KeyCode::Num6),
405 winit::keyboard::KeyCode::Digit7 => Some(KeyCode::Num7),
406 winit::keyboard::KeyCode::Digit8 => Some(KeyCode::Num8),
407 winit::keyboard::KeyCode::Digit9 => Some(KeyCode::Num9),
408 winit::keyboard::KeyCode::Quote => Some(KeyCode::Quote),
409 winit::keyboard::KeyCode::Backspace => Some(KeyCode::Backspace),
410 winit::keyboard::KeyCode::CapsLock => Some(KeyCode::CapsLock),
411 winit::keyboard::KeyCode::ContextMenu => Some(KeyCode::Menu),
412 winit::keyboard::KeyCode::Help => Some(KeyCode::Help),
413 winit::keyboard::KeyCode::NumLock => Some(KeyCode::NumLockClear),
414 winit::keyboard::KeyCode::NumpadBackspace => Some(KeyCode::KpBackspace),
415 winit::keyboard::KeyCode::NumpadClear => Some(KeyCode::KpClear),
416 winit::keyboard::KeyCode::NumpadClearEntry => Some(KeyCode::KpClearEntry),
417 winit::keyboard::KeyCode::NumpadComma => Some(KeyCode::KpComma),
418 winit::keyboard::KeyCode::NumpadDecimal => Some(KeyCode::KpDecimal),
419 winit::keyboard::KeyCode::NumpadDivide => Some(KeyCode::KpDivide),
420 winit::keyboard::KeyCode::NumpadEnter => Some(KeyCode::KpEnter),
421 winit::keyboard::KeyCode::NumpadEqual => Some(KeyCode::KpEquals),
422 winit::keyboard::KeyCode::NumpadHash => Some(KeyCode::KpHash),
423 winit::keyboard::KeyCode::NumpadMemoryClear => Some(KeyCode::KpMemClear),
424 winit::keyboard::KeyCode::NumpadMemoryRecall => Some(KeyCode::KpMemRecall),
425 winit::keyboard::KeyCode::NumpadMemoryStore => Some(KeyCode::KpMemStore),
426 winit::keyboard::KeyCode::NumpadMemorySubtract => Some(KeyCode::KpMemSubtract),
427 winit::keyboard::KeyCode::NumpadMultiply => Some(KeyCode::KpMultiply),
428 winit::keyboard::KeyCode::NumpadParenLeft => Some(KeyCode::KpLeftParen),
429 winit::keyboard::KeyCode::NumpadParenRight => Some(KeyCode::KpRightParen),
430 winit::keyboard::KeyCode::NumpadSubtract => Some(KeyCode::KpMinus),
431 winit::keyboard::KeyCode::PrintScreen => Some(KeyCode::PrintScreen),
432 winit::keyboard::KeyCode::ScrollLock => Some(KeyCode::ScrollLock),
433 winit::keyboard::KeyCode::Eject => Some(KeyCode::Eject),
434 winit::keyboard::KeyCode::LaunchMail => Some(KeyCode::Mail),
435 winit::keyboard::KeyCode::MediaSelect => Some(KeyCode::Select),
436 winit::keyboard::KeyCode::MediaTrackNext => Some(KeyCode::AudioNext),
437 winit::keyboard::KeyCode::MediaTrackPrevious => Some(KeyCode::AudioPrev),
438 winit::keyboard::KeyCode::Sleep => Some(KeyCode::Sleep),
439 winit::keyboard::KeyCode::Find => Some(KeyCode::Find),
440 winit::keyboard::KeyCode::Select => Some(KeyCode::Select),
441 winit::keyboard::KeyCode::Undo => Some(KeyCode::Undo),
442
443 k => {
493 info!("Unrecognized key {:?}", k);
494 None
495 },
496 },
497 PhysicalKey::Unidentified(_) => None,
498 }
499 }
500}