| Index: ui/events/ozone/layout/layout_util.cc
|
| diff --git a/ui/events/ozone/layout/layout_util.cc b/ui/events/ozone/layout/layout_util.cc
|
| index ca9715d05d1cfe34eef0c4d61d66042d43836c5a..e5d0f896f85019e2659315fbf26f9717ec2f283b 100644
|
| --- a/ui/events/ozone/layout/layout_util.cc
|
| +++ b/ui/events/ozone/layout/layout_util.cc
|
| @@ -14,6 +14,11 @@ namespace ui {
|
|
|
| namespace {
|
|
|
| +bool IsRightSideDomCode(DomCode code) {
|
| + return (code == DomCode::SHIFT_RIGHT) || (code == DomCode::CONTROL_RIGHT) ||
|
| + (code == DomCode::ALT_RIGHT) || (code == DomCode::OS_RIGHT);
|
| +}
|
| +
|
| // This table, used by DomKeyToKeyboardCode(), maps DOM Level 3 .code
|
| // values to legacy Windows-based VKEY values, where the VKEYs are
|
| // interpreted positionally.
|
| @@ -203,21 +208,6 @@ const struct DomCodeToKeyboardCodeEntry {
|
|
|
| } // anonymous namespace
|
|
|
| -// Returns the Windows-based VKEY value corresponding to a DOM Level 3 |code|.
|
| -// The returned VKEY is positional (e.g. VKEY_LSHIFT).
|
| -KeyboardCode DomCodeToKeyboardCode(DomCode dom_code) {
|
| - const DomCodeToKeyboardCodeEntry* end =
|
| - dom_code_to_keyboard_code + arraysize(dom_code_to_keyboard_code);
|
| - const DomCodeToKeyboardCodeEntry* found =
|
| - std::lower_bound(dom_code_to_keyboard_code, end, dom_code,
|
| - [](const DomCodeToKeyboardCodeEntry& a, DomCode b) {
|
| - return static_cast<int>(a.dom_code) < static_cast<int>(b);
|
| - });
|
| - if ((found != end) && (found->dom_code == dom_code))
|
| - return found->key_code;
|
| - return VKEY_UNKNOWN;
|
| -}
|
| -
|
| // Returns a Windows-based VKEY for a non-printable DOM Level 3 |key|.
|
| // The returned VKEY is non-positional (e.g. VKEY_SHIFT).
|
| KeyboardCode NonPrintableDomKeyToKeyboardCode(DomKey dom_key) {
|
| @@ -458,8 +448,29 @@ KeyboardCode NonPrintableDomKeyToKeyboardCode(DomKey dom_key) {
|
| }
|
| }
|
|
|
| +// Returns the Windows-based VKEY value corresponding to a DOM Level 3 |code|.
|
| +// The returned VKEY is located (e.g. VKEY_LSHIFT).
|
| +KeyboardCode DomCodeToKeyboardCode(DomCode dom_code) {
|
| + const DomCodeToKeyboardCodeEntry* end =
|
| + dom_code_to_keyboard_code + arraysize(dom_code_to_keyboard_code);
|
| + const DomCodeToKeyboardCodeEntry* found =
|
| + std::lower_bound(dom_code_to_keyboard_code, end, dom_code,
|
| + [](const DomCodeToKeyboardCodeEntry& a, DomCode b) {
|
| + return static_cast<int>(a.dom_code) < static_cast<int>(b);
|
| + });
|
| + if ((found != end) && (found->dom_code == dom_code))
|
| + return found->key_code;
|
| + return VKEY_UNKNOWN;
|
| +}
|
| +
|
| +// Returns the Windows-based VKEY value corresponding to a DOM Level 3 |code|.
|
| +// The returned VKEY is non-located (e.g. VKEY_SHIFT).
|
| +KeyboardCode DomCodeToNonLocatedKeyboardCode(DomCode dom_code) {
|
| + return NonLocatedKeyboardCode(DomCodeToKeyboardCode(dom_code));
|
| +}
|
| +
|
| // Determine the non-located VKEY corresponding to a located VKEY.
|
| -ui::KeyboardCode DeLocateKeyboardCode(ui::KeyboardCode key_code) {
|
| +KeyboardCode NonLocatedKeyboardCode(KeyboardCode key_code) {
|
| switch (key_code) {
|
| case VKEY_RWIN:
|
| return VKEY_LWIN;
|
| @@ -477,6 +488,42 @@ ui::KeyboardCode DeLocateKeyboardCode(ui::KeyboardCode key_code) {
|
| }
|
| }
|
|
|
| +// Determine the located VKEY corresponding to a non-located VKEY.
|
| +KeyboardCode LocatedKeyboardCode(KeyboardCode key_code, DomCode dom_code) {
|
| + switch (key_code) {
|
| + case VKEY_SHIFT:
|
| + return IsRightSideDomCode(dom_code) ? VKEY_RSHIFT : VKEY_LSHIFT;
|
| + case VKEY_CONTROL:
|
| + return IsRightSideDomCode(dom_code) ? VKEY_RCONTROL : VKEY_LCONTROL;
|
| + case VKEY_MENU:
|
| + return IsRightSideDomCode(dom_code) ? VKEY_RMENU : VKEY_LMENU;
|
| + case VKEY_LWIN:
|
| + return IsRightSideDomCode(dom_code) ? VKEY_RWIN : VKEY_LWIN;
|
| + case VKEY_0:
|
| + return (dom_code == DomCode::NUMPAD0) ? VKEY_NUMPAD0 : VKEY_0;
|
| + case VKEY_1:
|
| + return (dom_code == DomCode::NUMPAD1) ? VKEY_NUMPAD1 : VKEY_1;
|
| + case VKEY_2:
|
| + return (dom_code == DomCode::NUMPAD2) ? VKEY_NUMPAD2 : VKEY_2;
|
| + case VKEY_3:
|
| + return (dom_code == DomCode::NUMPAD3) ? VKEY_NUMPAD3 : VKEY_3;
|
| + case VKEY_4:
|
| + return (dom_code == DomCode::NUMPAD4) ? VKEY_NUMPAD4 : VKEY_4;
|
| + case VKEY_5:
|
| + return (dom_code == DomCode::NUMPAD5) ? VKEY_NUMPAD5 : VKEY_5;
|
| + case VKEY_6:
|
| + return (dom_code == DomCode::NUMPAD6) ? VKEY_NUMPAD6 : VKEY_6;
|
| + case VKEY_7:
|
| + return (dom_code == DomCode::NUMPAD7) ? VKEY_NUMPAD7 : VKEY_7;
|
| + case VKEY_8:
|
| + return (dom_code == DomCode::NUMPAD8) ? VKEY_NUMPAD8 : VKEY_8;
|
| + case VKEY_9:
|
| + return (dom_code == DomCode::NUMPAD9) ? VKEY_NUMPAD9 : VKEY_9;
|
| + default:
|
| + return key_code;
|
| + }
|
| +}
|
| +
|
| bool LookupControlCharacter(DomCode dom_code,
|
| int flags,
|
| DomKey* dom_key,
|
|
|