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

Side by Side 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: fix macro case KeyX -> KEY_X 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/keycodes/dom4/keycode_converter.h" 5 #include "ui/events/keycodes/dom4/keycode_converter.h"
6 6
7 #include "base/logging.h"
8 #include "ui/events/keycodes/dom3/domcode.h"
9 #include "ui/events/keycodes/dom3/domkey.h"
10
7 namespace ui { 11 namespace ui {
8 12
9 namespace { 13 namespace {
10 14
15 template<typename T>
16 struct DomKeyCodeEntry {
17 const char *string;
18 T enumeration;
19 };
20
21 #if 1 // Work around #include order check to include generated tables.
22 #include "ui/events/keycodes/dom3/domcode_string.h"
23 #include "ui/events/keycodes/dom3/domcode_table.h"
24 #include "ui/events/keycodes/dom3/domkey_string.h"
25 #include "ui/events/keycodes/dom3/domkey_table.h"
26 #endif
27
11 #if defined(OS_WIN) 28 #if defined(OS_WIN)
12 #define USB_KEYMAP(usb, xkb, win, mac, code) {usb, win, code} 29 #define USB_KEYMAP(usb, xkb, win, mac, code) {usb, win, code}
13 #elif defined(OS_LINUX) 30 #elif defined(OS_LINUX)
14 #define USB_KEYMAP(usb, xkb, win, mac, code) {usb, xkb, code} 31 #define USB_KEYMAP(usb, xkb, win, mac, code) {usb, xkb, code}
15 #elif defined(OS_MACOSX) 32 #elif defined(OS_MACOSX)
16 #define USB_KEYMAP(usb, xkb, win, mac, code) {usb, mac, code} 33 #define USB_KEYMAP(usb, xkb, win, mac, code) {usb, mac, code}
17 #else 34 #else
18 #define USB_KEYMAP(usb, xkb, win, mac, code) {usb, 0, code} 35 #define USB_KEYMAP(usb, xkb, win, mac, code) {usb, 0, code}
19 #endif 36 #endif
20 #include "ui/events/keycodes/dom4/keycode_converter_data.h" 37 #include "ui/events/keycodes/dom3/native_code_data.h"
21 38
22 const size_t kKeycodeMapEntries = arraysize(usb_keycode_map); 39 const size_t kKeycodeMapEntries = arraysize(usb_keycode_map);
40 const size_t kDomCodeStringTableEntries = arraysize(dom_code_string);
41 const size_t kDomCodeTableEntries = arraysize(dom_code_table);
42 const size_t kDomKeyStringTableEntries = arraysize(dom_key_string);
43 const size_t kDomKeyTableEntries = arraysize(dom_key_table);
23 44
24 } // namespace 45 } // namespace
25 46
26 // static 47 // static
27 size_t KeycodeConverter::NumKeycodeMapEntriesForTest() { 48 size_t KeycodeConverter::NumKeycodeMapEntriesForTest() {
28 return kKeycodeMapEntries; 49 return kKeycodeMapEntries;
29 } 50 }
30 51
31 // static 52 // static
32 const KeycodeMapEntry* KeycodeConverter::GetKeycodeMapForTest() { 53 const KeycodeMapEntry* KeycodeConverter::GetKeycodeMapForTest() {
33 return &usb_keycode_map[0]; 54 return &usb_keycode_map[0];
34 } 55 }
35 56
36 // static 57 // static
58 size_t KeycodeConverter::NumDomCodeStringEntriesForTest() {
59 return kDomCodeStringTableEntries;
60 }
61
62 // static
63 const char* const* KeycodeConverter::DomCodeStringTableForTest() {
64 return dom_code_string;
65 }
66
67 // static
68 size_t KeycodeConverter::NumDomKeyStringEntriesForTest() {
69 return kDomKeyStringTableEntries;
70 }
71
72 // static
73 const char* const* KeycodeConverter::DomKeyStringTableForTest() {
74 return dom_key_string;
75 }
76
77 // static
37 uint16_t KeycodeConverter::InvalidNativeKeycode() { 78 uint16_t KeycodeConverter::InvalidNativeKeycode() {
38 return usb_keycode_map[0].native_keycode; 79 return usb_keycode_map[0].native_keycode;
39 } 80 }
40 81
41 // static 82 // static
42 const char* KeycodeConverter::InvalidKeyboardEventCode() { 83 const char* KeycodeConverter::InvalidKeyboardEventCode() {
43 return "Unidentified"; 84 return dom_code_string[static_cast<size_t>(ui::DomCode::UNIDENTIFIED)];
85 }
86
87 // static
88 const char* KeycodeConverter::DomCodeToCodeString(DomCode dom_code) {
89 size_t code = static_cast<size_t>(dom_code);
90 DCHECK_LT(code, kDomCodeStringTableEntries);
91 DCHECK_NE(dom_code_string[code], static_cast<const char*>(nullptr));
92 return dom_code_string[code];
93 }
94
95 // static
96 DomCode KeycodeConverter::CodeStringToDomCode(const char* code) {
97 if (code) {
98 for (size_t i = 0; i < kDomCodeTableEntries; ++i) {
99 if (strcmp(code, dom_code_table[i].string) == 0)
100 return dom_code_table[i].enumeration;
101 }
102 }
103 return DomCode::NONE;
104 }
105
106 // static
107 DomCode KeycodeConverter::NativeKeycodeToDomCode(uint16_t native_keycode) {
108 for (size_t i = 0; i < kKeycodeMapEntries; ++i) {
109 if (usb_keycode_map[i].native_keycode == native_keycode)
110 return usb_keycode_map[i].code;
111 }
112 return DomCode::NONE;
113 }
114
115 // static
116 uint16_t KeycodeConverter::DomCodeToNativeKeycode(DomCode code) {
117 for (size_t i = 0; i < kKeycodeMapEntries; ++i) {
118 if (usb_keycode_map[i].code == code)
119 return usb_keycode_map[i].native_keycode;
120 }
121 return InvalidNativeKeycode();
44 } 122 }
45 123
46 // static 124 // static
47 const char* KeycodeConverter::NativeKeycodeToCode(uint16_t native_keycode) { 125 const char* KeycodeConverter::NativeKeycodeToCode(uint16_t native_keycode) {
48 for (size_t i = 0; i < kKeycodeMapEntries; ++i) { 126 return DomCodeToCodeString(NativeKeycodeToDomCode(native_keycode));
49 if (usb_keycode_map[i].native_keycode == native_keycode) {
50 if (usb_keycode_map[i].code != NULL)
51 return usb_keycode_map[i].code;
52 break;
53 }
54 }
55 return InvalidKeyboardEventCode();
56 } 127 }
57 128
58 // static 129 // static
59 uint16_t KeycodeConverter::CodeToNativeKeycode(const char* code) { 130 uint16_t KeycodeConverter::CodeToNativeKeycode(const char* code_string) {
60 if (!code || 131 return DomCodeToNativeKeycode(CodeStringToDomCode(code_string));
61 strcmp(code, InvalidKeyboardEventCode()) == 0) {
62 return InvalidNativeKeycode();
63 }
64
65 for (size_t i = 0; i < kKeycodeMapEntries; ++i) {
66 if (usb_keycode_map[i].code &&
67 strcmp(usb_keycode_map[i].code, code) == 0) {
68 return usb_keycode_map[i].native_keycode;
69 }
70 }
71 return InvalidNativeKeycode();
72 } 132 }
73 133
74 // USB keycodes 134 // USB keycodes
75 // Note that USB keycodes are not part of any web standard. 135 // Note that USB keycodes are not part of any web standard.
76 // Please don't use USB keycodes in new code. 136 // Please don't use USB keycodes in new code.
77 137
78 // static 138 // static
79 uint16_t KeycodeConverter::InvalidUsbKeycode() { 139 uint16_t KeycodeConverter::InvalidUsbKeycode() {
80 return static_cast<uint16_t>(usb_keycode_map[0].usb_keycode); 140 return static_cast<uint16_t>(usb_keycode_map[0].usb_keycode);
81 } 141 }
(...skipping 21 matching lines...) Expand all
103 if (usb_keycode_map[i].native_keycode == native_keycode) 163 if (usb_keycode_map[i].native_keycode == native_keycode)
104 return usb_keycode_map[i].usb_keycode; 164 return usb_keycode_map[i].usb_keycode;
105 } 165 }
106 return InvalidUsbKeycode(); 166 return InvalidUsbKeycode();
107 } 167 }
108 168
109 // static 169 // static
110 const char* KeycodeConverter::UsbKeycodeToCode(uint32_t usb_keycode) { 170 const char* KeycodeConverter::UsbKeycodeToCode(uint32_t usb_keycode) {
111 for (size_t i = 0; i < kKeycodeMapEntries; ++i) { 171 for (size_t i = 0; i < kKeycodeMapEntries; ++i) {
112 if (usb_keycode_map[i].usb_keycode == usb_keycode) 172 if (usb_keycode_map[i].usb_keycode == usb_keycode)
113 return usb_keycode_map[i].code; 173 return DomCodeToCodeString(usb_keycode_map[i].code);
114 } 174 }
115 return InvalidKeyboardEventCode(); 175 return InvalidKeyboardEventCode();
116 } 176 }
117 177
118 // static 178 // static
119 uint32_t KeycodeConverter::CodeToUsbKeycode(const char* code) { 179 uint32_t KeycodeConverter::CodeToUsbKeycode(const char* code_string) {
120 if (!code || 180 DomCode code = CodeStringToDomCode(code_string);
121 strcmp(code, InvalidKeyboardEventCode()) == 0) {
122 return InvalidUsbKeycode();
123 }
124
125 for (size_t i = 0; i < kKeycodeMapEntries; ++i) { 181 for (size_t i = 0; i < kKeycodeMapEntries; ++i) {
126 if (usb_keycode_map[i].code && 182 if (usb_keycode_map[i].code == code) {
127 strcmp(usb_keycode_map[i].code, code) == 0) {
128 return usb_keycode_map[i].usb_keycode; 183 return usb_keycode_map[i].usb_keycode;
129 } 184 }
130 } 185 }
131 return InvalidUsbKeycode(); 186 return InvalidUsbKeycode();
132 } 187 }
133 188
189 // static
190 const char* KeycodeConverter::DomKeyToKeyString(DomKey dom_key) {
191 size_t key = static_cast<size_t>(dom_key);
192 DCHECK_LT(key, kDomKeyStringTableEntries);
193 DCHECK_NE(dom_key_string[key], static_cast<const char*>(nullptr));
194 return dom_key_string[key];
195 }
196
197 // static
198 DomKey KeycodeConverter::KeyStringToDomKey(const char* key) {
199 if (key) {
200 for (size_t i = 0; i < kDomKeyTableEntries; ++i) {
201 if (strcmp(key, dom_key_table[i].string) == 0)
202 return dom_key_table[i].enumeration;
203 }
204 }
205 return DomKey::NONE;
206 }
207
134 } // namespace ui 208 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698