1
|
|
|
import sdl2 as sdl |
2
|
|
|
|
3
|
|
|
KEY_A = 1 |
4
|
|
|
KEY_B = 2 |
5
|
|
|
KEY_C = 3 |
6
|
|
|
KEY_D = 4 |
7
|
|
|
KEY_E = 5 |
8
|
|
|
KEY_F = 6 |
9
|
|
|
KEY_G = 7 |
10
|
|
|
KEY_H = 8 |
11
|
|
|
KEY_I = 9 |
12
|
|
|
KEY_J = 10 |
13
|
|
|
KEY_K = 11 |
14
|
|
|
KEY_L = 12 |
15
|
|
|
KEY_M = 13 |
16
|
|
|
KEY_N = 14 |
17
|
|
|
KEY_O = 15 |
18
|
|
|
KEY_P = 16 |
19
|
|
|
KEY_Q = 17 |
20
|
|
|
KEY_R = 18 |
21
|
|
|
KEY_S = 19 |
22
|
|
|
KEY_T = 20 |
23
|
|
|
KEY_U = 21 |
24
|
|
|
KEY_V = 22 |
25
|
|
|
KEY_W = 23 |
26
|
|
|
KEY_X = 24 |
27
|
|
|
KEY_Y = 25 |
28
|
|
|
KEY_Z = 26 |
29
|
|
|
KEY_1 = 27 |
30
|
|
|
KEY_2 = 28 |
31
|
|
|
KEY_3 = 29 |
32
|
|
|
KEY_4 = 30 |
33
|
|
|
KEY_5 = 31 |
34
|
|
|
KEY_6 = 32 |
35
|
|
|
KEY_7 = 33 |
36
|
|
|
KEY_7 = 34 |
37
|
|
|
KEY_8 = 35 |
38
|
|
|
KEY_9 = 36 |
39
|
|
|
KEY_RETURN = 37 |
40
|
|
|
KEY_ESCAPE = 38 |
41
|
|
|
KEY_BACKSPACE = 39 |
42
|
|
|
KEY_TAB = 40 |
43
|
|
|
KEY_SPACE = 41 |
44
|
|
|
KEY_MINUS = 42 |
45
|
|
|
KEY_EQUALS = 43 |
46
|
|
|
KEY_LEFT_BRACKET = 44 |
47
|
|
|
KEY_RIGHT_BRACKET = 45 |
48
|
|
|
KEY_BACKSLASH = 46 |
49
|
|
|
KEY_SEMICOLON = 47 |
50
|
|
|
KEY_APOSTROPHE = 48 |
51
|
|
|
KEY_GRAVE = 49 |
52
|
|
|
KEY_COMMA = 50 |
53
|
|
|
KEY_PERIOD = 51 |
54
|
|
|
KEY_SLASH = 52 |
55
|
|
|
KEY_CAPS_LOCK = 53 |
56
|
|
|
KEY_F1 = 54 |
57
|
|
|
KEY_F2 = 55 |
58
|
|
|
KEY_F3 = 56 |
59
|
|
|
KEY_F4 = 57 |
60
|
|
|
KEY_F5 = 58 |
61
|
|
|
KEY_F6 = 59 |
62
|
|
|
KEY_F7 = 60 |
63
|
|
|
KEY_F8 = 61 |
64
|
|
|
KEY_F9 = 62 |
65
|
|
|
KEY_F10 = 63 |
66
|
|
|
KEY_F11 = 64 |
67
|
|
|
KEY_F12 = 65 |
68
|
|
|
KEY_PRINT_SCREEN = 66 |
69
|
|
|
KEY_SCROLL_LOCK = 67 |
70
|
|
|
KEY_PAUSE = 68 |
71
|
|
|
KEY_INSERT = 69 |
72
|
|
|
KEY_HOME = 70 |
73
|
|
|
KEY_PAGE_UP = 71 |
74
|
|
|
KEY_DELETE = 72 |
75
|
|
|
KEY_END = 73 |
76
|
|
|
KEY_PAGE_DOWN = 74 |
77
|
|
|
KEY_RIGHT = 75 |
78
|
|
|
KEY_LEFT = 76 |
79
|
|
|
KEY_DOWN = 77 |
80
|
|
|
KEY_UP = 78 |
81
|
|
|
KEY_NUMLOCK_CLEAR = 79 |
82
|
|
|
KEY_KP_DIVIDE = 80 |
83
|
|
|
KEY_KP_MULTIPLY = 81 |
84
|
|
|
KEY_KP_MINUS = 82 |
85
|
|
|
KEY_KP_PLUS = 83 |
86
|
|
|
KEY_KP_ENTER = 84 |
87
|
|
|
KEY_KP_1 = 85 |
88
|
|
|
KEY_KP_2 = 86 |
89
|
|
|
KEY_KP_3 = 87 |
90
|
|
|
KEY_KP_4 = 88 |
91
|
|
|
KEY_KP_5 = 89 |
92
|
|
|
KEY_KP_6 = 90 |
93
|
|
|
KEY_KP_7 = 91 |
94
|
|
|
KEY_KP_8 = 92 |
95
|
|
|
KEY_KP_9 = 93 |
96
|
|
|
KEY_KP_0 = 94 |
97
|
|
|
KEY_KP_PERIOD = 95 |
98
|
|
|
KEY_NON_US_BACKSLASH = 96 |
99
|
|
|
KEY_LEFT_CTRL = 97 |
100
|
|
|
KEY_LEFT_SHIFT = 98 |
101
|
|
|
KEY_LEFT_ALT = 99 |
102
|
|
|
KEY_LEFT_SUPER = 100 |
103
|
|
|
KEY_RIGHT_CTRL = 101 |
104
|
|
|
KEY_RIGHT_SHIFT = 102 |
105
|
|
|
KEY_RIGHT_ALT = 103 |
106
|
|
|
KEY_RIGHT_SUPER = 104 |
107
|
|
|
MOD_NONE = None |
108
|
|
|
MOD_LEFT_SHIFT = 1 |
109
|
|
|
MOD_RIGHT_SHIFT = 2 |
110
|
|
|
MOD_LEFT_CTRL = 3 |
111
|
|
|
MOD_RIGHT_CTRL = 4 |
112
|
|
|
MOD_LEFT_ALT = 5 |
113
|
|
|
MOD_RIGHT_ALT = 6 |
114
|
|
|
MOD_LEFT_SUPER = 7 |
115
|
|
|
MOD_RIGHT_SUPER = 8 |
116
|
|
|
MOD_NUM = 9 |
117
|
|
|
MOD_CAPS = 10 |
118
|
|
|
|
119
|
|
|
keymap = { |
120
|
|
|
sdl.SDL_SCANCODE_A: KEY_A, |
121
|
|
|
sdl.SDL_SCANCODE_B: KEY_B, |
122
|
|
|
sdl.SDL_SCANCODE_C: KEY_C, |
123
|
|
|
sdl.SDL_SCANCODE_D: KEY_D, |
124
|
|
|
sdl.SDL_SCANCODE_E: KEY_E, |
125
|
|
|
sdl.SDL_SCANCODE_F: KEY_F, |
126
|
|
|
sdl.SDL_SCANCODE_G: KEY_G, |
127
|
|
|
sdl.SDL_SCANCODE_H: KEY_H, |
128
|
|
|
sdl.SDL_SCANCODE_I: KEY_I, |
129
|
|
|
sdl.SDL_SCANCODE_J: KEY_J, |
130
|
|
|
sdl.SDL_SCANCODE_K: KEY_K, |
131
|
|
|
sdl.SDL_SCANCODE_L: KEY_L, |
132
|
|
|
sdl.SDL_SCANCODE_M: KEY_M, |
133
|
|
|
sdl.SDL_SCANCODE_N: KEY_N, |
134
|
|
|
sdl.SDL_SCANCODE_O: KEY_O, |
135
|
|
|
sdl.SDL_SCANCODE_P: KEY_P, |
136
|
|
|
sdl.SDL_SCANCODE_Q: KEY_Q, |
137
|
|
|
sdl.SDL_SCANCODE_R: KEY_R, |
138
|
|
|
sdl.SDL_SCANCODE_S: KEY_S, |
139
|
|
|
sdl.SDL_SCANCODE_T: KEY_T, |
140
|
|
|
sdl.SDL_SCANCODE_U: KEY_U, |
141
|
|
|
sdl.SDL_SCANCODE_V: KEY_V, |
142
|
|
|
sdl.SDL_SCANCODE_W: KEY_W, |
143
|
|
|
sdl.SDL_SCANCODE_X: KEY_X, |
144
|
|
|
sdl.SDL_SCANCODE_Y: KEY_Y, |
145
|
|
|
sdl.SDL_SCANCODE_Z: KEY_Z, |
146
|
|
|
sdl.SDL_SCANCODE_1: KEY_1, |
147
|
|
|
sdl.SDL_SCANCODE_2: KEY_2, |
148
|
|
|
sdl.SDL_SCANCODE_3: KEY_3, |
149
|
|
|
sdl.SDL_SCANCODE_4: KEY_4, |
150
|
|
|
sdl.SDL_SCANCODE_5: KEY_5, |
151
|
|
|
sdl.SDL_SCANCODE_6: KEY_6, |
152
|
|
|
sdl.SDL_SCANCODE_7: KEY_7, |
153
|
|
|
sdl.SDL_SCANCODE_8: KEY_7, |
154
|
|
|
sdl.SDL_SCANCODE_9: KEY_8, |
155
|
|
|
sdl.SDL_SCANCODE_0: KEY_9, |
156
|
|
|
sdl.SDL_SCANCODE_RETURN: KEY_RETURN, |
157
|
|
|
sdl.SDL_SCANCODE_ESCAPE: KEY_ESCAPE, |
158
|
|
|
sdl.SDL_SCANCODE_BACKSPACE: KEY_BACKSPACE, |
159
|
|
|
sdl.SDL_SCANCODE_TAB: KEY_TAB, |
160
|
|
|
sdl.SDL_SCANCODE_SPACE: KEY_SPACE, |
161
|
|
|
sdl.SDL_SCANCODE_MINUS: KEY_MINUS, |
162
|
|
|
sdl.SDL_SCANCODE_EQUALS: KEY_EQUALS, |
163
|
|
|
sdl.SDL_SCANCODE_LEFTBRACKET: KEY_LEFT_BRACKET, |
164
|
|
|
sdl.SDL_SCANCODE_RIGHTBRACKET: KEY_RIGHT_BRACKET, |
165
|
|
|
sdl.SDL_SCANCODE_BACKSLASH: KEY_BACKSLASH, |
166
|
|
|
sdl.SDL_SCANCODE_SEMICOLON: KEY_SEMICOLON, |
167
|
|
|
sdl.SDL_SCANCODE_APOSTROPHE: KEY_APOSTROPHE, |
168
|
|
|
sdl.SDL_SCANCODE_GRAVE: KEY_GRAVE, |
169
|
|
|
sdl.SDL_SCANCODE_COMMA: KEY_COMMA, |
170
|
|
|
sdl.SDL_SCANCODE_PERIOD: KEY_PERIOD, |
171
|
|
|
sdl.SDL_SCANCODE_SLASH: KEY_SLASH, |
172
|
|
|
sdl.SDL_SCANCODE_CAPSLOCK: KEY_CAPS_LOCK, |
173
|
|
|
sdl.SDL_SCANCODE_F1: KEY_F1, |
174
|
|
|
sdl.SDL_SCANCODE_F2: KEY_F2, |
175
|
|
|
sdl.SDL_SCANCODE_F3: KEY_F3, |
176
|
|
|
sdl.SDL_SCANCODE_F4: KEY_F4, |
177
|
|
|
sdl.SDL_SCANCODE_F5: KEY_F5, |
178
|
|
|
sdl.SDL_SCANCODE_F6: KEY_F6, |
179
|
|
|
sdl.SDL_SCANCODE_F7: KEY_F7, |
180
|
|
|
sdl.SDL_SCANCODE_F8: KEY_F8, |
181
|
|
|
sdl.SDL_SCANCODE_F9: KEY_F9, |
182
|
|
|
sdl.SDL_SCANCODE_F10: KEY_F10, |
183
|
|
|
sdl.SDL_SCANCODE_F11: KEY_F11, |
184
|
|
|
sdl.SDL_SCANCODE_F12: KEY_F12, |
185
|
|
|
sdl.SDL_SCANCODE_PRINTSCREEN: KEY_PRINT_SCREEN, |
186
|
|
|
sdl.SDL_SCANCODE_SCROLLLOCK: KEY_SCROLL_LOCK, |
187
|
|
|
sdl.SDL_SCANCODE_PAUSE: KEY_PAUSE, |
188
|
|
|
sdl.SDL_SCANCODE_INSERT: KEY_INSERT, |
189
|
|
|
sdl.SDL_SCANCODE_HOME: KEY_HOME, |
190
|
|
|
sdl.SDL_SCANCODE_PAGEUP: KEY_PAGE_UP, |
191
|
|
|
sdl.SDL_SCANCODE_DELETE: KEY_DELETE, |
192
|
|
|
sdl.SDL_SCANCODE_END: KEY_END, |
193
|
|
|
sdl.SDL_SCANCODE_PAGEDOWN: KEY_PAGE_DOWN, |
194
|
|
|
sdl.SDL_SCANCODE_RIGHT: KEY_RIGHT, |
195
|
|
|
sdl.SDL_SCANCODE_LEFT: KEY_LEFT, |
196
|
|
|
sdl.SDL_SCANCODE_DOWN: KEY_DOWN, |
197
|
|
|
sdl.SDL_SCANCODE_UP: KEY_UP, |
198
|
|
|
sdl.SDL_SCANCODE_NUMLOCKCLEAR: KEY_NUMLOCK_CLEAR, |
199
|
|
|
sdl.SDL_SCANCODE_KP_DIVIDE: KEY_KP_DIVIDE, |
200
|
|
|
sdl.SDL_SCANCODE_KP_MULTIPLY: KEY_KP_MULTIPLY, |
201
|
|
|
sdl.SDL_SCANCODE_KP_MINUS: KEY_KP_MINUS, |
202
|
|
|
sdl.SDL_SCANCODE_KP_PLUS: KEY_KP_PLUS, |
203
|
|
|
sdl.SDL_SCANCODE_KP_ENTER: KEY_KP_ENTER, |
204
|
|
|
sdl.SDL_SCANCODE_KP_1: KEY_KP_1, |
205
|
|
|
sdl.SDL_SCANCODE_KP_2: KEY_KP_2, |
206
|
|
|
sdl.SDL_SCANCODE_KP_3: KEY_KP_3, |
207
|
|
|
sdl.SDL_SCANCODE_KP_4: KEY_KP_4, |
208
|
|
|
sdl.SDL_SCANCODE_KP_5: KEY_KP_5, |
209
|
|
|
sdl.SDL_SCANCODE_KP_6: KEY_KP_6, |
210
|
|
|
sdl.SDL_SCANCODE_KP_7: KEY_KP_7, |
211
|
|
|
sdl.SDL_SCANCODE_KP_8: KEY_KP_8, |
212
|
|
|
sdl.SDL_SCANCODE_KP_9: KEY_KP_9, |
213
|
|
|
sdl.SDL_SCANCODE_KP_0: KEY_KP_0, |
214
|
|
|
sdl.SDL_SCANCODE_KP_PERIOD: KEY_KP_PERIOD, |
215
|
|
|
sdl.SDL_SCANCODE_NONUSBACKSLASH: KEY_NON_US_BACKSLASH, |
216
|
|
|
sdl.SDL_SCANCODE_LCTRL: KEY_LEFT_CTRL, |
217
|
|
|
sdl.SDL_SCANCODE_LSHIFT: KEY_LEFT_SHIFT, |
218
|
|
|
sdl.SDL_SCANCODE_LALT: KEY_LEFT_ALT, |
219
|
|
|
sdl.SDL_SCANCODE_LGUI: KEY_LEFT_SUPER, |
220
|
|
|
sdl.SDL_SCANCODE_RCTRL: KEY_RIGHT_CTRL, |
221
|
|
|
sdl.SDL_SCANCODE_RSHIFT: KEY_RIGHT_SHIFT, |
222
|
|
|
sdl.SDL_SCANCODE_RALT: KEY_RIGHT_ALT, |
223
|
|
|
sdl.SDL_SCANCODE_RGUI: KEY_RIGHT_SUPER, |
224
|
|
|
} |
225
|
|
|
|
226
|
|
|
modmap = { |
227
|
|
|
sdl.KMOD_NONE: MOD_NONE, |
228
|
|
|
sdl.KMOD_LSHIFT: MOD_LEFT_SHIFT, |
229
|
|
|
sdl.KMOD_RSHIFT: MOD_RIGHT_SHIFT, |
230
|
|
|
sdl.KMOD_LCTRL: MOD_LEFT_CTRL, |
231
|
|
|
sdl.KMOD_RCTRL: MOD_RIGHT_CTRL, |
232
|
|
|
sdl.KMOD_LALT: MOD_LEFT_ALT, |
233
|
|
|
sdl.KMOD_RALT: MOD_RIGHT_ALT, |
234
|
|
|
sdl.KMOD_LGUI: MOD_LEFT_SUPER, |
235
|
|
|
sdl.KMOD_RGUI: MOD_RIGHT_SUPER, |
236
|
|
|
sdl.KMOD_NUM: MOD_NUM, |
237
|
|
|
sdl.KMOD_CAPS: MOD_CAPS, |
238
|
|
|
} |
239
|
|
|
|
240
|
|
|
|
241
|
|
|
keystrMap = { |
242
|
|
|
KEY_CAPS_LOCK: 'CAPS LOCK', |
243
|
|
|
KEY_F1: 'F1', |
244
|
|
|
KEY_F2: 'F2', |
245
|
|
|
KEY_F3: 'F3', |
246
|
|
|
KEY_F4: 'F4', |
247
|
|
|
KEY_F5: 'F5', |
248
|
|
|
KEY_F6: 'F6', |
249
|
|
|
KEY_F7: 'F7', |
250
|
|
|
KEY_F8: 'F8', |
251
|
|
|
KEY_F9: 'F9', |
252
|
|
|
KEY_F10: 'F10', |
253
|
|
|
KEY_F11: 'F11', |
254
|
|
|
KEY_F12: 'F12', |
255
|
|
|
KEY_PRINT_SCREEN: 'PRINT SCREEN', |
256
|
|
|
KEY_SCROLL_LOCK: 'SCROLL LOCK', |
257
|
|
|
KEY_PAUSE: 'PAUSE', |
258
|
|
|
KEY_INSERT: 'INSERT', |
259
|
|
|
KEY_HOME: 'HOME', |
260
|
|
|
KEY_PAGE_UP: 'PAGE UP', |
261
|
|
|
KEY_END: 'END', |
262
|
|
|
KEY_PAGE_DOWN: 'PAGE DOWN', |
263
|
|
|
KEY_RIGHT: 'RIGHT', |
264
|
|
|
KEY_LEFT: 'LEFT', |
265
|
|
|
KEY_DOWN: 'DOWN', |
266
|
|
|
KEY_UP: 'UP', |
267
|
|
|
KEY_NUMLOCK_CLEAR: 'NUMLOCK CLEAR', |
268
|
|
|
KEY_LEFT_CTRL: 'LEFT CTRL', |
269
|
|
|
KEY_LEFT_SHIFT: 'LEFT SHIFT', |
270
|
|
|
KEY_LEFT_ALT: 'LEFT ALT', |
271
|
|
|
KEY_LEFT_SUPER: 'LEFT SUPER', |
272
|
|
|
KEY_RIGHT_CTRL: 'RIGHT CTRL', |
273
|
|
|
KEY_RIGHT_SHIFT: 'RIGHT SHIFT', |
274
|
|
|
KEY_RIGHT_ALT: 'RIGHT ALT', |
275
|
|
|
KEY_RIGHT_SUPER: 'RIGHT SUPER', |
276
|
|
|
} |
277
|
|
|
|
278
|
|
|
|
279
|
|
|
def process_modkeys(value): |
280
|
|
|
keys = [] |
281
|
|
|
for key in modmap: |
282
|
|
|
if value & key: |
283
|
|
|
keys.append(modmap[key]) |
284
|
|
|
return keys |
285
|
|
|
|
286
|
|
|
|
287
|
|
|
def process_key_char(value): |
288
|
|
|
char = None |
289
|
|
|
try: |
290
|
|
|
char = str(chr(value)) |
291
|
|
|
except ValueError: |
292
|
|
|
temp = value ^ (1 << 30) |
293
|
|
|
if temp in keymap: |
294
|
|
|
char = keystrMap[keymap[temp]] |
295
|
|
|
return char |
296
|
|
|
|