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

Unified Diff: ui/events/keycodes/dom4/keycode_converter.cc

Issue 641753003: DOM Level 3 .code and .key value enumerations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months 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
Index: ui/events/keycodes/dom4/keycode_converter.cc
diff --git a/ui/events/keycodes/dom4/keycode_converter.cc b/ui/events/keycodes/dom4/keycode_converter.cc
index b7958dd0db19e93ed6785f721b16538445170cf6..7b9650fb7082920c9890292cdf057ff82a11f7b2 100644
--- a/ui/events/keycodes/dom4/keycode_converter.cc
+++ b/ui/events/keycodes/dom4/keycode_converter.cc
@@ -4,10 +4,25 @@
#include "ui/events/keycodes/dom4/keycode_converter.h"
+#include "base/logging.h"
+
namespace ui {
namespace {
+template<typename T>
+struct DomKeyCodeEntry {
+ const char *string;
+ T enumeration;
+};
+
+#include "ui/events/keycodes/dom4/domcode.h"
+#include "ui/events/keycodes/dom4/domcode_string.h"
+#include "ui/events/keycodes/dom4/domcode_table.h"
+#include "ui/events/keycodes/dom4/domkey.h"
+#include "ui/events/keycodes/dom4/domkey_string.h"
+#include "ui/events/keycodes/dom4/domkey_table.h"
+
#if defined(OS_WIN)
#define USB_KEYMAP(usb, xkb, win, mac, code) {usb, win, code}
#elif defined(OS_LINUX)
@@ -17,9 +32,13 @@ namespace {
#else
#define USB_KEYMAP(usb, xkb, win, mac, code) {usb, 0, code}
#endif
-#include "ui/events/keycodes/dom4/keycode_converter_data.h"
+#include "ui/events/keycodes/dom4/native_code_data.h"
const size_t kKeycodeMapEntries = arraysize(usb_keycode_map);
+const size_t kDomCodeStringTableEntries = arraysize(dom_code_string);
+const size_t kDomCodeTableEntries = arraysize(dom_code_table);
+const size_t kDomKeyStringTableEntries = arraysize(dom_key_string);
+const size_t kDomKeyTableEntries = arraysize(dom_key_table);
} // namespace
@@ -34,43 +53,82 @@ const KeycodeMapEntry* KeycodeConverter::GetKeycodeMapForTest() {
}
// static
+size_t KeycodeConverter::NumDomCodeStringEntriesForTest() {
+ return kDomCodeStringTableEntries;
+}
+
+// static
+const char* const* KeycodeConverter::DomCodeStringTableForTest() {
+ return dom_code_string;
+}
+
+// static
+size_t KeycodeConverter::NumDomKeyStringEntriesForTest() {
+ return kDomKeyStringTableEntries;
+}
+
+// static
+const char* const* KeycodeConverter::DomKeyStringTableForTest() {
+ return dom_key_string;
+}
+
+// static
uint16_t KeycodeConverter::InvalidNativeKeycode() {
return usb_keycode_map[0].native_keycode;
}
// static
const char* KeycodeConverter::InvalidKeyboardEventCode() {
- return "Unidentified";
+ return dom_code_string[static_cast<size_t>(ui::DOM_CODE_UNIDENTIFIED)];
}
// static
-const char* KeycodeConverter::NativeKeycodeToCode(uint16_t native_keycode) {
- for (size_t i = 0; i < kKeycodeMapEntries; ++i) {
- if (usb_keycode_map[i].native_keycode == native_keycode) {
- if (usb_keycode_map[i].code != NULL)
- return usb_keycode_map[i].code;
- break;
+const char* KeycodeConverter::DomCodeToCodeString(DomCode dom_code) {
+ size_t code = static_cast<size_t>(dom_code);
+ DCHECK_LT(code, kDomCodeStringTableEntries);
+ DCHECK_NE(dom_code_string[code], static_cast<const char*>(nullptr));
+ return dom_code_string[code];
+}
+
+// static
+DomCode KeycodeConverter::CodeStringToDomCode(const char* code) {
+ if (code) {
+ for (size_t i = 0; i < kDomCodeTableEntries; ++i) {
+ if (strcmp(code, dom_code_table[i].string) == 0)
+ return dom_code_table[i].enumeration;
}
}
- return InvalidKeyboardEventCode();
+ return DOM_CODE_NONE;
}
// static
-uint16_t KeycodeConverter::CodeToNativeKeycode(const char* code) {
- if (!code ||
- strcmp(code, InvalidKeyboardEventCode()) == 0) {
- return InvalidNativeKeycode();
+DomCode KeycodeConverter::NativeKeycodeToDomCode(uint16_t native_keycode) {
+ for (size_t i = 0; i < kKeycodeMapEntries; ++i) {
+ if (usb_keycode_map[i].native_keycode == native_keycode)
+ return usb_keycode_map[i].code;
}
+ return DOM_CODE_NONE;
+}
+// static
+uint16_t KeycodeConverter::DomCodeToNativeKeycode(DomCode code) {
for (size_t i = 0; i < kKeycodeMapEntries; ++i) {
- if (usb_keycode_map[i].code &&
- strcmp(usb_keycode_map[i].code, code) == 0) {
+ if (usb_keycode_map[i].code == code)
return usb_keycode_map[i].native_keycode;
- }
}
return InvalidNativeKeycode();
}
+// static
+const char* KeycodeConverter::NativeKeycodeToCode(uint16_t native_keycode) {
+ return DomCodeToCodeString(NativeKeycodeToDomCode(native_keycode));
+}
+
+// static
+uint16_t KeycodeConverter::CodeToNativeKeycode(const char* code_string) {
+ return DomCodeToNativeKeycode(CodeStringToDomCode(code_string));
+}
+
// USB keycodes
// Note that USB keycodes are not part of any web standard.
// Please don't use USB keycodes in new code.
@@ -110,25 +168,39 @@ uint32_t KeycodeConverter::NativeKeycodeToUsbKeycode(uint16_t native_keycode) {
const char* KeycodeConverter::UsbKeycodeToCode(uint32_t usb_keycode) {
for (size_t i = 0; i < kKeycodeMapEntries; ++i) {
if (usb_keycode_map[i].usb_keycode == usb_keycode)
- return usb_keycode_map[i].code;
+ return DomCodeToCodeString(usb_keycode_map[i].code);
}
return InvalidKeyboardEventCode();
}
// static
-uint32_t KeycodeConverter::CodeToUsbKeycode(const char* code) {
- if (!code ||
- strcmp(code, InvalidKeyboardEventCode()) == 0) {
- return InvalidUsbKeycode();
- }
-
+uint32_t KeycodeConverter::CodeToUsbKeycode(const char* code_string) {
+ DomCode code = CodeStringToDomCode(code_string);
for (size_t i = 0; i < kKeycodeMapEntries; ++i) {
- if (usb_keycode_map[i].code &&
- strcmp(usb_keycode_map[i].code, code) == 0) {
+ if (usb_keycode_map[i].code == code) {
return usb_keycode_map[i].usb_keycode;
}
}
return InvalidUsbKeycode();
}
+// static
+const char* KeycodeConverter::DomKeyToKeyString(DomKey dom_key) {
+ size_t key = static_cast<size_t>(dom_key);
+ DCHECK_LT(key, kDomKeyStringTableEntries);
+ DCHECK_NE(dom_key_string[key], static_cast<const char*>(nullptr));
+ return dom_key_string[key];
+}
+
+// static
+DomKey KeycodeConverter::KeyStringToDomKey(const char* key) {
+ if (key) {
+ for (size_t i = 0; i < kDomKeyTableEntries; ++i) {
+ if (strcmp(key, dom_key_table[i].string) == 0)
+ return dom_key_table[i].enumeration;
+ }
+ }
+ return DOM_KEY_NONE;
+}
+
} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698