OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/events/keycodes/keyboard_code_conversion_mac.h" | 5 #import "ui/events/keycodes/keyboard_code_conversion_mac.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #import <Carbon/Carbon.h> | 9 #import <Carbon/Carbon.h> |
10 | 10 |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 { VKEY_PLAY /* 0xFA */, -1, 0 }, | 196 { VKEY_PLAY /* 0xFA */, -1, 0 }, |
197 { VKEY_ZOOM /* 0xFB */, -1, 0 }, | 197 { VKEY_ZOOM /* 0xFB */, -1, 0 }, |
198 { VKEY_NONAME /* 0xFC */, -1, 0 }, | 198 { VKEY_NONAME /* 0xFC */, -1, 0 }, |
199 { VKEY_PA1 /* 0xFD */, -1, 0 }, | 199 { VKEY_PA1 /* 0xFD */, -1, 0 }, |
200 { VKEY_OEM_CLEAR /* 0xFE */, kVK_ANSI_KeypadClear, kClearCharCode } | 200 { VKEY_OEM_CLEAR /* 0xFE */, kVK_ANSI_KeypadClear, kClearCharCode } |
201 }; | 201 }; |
202 | 202 |
203 // A convenient array for getting symbol characters on the number keys. | 203 // A convenient array for getting symbol characters on the number keys. |
204 const char kShiftCharsForNumberKeys[] = ")!@#$%^&*("; | 204 const char kShiftCharsForNumberKeys[] = ")!@#$%^&*("; |
205 | 205 |
206 // Translates from character code to keyboard code. | |
207 KeyboardCode KeyboardCodeFromCharCode(unichar charCode) { | |
208 switch (charCode) { | |
209 case 8: case 0x7F: return VKEY_BACK; | |
210 case 9: return VKEY_TAB; | |
211 case 0xD: case 3: return VKEY_RETURN; | |
212 case 0x1B: return VKEY_ESCAPE; | |
213 case ' ': return VKEY_SPACE; | |
214 case NSHomeFunctionKey: return VKEY_HOME; | |
215 case NSEndFunctionKey: return VKEY_END; | |
216 case NSPageUpFunctionKey: return VKEY_PRIOR; | |
217 case NSPageDownFunctionKey: return VKEY_NEXT; | |
218 case NSUpArrowFunctionKey: return VKEY_UP; | |
219 case NSDownArrowFunctionKey: return VKEY_DOWN; | |
220 case NSLeftArrowFunctionKey: return VKEY_LEFT; | |
221 case NSRightArrowFunctionKey: return VKEY_RIGHT; | |
222 case NSDeleteFunctionKey: return VKEY_DELETE; | |
223 | |
224 case '0': case ')': return VKEY_0; | |
225 case '1': case '!': return VKEY_1; | |
226 case '2': case '@': return VKEY_2; | |
227 case '3': case '#': return VKEY_3; | |
228 case '4': case '$': return VKEY_4; | |
229 case '5': case '%': return VKEY_5; | |
230 case '6': case '^': return VKEY_6; | |
231 case '7': case '&': return VKEY_7; | |
232 case '8': case '*': return VKEY_8; | |
233 case '9': case '(': return VKEY_9; | |
234 | |
235 case 'a': case 'A': return VKEY_A; | |
236 case 'b': case 'B': return VKEY_B; | |
237 case 'c': case 'C': return VKEY_C; | |
238 case 'd': case 'D': return VKEY_D; | |
239 case 'e': case 'E': return VKEY_E; | |
240 case 'f': case 'F': return VKEY_F; | |
241 case 'g': case 'G': return VKEY_G; | |
242 case 'h': case 'H': return VKEY_H; | |
243 case 'i': case 'I': return VKEY_I; | |
244 case 'j': case 'J': return VKEY_J; | |
245 case 'k': case 'K': return VKEY_K; | |
246 case 'l': case 'L': return VKEY_L; | |
247 case 'm': case 'M': return VKEY_M; | |
248 case 'n': case 'N': return VKEY_N; | |
249 case 'o': case 'O': return VKEY_O; | |
250 case 'p': case 'P': return VKEY_P; | |
251 case 'q': case 'Q': return VKEY_Q; | |
252 case 'r': case 'R': return VKEY_R; | |
253 case 's': case 'S': return VKEY_S; | |
254 case 't': case 'T': return VKEY_T; | |
255 case 'u': case 'U': return VKEY_U; | |
256 case 'v': case 'V': return VKEY_V; | |
257 case 'w': case 'W': return VKEY_W; | |
258 case 'x': case 'X': return VKEY_X; | |
259 case 'y': case 'Y': return VKEY_Y; | |
260 case 'z': case 'Z': return VKEY_Z; | |
261 | |
262 case NSPauseFunctionKey: return VKEY_PAUSE; | |
263 case NSSelectFunctionKey: return VKEY_SELECT; | |
264 case NSPrintFunctionKey: return VKEY_PRINT; | |
265 case NSExecuteFunctionKey: return VKEY_EXECUTE; | |
266 case NSPrintScreenFunctionKey: return VKEY_SNAPSHOT; | |
267 case NSInsertFunctionKey: return VKEY_INSERT; | |
268 case NSHelpFunctionKey: return VKEY_INSERT; | |
269 | |
270 case NSF1FunctionKey: return VKEY_F1; | |
271 case NSF2FunctionKey: return VKEY_F2; | |
272 case NSF3FunctionKey: return VKEY_F3; | |
273 case NSF4FunctionKey: return VKEY_F4; | |
274 case NSF5FunctionKey: return VKEY_F5; | |
275 case NSF6FunctionKey: return VKEY_F6; | |
276 case NSF7FunctionKey: return VKEY_F7; | |
277 case NSF8FunctionKey: return VKEY_F8; | |
278 case NSF9FunctionKey: return VKEY_F9; | |
279 case NSF10FunctionKey: return VKEY_F10; | |
280 case NSF11FunctionKey: return VKEY_F11; | |
281 case NSF12FunctionKey: return VKEY_F12; | |
282 case NSF13FunctionKey: return VKEY_F13; | |
283 case NSF14FunctionKey: return VKEY_F14; | |
284 case NSF15FunctionKey: return VKEY_F15; | |
285 case NSF16FunctionKey: return VKEY_F16; | |
286 case NSF17FunctionKey: return VKEY_F17; | |
287 case NSF18FunctionKey: return VKEY_F18; | |
288 case NSF19FunctionKey: return VKEY_F19; | |
289 case NSF20FunctionKey: return VKEY_F20; | |
290 | |
291 case NSF21FunctionKey: return VKEY_F21; | |
292 case NSF22FunctionKey: return VKEY_F22; | |
293 case NSF23FunctionKey: return VKEY_F23; | |
294 case NSF24FunctionKey: return VKEY_F24; | |
295 case NSScrollLockFunctionKey: return VKEY_SCROLL; | |
296 | |
297 // U.S. Specific mappings. Mileage may vary. | |
298 case ';': case ':': return VKEY_OEM_1; | |
299 case '=': case '+': return VKEY_OEM_PLUS; | |
300 case ',': case '<': return VKEY_OEM_COMMA; | |
301 case '-': case '_': return VKEY_OEM_MINUS; | |
302 case '.': case '>': return VKEY_OEM_PERIOD; | |
303 case '/': case '?': return VKEY_OEM_2; | |
304 case '`': case '~': return VKEY_OEM_3; | |
305 case '[': case '{': return VKEY_OEM_4; | |
306 case '\\': case '|': return VKEY_OEM_5; | |
307 case ']': case '}': return VKEY_OEM_6; | |
308 case '\'': case '"': return VKEY_OEM_7; | |
309 } | |
310 | |
311 return VKEY_UNKNOWN; | |
312 } | |
313 | |
314 KeyboardCode KeyboardCodeFromKeyCode(unsigned short keyCode) { | 206 KeyboardCode KeyboardCodeFromKeyCode(unsigned short keyCode) { |
315 static const KeyboardCode kKeyboardCodes[] = { | 207 static const KeyboardCode kKeyboardCodes[] = { |
316 /* 0 */ VKEY_A, | 208 /* 0 */ VKEY_A, |
317 /* 1 */ VKEY_S, | 209 /* 1 */ VKEY_S, |
318 /* 2 */ VKEY_D, | 210 /* 2 */ VKEY_D, |
319 /* 3 */ VKEY_F, | 211 /* 3 */ VKEY_F, |
320 /* 4 */ VKEY_H, | 212 /* 4 */ VKEY_H, |
321 /* 5 */ VKEY_G, | 213 /* 5 */ VKEY_G, |
322 /* 6 */ VKEY_Z, | 214 /* 6 */ VKEY_Z, |
323 /* 7 */ VKEY_X, | 215 /* 7 */ VKEY_X, |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
519 default: | 411 default: |
520 break; | 412 break; |
521 } | 413 } |
522 } | 414 } |
523 } | 415 } |
524 | 416 |
525 // TODO(suzhe): Support characters for Option key bindings. | 417 // TODO(suzhe): Support characters for Option key bindings. |
526 return macKeycode; | 418 return macKeycode; |
527 } | 419 } |
528 | 420 |
| 421 // Translates from character code to keyboard code. |
| 422 KeyboardCode KeyboardCodeFromCharCode(unichar charCode) { |
| 423 switch (charCode) { |
| 424 case 8: case 0x7F: return VKEY_BACK; |
| 425 case 9: return VKEY_TAB; |
| 426 case 0xD: case 3: return VKEY_RETURN; |
| 427 case 0x1B: return VKEY_ESCAPE; |
| 428 case ' ': return VKEY_SPACE; |
| 429 case NSHomeFunctionKey: return VKEY_HOME; |
| 430 case NSEndFunctionKey: return VKEY_END; |
| 431 case NSPageUpFunctionKey: return VKEY_PRIOR; |
| 432 case NSPageDownFunctionKey: return VKEY_NEXT; |
| 433 case NSUpArrowFunctionKey: return VKEY_UP; |
| 434 case NSDownArrowFunctionKey: return VKEY_DOWN; |
| 435 case NSLeftArrowFunctionKey: return VKEY_LEFT; |
| 436 case NSRightArrowFunctionKey: return VKEY_RIGHT; |
| 437 case NSDeleteFunctionKey: return VKEY_DELETE; |
| 438 |
| 439 case '0': case ')': return VKEY_0; |
| 440 case '1': case '!': return VKEY_1; |
| 441 case '2': case '@': return VKEY_2; |
| 442 case '3': case '#': return VKEY_3; |
| 443 case '4': case '$': return VKEY_4; |
| 444 case '5': case '%': return VKEY_5; |
| 445 case '6': case '^': return VKEY_6; |
| 446 case '7': case '&': return VKEY_7; |
| 447 case '8': case '*': return VKEY_8; |
| 448 case '9': case '(': return VKEY_9; |
| 449 |
| 450 case 'a': case 'A': return VKEY_A; |
| 451 case 'b': case 'B': return VKEY_B; |
| 452 case 'c': case 'C': return VKEY_C; |
| 453 case 'd': case 'D': return VKEY_D; |
| 454 case 'e': case 'E': return VKEY_E; |
| 455 case 'f': case 'F': return VKEY_F; |
| 456 case 'g': case 'G': return VKEY_G; |
| 457 case 'h': case 'H': return VKEY_H; |
| 458 case 'i': case 'I': return VKEY_I; |
| 459 case 'j': case 'J': return VKEY_J; |
| 460 case 'k': case 'K': return VKEY_K; |
| 461 case 'l': case 'L': return VKEY_L; |
| 462 case 'm': case 'M': return VKEY_M; |
| 463 case 'n': case 'N': return VKEY_N; |
| 464 case 'o': case 'O': return VKEY_O; |
| 465 case 'p': case 'P': return VKEY_P; |
| 466 case 'q': case 'Q': return VKEY_Q; |
| 467 case 'r': case 'R': return VKEY_R; |
| 468 case 's': case 'S': return VKEY_S; |
| 469 case 't': case 'T': return VKEY_T; |
| 470 case 'u': case 'U': return VKEY_U; |
| 471 case 'v': case 'V': return VKEY_V; |
| 472 case 'w': case 'W': return VKEY_W; |
| 473 case 'x': case 'X': return VKEY_X; |
| 474 case 'y': case 'Y': return VKEY_Y; |
| 475 case 'z': case 'Z': return VKEY_Z; |
| 476 |
| 477 case NSPauseFunctionKey: return VKEY_PAUSE; |
| 478 case NSSelectFunctionKey: return VKEY_SELECT; |
| 479 case NSPrintFunctionKey: return VKEY_PRINT; |
| 480 case NSExecuteFunctionKey: return VKEY_EXECUTE; |
| 481 case NSPrintScreenFunctionKey: return VKEY_SNAPSHOT; |
| 482 case NSInsertFunctionKey: return VKEY_INSERT; |
| 483 case NSHelpFunctionKey: return VKEY_INSERT; |
| 484 |
| 485 case NSF1FunctionKey: return VKEY_F1; |
| 486 case NSF2FunctionKey: return VKEY_F2; |
| 487 case NSF3FunctionKey: return VKEY_F3; |
| 488 case NSF4FunctionKey: return VKEY_F4; |
| 489 case NSF5FunctionKey: return VKEY_F5; |
| 490 case NSF6FunctionKey: return VKEY_F6; |
| 491 case NSF7FunctionKey: return VKEY_F7; |
| 492 case NSF8FunctionKey: return VKEY_F8; |
| 493 case NSF9FunctionKey: return VKEY_F9; |
| 494 case NSF10FunctionKey: return VKEY_F10; |
| 495 case NSF11FunctionKey: return VKEY_F11; |
| 496 case NSF12FunctionKey: return VKEY_F12; |
| 497 case NSF13FunctionKey: return VKEY_F13; |
| 498 case NSF14FunctionKey: return VKEY_F14; |
| 499 case NSF15FunctionKey: return VKEY_F15; |
| 500 case NSF16FunctionKey: return VKEY_F16; |
| 501 case NSF17FunctionKey: return VKEY_F17; |
| 502 case NSF18FunctionKey: return VKEY_F18; |
| 503 case NSF19FunctionKey: return VKEY_F19; |
| 504 case NSF20FunctionKey: return VKEY_F20; |
| 505 |
| 506 case NSF21FunctionKey: return VKEY_F21; |
| 507 case NSF22FunctionKey: return VKEY_F22; |
| 508 case NSF23FunctionKey: return VKEY_F23; |
| 509 case NSF24FunctionKey: return VKEY_F24; |
| 510 case NSScrollLockFunctionKey: return VKEY_SCROLL; |
| 511 |
| 512 // U.S. Specific mappings. Mileage may vary. |
| 513 case ';': case ':': return VKEY_OEM_1; |
| 514 case '=': case '+': return VKEY_OEM_PLUS; |
| 515 case ',': case '<': return VKEY_OEM_COMMA; |
| 516 case '-': case '_': return VKEY_OEM_MINUS; |
| 517 case '.': case '>': return VKEY_OEM_PERIOD; |
| 518 case '/': case '?': return VKEY_OEM_2; |
| 519 case '`': case '~': return VKEY_OEM_3; |
| 520 case '[': case '{': return VKEY_OEM_4; |
| 521 case '\\': case '|': return VKEY_OEM_5; |
| 522 case ']': case '}': return VKEY_OEM_6; |
| 523 case '\'': case '"': return VKEY_OEM_7; |
| 524 } |
| 525 |
| 526 return VKEY_UNKNOWN; |
| 527 } |
| 528 |
529 KeyboardCode KeyboardCodeFromNSEvent(NSEvent* event) { | 529 KeyboardCode KeyboardCodeFromNSEvent(NSEvent* event) { |
530 KeyboardCode code = VKEY_UNKNOWN; | 530 KeyboardCode code = VKEY_UNKNOWN; |
531 | 531 |
532 if ([event type] == NSKeyDown || [event type] == NSKeyUp) { | 532 if ([event type] == NSKeyDown || [event type] == NSKeyUp) { |
533 NSString* characters = [event characters]; | 533 NSString* characters = [event characters]; |
534 if ([characters length] > 0) | 534 if ([characters length] > 0) |
535 code = KeyboardCodeFromCharCode([characters characterAtIndex:0]); | 535 code = KeyboardCodeFromCharCode([characters characterAtIndex:0]); |
536 if (code) | 536 if (code) |
537 return code; | 537 return code; |
538 | 538 |
539 characters = [event charactersIgnoringModifiers]; | 539 characters = [event charactersIgnoringModifiers]; |
540 if ([characters length] > 0) | 540 if ([characters length] > 0) |
541 code = KeyboardCodeFromCharCode([characters characterAtIndex:0]); | 541 code = KeyboardCodeFromCharCode([characters characterAtIndex:0]); |
542 if (code) | 542 if (code) |
543 return code; | 543 return code; |
544 } | 544 } |
545 return KeyboardCodeFromKeyCode([event keyCode]); | 545 return KeyboardCodeFromKeyCode([event keyCode]); |
546 } | 546 } |
547 | 547 |
548 DomCode CodeFromNSEvent(NSEvent* event) { | 548 DomCode CodeFromNSEvent(NSEvent* event) { |
549 return ui::KeycodeConverter::NativeKeycodeToDomCode([event keyCode]); | 549 return ui::KeycodeConverter::NativeKeycodeToDomCode([event keyCode]); |
550 } | 550 } |
551 | 551 |
552 } // namespace ui | 552 } // namespace ui |
OLD | NEW |