3#include <zen/zen_pch.h>
6 enum class KeyModifier : uint16_t {
16 constexpr KeyModifier operator|(KeyModifier a, KeyModifier b) {
17 return static_cast<KeyModifier
>(
static_cast<uint16_t
>(a) |
static_cast<uint16_t
>(b));
20 constexpr KeyModifier operator&(KeyModifier a, KeyModifier b) {
21 return static_cast<KeyModifier
>(
static_cast<uint16_t
>(a) &
static_cast<uint16_t
>(b));
24 constexpr KeyModifier &operator|=(KeyModifier &a, KeyModifier b) {
29 constexpr KeyModifier mapSDLMods(SDL_Keymod currentMod) {
30 KeyModifier mods = KeyModifier::None;
32 if (currentMod & SDL_KMOD_SHIFT) {
33 mods |= KeyModifier::Shift;
35 if (currentMod & SDL_KMOD_CTRL) {
36 mods |= KeyModifier::Ctrl;
38 if (currentMod & SDL_KMOD_ALT) {
39 mods |= KeyModifier::Alt;
41 if (currentMod & SDL_KMOD_GUI) {
42 mods |= KeyModifier::Super;
44 if (currentMod & SDL_KMOD_CAPS) {
45 mods |= KeyModifier::Caps;
47 if (currentMod & SDL_KMOD_NUM) {
48 mods |= KeyModifier::Num;
54 using ScanCode = std::uint16_t;
58 static constexpr ScanCode Unknown = 0;
60 static constexpr ScanCode A = 4;
61 static constexpr ScanCode B = 5;
62 static constexpr ScanCode C = 6;
63 static constexpr ScanCode D = 7;
64 static constexpr ScanCode E = 8;
65 static constexpr ScanCode F = 9;
66 static constexpr ScanCode G = 10;
67 static constexpr ScanCode H = 11;
68 static constexpr ScanCode I = 12;
69 static constexpr ScanCode J = 13;
70 static constexpr ScanCode K = 14;
71 static constexpr ScanCode L = 15;
72 static constexpr ScanCode M = 16;
73 static constexpr ScanCode N = 17;
74 static constexpr ScanCode O = 18;
75 static constexpr ScanCode P = 19;
76 static constexpr ScanCode Q = 20;
77 static constexpr ScanCode R = 21;
78 static constexpr ScanCode S = 22;
79 static constexpr ScanCode T = 23;
80 static constexpr ScanCode U = 24;
81 static constexpr ScanCode V = 25;
82 static constexpr ScanCode W = 26;
83 static constexpr ScanCode X = 27;
84 static constexpr ScanCode Y = 28;
85 static constexpr ScanCode Z = 29;
88 static constexpr ScanCode D1 = 30;
89 static constexpr ScanCode D2 = 31;
90 static constexpr ScanCode D3 = 32;
91 static constexpr ScanCode D4 = 33;
92 static constexpr ScanCode D5 = 34;
93 static constexpr ScanCode D6 = 35;
94 static constexpr ScanCode D7 = 36;
95 static constexpr ScanCode D8 = 37;
96 static constexpr ScanCode D9 = 38;
97 static constexpr ScanCode D0 = 39;
100 static constexpr ScanCode Enter = 40;
101 static constexpr ScanCode Escape = 41;
102 static constexpr ScanCode Backspace = 42;
103 static constexpr ScanCode Tab = 43;
104 static constexpr ScanCode Space = 44;
105 static constexpr ScanCode Minus = 45;
106 static constexpr ScanCode Equals = 46;
107 static constexpr ScanCode LeftBracket = 47;
108 static constexpr ScanCode RightBracket = 48;
109 static constexpr ScanCode Backslash = 49;
110 static constexpr ScanCode NonUSHash = 50;
111 static constexpr ScanCode Semicolon = 51;
112 static constexpr ScanCode Apostrophe = 52;
113 static constexpr ScanCode Grave = 53;
114 static constexpr ScanCode Comma = 54;
115 static constexpr ScanCode Period = 55;
116 static constexpr ScanCode Slash = 56;
117 static constexpr ScanCode CapsLock = 57;
120 static constexpr ScanCode F1 = 58;
121 static constexpr ScanCode F2 = 59;
122 static constexpr ScanCode F3 = 60;
123 static constexpr ScanCode F4 = 61;
124 static constexpr ScanCode F5 = 62;
125 static constexpr ScanCode F6 = 63;
126 static constexpr ScanCode F7 = 64;
127 static constexpr ScanCode F8 = 65;
128 static constexpr ScanCode F9 = 66;
129 static constexpr ScanCode F10 = 67;
130 static constexpr ScanCode F11 = 68;
131 static constexpr ScanCode F12 = 69;
132 static constexpr ScanCode PrintScreen = 70;
133 static constexpr ScanCode ScrollLock = 71;
134 static constexpr ScanCode Pause = 72;
137 static constexpr ScanCode Insert = 73;
138 static constexpr ScanCode Home = 74;
139 static constexpr ScanCode PageUp = 75;
140 static constexpr ScanCode Delete = 76;
141 static constexpr ScanCode End = 77;
142 static constexpr ScanCode PageDown = 78;
143 static constexpr ScanCode Right = 79;
144 static constexpr ScanCode Left = 80;
145 static constexpr ScanCode Down = 81;
146 static constexpr ScanCode Up = 82;
149 static constexpr ScanCode NumLockClear = 83;
150 static constexpr ScanCode KpDivide = 84;
151 static constexpr ScanCode KpMultiply = 85;
152 static constexpr ScanCode KpMinus = 86;
153 static constexpr ScanCode KpPlus = 87;
154 static constexpr ScanCode KpEnter = 88;
155 static constexpr ScanCode Kp1 = 89;
156 static constexpr ScanCode Kp2 = 90;
157 static constexpr ScanCode Kp3 = 91;
158 static constexpr ScanCode Kp4 = 92;
159 static constexpr ScanCode Kp5 = 93;
160 static constexpr ScanCode Kp6 = 94;
161 static constexpr ScanCode Kp7 = 95;
162 static constexpr ScanCode Kp8 = 96;
163 static constexpr ScanCode Kp9 = 97;
164 static constexpr ScanCode Kp0 = 98;
165 static constexpr ScanCode KpPeriod = 99;
168 static constexpr ScanCode NonUSBackslash = 100;
169 static constexpr ScanCode Application = 101;
170 static constexpr ScanCode Power = 102;
171 static constexpr ScanCode KpEquals = 103;
172 static constexpr ScanCode F13 = 104;
173 static constexpr ScanCode F14 = 105;
174 static constexpr ScanCode F15 = 106;
175 static constexpr ScanCode F16 = 107;
176 static constexpr ScanCode F17 = 108;
177 static constexpr ScanCode F18 = 109;
178 static constexpr ScanCode F19 = 110;
179 static constexpr ScanCode F20 = 111;
180 static constexpr ScanCode F21 = 112;
181 static constexpr ScanCode F22 = 113;
182 static constexpr ScanCode F23 = 114;
183 static constexpr ScanCode F24 = 115;
184 static constexpr ScanCode Execute = 116;
185 static constexpr ScanCode Help = 117;
186 static constexpr ScanCode Menu = 118;
187 static constexpr ScanCode Select = 119;
188 static constexpr ScanCode Stop = 120;
189 static constexpr ScanCode Again = 121;
190 static constexpr ScanCode Undo = 122;
191 static constexpr ScanCode Cut = 123;
192 static constexpr ScanCode Copy = 124;
193 static constexpr ScanCode Paste = 125;
194 static constexpr ScanCode Find = 126;
195 static constexpr ScanCode Mute = 127;
196 static constexpr ScanCode VolumeUp = 128;
197 static constexpr ScanCode VolumeDown = 129;
199 static constexpr ScanCode KpComma = 133;
200 static constexpr ScanCode KpEqualsAS400 = 134;
202 static constexpr ScanCode International1 = 135;
203 static constexpr ScanCode International2 = 136;
204 static constexpr ScanCode International3 = 137;
205 static constexpr ScanCode International4 = 138;
206 static constexpr ScanCode International5 = 139;
207 static constexpr ScanCode International6 = 140;
208 static constexpr ScanCode International7 = 141;
209 static constexpr ScanCode International8 = 142;
210 static constexpr ScanCode International9 = 143;
212 static constexpr ScanCode Lang1 = 144;
213 static constexpr ScanCode Lang2 = 145;
214 static constexpr ScanCode Lang3 = 146;
215 static constexpr ScanCode Lang4 = 147;
216 static constexpr ScanCode Lang5 = 148;
217 static constexpr ScanCode Lang6 = 149;
218 static constexpr ScanCode Lang7 = 150;
219 static constexpr ScanCode Lang8 = 151;
220 static constexpr ScanCode Lang9 = 152;
222 static constexpr ScanCode AltErase = 153;
223 static constexpr ScanCode SysReq = 154;
224 static constexpr ScanCode Cancel = 155;
225 static constexpr ScanCode Clear = 156;
226 static constexpr ScanCode Prior = 157;
227 static constexpr ScanCode Return2 = 158;
228 static constexpr ScanCode Separator = 159;
229 static constexpr ScanCode Out = 160;
230 static constexpr ScanCode Oper = 161;
231 static constexpr ScanCode ClearAgain = 162;
232 static constexpr ScanCode CrSel = 163;
233 static constexpr ScanCode ExSel = 164;
236 static constexpr ScanCode Kp00 = 176;
237 static constexpr ScanCode Kp000 = 177;
238 static constexpr ScanCode ThousandsSeparator = 178;
239 static constexpr ScanCode DecimalSeparator = 179;
240 static constexpr ScanCode CurrencyUnit = 180;
241 static constexpr ScanCode CurrencySubUnit = 181;
242 static constexpr ScanCode KpLeftParen = 182;
243 static constexpr ScanCode KpRightParen = 183;
244 static constexpr ScanCode KpLeftBrace = 184;
245 static constexpr ScanCode KpRightBrace = 185;
246 static constexpr ScanCode KpTab = 186;
247 static constexpr ScanCode KpBackspace = 187;
248 static constexpr ScanCode KpA = 188;
249 static constexpr ScanCode KpB = 189;
250 static constexpr ScanCode KpC = 190;
251 static constexpr ScanCode KpD = 191;
252 static constexpr ScanCode KpE = 192;
253 static constexpr ScanCode KpF = 193;
254 static constexpr ScanCode KpXor = 194;
255 static constexpr ScanCode KpPower = 195;
256 static constexpr ScanCode KpPercent = 196;
257 static constexpr ScanCode KpLess = 197;
258 static constexpr ScanCode KpGreater = 198;
259 static constexpr ScanCode KpAmpersand = 199;
260 static constexpr ScanCode KpDblAmpersand = 200;
261 static constexpr ScanCode KpVerticalBar = 201;
262 static constexpr ScanCode KpDblVerticalBar = 202;
263 static constexpr ScanCode KpColon = 203;
264 static constexpr ScanCode KpHash = 204;
265 static constexpr ScanCode KpSpace = 205;
266 static constexpr ScanCode KpAt = 206;
267 static constexpr ScanCode KpExclam = 207;
268 static constexpr ScanCode KpMemStore = 208;
269 static constexpr ScanCode KpMemRecall = 209;
270 static constexpr ScanCode KpMemClear = 210;
271 static constexpr ScanCode KpMemAdd = 211;
272 static constexpr ScanCode KpMemSubtract = 212;
273 static constexpr ScanCode KpMemMultiply = 213;
274 static constexpr ScanCode KpMemDivide = 214;
275 static constexpr ScanCode KpPlusMinus = 215;
276 static constexpr ScanCode KpClear = 216;
277 static constexpr ScanCode KpClearEntry = 217;
278 static constexpr ScanCode KpBinary = 218;
279 static constexpr ScanCode KpOctal = 219;
280 static constexpr ScanCode KpDecimal = 220;
281 static constexpr ScanCode KpHexadecimal = 221;
284 static constexpr ScanCode LCtrl = 224;
285 static constexpr ScanCode LShift = 225;
286 static constexpr ScanCode LAlt = 226;
287 static constexpr ScanCode LGUI = 227;
288 static constexpr ScanCode RCtrl = 228;
289 static constexpr ScanCode RShift = 229;
290 static constexpr ScanCode RAlt = 230;
291 static constexpr ScanCode RGUI = 231;
294 static constexpr ScanCode Mode = 257;
297 static constexpr ScanCode Sleep = 258;
298 static constexpr ScanCode Wake = 259;
299 static constexpr ScanCode ChannelIncrement = 260;
300 static constexpr ScanCode ChannelDecrement = 261;
301 static constexpr ScanCode MediaPlay = 262;
302 static constexpr ScanCode MediaPause = 263;
303 static constexpr ScanCode MediaRecord = 264;
304 static constexpr ScanCode MediaFastForward = 265;
305 static constexpr ScanCode MediaRewind = 266;
306 static constexpr ScanCode MediaNextTrack = 267;
307 static constexpr ScanCode MediaPreviousTrack = 268;
308 static constexpr ScanCode MediaStop = 269;
309 static constexpr ScanCode MediaEject = 270;
310 static constexpr ScanCode MediaPlayPause = 271;
311 static constexpr ScanCode MediaSelect = 272;
312 static constexpr ScanCode AC_New = 273;
313 static constexpr ScanCode AC_Open = 274;
314 static constexpr ScanCode AC_Close = 275;
315 static constexpr ScanCode AC_Exit = 276;
316 static constexpr ScanCode AC_Save = 277;
317 static constexpr ScanCode AC_Print = 278;
318 static constexpr ScanCode AC_Properties = 279;
319 static constexpr ScanCode AC_Search = 280;
320 static constexpr ScanCode AC_Home = 281;
321 static constexpr ScanCode AC_Back = 282;
322 static constexpr ScanCode AC_Forward = 283;
323 static constexpr ScanCode AC_Stop = 284;
324 static constexpr ScanCode AC_Refresh = 285;
325 static constexpr ScanCode AC_Bookmarks = 286;
328 static constexpr ScanCode SoftLeft = 287;
329 static constexpr ScanCode SoftRight = 288;
330 static constexpr ScanCode Call = 289;
331 static constexpr ScanCode EndCall = 290;
334 static constexpr ScanCode Reserved = 400;
335 static constexpr ScanCode Count = 512;
338 static constexpr ScanCode Return = Enter;
339 static constexpr ScanCode LeftCtrl = LCtrl;
340 static constexpr ScanCode LeftAlt = LAlt;
341 static constexpr ScanCode LeftGUI = LGUI;
342 static constexpr ScanCode RightCtrl = RCtrl;
343 static constexpr ScanCode RightAlt = RAlt;
344 static constexpr ScanCode RightGUI = RGUI;