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

Unified Diff: ui/events/ozone/layout/layout_util.cc

Issue 786813004: Generate correct KeyboardCode (VKEY). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@x430194-xkb
Patch Set: rebase after crrev.com/308447 Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/ozone/layout/layout_util.h ('k') | ui/events/ozone/layout/stub/stub_keyboard_layout_engine.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « ui/events/ozone/layout/layout_util.h ('k') | ui/events/ozone/layout/stub/stub_keyboard_layout_engine.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698