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, |