OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "webkit/plugins/ppapi/usb_key_code_conversion.h" | |
6 | |
7 #include "base/basictypes.h" | |
8 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" | |
9 | |
10 using WebKit::WebKeyboardEvent; | |
11 | |
12 namespace webkit { | |
13 namespace ppapi { | |
14 | |
15 namespace { | |
16 | |
17 typedef struct { | |
18 uint32_t usb_keycode; | |
19 uint16_t native_keycode; | |
20 } mac_usb_keymap; | |
21 | |
22 // This is extracted from the conversion table that currently lives in | |
23 // remoting/host/usb_keycode_map.h. | |
24 // TODO(garykac): Remove this copy and use a shared conversion table. | |
25 const mac_usb_keymap mac_keycode_to_usb[] = { | |
26 {0x070004, 0x0000}, // aA | |
27 {0x070005, 0x000b}, // bB | |
28 {0x070006, 0x0008}, // cC | |
29 {0x070007, 0x0002}, // dD | |
30 {0x070008, 0x000e}, // eE | |
31 {0x070009, 0x0003}, // fF | |
32 {0x07000a, 0x0005}, // gG | |
33 {0x07000b, 0x0004}, // hH | |
34 {0x07000c, 0x0022}, // iI | |
35 {0x07000d, 0x0026}, // jJ | |
36 {0x07000e, 0x0028}, // kK | |
37 {0x07000f, 0x0025}, // lL | |
38 {0x070010, 0x002e}, // mM | |
39 {0x070011, 0x002d}, // nN | |
40 {0x070012, 0x001f}, // oO | |
41 {0x070013, 0x0023}, // pP | |
42 {0x070014, 0x000c}, // qQ | |
43 {0x070015, 0x000f}, // rR | |
44 {0x070016, 0x0001}, // sS | |
45 {0x070017, 0x0011}, // tT | |
46 {0x070018, 0x0020}, // uU | |
47 {0x070019, 0x0009}, // vV | |
48 {0x07001a, 0x000d}, // wW | |
49 {0x07001b, 0x0007}, // xX | |
50 {0x07001c, 0x0010}, // yY | |
51 {0x07001d, 0x0006}, // zZ | |
52 {0x07001e, 0x0012}, // 1! | |
53 {0x07001f, 0x0013}, // 2@ | |
54 {0x070020, 0x0014}, // 3# | |
55 {0x070021, 0x0015}, // 4$ | |
56 {0x070022, 0x0017}, // 5% | |
57 {0x070023, 0x0016}, // 6^ | |
58 {0x070024, 0x001a}, // 7& | |
59 {0x070025, 0x001c}, // 8* | |
60 {0x070026, 0x0019}, // 9( | |
61 {0x070027, 0x001d}, // 0) | |
62 {0x070028, 0x0024}, // Return | |
63 {0x070029, 0x0035}, // Escape | |
64 {0x07002a, 0x0033}, // Backspace | |
65 {0x07002b, 0x0030}, // Tab | |
66 {0x07002c, 0x0031}, // Spacebar | |
67 {0x07002d, 0x001b}, // -_ | |
68 {0x07002e, 0x0018}, // =+ | |
69 {0x07002f, 0x0021}, // [{ | |
70 {0x070030, 0x001e}, // }] | |
71 {0x070031, 0x002a}, // \| (US keyboard only) | |
72 {0x070032, 0x002a}, // #~ (Non-US) | |
73 {0x070033, 0x0029}, // ;: | |
74 {0x070034, 0x0027}, // '" | |
75 {0x070035, 0x0032}, // `~ | |
76 {0x070036, 0x002b}, // ,< | |
77 {0x070037, 0x002f}, // .> | |
78 {0x070038, 0x002c}, // /? | |
79 {0x070039, 0x0039}, // CapsLock | |
80 {0x07003a, 0x007a}, // F1 | |
81 {0x07003b, 0x0078}, // F2 | |
82 {0x07003c, 0x0063}, // F3 | |
83 {0x07003d, 0x0076}, // F4 | |
84 {0x07003e, 0x0060}, // F5 | |
85 {0x07003f, 0x0061}, // F6 | |
86 {0x070040, 0x0062}, // F7 | |
87 {0x070041, 0x0064}, // F8 | |
88 {0x070042, 0x0065}, // F9 | |
89 {0x070043, 0x006d}, // F10 | |
90 {0x070044, 0x0067}, // F11 | |
91 {0x070045, 0x006f}, // F12 | |
92 {0x070049, 0x0072}, // Insert | |
93 {0x07004a, 0x0073}, // Home | |
94 {0x07004b, 0x0074}, // PageUp | |
95 {0x07004c, 0x0075}, // Delete (Forward Delete) | |
96 {0x07004d, 0x0077}, // End | |
97 {0x07004e, 0x0079}, // PageDown | |
98 {0x07004f, 0x007c}, // RightArrow | |
99 {0x070050, 0x007b}, // LeftArrow | |
100 {0x070051, 0x007d}, // DownArrow | |
101 {0x070052, 0x007e}, // UpArrow | |
102 {0x070053, 0x0047}, // Keypad_NumLock Clear | |
103 {0x070054, 0x004b}, // Keypad_/ | |
104 {0x070055, 0x0043}, // Keypad_* | |
105 {0x070056, 0x004e}, // Keypad_- | |
106 {0x070057, 0x0045}, // Keypad_+ | |
107 {0x070058, 0x004c}, // Keypad_Enter | |
108 {0x070059, 0x0053}, // Keypad_1 End | |
109 {0x07005a, 0x0054}, // Keypad_2 DownArrow | |
110 {0x07005b, 0x0055}, // Keypad_3 PageDown | |
111 {0x07005c, 0x0056}, // Keypad_4 LeftArrow | |
112 {0x07005d, 0x0057}, // Keypad_5 | |
113 {0x07005e, 0x0058}, // Keypad_6 RightArrow | |
114 {0x07005f, 0x0059}, // Keypad_7 Home | |
115 {0x070060, 0x005b}, // Keypad_8 UpArrow | |
116 {0x070061, 0x005c}, // Keypad_9 PageUp | |
117 {0x070062, 0x0052}, // Keypad_0 Insert | |
118 {0x070063, 0x0041}, // Keypad_. Delete | |
119 {0x070067, 0x0051}, // Keypad_= | |
120 {0x070068, 0x0069}, // F13 | |
121 {0x070069, 0x006b}, // F14 | |
122 {0x07006a, 0x0071}, // F15 | |
123 {0x07006b, 0x006a}, // F16 | |
124 {0x07006c, 0x0040}, // F17 | |
125 {0x07006d, 0x004f}, // F18 | |
126 {0x07006e, 0x0050}, // F19 | |
127 {0x07006f, 0x005a}, // F20 | |
128 {0x07007f, 0x004a}, // Mute | |
129 {0x070080, 0x0048}, // VolumeUp | |
130 {0x070081, 0x0049}, // VolumeDown | |
131 {0x070085, 0x005f}, // Keypad_Comma | |
132 {0x070087, 0x005e}, // International1 | |
133 {0x070088, 0x0068}, // International2 | |
134 {0x070089, 0x005d}, // International3 | |
135 {0x0700e0, 0x003b}, // LeftControl | |
dmichael (off chromium)
2012/03/14 19:36:02
There's a discontinuity here. Is that expected & c
garykac
2012/03/14 20:26:06
Yes. In that space there's a bunch of special Keyp
dmichael (off chromium)
2012/03/14 20:50:26
A short comment to that effect might help, just so
| |
136 {0x0700e1, 0x0038}, // LeftShift | |
137 {0x0700e2, 0x003a}, // LeftAlt/Option | |
138 {0x0700e3, 0x0037}, // LeftGUI/Super/Win/Cmd | |
139 {0x0700e4, 0x003e}, // RightControl | |
140 {0x0700e5, 0x003c}, // RightShift | |
141 {0x0700e6, 0x003d}, // RightAlt/Option | |
142 {0x0700e7, 0x0036}, // RightGUI/Super/Win/Cmd | |
143 }; | |
144 | |
145 } // anonymous namespace | |
146 | |
147 uint32_t UsbKeyCodeForKeyboardEvent(const WebKeyboardEvent& key_event) { | |
148 if (key_event.nativeKeyCode < 0 || key_event.nativeKeyCode > 0x7f) | |
149 return 0; | |
150 | |
151 for (uint i = 0; i < arraysize(mac_keycode_to_usb); i++) { | |
152 if (mac_keycode_to_usb[i].native_keycode == key_event.nativeKeyCode) | |
153 return mac_keycode_to_usb[i].usb_keycode; | |
154 } | |
155 | |
156 return 0; | |
157 } | |
158 | |
159 } // namespace ppapi | |
160 } // namespace webkit | |
OLD | NEW |