Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: ui/base/keycodes/keyboard_code_conversion_mac.mm

Issue 8953037: Aura needs event translation for Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Nico's comments #2. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ui/base/keycodes/keyboard_code_conversion_mac.h" 5 #import "ui/base/keycodes/keyboard_code_conversion_mac.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #import <Carbon/Carbon.h> 8 #import <Carbon/Carbon.h>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 { VKEY_PLAY /* 0xFA */, -1, 0 }, 193 { VKEY_PLAY /* 0xFA */, -1, 0 },
194 { VKEY_ZOOM /* 0xFB */, -1, 0 }, 194 { VKEY_ZOOM /* 0xFB */, -1, 0 },
195 { VKEY_NONAME /* 0xFC */, -1, 0 }, 195 { VKEY_NONAME /* 0xFC */, -1, 0 },
196 { VKEY_PA1 /* 0xFD */, -1, 0 }, 196 { VKEY_PA1 /* 0xFD */, -1, 0 },
197 { VKEY_OEM_CLEAR /* 0xFE */, kVK_ANSI_KeypadClear, kClearCharCode } 197 { VKEY_OEM_CLEAR /* 0xFE */, kVK_ANSI_KeypadClear, kClearCharCode }
198 }; 198 };
199 199
200 // A convenient array for getting symbol characters on the number keys. 200 // A convenient array for getting symbol characters on the number keys.
201 const char kShiftCharsForNumberKeys[] = ")!@#$%^&*("; 201 const char kShiftCharsForNumberKeys[] = ")!@#$%^&*(";
202 202
203 // Translates from character code to keyboard code.
204 KeyboardCode KeyboardCodeFromCharCode(unichar charCode) {
205 switch (charCode) {
206 case 8: case 0x7F: return VKEY_BACK;
207 case 9: return VKEY_TAB;
208 case 0xD: case 3: return VKEY_RETURN;
209 case 0x1B: return VKEY_ESCAPE;
210 case ' ': return VKEY_SPACE;
211 case NSHomeFunctionKey: return VKEY_HOME;
212 case NSEndFunctionKey: return VKEY_END;
213 case NSPageUpFunctionKey: return VKEY_PRIOR;
214 case NSPageDownFunctionKey: return VKEY_NEXT;
215 case NSUpArrowFunctionKey: return VKEY_UP;
216 case NSDownArrowFunctionKey: return VKEY_DOWN;
217 case NSLeftArrowFunctionKey: return VKEY_LEFT;
218 case NSRightArrowFunctionKey: return VKEY_RIGHT;
219 case NSDeleteFunctionKey: return VKEY_DELETE;
220
221 case '0': case ')': return VKEY_0;
222 case '1': case '!': return VKEY_1;
223 case '2': case '@': return VKEY_2;
224 case '3': case '#': return VKEY_3;
225 case '4': case '$': return VKEY_4;
226 case '5': case '%': return VKEY_5;
227 case '6': case '^': return VKEY_6;
228 case '7': case '&': return VKEY_7;
229 case '8': case '*': return VKEY_8;
230 case '9': case '(': return VKEY_9;
231
232 case 'a': case 'A': return VKEY_A;
233 case 'b': case 'B': return VKEY_B;
234 case 'c': case 'C': return VKEY_C;
235 case 'd': case 'D': return VKEY_D;
236 case 'e': case 'E': return VKEY_E;
237 case 'f': case 'F': return VKEY_F;
238 case 'g': case 'G': return VKEY_G;
239 case 'h': case 'H': return VKEY_H;
240 case 'i': case 'I': return VKEY_I;
241 case 'j': case 'J': return VKEY_J;
242 case 'k': case 'K': return VKEY_K;
243 case 'l': case 'L': return VKEY_L;
244 case 'm': case 'M': return VKEY_M;
245 case 'n': case 'N': return VKEY_N;
246 case 'o': case 'O': return VKEY_O;
247 case 'p': case 'P': return VKEY_P;
248 case 'q': case 'Q': return VKEY_Q;
249 case 'r': case 'R': return VKEY_R;
250 case 's': case 'S': return VKEY_S;
251 case 't': case 'T': return VKEY_T;
252 case 'u': case 'U': return VKEY_U;
253 case 'v': case 'V': return VKEY_V;
254 case 'w': case 'W': return VKEY_W;
255 case 'x': case 'X': return VKEY_X;
256 case 'y': case 'Y': return VKEY_Y;
257 case 'z': case 'Z': return VKEY_Z;
258
259 case NSPauseFunctionKey: return VKEY_PAUSE;
260 case NSSelectFunctionKey: return VKEY_SELECT;
261 case NSPrintFunctionKey: return VKEY_PRINT;
262 case NSExecuteFunctionKey: return VKEY_EXECUTE;
263 case NSPrintScreenFunctionKey: return VKEY_SNAPSHOT;
264 case NSInsertFunctionKey: return VKEY_INSERT;
265 case NSHelpFunctionKey: return VKEY_INSERT;
266
267 case NSF1FunctionKey: return VKEY_F1;
268 case NSF2FunctionKey: return VKEY_F2;
269 case NSF3FunctionKey: return VKEY_F3;
270 case NSF4FunctionKey: return VKEY_F4;
271 case NSF5FunctionKey: return VKEY_F5;
272 case NSF6FunctionKey: return VKEY_F6;
273 case NSF7FunctionKey: return VKEY_F7;
274 case NSF8FunctionKey: return VKEY_F8;
275 case NSF9FunctionKey: return VKEY_F9;
276 case NSF10FunctionKey: return VKEY_F10;
277 case NSF11FunctionKey: return VKEY_F11;
278 case NSF12FunctionKey: return VKEY_F12;
279 case NSF13FunctionKey: return VKEY_F13;
280 case NSF14FunctionKey: return VKEY_F14;
281 case NSF15FunctionKey: return VKEY_F15;
282 case NSF16FunctionKey: return VKEY_F16;
283 case NSF17FunctionKey: return VKEY_F17;
284 case NSF18FunctionKey: return VKEY_F18;
285 case NSF19FunctionKey: return VKEY_F19;
286 case NSF20FunctionKey: return VKEY_F20;
287
288 case NSF21FunctionKey: return VKEY_F21;
289 case NSF22FunctionKey: return VKEY_F22;
290 case NSF23FunctionKey: return VKEY_F23;
291 case NSF24FunctionKey: return VKEY_F24;
292 case NSScrollLockFunctionKey: return VKEY_SCROLL;
293
294 // U.S. Specific mappings. Mileage may vary.
295 case ';': case ':': return VKEY_OEM_1;
296 case '=': case '+': return VKEY_OEM_PLUS;
297 case ',': case '<': return VKEY_OEM_COMMA;
298 case '-': case '_': return VKEY_OEM_MINUS;
299 case '.': case '>': return VKEY_OEM_PERIOD;
300 case '/': case '?': return VKEY_OEM_2;
301 case '`': case '~': return VKEY_OEM_3;
302 case '[': case '{': return VKEY_OEM_4;
303 case '\\': case '|': return VKEY_OEM_5;
304 case ']': case '}': return VKEY_OEM_6;
305 case '\'': case '"': return VKEY_OEM_7;
306 }
307
308 return VKEY_UNKNOWN;
309 }
310
311 KeyboardCode KeyboardCodeFromKeyCode(unsigned short keyCode) {
312 static const KeyboardCode kKeyboardCodes[] = {
313 /* 0 */ VKEY_A,
314 /* 1 */ VKEY_S,
315 /* 2 */ VKEY_D,
316 /* 3 */ VKEY_F,
317 /* 4 */ VKEY_H,
318 /* 5 */ VKEY_G,
319 /* 6 */ VKEY_Z,
320 /* 7 */ VKEY_X,
321 /* 8 */ VKEY_C,
322 /* 9 */ VKEY_V,
323 /* 0x0A */ VKEY_OEM_3, // Section key.
324 /* 0x0B */ VKEY_B,
325 /* 0x0C */ VKEY_Q,
326 /* 0x0D */ VKEY_W,
327 /* 0x0E */ VKEY_E,
328 /* 0x0F */ VKEY_R,
329 /* 0x10 */ VKEY_Y,
330 /* 0x11 */ VKEY_T,
331 /* 0x12 */ VKEY_1,
332 /* 0x13 */ VKEY_2,
333 /* 0x14 */ VKEY_3,
334 /* 0x15 */ VKEY_4,
335 /* 0x16 */ VKEY_6,
336 /* 0x17 */ VKEY_5,
337 /* 0x18 */ VKEY_OEM_PLUS, // =+
338 /* 0x19 */ VKEY_9,
339 /* 0x1A */ VKEY_7,
340 /* 0x1B */ VKEY_OEM_MINUS, // -_
341 /* 0x1C */ VKEY_8,
342 /* 0x1D */ VKEY_0,
343 /* 0x1E */ VKEY_OEM_6, // ]}
344 /* 0x1F */ VKEY_O,
345 /* 0x20 */ VKEY_U,
346 /* 0x21 */ VKEY_OEM_4, // {[
347 /* 0x22 */ VKEY_I,
348 /* 0x23 */ VKEY_P,
349 /* 0x24 */ VKEY_RETURN, // Return
350 /* 0x25 */ VKEY_L,
351 /* 0x26 */ VKEY_J,
352 /* 0x27 */ VKEY_OEM_7, // '"
353 /* 0x28 */ VKEY_K,
354 /* 0x29 */ VKEY_OEM_1, // ;:
355 /* 0x2A */ VKEY_OEM_5, // \|
356 /* 0x2B */ VKEY_OEM_COMMA, // ,<
357 /* 0x2C */ VKEY_OEM_2, // /?
358 /* 0x2D */ VKEY_N,
359 /* 0x2E */ VKEY_M,
360 /* 0x2F */ VKEY_OEM_PERIOD, // .>
361 /* 0x30 */ VKEY_TAB,
362 /* 0x31 */ VKEY_SPACE,
363 /* 0x32 */ VKEY_OEM_3, // `~
364 /* 0x33 */ VKEY_BACK, // Backspace
365 /* 0x34 */ VKEY_UNKNOWN, // n/a
366 /* 0x35 */ VKEY_ESCAPE,
367 /* 0x36 */ VKEY_APPS, // Right Command
368 /* 0x37 */ VKEY_LWIN, // Left Command
369 /* 0x38 */ VKEY_SHIFT, // Left Shift
370 /* 0x39 */ VKEY_CAPITAL, // Caps Lock
371 /* 0x3A */ VKEY_MENU, // Left Option
372 /* 0x3B */ VKEY_CONTROL, // Left Ctrl
373 /* 0x3C */ VKEY_SHIFT, // Right Shift
374 /* 0x3D */ VKEY_MENU, // Right Option
375 /* 0x3E */ VKEY_CONTROL, // Right Ctrl
376 /* 0x3F */ VKEY_UNKNOWN, // fn
377 /* 0x40 */ VKEY_F17,
378 /* 0x41 */ VKEY_DECIMAL, // Num Pad .
379 /* 0x42 */ VKEY_UNKNOWN, // n/a
380 /* 0x43 */ VKEY_MULTIPLY, // Num Pad *
381 /* 0x44 */ VKEY_UNKNOWN, // n/a
382 /* 0x45 */ VKEY_ADD, // Num Pad +
383 /* 0x46 */ VKEY_UNKNOWN, // n/a
384 /* 0x47 */ VKEY_CLEAR, // Num Pad Clear
385 /* 0x48 */ VKEY_VOLUME_UP,
386 /* 0x49 */ VKEY_VOLUME_DOWN,
387 /* 0x4A */ VKEY_VOLUME_MUTE,
388 /* 0x4B */ VKEY_DIVIDE, // Num Pad /
389 /* 0x4C */ VKEY_RETURN, // Num Pad Enter
390 /* 0x4D */ VKEY_UNKNOWN, // n/a
391 /* 0x4E */ VKEY_SUBTRACT, // Num Pad -
392 /* 0x4F */ VKEY_F18,
393 /* 0x50 */ VKEY_F19,
394 /* 0x51 */ VKEY_OEM_PLUS, // Num Pad =.
395 /* 0x52 */ VKEY_NUMPAD0,
396 /* 0x53 */ VKEY_NUMPAD1,
397 /* 0x54 */ VKEY_NUMPAD2,
398 /* 0x55 */ VKEY_NUMPAD3,
399 /* 0x56 */ VKEY_NUMPAD4,
400 /* 0x57 */ VKEY_NUMPAD5,
401 /* 0x58 */ VKEY_NUMPAD6,
402 /* 0x59 */ VKEY_NUMPAD7,
403 /* 0x5A */ VKEY_F20,
404 /* 0x5B */ VKEY_NUMPAD8,
405 /* 0x5C */ VKEY_NUMPAD9,
406 /* 0x5D */ VKEY_UNKNOWN, // Yen (JIS Keyboard Only)
407 /* 0x5E */ VKEY_UNKNOWN, // Underscore (JIS Keyboard Only)
408 /* 0x5F */ VKEY_UNKNOWN, // KeypadComma (JIS Keyboard Only)
409 /* 0x60 */ VKEY_F5,
410 /* 0x61 */ VKEY_F6,
411 /* 0x62 */ VKEY_F7,
412 /* 0x63 */ VKEY_F3,
413 /* 0x64 */ VKEY_F8,
414 /* 0x65 */ VKEY_F9,
415 /* 0x66 */ VKEY_UNKNOWN, // Eisu (JIS Keyboard Only)
416 /* 0x67 */ VKEY_F11,
417 /* 0x68 */ VKEY_UNKNOWN, // Kana (JIS Keyboard Only)
418 /* 0x69 */ VKEY_F13,
419 /* 0x6A */ VKEY_F16,
420 /* 0x6B */ VKEY_F14,
421 /* 0x6C */ VKEY_UNKNOWN, // n/a
422 /* 0x6D */ VKEY_F10,
423 /* 0x6E */ VKEY_UNKNOWN, // n/a (Windows95 key?)
424 /* 0x6F */ VKEY_F12,
425 /* 0x70 */ VKEY_UNKNOWN, // n/a
426 /* 0x71 */ VKEY_F15,
427 /* 0x72 */ VKEY_INSERT, // Help
428 /* 0x73 */ VKEY_HOME, // Home
429 /* 0x74 */ VKEY_PRIOR, // Page Up
430 /* 0x75 */ VKEY_DELETE, // Forward Delete
431 /* 0x76 */ VKEY_F4,
432 /* 0x77 */ VKEY_END, // End
433 /* 0x78 */ VKEY_F2,
434 /* 0x79 */ VKEY_NEXT, // Page Down
435 /* 0x7A */ VKEY_F1,
436 /* 0x7B */ VKEY_LEFT, // Left Arrow
437 /* 0x7C */ VKEY_RIGHT, // Right Arrow
438 /* 0x7D */ VKEY_DOWN, // Down Arrow
439 /* 0x7E */ VKEY_UP, // Up Arrow
440 /* 0x7F */ VKEY_UNKNOWN // n/a
441 };
442
443 if (keyCode >= 0x80)
444 return VKEY_UNKNOWN;
445
446 return kKeyboardCodes[keyCode];
447 }
448
203 } // anonymous namespace 449 } // anonymous namespace
204 450
205 int MacKeyCodeForWindowsKeyCode(KeyboardCode keycode, 451 int MacKeyCodeForWindowsKeyCode(KeyboardCode keycode,
206 NSUInteger flags, 452 NSUInteger flags,
207 unichar* character, 453 unichar* character,
208 unichar* characterIgnoringModifiers) { 454 unichar* characterIgnoringModifiers) {
209 KeyCodeMap from; 455 KeyCodeMap from;
210 from.keycode = keycode; 456 from.keycode = keycode;
211 457
212 const KeyCodeMap* ptr = std::lower_bound( 458 const KeyCodeMap* ptr = std::lower_bound(
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 else if (macKeycode == kVK_ANSI_Backslash) 527 else if (macKeycode == kVK_ANSI_Backslash)
282 *character = 28; 528 *character = 28;
283 else if (macKeycode == kVK_ANSI_RightBracket) 529 else if (macKeycode == kVK_ANSI_RightBracket)
284 *character = 29; 530 *character = 29;
285 } 531 }
286 532
287 // TODO(suzhe): Support characters for Option key bindings. 533 // TODO(suzhe): Support characters for Option key bindings.
288 return macKeycode; 534 return macKeycode;
289 } 535 }
290 536
537 KeyboardCode KeyboardCodeFromNSEvent(NSEvent* event) {
Nico 2011/12/19 23:30:28 As far as I understand, this will return "undefine
dhollowa 2011/12/20 00:05:34 VKEY_UNKNOWN is returned for key codes >= 0x80 if
538 KeyboardCode code = VKEY_UNKNOWN;
539
540 if ([event type] == NSKeyDown || [event type] == NSKeyUp) {
541 NSString* characters = [event characters];
542 if ([characters length] > 0)
543 code = KeyboardCodeFromCharCode([characters characterAtIndex:0]);
544 if (code)
545 return code;
546
547 characters = [event charactersIgnoringModifiers];
548 if ([characters length] > 0)
549 code = KeyboardCodeFromCharCode([characters characterAtIndex:0]);
550 if (code)
551 return code;
552 }
553 return KeyboardCodeFromKeyCode([event keyCode]);
554 }
555
291 } // namespace ui 556 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698