Update with current status
[gnash.git] / libcore / GnashKey.h
blob16ecc7ac0d9834a913f5813df0f3479639ad21d3
1 // GnashKey.h: map sets of keycodes to each other.
2 //
3 // Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
4 // Free Software Foundation, Inc
5 //
6 // This program is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 3 of the License, or
9 // (at your option) any later version.
10 //
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software
18 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 #ifndef GNASHKEY_H
21 #define GNASHKEY_H
23 namespace gnash {
25 namespace key {
27 /// Conflicts with mingw header with gcc3.x (or whatever
28 /// antiquated version mingw has).
29 #ifdef _WIN32
30 # undef REGISTERED
31 #endif
33 enum modifier
35 GNASH_MOD_NONE = 0,
36 GNASH_MOD_SHIFT = 1,
37 GNASH_MOD_CONTROL = 2,
38 GNASH_MOD_ALT = 4
41 // Gnash DisplayObject codes. Each code represents a single DisplayObject on the keyboard.
42 // The first 128 code are ordered by their correspond ASCII value.
43 enum code
45 INVALID = 0,
46 UNKNOWN1,
47 UNKNOWN2,
48 UNKNOWN3,
49 UNKNOWN4,
50 UNKNOWN5,
51 UNKNOWN6,
52 UNKNOWN7,
53 BACKSPACE = 8,
54 TAB = 9,
55 UNKNOWN10,
56 UNKNOWN11,
57 CLEAR = 12,
58 ENTER = 13,
59 UNKNOWN14,
60 UNKNOWN15,
61 SHIFT = 16,
62 CONTROL = 17,
63 ALT = 18,
64 PAUSE = 19,
65 CAPSLOCK = 20,
66 UNKNOWN21,
67 UNKNOWN22,
68 UNKNOWN23,
69 UNKNOWN24,
70 UNKNOWN25,
71 UNKNOWN26,
72 ESCAPE = 27,
73 UNKNOWN28,
74 UNKNOWN29,
75 UNKNOWN30,
76 UNKNOWN31,
77 SPACE = 32,
78 EXCLAM = 33,
79 DOUBLE_QUOTE = 34,
80 HASH = 35,
81 DOLLAR = 36,
82 PERCENT = 37,
83 AMPERSAND = 38 ,
84 SINGLE_QUOTE = 39,
85 PAREN_LEFT = 40,
86 PAREN_RIGHT = 41,
87 ASTERISK = 42,
88 PLUS = 43,
89 COMMA = 44,
90 MINUS = 45,
91 PERIOD = 46,
92 SLASH =47,
94 _0 = 48,
95 _1,
96 _2,
97 _3,
98 _4,
99 _5,
103 _9 = 57,
105 COLON = 58,
106 SEMICOLON = 59,
107 LESS = 60,
108 EQUALS = 61,
109 MORE = 62,
110 QUESTION = 63,
111 AT = 64,
113 A = 65,
138 Z = 90,
140 LEFT_BRACKET = 91,
141 BACKSLASH =92,
142 RIGHT_BRACKET = 93,
143 CARET = 94,
144 UNDERSCORE = 95,
145 BACKQUOTE = 96,
147 a = 97,
172 z = 122,
173 LEFT_BRACE = 123,
174 PIPE = 124,
175 RIGHT_BRACE = 125,
176 ASCIITILDE = 126,
177 DELETEKEY = 127,
179 KP_0 = 128,
180 KP_1,
181 KP_2,
182 KP_3,
183 KP_4,
184 KP_5,
185 KP_6,
186 KP_7,
187 KP_8,
188 KP_9 = 137,
190 F1 = 138,
199 F10,
200 F11,
201 F12,
202 F13,
203 F14,
204 F15 = 152,
206 UP = 153,
207 DOWN = 154,
208 RIGHT = 155,
209 LEFT = 156,
210 INSERT = 157,
211 HOME = 158,
212 END = 159,
213 PGUP = 160,
214 PGDN = 161,
216 KP_ADD = 162,
217 KP_SUBTRACT = 163,
218 KP_MULTIPLY = 164,
219 KP_DIVIDE = 165,
220 KP_DECIMAL = 166,
221 KP_ENTER = 167,
223 NUM_LOCK = 168,
225 // Extended ASCII
227 NOBREAKSPACE = 169,
228 EXCLAM_DOWN = 170,
229 CENT = 171,
230 STERLING = 172,
231 CURRENCY = 173,
232 YEN = 174,
233 BROKENBAR = 175,
234 SECTION = 176,
235 DIAERESIS = 177,
236 COPYRIGHT = 178,
237 ORDFEMININE = 179,
238 GUILLEMOTLEFT = 180,
239 NOTSIGN = 181,
240 HYPHEN = 182,
241 REGISTERED = 183,
242 MACRON = 184,
243 DEGREE = 185,
244 PLUSMINUS = 186,
245 TWOSUPERIOR = 187,
246 THREESUPERIOR = 188,
247 ACUTE = 189,
248 MU = 190,
249 PARAGRAPH = 191,
250 PERIODCENTRED = 192,
251 CEDILLA = 193,
252 ONESUPERIOR = 194,
253 MASCULINE = 195,
254 GUILLEMOTRIGHT = 196,
255 ONEQUARTER = 197,
256 ONEHALF = 198,
257 THREEQUARTERS = 199,
258 QUESTIONDOWN = 200,
259 AGRAVE = 201,
260 AACUTE = 202,
261 ACIRCUMFLEX = 203,
262 ATILDE = 204,
263 ADIAERESIS = 205,
264 ARING = 206,
265 AE = 207,
266 CCEDILLA = 208,
267 EGRAVE = 209,
268 EACUTE = 210,
269 ECIRCUMFLEX = 211,
270 EDIAERESIS = 212,
271 IGRAVE = 213,
272 IACUTE = 214,
273 ICIRCUMFLEX = 215,
274 IDIAERESIS = 216,
275 ETH = 217,
276 NTILDE = 218,
277 OGRAVE = 219,
278 OACUTE = 220,
279 OCIRCUMFLEX = 221,
280 OTILDE = 222,
281 ODIAERESIS = 223,
282 MULTIPLY = 224,
283 OSLASH = 225,
284 UGRAVE = 226,
285 UACUTE = 227,
286 UCIRCUMFLEX = 228,
287 UDIAERESIS = 229,
288 YACUTE = 230,
289 THORN = 231,
290 sSHARP = 232,
291 aGRAVE = 233,
292 aACUTE = 234,
293 aCIRCUMFLEX = 235,
294 aTILDE = 236,
295 aDIAERESIS = 237,
296 aRING = 238,
297 ae = 239,
298 cCEDILLA = 240,
299 eGRAVE = 241,
300 eACUTE = 242,
301 eCIRCUMFLEX = 243,
302 eDIAERESIS = 244,
303 iGRAVE = 245,
304 iACUTE = 246,
305 iCIRCUMFLEX = 247,
306 iDIAERESIS = 248,
307 eth = 249,
308 nTILDE = 250,
309 oGRAVE = 251,
310 oACUTE = 252,
311 oCIRCUMFLEX = 253,
312 oTILDE = 254,
313 oDIAERESIS = 255,
314 DIVISION = 256,
315 oSLASH = 257,
316 uGRAVE = 258,
317 uACUTE = 259,
318 uCIRCUMFLEX = 260,
319 uDIAERESIS = 261,
320 yACUTE = 262,
321 thorn = 263,
322 yDIAERESIS = 264,
324 // TODO: add other function keys and DisplayObjects not yet known.
325 HELP = 265,
326 KEYCOUNT
329 enum type
331 SWF,
332 KEY,
333 ASCII,
334 TYPES
337 const unsigned char codeMap[KEYCOUNT][TYPES] = {
338 //{swfKeyCode, keycode, asciiKeyCode}
339 {0, 0, 0}, // INVALID = 0
340 {0, 0, 0}, // UNKNOWN1
341 {0, 0, 0}, // UNKNOWN2
342 {0, 0, 0}, // UNKNOWN3
343 {0, 0, 0}, // UNKNOWN4
344 {0, 0, 0}, // UNKNOWN5
345 {0, 0, 0}, // UNKNOWN6
346 {0, 0, 0}, // UNKNOWN7
347 {8, 8, 8}, // BACKSPACE = 8
348 {18, 9, 9}, // TAB = 9
349 {0, 0, 0}, // UNKNOWN10
350 {0, 0, 0}, // UNKNOWN11
351 {0, 12, 0}, // CLEAR = 12
352 {13, 13, 13}, // ENTER = 13
353 {0, 0, 0}, // UNKNOWN14
354 {0, 0, 0}, // UNKNOWN15
355 {0, 16, 0}, // SHIFT = 16
356 {0, 17, 0}, // CONTROL = 17
357 {0, 18, 0}, // ALT = 18
358 {0, 19, 0}, // PAUSE = 19
359 {0, 20, 0}, // CAPSLOCK = 20
360 {0, 0, 0}, // UNKNOWN21
361 {0, 0, 0}, // UNKNOWN22
362 {0, 0, 0}, // UNKNOWN23
363 {0, 0, 0}, // UNKNOWN24
364 {0, 0, 0}, // UNKNOWN25
365 {0, 0, 0}, // UNKNOWN26
366 {19, 27, 27}, // ESCAPE = 27
367 {0, 0, 0}, // UNKNOWN28
368 {0, 0, 0}, // UNKNOWN29
369 {0, 0, 0}, // UNKNOWN30
370 {0, 0, 0}, // UNKNOWN31
371 {32, 32, 32}, // SPACE = 32
372 {33, 49, 33}, // EXCLAM = 33
373 {34, 222, 34}, // DOUBLE_QUOTE = 34
374 {35, 51, 35}, // HASH = 35
375 {36, 52, 36}, // DOLLAR = 36
376 {37, 53, 37}, // PERCENT = 37
377 {38, 55, 38}, // AMPERSAND = 38
378 {39, 222, 39}, // SINGLE_QUOTE = 39
379 {40, 57, 40}, // PAREN_LEFT = 40
380 {41, 48, 41}, // PAREN_RIGHT = 41
381 {42, 56, 42}, // ASTERISK = 42
382 {43, 187, 43}, // PLUS = 43
383 {44, 188, 44}, // COMMA = 44
384 {45, 189, 45}, // MINUS = 45
385 {46, 190, 46}, // PERIOD = 46
386 {47, 191, 47}, // SLASH = 47
387 {48, 48, 48}, // 0 = 48
388 {49, 49, 49}, // 1
389 {50, 50, 50}, // 2
390 {51, 51, 51}, // 3
391 {52, 52, 52}, // 4
392 {53, 53, 53}, // 5
393 {54, 54, 54}, // 6
394 {55, 55, 55}, // 7
395 {56, 56, 56}, // 8
396 {57, 57, 57}, // 9 = 57
397 {58, 186, 58}, // COLON = 58
398 {59, 186, 59}, // SEMICOLON = 59
399 {60, 188, 60}, // LESS = 60
400 {61, 187, 61}, // EQUALS = 61
401 {62, 190, 62}, // MORE = 62
402 {63, 191, 63}, // QUESTION = 63
403 {64, 50, 64}, // AT = 64
404 {65, 65, 65}, // A = 65
405 {66, 66, 66}, // B
406 {67, 67, 67}, // C
407 {68, 68, 68}, // D
408 {69, 69, 69}, // E
409 {70, 70, 70}, // F
410 {71, 71, 71}, // G
411 {72, 72, 72}, // H
412 {73, 73, 73}, // I
413 {74, 74, 74}, // J
414 {75, 75, 75}, // K
415 {76, 76, 76}, // L
416 {77, 77, 77}, // M
417 {78, 78, 78}, // N
418 {79, 79, 79}, // O
419 {80, 80, 80}, // P
420 {81, 81, 81}, // Q
421 {82, 82, 82}, // R
422 {83, 83, 83}, // S
423 {84, 84, 84}, // T
424 {85, 85, 85}, // U
425 {86, 86, 86}, // V
426 {87, 87, 87}, // W
427 {88, 88, 88}, // X
428 {89, 89, 89}, // Y
429 {90, 90, 90}, // Z = 90
430 {91, 219, 91}, // LEFT_BRACKET = 91
431 {92, 220, 92}, // BACKSLASH = 92
432 {93, 221, 93}, // RIGHT_BRACKET = 93
433 {94, 54, 94}, // CARET = 94
434 {95, 189, 95}, // UNDERSCORE = 95
435 {96, 192, 96}, // BACKQUOTE = 96
436 {97, 65, 97}, // a = 97
437 {98, 66, 98}, // b
438 {99, 67, 99}, // c
439 {100,68, 100}, // d
440 {101,69, 101}, // e
441 {102,70, 102}, // f
442 {103,71, 103}, // g
443 {104,72, 104}, // h
444 {105,73, 105}, // i
445 {106,74, 106}, // j
446 {107,75, 107}, // k
447 {108,76, 108}, // l
448 {109,77, 109}, // m
449 {110,78, 110}, // n
450 {111,79, 111}, // o
451 {112,80, 112}, // p
452 {113,81, 113}, // q
453 {114,82, 114}, // r
454 {115,83, 115}, // s
455 {116,84, 116}, // t
456 {117,85, 117}, // u
457 {118,86, 118}, // v
458 {119,87, 119}, // w
459 {120,88, 120}, // x
460 {121,89, 121}, // y
461 {122,90, 122}, // z = 122
462 {123,219,123}, // LEFT_BRACE = 123
463 {124,220,124}, // PIPE = 124
464 {125,221,125}, // RIGHT_BRACE = 125
465 {126,192,126}, // ASCIITILDE = 126
466 {6, 46, 127}, // DELETE = 127
467 {48, 96, 48}, // KP_0 = 128
468 {49, 97, 49}, // KP_1
469 {50, 98, 50}, // KP_2
470 {51, 99, 51}, // KP_3
471 {52, 100, 52}, // KP_4
472 {53, 101, 53}, // KP_5
473 {54, 102, 54}, // KP_6
474 {55, 103, 55}, // KP_7
475 {56, 104, 56}, // KP_8
476 {57, 105, 57}, // KP_9
477 {0, 112, 0}, // F1 = 138
478 {0, 113, 0}, // F2
479 {0, 114, 0}, // F3
480 {0, 115, 0}, // F4
481 {0, 116, 0}, // F5
482 {0, 117, 0}, // F6
483 {0, 118, 0}, // F7
484 {0, 119, 0}, // F8
485 {0, 120, 0}, // F9
486 {0, 121, 0}, // F10
487 {0, 122, 0}, // F11
488 {0, 123, 0}, // F12
489 {0, 124, 0}, // F13
490 {0, 125, 0}, // F14
491 {0, 126, 0}, // F15 = 152
492 {14, 38, 0}, // UP = 153
493 {15, 40, 0}, // DOWN = 154
494 {2, 39, 0}, // RIGHT = 155
495 {1, 37, 0}, // LEFT = 156
496 {5, 45, 0}, // INSERT = 157
497 {3, 36, 0}, // HOME = 158
498 {4, 35, 0}, // END = 159
499 {16, 33, 0}, // PAGEUP = 160
500 {17, 34, 0}, // PAGEDOWN = 161
501 {0, 107, 43}, // KP_ADD = 162
502 {0, 109, 45}, // KP_SUBTRACT = 163
503 {0, 106, 42}, // KP_MULITPLY = 164
504 {0, 111, 47}, // KP_DIVIDE = 165
505 {0, 110, 46}, // KP_DECIMAL = 166
506 {13, 13, 13}, // KP_ENTER = 167
507 {0, 144, 0}, // NUMLOCK = 168
508 {0, 160, 160}, // NOBREAKSPACE = 169
509 {0, 161, 161}, // EXCLAM_DOWN = 170
510 {0, 162, 162}, // CENT = 171
511 {0, 163, 163}, // STERLING = 172
512 {0, 164, 164}, // CURRENCY = 173
513 {0, 165, 165}, // YEN = 174
514 {0, 166, 166}, // BROKENBAR = 175
515 {0, 167, 167}, // SECTION = 176
516 {0, 168, 168}, // DIAERESIS = 177
517 {0, 169, 169}, // COPYRIGHT = 178
518 {0, 170, 170}, // ORDFEMININE = 179
519 {0, 171, 171}, // GUILLEMOTLEFT = 180
520 {0, 172, 172}, // NOTSIGN = 181
521 {0, 173, 173}, // HYPHEN = 182
522 {0, 174, 174}, // REGISTERED = 183
523 {0, 175, 175}, // MACRON = 184
524 {0, 176, 176}, // DEGREE = 185
525 {0, 177, 177}, // PLUSMINUS = 186
526 {0, 178, 178}, // TWOSUPERIOR = 187
527 {0, 179, 179}, // THREESUPERIOR = 188
528 {0, 180, 180}, // ACUTE = 189
529 {0, 181, 181}, // MU = 190
530 {0, 182, 182}, // PARAGRAPH = 191
531 {0, 183, 183}, // PERIODCENTRED = 192
532 {0, 184, 184}, // CEDILLA = 193
533 {0, 185, 185}, // ONESUPERIOR = 194
534 {0, 186, 186}, // MASCULINE = 195
535 {0, 187, 187}, // GUILLEMOTRIGHT = 196
536 {0, 188, 188}, // ONEQUARTER = 197
537 {0, 189, 189}, // ONEHALF = 198
538 {0, 190, 190}, // THREEQUARTERS = 199
539 {0, 191, 191}, // QUESTIONDOWN = 200
540 {0, 192, 192}, // AGRAVE = 201
541 {0, 193, 193}, // AACUTE = 202
542 {0, 194, 194}, // ACIRCUMFLEX = 203
543 {0, 195, 195}, // ATILDE = 204
544 {0, 196, 196}, // ADIAERISIS = 205
545 {0, 197, 197}, // ARING = 206
546 {0, 198, 198}, // AE = 207
547 {0, 199, 199}, // CCEDILLA = 208
548 {0, 200, 200}, // EGRAVE = 209
549 {0, 201, 201}, // EACUTE = 210
550 {0, 202, 202}, // ECIRCUMFLEX = 211
551 {0, 203, 203}, // EDIAERESIS = 212
552 {0, 204, 204}, // IGRAVE = 213
553 {0, 205, 205}, // IACUTE = 214
554 {0, 206, 206}, // ICIRCUMFLEX = 215
555 {0, 207, 207}, // IDIAERESIS = 216
556 {0, 208, 208}, // ETH = 217
557 {0, 209, 209}, // NTILDE = 218
558 {0, 210, 210}, // OGRAVE = 219
559 {0, 211, 211}, // OACUTE = 220
560 {0, 212, 212}, // OCIRCUMFLEX = 221
561 {0, 213, 213}, // OTILDE = 222
562 {0, 214, 214}, // ODIAERESIS = 223
563 {0, 215, 215}, // MULTIPLY = 224
564 {0, 216, 116}, // OSLASH = 225
565 {0, 217, 217}, // UGRAVE = 226
566 {0, 218, 218}, // UACTUE = 227
567 {0, 219, 219}, // UCIRCUMFLEX = 228
568 {0, 220, 220}, // UDIAERESIS = 229
569 {0, 221, 221}, // ZACUTE = 230
570 {0, 222, 222}, // THORN = 231
571 {0, 223, 223}, // sSHARP = 232
572 {0, 224, 224}, // aTILDE = 233
573 {0, 225, 225}, // aACUTE = 234
574 {0, 226, 226}, // aCIRCUMFLEX = 235
575 {0, 227, 227}, // aTILDE = 236
576 {0, 228, 228}, // aDIAERESIS = 237
577 {0, 229, 229}, // aRING = 238
578 {0, 230, 230}, // ae = 239
579 {0, 231, 231}, // cCEDILLA = 240
580 {0, 232, 232}, // eGRAVE = 241
581 {0, 233, 233}, // eACUTE = 242
582 {0, 234, 234}, // eCIRCUMFLEX = 243
583 {0, 235, 235}, // eDIAERESIS = 244
584 {0, 236, 236}, // iGRAVE = 245
585 {0, 237, 237}, // iACUTE = 246
586 {0, 238, 238}, // iCIRCUMFLEX = 247
587 {0, 239, 239}, // iDIAERESIS = 248
588 {0, 240, 240}, // eth = 249
589 {0, 241, 241}, // nTILDE = 250
590 {0, 242, 242}, // oTILDE = 251
591 {0, 243, 243}, // oACUTE = 252
592 {0, 244, 244}, // oCIRCUMFLEX = 253
593 {0, 245, 245}, // oTILDE = 254
594 {0, 246, 246}, // oDIAERESIS = 255
595 {0, 247, 247}, // DIVISION = 256
596 {0, 248, 248}, // oSLASH = 257
597 {0, 249, 249}, // uGRAVE = 258
598 {0, 250, 250}, // uACUTE = 259
599 {0, 251, 251}, // uCIRCUMFLEX = 260
600 {0, 252, 252}, // uDIAERESIS = 261
601 {0, 253, 253}, // yACUTE = 262
602 {0, 254, 254}, // thorn = 263
603 {0, 255, 255}, // yDIAERESIS = 264
604 {0, 0, 0}, // HELP (untested)
607 } // end namespace key
609 } // end namespace gnash
611 #endif // GNASHKEY_H