Completed
Push — master ( 6cf062...43f138 )
by Matthew
01:00
created

ed2d.platforms.process_modkeys()   A

Complexity

Conditions 3

Size

Total Lines 6

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 3
dl 0
loc 6
rs 9.4286
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