Line data Source code
1 : #pragma once
2 :
3 : #include <cstdint>
4 : #include <string_view>
5 :
6 : namespace jage::engine::input::keyboard {
7 : enum class scancode : std::uint16_t {
8 : unidentified = 0,
9 : a = 0x04,
10 : b = 0x05,
11 : c = 0x06,
12 : d = 0x07,
13 : e = 0x08,
14 : f = 0x09,
15 : g = 0x0A,
16 : h = 0x0B,
17 : i = 0x0C,
18 : j = 0x0D,
19 : k = 0x0E,
20 : l = 0x0F,
21 : m = 0x10,
22 : n = 0x11,
23 : o = 0x12,
24 : p = 0x13,
25 : q = 0x14,
26 : r = 0x15,
27 : s = 0x16,
28 : t = 0x17,
29 : u = 0x18,
30 : v = 0x19,
31 : w = 0x1A,
32 : x = 0x1B,
33 : y = 0x1C,
34 : z = 0x1D,
35 : _1 = 0x1E,
36 : _2 = 0x1F,
37 : _3 = 0x20,
38 : _4 = 0x21,
39 : _5 = 0x22,
40 : _6 = 0x23,
41 : _7 = 0x24,
42 : _8 = 0x25,
43 : _9 = 0x26,
44 : _0 = 0x27,
45 : enter = 0x28,
46 : escape = 0x29,
47 : backspace = 0x2A,
48 : tab = 0x2B,
49 : spacebar = 0x2C,
50 : minus = 0x2D,
51 : equal = 0x2E,
52 : left_bracket = 0x2F,
53 : right_bracket = 0x30,
54 : backslash = 0x31,
55 : semicolon = 0x33,
56 : apostrophe = 0x34,
57 : grave_accent = 0x35,
58 : comma = 0x36,
59 : period = 0x37,
60 : slash = 0x38,
61 : caps_lock = 0x39,
62 : F1 = 0x3A,
63 : F2 = 0x3B,
64 : F3 = 0x3C,
65 : F4 = 0x3D,
66 : F5 = 0x3E,
67 : F6 = 0x3F,
68 : F7 = 0x40,
69 : F8 = 0x41,
70 : F9 = 0x42,
71 : F10 = 0x43,
72 : F11 = 0x44,
73 : F12 = 0x45,
74 : print_screen = 0x46,
75 : scroll_lock = 0x47,
76 : pause = 0x48,
77 : insert = 0x49,
78 : home = 0x4A,
79 : page_up = 0x4B,
80 : delete_key = 0x4C,
81 : end = 0x4D,
82 : page_down = 0x4E,
83 : arrow_right = 0x4F,
84 : arrow_left = 0x50,
85 : arrow_down = 0x51,
86 : arrow_up = 0x52,
87 : num_lock = 0x53,
88 : kp_divide = 0x54,
89 : kp_multiply = 0x55,
90 : kp_subtract = 0x56,
91 : kp_add = 0x57,
92 : kp_enter = 0x58,
93 : kp_1 = 0x59,
94 : kp_2 = 0x5A,
95 : kp_3 = 0x5B,
96 : kp_4 = 0x5C,
97 : kp_5 = 0x5D,
98 : kp_6 = 0x5E,
99 : kp_7 = 0x5F,
100 : kp_8 = 0x60,
101 : kp_9 = 0x61,
102 : kp_0 = 0x62,
103 : kp_decimal = 0x63,
104 : world_1 = 0x87,
105 : world_2 = 0x88,
106 : kp_equal = 0x67,
107 : menu = 0x65,
108 : F13 = 0x68,
109 : F14 = 0x69,
110 : F15 = 0x6A,
111 : F16 = 0x6B,
112 : F17 = 0x6C,
113 : F18 = 0x6D,
114 : F19 = 0x6E,
115 : F20 = 0x6F,
116 : F21 = 0x70,
117 : F22 = 0x71,
118 : F23 = 0x72,
119 : F24 = 0x73,
120 : execute = 0x74,
121 : left_control = 0xE0,
122 : left_shift = 0xE1,
123 : left_alt = 0xE2,
124 : left_super = 0xE3,
125 : right_control = 0xE4,
126 : right_shift = 0xE5,
127 : right_alt = 0xE6,
128 : right_super = 0xE7,
129 : };
130 :
131 : [[nodiscard]] constexpr auto
132 129 : serialize(const scancode input_scancode) -> std::string_view {
133 129 : switch (input_scancode) {
134 1 : case scancode::unidentified:
135 1 : return "unidentified";
136 3 : case scancode::a:
137 3 : return "a";
138 1 : case scancode::b:
139 1 : return "b";
140 1 : case scancode::c:
141 1 : return "c";
142 1 : case scancode::d:
143 1 : return "d";
144 1 : case scancode::e:
145 1 : return "e";
146 1 : case scancode::f:
147 1 : return "f";
148 1 : case scancode::g:
149 1 : return "g";
150 1 : case scancode::h:
151 1 : return "h";
152 1 : case scancode::i:
153 1 : return "i";
154 1 : case scancode::j:
155 1 : return "j";
156 1 : case scancode::k:
157 1 : return "k";
158 1 : case scancode::l:
159 1 : return "l";
160 1 : case scancode::m:
161 1 : return "m";
162 1 : case scancode::n:
163 1 : return "n";
164 1 : case scancode::o:
165 1 : return "o";
166 1 : case scancode::p:
167 1 : return "p";
168 1 : case scancode::q:
169 1 : return "q";
170 1 : case scancode::r:
171 1 : return "r";
172 1 : case scancode::s:
173 1 : return "s";
174 1 : case scancode::t:
175 1 : return "t";
176 1 : case scancode::u:
177 1 : return "u";
178 1 : case scancode::v:
179 1 : return "v";
180 1 : case scancode::w:
181 1 : return "w";
182 1 : case scancode::x:
183 1 : return "x";
184 1 : case scancode::y:
185 1 : return "y";
186 1 : case scancode::z:
187 1 : return "z";
188 1 : case scancode::_1:
189 1 : return "1";
190 1 : case scancode::_2:
191 1 : return "2";
192 1 : case scancode::_3:
193 1 : return "3";
194 1 : case scancode::_4:
195 1 : return "4";
196 1 : case scancode::_5:
197 1 : return "5";
198 1 : case scancode::_6:
199 1 : return "6";
200 1 : case scancode::_7:
201 1 : return "7";
202 1 : case scancode::_8:
203 1 : return "8";
204 1 : case scancode::_9:
205 1 : return "9";
206 1 : case scancode::_0:
207 1 : return "0";
208 2 : case scancode::enter:
209 2 : return "enter";
210 3 : case scancode::escape:
211 3 : return "escape";
212 1 : case scancode::backspace:
213 1 : return "backspace";
214 1 : case scancode::tab:
215 1 : return "tab";
216 1 : case scancode::spacebar:
217 1 : return "spacebar";
218 1 : case scancode::minus:
219 1 : return "minus";
220 1 : case scancode::equal:
221 1 : return "equal";
222 1 : case scancode::left_bracket:
223 1 : return "left_bracket";
224 1 : case scancode::right_bracket:
225 1 : return "right_bracket";
226 1 : case scancode::backslash:
227 1 : return "backslash";
228 1 : case scancode::semicolon:
229 1 : return "semicolon";
230 1 : case scancode::apostrophe:
231 1 : return "apostrophe";
232 1 : case scancode::grave_accent:
233 1 : return "grave_accent";
234 1 : case scancode::comma:
235 1 : return "comma";
236 1 : case scancode::period:
237 1 : return "period";
238 1 : case scancode::slash:
239 1 : return "slash";
240 1 : case scancode::caps_lock:
241 1 : return "caps_lock";
242 1 : case scancode::F1:
243 1 : return "F1";
244 1 : case scancode::F2:
245 1 : return "F2";
246 1 : case scancode::F3:
247 1 : return "F3";
248 1 : case scancode::F4:
249 1 : return "F4";
250 1 : case scancode::F5:
251 1 : return "F5";
252 1 : case scancode::F6:
253 1 : return "F6";
254 1 : case scancode::F7:
255 1 : return "F7";
256 1 : case scancode::F8:
257 1 : return "F8";
258 1 : case scancode::F9:
259 1 : return "F9";
260 1 : case scancode::F10:
261 1 : return "F10";
262 1 : case scancode::F11:
263 1 : return "F11";
264 2 : case scancode::F12:
265 2 : return "F12";
266 1 : case scancode::print_screen:
267 1 : return "print_screen";
268 1 : case scancode::scroll_lock:
269 1 : return "scroll_lock";
270 1 : case scancode::pause:
271 1 : return "pause";
272 1 : case scancode::insert:
273 1 : return "insert";
274 1 : case scancode::home:
275 1 : return "home";
276 1 : case scancode::page_up:
277 1 : return "page_up";
278 1 : case scancode::delete_key:
279 1 : return "delete_key";
280 1 : case scancode::end:
281 1 : return "end";
282 1 : case scancode::page_down:
283 1 : return "page_down";
284 1 : case scancode::arrow_right:
285 1 : return "arrow_right";
286 1 : case scancode::arrow_left:
287 1 : return "arrow_left";
288 1 : case scancode::arrow_down:
289 1 : return "arrow_down";
290 1 : case scancode::arrow_up:
291 1 : return "arrow_up";
292 1 : case scancode::num_lock:
293 1 : return "num_lock";
294 1 : case scancode::kp_divide:
295 1 : return "kp_divide";
296 1 : case scancode::kp_multiply:
297 1 : return "kp_multiply";
298 1 : case scancode::kp_subtract:
299 1 : return "kp_subtract";
300 1 : case scancode::kp_add:
301 1 : return "kp_add";
302 1 : case scancode::kp_enter:
303 1 : return "kp_enter";
304 1 : case scancode::kp_1:
305 1 : return "kp_1";
306 1 : case scancode::kp_2:
307 1 : return "kp_2";
308 1 : case scancode::kp_3:
309 1 : return "kp_3";
310 1 : case scancode::kp_4:
311 1 : return "kp_4";
312 1 : case scancode::kp_5:
313 1 : return "kp_5";
314 1 : case scancode::kp_6:
315 1 : return "kp_6";
316 1 : case scancode::kp_7:
317 1 : return "kp_7";
318 1 : case scancode::kp_8:
319 1 : return "kp_8";
320 1 : case scancode::kp_9:
321 1 : return "kp_9";
322 1 : case scancode::kp_0:
323 1 : return "kp_0";
324 1 : case scancode::kp_decimal:
325 1 : return "kp_decimal";
326 1 : case scancode::world_1:
327 1 : return "world_1";
328 1 : case scancode::world_2:
329 1 : return "world_2";
330 1 : case scancode::kp_equal:
331 1 : return "kp_equal";
332 1 : case scancode::menu:
333 1 : return "menu";
334 1 : case scancode::F13:
335 1 : return "F13";
336 1 : case scancode::F14:
337 1 : return "F14";
338 1 : case scancode::F15:
339 1 : return "F15";
340 1 : case scancode::F16:
341 1 : return "F16";
342 1 : case scancode::F17:
343 1 : return "F17";
344 1 : case scancode::F18:
345 1 : return "F18";
346 1 : case scancode::F19:
347 1 : return "F19";
348 1 : case scancode::F20:
349 1 : return "F20";
350 1 : case scancode::F21:
351 1 : return "F21";
352 1 : case scancode::F22:
353 1 : return "F22";
354 1 : case scancode::F23:
355 1 : return "F23";
356 1 : case scancode::F24:
357 1 : return "F24";
358 1 : case scancode::execute:
359 1 : return "execute";
360 1 : case scancode::left_control:
361 1 : return "left_control";
362 1 : case scancode::left_shift:
363 1 : return "left_shift";
364 1 : case scancode::left_alt:
365 1 : return "left_alt";
366 1 : case scancode::left_super:
367 1 : return "left_super";
368 1 : case scancode::right_control:
369 1 : return "right_control";
370 1 : case scancode::right_shift:
371 1 : return "right_shift";
372 1 : case scancode::right_alt:
373 1 : return "right_alt";
374 1 : case scancode::right_super:
375 1 : return "right_super";
376 2 : default:
377 2 : return "unknown enumerator";
378 : }
379 : }
380 :
381 : } // namespace jage::engine::input::keyboard
|