1use crate::prelude::winit;
2use winit::keyboard::KeyCode;
3
4pub mod virtual_key_codes {
5 use super::*;
6
7 pub const ALL_KEYS: [KeyCode; 96] = [
8 KeyCode::KeyA,
9 KeyCode::KeyB,
10 KeyCode::KeyC,
11 KeyCode::KeyD,
12 KeyCode::KeyE,
13 KeyCode::KeyF,
14 KeyCode::KeyG,
15 KeyCode::KeyH,
16 KeyCode::KeyI,
17 KeyCode::KeyJ,
18 KeyCode::KeyK,
19 KeyCode::KeyL,
20 KeyCode::KeyM,
21 KeyCode::KeyN,
22 KeyCode::KeyO,
23 KeyCode::KeyP,
24 KeyCode::KeyQ,
25 KeyCode::KeyR,
26 KeyCode::KeyS,
27 KeyCode::KeyT,
28 KeyCode::KeyU,
29 KeyCode::KeyV,
30 KeyCode::KeyW,
31 KeyCode::KeyX,
32 KeyCode::KeyY,
33 KeyCode::KeyZ,
34 KeyCode::ArrowUp,
35 KeyCode::ArrowLeft,
36 KeyCode::ArrowRight,
37 KeyCode::ArrowDown,
38 KeyCode::Digit0,
39 KeyCode::Digit1,
40 KeyCode::Digit2,
41 KeyCode::Digit3,
42 KeyCode::Digit4,
43 KeyCode::Digit5,
44 KeyCode::Digit6,
45 KeyCode::Digit7,
46 KeyCode::Digit8,
47 KeyCode::Digit9,
48 KeyCode::Numpad0,
49 KeyCode::Numpad1,
50 KeyCode::Numpad2,
51 KeyCode::Numpad3,
52 KeyCode::Numpad4,
53 KeyCode::Numpad5,
54 KeyCode::Numpad6,
55 KeyCode::Numpad7,
56 KeyCode::Numpad8,
57 KeyCode::Numpad9,
58 KeyCode::ShiftLeft,
59 KeyCode::ShiftRight,
60 KeyCode::AltLeft,
61 KeyCode::AltRight,
62 KeyCode::SuperLeft,
63 KeyCode::SuperRight,
64 KeyCode::ControlLeft,
65 KeyCode::ControlRight,
66 KeyCode::Space,
67 KeyCode::Enter,
68 KeyCode::Tab,
69 KeyCode::Backspace,
70 KeyCode::Delete,
71 KeyCode::Escape,
72 KeyCode::Home,
73 KeyCode::End,
74 KeyCode::PageUp,
75 KeyCode::PageDown,
76 KeyCode::Minus,
77 KeyCode::NumpadAdd,
78 KeyCode::NumpadSubtract,
79 KeyCode::NumpadDecimal,
80 KeyCode::NumpadDivide,
81 KeyCode::NumpadStar,
82 KeyCode::Semicolon,
83 KeyCode::Equal,
84 KeyCode::NumpadEqual,
85 KeyCode::BracketLeft,
86 KeyCode::BracketRight,
87 KeyCode::Comma,
88 KeyCode::Period,
89 KeyCode::Slash,
90 KeyCode::Quote,
91 KeyCode::Backslash,
92 KeyCode::F1,
93 KeyCode::F2,
94 KeyCode::F3,
95 KeyCode::F4,
96 KeyCode::F5,
97 KeyCode::F6,
98 KeyCode::F7,
99 KeyCode::F8,
100 KeyCode::F9,
101 KeyCode::F10,
102 KeyCode::F11,
103 KeyCode::F12,
104 ];
105
106 pub const FUNCTION: [KeyCode; 12] = [
107 KeyCode::F1,
108 KeyCode::F2,
109 KeyCode::F3,
110 KeyCode::F4,
111 KeyCode::F5,
112 KeyCode::F6,
113 KeyCode::F7,
114 KeyCode::F8,
115 KeyCode::F9,
116 KeyCode::F10,
117 KeyCode::F11,
118 KeyCode::F12,
119 ];
120
121 pub const LETTERS: [KeyCode; 26] = [
122 KeyCode::KeyA,
123 KeyCode::KeyB,
124 KeyCode::KeyC,
125 KeyCode::KeyD,
126 KeyCode::KeyE,
127 KeyCode::KeyF,
128 KeyCode::KeyG,
129 KeyCode::KeyH,
130 KeyCode::KeyI,
131 KeyCode::KeyJ,
132 KeyCode::KeyK,
133 KeyCode::KeyL,
134 KeyCode::KeyM,
135 KeyCode::KeyN,
136 KeyCode::KeyO,
137 KeyCode::KeyP,
138 KeyCode::KeyQ,
139 KeyCode::KeyR,
140 KeyCode::KeyS,
141 KeyCode::KeyT,
142 KeyCode::KeyU,
143 KeyCode::KeyV,
144 KeyCode::KeyW,
145 KeyCode::KeyX,
146 KeyCode::KeyY,
147 KeyCode::KeyZ,
148 ];
149 pub const ARROWS: [KeyCode; 4] = [
150 KeyCode::ArrowUp,
151 KeyCode::ArrowLeft,
152 KeyCode::ArrowRight,
153 KeyCode::ArrowDown,
154 ];
155 pub const NUMBERS: [KeyCode; 20] = [
156 KeyCode::Digit0,
157 KeyCode::Digit1,
158 KeyCode::Digit2,
159 KeyCode::Digit3,
160 KeyCode::Digit4,
161 KeyCode::Digit5,
162 KeyCode::Digit6,
163 KeyCode::Digit7,
164 KeyCode::Digit8,
165 KeyCode::Digit9,
166 KeyCode::Numpad0,
167 KeyCode::Numpad1,
168 KeyCode::Numpad2,
169 KeyCode::Numpad3,
170 KeyCode::Numpad4,
171 KeyCode::Numpad5,
172 KeyCode::Numpad6,
173 KeyCode::Numpad7,
174 KeyCode::Numpad8,
175 KeyCode::Numpad9,
176 ];
177 pub const MODIFIERS: [KeyCode; 8] = [
178 KeyCode::ShiftLeft,
179 KeyCode::ShiftRight,
180 KeyCode::AltLeft,
181 KeyCode::AltRight,
182 KeyCode::SuperLeft,
183 KeyCode::SuperRight,
184 KeyCode::ControlLeft,
185 KeyCode::ControlRight,
186 ];
187 pub const TYPING: [KeyCode; 5] = [
188 KeyCode::Space,
189 KeyCode::Enter,
190 KeyCode::Tab,
191 KeyCode::Backspace,
192 KeyCode::Delete,
193 ];
194 pub const NAVIGATION: [KeyCode; 5] = [
195 KeyCode::Escape,
196 KeyCode::Home,
197 KeyCode::End,
198 KeyCode::PageUp,
199 KeyCode::PageDown,
200 ];
201 pub const SYMBOLS: [KeyCode; 16] = [
202 KeyCode::Minus,
203 KeyCode::NumpadAdd,
204 KeyCode::NumpadSubtract,
205 KeyCode::NumpadDecimal,
206 KeyCode::NumpadDivide,
207 KeyCode::NumpadStar,
208 KeyCode::Semicolon,
209 KeyCode::Equal,
210 KeyCode::NumpadEqual,
211 KeyCode::BracketLeft,
212 KeyCode::BracketRight,
213 KeyCode::Comma,
214 KeyCode::Period,
215 KeyCode::Slash,
216 KeyCode::Quote,
217 KeyCode::Backslash,
218 ];
219}
220
221pub fn key_press_to_char(code: KeyCode, shift: bool) -> Option<char> {
228 key_code_to_char(code).map(|(c1, c2)| if shift { c2 } else { c1 })
229}
230
231pub fn key_code_to_char(code: KeyCode) -> Option<(char, char)> {
234 match code {
235 KeyCode::Digit1 => Some(('1', '!')),
236 KeyCode::Digit2 => Some(('2', '@')),
237 KeyCode::Digit3 => Some(('3', '£')),
238 KeyCode::Digit4 => Some(('4', '$')),
239 KeyCode::Digit5 => Some(('5', '%')),
240 KeyCode::Digit6 => Some(('6', '^')),
241 KeyCode::Digit7 => Some(('7', '&')),
242 KeyCode::Digit8 => Some(('8', '*')),
243 KeyCode::Digit9 => Some(('9', '(')),
244 KeyCode::Digit0 => Some(('0', ')')),
245 KeyCode::Numpad1 => Some(('1', '1')),
246 KeyCode::Numpad2 => Some(('2', '2')),
247 KeyCode::Numpad3 => Some(('3', '3')),
248 KeyCode::Numpad4 => Some(('4', '4')),
249 KeyCode::Numpad5 => Some(('5', '5')),
250 KeyCode::Numpad6 => Some(('6', '6')),
251 KeyCode::Numpad7 => Some(('7', '7')),
252 KeyCode::Numpad8 => Some(('8', '8')),
253 KeyCode::Numpad9 => Some(('9', '9')),
254 KeyCode::Numpad0 => Some(('0', '0')),
255 KeyCode::KeyA => Some(('a', 'A')),
256 KeyCode::KeyB => Some(('b', 'B')),
257 KeyCode::KeyC => Some(('c', 'C')),
258 KeyCode::KeyD => Some(('d', 'D')),
259 KeyCode::KeyE => Some(('e', 'E')),
260 KeyCode::KeyF => Some(('f', 'F')),
261 KeyCode::KeyG => Some(('g', 'G')),
262 KeyCode::KeyH => Some(('h', 'H')),
263 KeyCode::KeyI => Some(('i', 'I')),
264 KeyCode::KeyJ => Some(('j', 'J')),
265 KeyCode::KeyK => Some(('k', 'K')),
266 KeyCode::KeyL => Some(('l', 'L')),
267 KeyCode::KeyM => Some(('m', 'M')),
268 KeyCode::KeyN => Some(('n', 'N')),
269 KeyCode::KeyO => Some(('o', 'O')),
270 KeyCode::KeyP => Some(('p', 'P')),
271 KeyCode::KeyQ => Some(('q', 'Q')),
272 KeyCode::KeyR => Some(('r', 'R')),
273 KeyCode::KeyS => Some(('s', 'S')),
274 KeyCode::KeyT => Some(('t', 'T')),
275 KeyCode::KeyU => Some(('u', 'U')),
276 KeyCode::KeyV => Some(('v', 'V')),
277 KeyCode::KeyW => Some(('w', 'W')),
278 KeyCode::KeyX => Some(('x', 'X')),
279 KeyCode::KeyY => Some(('y', 'Y')),
280 KeyCode::KeyZ => Some(('z', 'Z')),
281 KeyCode::Space => Some((' ', ' ')),
282 KeyCode::NumpadAdd => Some(('+', '+')),
283 KeyCode::NumpadDivide => Some(('/', '/')),
284 KeyCode::NumpadDecimal => Some(('.', '.')),
285 KeyCode::NumpadComma => Some((',', ',')),
286 KeyCode::NumpadEqual => Some(('=', '=')),
287 KeyCode::NumpadMultiply => Some(('*', '*')),
288 KeyCode::NumpadSubtract => Some(('-', '-')),
289 KeyCode::Quote => Some(('\'', '"')),
290 KeyCode::Backslash => Some(('\\', '|')),
291 KeyCode::Comma => Some((',', '<')),
292 KeyCode::Equal => Some(('=', '+')),
293 KeyCode::BracketLeft => Some(('[', '{')),
294 KeyCode::Minus => Some(('-', '_')),
295 KeyCode::Period => Some(('.', '>')),
296 KeyCode::Semicolon => Some((';', ':')),
297 KeyCode::Slash => Some(('/', '?')),
298 _ => None,
299 }
300}