| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 #include "ui/events/ozone/layout/layout_util.h" | 5 #include "ui/events/ozone/layout/layout_util.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "ui/events/event_constants.h" | 9 #include "ui/events/event_constants.h" |
| 10 #include "ui/events/keycodes/dom3/dom_code.h" | 10 #include "ui/events/keycodes/dom3/dom_code.h" |
| 11 #include "ui/events/keycodes/dom3/dom_key.h" | 11 #include "ui/events/keycodes/dom3/dom_key.h" |
| 12 #include "ui/events/keycodes/keyboard_code_conversion.h" |
| 12 | 13 |
| 13 namespace ui { | 14 namespace ui { |
| 14 | 15 |
| 15 namespace { | 16 namespace { |
| 16 | 17 |
| 17 bool IsRightSideDomCode(DomCode code) { | |
| 18 return (code == DomCode::SHIFT_RIGHT) || (code == DomCode::CONTROL_RIGHT) || | |
| 19 (code == DomCode::ALT_RIGHT) || (code == DomCode::OS_RIGHT); | |
| 20 } | |
| 21 | |
| 22 // This table, used by DomKeyToKeyboardCode(), maps DOM Level 3 .code | 18 // This table, used by DomKeyToKeyboardCode(), maps DOM Level 3 .code |
| 23 // values to legacy Windows-based VKEY values, where the VKEYs are | 19 // values to legacy Windows-based VKEY values, where the VKEYs are |
| 24 // interpreted positionally. | 20 // interpreted positionally. |
| 25 const struct DomCodeToKeyboardCodeEntry { | 21 const struct DomCodeToKeyboardCodeEntry { |
| 26 DomCode dom_code; | 22 DomCode dom_code; |
| 27 KeyboardCode key_code; | 23 KeyboardCode key_code; |
| 28 } dom_code_to_keyboard_code[] = { | 24 } dom_code_to_keyboard_code[] = { |
| 29 // Entries are ordered by numeric value of the DomCode enum, | 25 // Entries are ordered by numeric value of the DomCode enum, |
| 30 // which is the USB physical key code. | 26 // which is the USB physical key code. |
| 31 // DomCode::HYPER 0x000010 Hyper | 27 // DomCode::HYPER 0x000010 Hyper |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 return static_cast<int>(a.dom_code) < static_cast<int>(b); | 455 return static_cast<int>(a.dom_code) < static_cast<int>(b); |
| 460 }); | 456 }); |
| 461 if ((found != end) && (found->dom_code == dom_code)) | 457 if ((found != end) && (found->dom_code == dom_code)) |
| 462 return found->key_code; | 458 return found->key_code; |
| 463 return VKEY_UNKNOWN; | 459 return VKEY_UNKNOWN; |
| 464 } | 460 } |
| 465 | 461 |
| 466 // Returns the Windows-based VKEY value corresponding to a DOM Level 3 |code|. | 462 // Returns the Windows-based VKEY value corresponding to a DOM Level 3 |code|. |
| 467 // The returned VKEY is non-located (e.g. VKEY_SHIFT). | 463 // The returned VKEY is non-located (e.g. VKEY_SHIFT). |
| 468 KeyboardCode DomCodeToNonLocatedKeyboardCode(DomCode dom_code) { | 464 KeyboardCode DomCodeToNonLocatedKeyboardCode(DomCode dom_code) { |
| 469 return NonLocatedKeyboardCode(DomCodeToKeyboardCode(dom_code)); | 465 return LocatedToNonLocatedKeyboardCode(DomCodeToKeyboardCode(dom_code)); |
| 470 } | |
| 471 | |
| 472 // Determine the non-located VKEY corresponding to a located VKEY. | |
| 473 KeyboardCode NonLocatedKeyboardCode(KeyboardCode key_code) { | |
| 474 switch (key_code) { | |
| 475 case VKEY_RWIN: | |
| 476 return VKEY_LWIN; | |
| 477 case VKEY_LSHIFT: | |
| 478 case VKEY_RSHIFT: | |
| 479 return VKEY_SHIFT; | |
| 480 case VKEY_LCONTROL: | |
| 481 case VKEY_RCONTROL: | |
| 482 return VKEY_CONTROL; | |
| 483 case VKEY_LMENU: | |
| 484 case VKEY_RMENU: | |
| 485 return VKEY_MENU; | |
| 486 default: | |
| 487 return key_code; | |
| 488 } | |
| 489 } | |
| 490 | |
| 491 // Determine the located VKEY corresponding to a non-located VKEY. | |
| 492 KeyboardCode LocatedKeyboardCode(KeyboardCode key_code, DomCode dom_code) { | |
| 493 switch (key_code) { | |
| 494 case VKEY_SHIFT: | |
| 495 return IsRightSideDomCode(dom_code) ? VKEY_RSHIFT : VKEY_LSHIFT; | |
| 496 case VKEY_CONTROL: | |
| 497 return IsRightSideDomCode(dom_code) ? VKEY_RCONTROL : VKEY_LCONTROL; | |
| 498 case VKEY_MENU: | |
| 499 return IsRightSideDomCode(dom_code) ? VKEY_RMENU : VKEY_LMENU; | |
| 500 case VKEY_LWIN: | |
| 501 return IsRightSideDomCode(dom_code) ? VKEY_RWIN : VKEY_LWIN; | |
| 502 case VKEY_0: | |
| 503 return (dom_code == DomCode::NUMPAD0) ? VKEY_NUMPAD0 : VKEY_0; | |
| 504 case VKEY_1: | |
| 505 return (dom_code == DomCode::NUMPAD1) ? VKEY_NUMPAD1 : VKEY_1; | |
| 506 case VKEY_2: | |
| 507 return (dom_code == DomCode::NUMPAD2) ? VKEY_NUMPAD2 : VKEY_2; | |
| 508 case VKEY_3: | |
| 509 return (dom_code == DomCode::NUMPAD3) ? VKEY_NUMPAD3 : VKEY_3; | |
| 510 case VKEY_4: | |
| 511 return (dom_code == DomCode::NUMPAD4) ? VKEY_NUMPAD4 : VKEY_4; | |
| 512 case VKEY_5: | |
| 513 return (dom_code == DomCode::NUMPAD5) ? VKEY_NUMPAD5 : VKEY_5; | |
| 514 case VKEY_6: | |
| 515 return (dom_code == DomCode::NUMPAD6) ? VKEY_NUMPAD6 : VKEY_6; | |
| 516 case VKEY_7: | |
| 517 return (dom_code == DomCode::NUMPAD7) ? VKEY_NUMPAD7 : VKEY_7; | |
| 518 case VKEY_8: | |
| 519 return (dom_code == DomCode::NUMPAD8) ? VKEY_NUMPAD8 : VKEY_8; | |
| 520 case VKEY_9: | |
| 521 return (dom_code == DomCode::NUMPAD9) ? VKEY_NUMPAD9 : VKEY_9; | |
| 522 default: | |
| 523 return key_code; | |
| 524 } | |
| 525 } | 466 } |
| 526 | 467 |
| 527 bool LookupControlCharacter(DomCode dom_code, | 468 bool LookupControlCharacter(DomCode dom_code, |
| 528 int flags, | 469 int flags, |
| 529 DomKey* dom_key, | 470 DomKey* dom_key, |
| 530 base::char16* character, | 471 base::char16* character, |
| 531 KeyboardCode* key_code) { | 472 KeyboardCode* key_code) { |
| 532 if ((flags & EF_CONTROL_DOWN) == 0) | 473 if ((flags & EF_CONTROL_DOWN) == 0) |
| 533 return false; | 474 return false; |
| 534 | 475 |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 626 // DomKey::ACCEL | 567 // DomKey::ACCEL |
| 627 // DomKey::FN | 568 // DomKey::FN |
| 628 // DomKey::FN_LOCK | 569 // DomKey::FN_LOCK |
| 629 // DomKey::NUM_LOCK | 570 // DomKey::NUM_LOCK |
| 630 // DomKey::SCROLL_LOCK | 571 // DomKey::SCROLL_LOCK |
| 631 // DomKey::SYMBOL | 572 // DomKey::SYMBOL |
| 632 // DomKey::SYMBOL_LOCK | 573 // DomKey::SYMBOL_LOCK |
| 633 } | 574 } |
| 634 | 575 |
| 635 } // namespace ui | 576 } // namespace ui |
| OLD | NEW |