OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "ui/events/keycodes/keyboard_code_conversion.h" |
| 6 |
| 7 #include "base/basictypes.h" |
| 8 #include "base/strings/stringprintf.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 #include "ui/events/event_constants.h" |
| 11 #include "ui/events/keycodes/dom3/dom_code.h" |
| 12 #include "ui/events/keycodes/dom3/dom_key.h" |
| 13 #include "ui/events/keycodes/dom4/keycode_converter.h" |
| 14 #include "ui/events/keycodes/keyboard_codes.h" |
| 15 |
| 16 namespace { |
| 17 |
| 18 struct Meaning { |
| 19 bool defined; |
| 20 ui::DomKey dom_key; |
| 21 base::char16 character; |
| 22 ui::KeyboardCode legacy_key_code; |
| 23 }; |
| 24 |
| 25 const Meaning kUndefined = {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN}; |
| 26 |
| 27 void CheckDomCodeToMeaning(const char* label, |
| 28 bool f(ui::DomCode dom_code, |
| 29 int flags, |
| 30 ui::DomKey* out_dom_key, |
| 31 base::char16* out_character, |
| 32 ui::KeyboardCode* out_key_code), |
| 33 ui::DomCode dom_code, |
| 34 int event_flags, |
| 35 const Meaning& result) { |
| 36 ui::DomKey result_dom_key = ui::DomKey::NONE; |
| 37 base::char16 result_character = 0; |
| 38 ui::KeyboardCode result_legacy_key_code = ui::VKEY_UNKNOWN; |
| 39 bool success = f(dom_code, event_flags, &result_dom_key, &result_character, |
| 40 &result_legacy_key_code); |
| 41 SCOPED_TRACE( |
| 42 base::StringPrintf("%s %s %06X:%04X", label, |
| 43 ui::KeycodeConverter::DomCodeToCodeString(dom_code), |
| 44 static_cast<int>(dom_code), event_flags)); |
| 45 EXPECT_EQ(result.defined, success); |
| 46 if (success) { |
| 47 EXPECT_EQ(result.dom_key, result_dom_key); |
| 48 EXPECT_EQ(result.character, result_character); |
| 49 EXPECT_EQ(result.legacy_key_code, result_legacy_key_code); |
| 50 } else { |
| 51 // Should not have touched output parameters. |
| 52 EXPECT_EQ(ui::DomKey::NONE, result_dom_key); |
| 53 EXPECT_EQ(0, result_character); |
| 54 EXPECT_EQ(ui::VKEY_UNKNOWN, result_legacy_key_code); |
| 55 } |
| 56 } |
| 57 |
| 58 TEST(KeyboardCodeConversion, ControlCharacters) { |
| 59 // The codes in this table are handled by |DomCodeToControlCharacter()|. |
| 60 static const struct { |
| 61 ui::DomCode dom_code; |
| 62 Meaning control; |
| 63 Meaning control_shift; |
| 64 } kControlCharacters[] = { |
| 65 {ui::DomCode::KEY_A, |
| 66 {true, ui::DomKey::CHARACTER, 0x01, ui::VKEY_A}, |
| 67 {true, ui::DomKey::CHARACTER, 0x01, ui::VKEY_A}}, |
| 68 {ui::DomCode::KEY_B, |
| 69 {true, ui::DomKey::CHARACTER, 0x02, ui::VKEY_B}, |
| 70 {true, ui::DomKey::CHARACTER, 0x02, ui::VKEY_B}}, |
| 71 {ui::DomCode::KEY_C, |
| 72 {true, ui::DomKey::CHARACTER, 0x03, ui::VKEY_C}, |
| 73 {true, ui::DomKey::CHARACTER, 0x03, ui::VKEY_C}}, |
| 74 {ui::DomCode::KEY_D, |
| 75 {true, ui::DomKey::CHARACTER, 0x04, ui::VKEY_D}, |
| 76 {true, ui::DomKey::CHARACTER, 0x04, ui::VKEY_D}}, |
| 77 {ui::DomCode::KEY_E, |
| 78 {true, ui::DomKey::CHARACTER, 0x05, ui::VKEY_E}, |
| 79 {true, ui::DomKey::CHARACTER, 0x05, ui::VKEY_E}}, |
| 80 {ui::DomCode::KEY_F, |
| 81 {true, ui::DomKey::CHARACTER, 0x06, ui::VKEY_F}, |
| 82 {true, ui::DomKey::CHARACTER, 0x06, ui::VKEY_F}}, |
| 83 {ui::DomCode::KEY_G, |
| 84 {true, ui::DomKey::CHARACTER, 0x07, ui::VKEY_G}, |
| 85 {true, ui::DomKey::CHARACTER, 0x07, ui::VKEY_G}}, |
| 86 {ui::DomCode::KEY_H, |
| 87 {true, ui::DomKey::BACKSPACE, 0x08, ui::VKEY_BACK}, |
| 88 {true, ui::DomKey::BACKSPACE, 0x08, ui::VKEY_BACK}}, |
| 89 {ui::DomCode::KEY_I, |
| 90 {true, ui::DomKey::TAB, 0x09, ui::VKEY_TAB}, |
| 91 {true, ui::DomKey::TAB, 0x09, ui::VKEY_TAB}}, |
| 92 {ui::DomCode::KEY_J, |
| 93 {true, ui::DomKey::CHARACTER, 0x0A, ui::VKEY_J}, |
| 94 {true, ui::DomKey::CHARACTER, 0x0A, ui::VKEY_J}}, |
| 95 {ui::DomCode::KEY_K, |
| 96 {true, ui::DomKey::CHARACTER, 0x0B, ui::VKEY_K}, |
| 97 {true, ui::DomKey::CHARACTER, 0x0B, ui::VKEY_K}}, |
| 98 {ui::DomCode::KEY_L, |
| 99 {true, ui::DomKey::CHARACTER, 0x0C, ui::VKEY_L}, |
| 100 {true, ui::DomKey::CHARACTER, 0x0C, ui::VKEY_L}}, |
| 101 {ui::DomCode::KEY_M, |
| 102 {true, ui::DomKey::ENTER, 0x0D, ui::VKEY_RETURN}, |
| 103 {true, ui::DomKey::ENTER, 0x0D, ui::VKEY_RETURN}}, |
| 104 {ui::DomCode::KEY_N, |
| 105 {true, ui::DomKey::CHARACTER, 0x0E, ui::VKEY_N}, |
| 106 {true, ui::DomKey::CHARACTER, 0x0E, ui::VKEY_N}}, |
| 107 {ui::DomCode::KEY_O, |
| 108 {true, ui::DomKey::CHARACTER, 0x0F, ui::VKEY_O}, |
| 109 {true, ui::DomKey::CHARACTER, 0x0F, ui::VKEY_O}}, |
| 110 {ui::DomCode::KEY_P, |
| 111 {true, ui::DomKey::CHARACTER, 0x10, ui::VKEY_P}, |
| 112 {true, ui::DomKey::CHARACTER, 0x10, ui::VKEY_P}}, |
| 113 {ui::DomCode::KEY_Q, |
| 114 {true, ui::DomKey::CHARACTER, 0x11, ui::VKEY_Q}, |
| 115 {true, ui::DomKey::CHARACTER, 0x11, ui::VKEY_Q}}, |
| 116 {ui::DomCode::KEY_R, |
| 117 {true, ui::DomKey::CHARACTER, 0x12, ui::VKEY_R}, |
| 118 {true, ui::DomKey::CHARACTER, 0x12, ui::VKEY_R}}, |
| 119 {ui::DomCode::KEY_S, |
| 120 {true, ui::DomKey::CHARACTER, 0x13, ui::VKEY_S}, |
| 121 {true, ui::DomKey::CHARACTER, 0x13, ui::VKEY_S}}, |
| 122 {ui::DomCode::KEY_T, |
| 123 {true, ui::DomKey::CHARACTER, 0x14, ui::VKEY_T}, |
| 124 {true, ui::DomKey::CHARACTER, 0x14, ui::VKEY_T}}, |
| 125 {ui::DomCode::KEY_U, |
| 126 {true, ui::DomKey::CHARACTER, 0x15, ui::VKEY_U}, |
| 127 {true, ui::DomKey::CHARACTER, 0x15, ui::VKEY_U}}, |
| 128 {ui::DomCode::KEY_V, |
| 129 {true, ui::DomKey::CHARACTER, 0x16, ui::VKEY_V}, |
| 130 {true, ui::DomKey::CHARACTER, 0x16, ui::VKEY_V}}, |
| 131 {ui::DomCode::KEY_W, |
| 132 {true, ui::DomKey::CHARACTER, 0x17, ui::VKEY_W}, |
| 133 {true, ui::DomKey::CHARACTER, 0x17, ui::VKEY_W}}, |
| 134 {ui::DomCode::KEY_X, |
| 135 {true, ui::DomKey::CHARACTER, 0x18, ui::VKEY_X}, |
| 136 {true, ui::DomKey::CHARACTER, 0x18, ui::VKEY_X}}, |
| 137 {ui::DomCode::KEY_Y, |
| 138 {true, ui::DomKey::CHARACTER, 0x19, ui::VKEY_Y}, |
| 139 {true, ui::DomKey::CHARACTER, 0x19, ui::VKEY_Y}}, |
| 140 {ui::DomCode::KEY_Z, |
| 141 {true, ui::DomKey::CHARACTER, 0x1A, ui::VKEY_Z}, |
| 142 {true, ui::DomKey::CHARACTER, 0x1A, ui::VKEY_Z}}, |
| 143 }; |
| 144 for (const auto& it : kControlCharacters) { |
| 145 // Verify |DomCodeToControlCharacter()|. |
| 146 CheckDomCodeToMeaning("c_cc_n", ui::DomCodeToControlCharacter, it.dom_code, |
| 147 ui::EF_NONE, kUndefined); |
| 148 CheckDomCodeToMeaning("c_cc_c", ui::DomCodeToControlCharacter, it.dom_code, |
| 149 ui::EF_CONTROL_DOWN, it.control); |
| 150 CheckDomCodeToMeaning("c_cc_cs", ui::DomCodeToControlCharacter, it.dom_code, |
| 151 ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, |
| 152 it.control_shift); |
| 153 // Verify |DomCodeToUsLayoutMeaning()|. |
| 154 CheckDomCodeToMeaning("c_us_c", ui::DomCodeToUsLayoutMeaning, it.dom_code, |
| 155 ui::EF_CONTROL_DOWN, it.control); |
| 156 CheckDomCodeToMeaning("c_us_cs", ui::DomCodeToUsLayoutMeaning, it.dom_code, |
| 157 ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, |
| 158 it.control_shift); |
| 159 } |
| 160 |
| 161 // The codes in this table are sensitive to the Shift state, so they are |
| 162 // handled differently by |DomCodeToControlCharacter()|, which returns false |
| 163 // for unknown combinations, vs |DomCodeToUsLayoutMeaning()|, which returns |
| 164 // true with DomKey::UNIDENTIFIED. |
| 165 static const struct { |
| 166 ui::DomCode dom_code; |
| 167 Meaning cc_control; |
| 168 Meaning cc_control_shift; |
| 169 Meaning us_control; |
| 170 Meaning us_control_shift; |
| 171 } kShiftControlCharacters[] = { |
| 172 {ui::DomCode::DIGIT2, |
| 173 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN}, |
| 174 {true, ui::DomKey::CHARACTER, 0, ui::VKEY_2}, |
| 175 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_2}, |
| 176 {true, ui::DomKey::CHARACTER, 0, ui::VKEY_2}}, |
| 177 {ui::DomCode::DIGIT6, |
| 178 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN}, |
| 179 {true, ui::DomKey::CHARACTER, 0x1E, ui::VKEY_6}, |
| 180 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_6}, |
| 181 {true, ui::DomKey::CHARACTER, 0x1E, ui::VKEY_6}}, |
| 182 {ui::DomCode::MINUS, |
| 183 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN}, |
| 184 {true, ui::DomKey::CHARACTER, 0x1F, ui::VKEY_OEM_MINUS}, |
| 185 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_MINUS}, |
| 186 {true, ui::DomKey::CHARACTER, 0x1F, ui::VKEY_OEM_MINUS}}, |
| 187 {ui::DomCode::ENTER, |
| 188 {true, ui::DomKey::CHARACTER, 0x0A, ui::VKEY_RETURN}, |
| 189 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN}, |
| 190 {true, ui::DomKey::CHARACTER, 0x0A, ui::VKEY_RETURN}, |
| 191 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_RETURN}}, |
| 192 {ui::DomCode::BRACKET_LEFT, |
| 193 {true, ui::DomKey::ESCAPE, 0x1B, ui::VKEY_OEM_4}, |
| 194 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN}, |
| 195 {true, ui::DomKey::ESCAPE, 0x1B, ui::VKEY_OEM_4}, |
| 196 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_4}}, |
| 197 {ui::DomCode::BACKSLASH, |
| 198 {true, ui::DomKey::CHARACTER, 0x1C, ui::VKEY_OEM_5}, |
| 199 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN}, |
| 200 {true, ui::DomKey::CHARACTER, 0x1C, ui::VKEY_OEM_5}, |
| 201 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_5}}, |
| 202 {ui::DomCode::BRACKET_RIGHT, |
| 203 {true, ui::DomKey::CHARACTER, 0x1D, ui::VKEY_OEM_6}, |
| 204 {false, ui::DomKey::NONE, 0, ui::VKEY_UNKNOWN}, |
| 205 {true, ui::DomKey::CHARACTER, 0x1D, ui::VKEY_OEM_6}, |
| 206 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_6}}, |
| 207 }; |
| 208 for (const auto& it : kShiftControlCharacters) { |
| 209 // Verify |DomCodeToControlCharacter()|. |
| 210 CheckDomCodeToMeaning("s_cc_n", ui::DomCodeToControlCharacter, it.dom_code, |
| 211 ui::EF_NONE, kUndefined); |
| 212 CheckDomCodeToMeaning("s_cc_c", ui::DomCodeToControlCharacter, it.dom_code, |
| 213 ui::EF_CONTROL_DOWN, it.cc_control); |
| 214 CheckDomCodeToMeaning("s_cc_cs", ui::DomCodeToControlCharacter, it.dom_code, |
| 215 ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, |
| 216 it.cc_control_shift); |
| 217 // Verify |DomCodeToUsLayoutMeaning()|. |
| 218 CheckDomCodeToMeaning("s_us_c", ui::DomCodeToUsLayoutMeaning, it.dom_code, |
| 219 ui::EF_CONTROL_DOWN, it.us_control); |
| 220 CheckDomCodeToMeaning("s_us_cs", ui::DomCodeToUsLayoutMeaning, it.dom_code, |
| 221 ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, |
| 222 it.us_control_shift); |
| 223 } |
| 224 |
| 225 // These codes are not handled by |DomCodeToControlCharacter()| directly. |
| 226 static const struct { |
| 227 ui::DomCode dom_code; |
| 228 Meaning normal; |
| 229 Meaning control; |
| 230 } kNonControlCharacters[] = { |
| 231 // Modifiers are handled by |DomCodeToUsLayoutMeaning()| without regard |
| 232 // to whether Control is down. |
| 233 {ui::DomCode::CONTROL_LEFT, |
| 234 {true, ui::DomKey::CONTROL, 0, ui::VKEY_CONTROL}, |
| 235 {true, ui::DomKey::CONTROL, 0, ui::VKEY_CONTROL}}, |
| 236 {ui::DomCode::CONTROL_RIGHT, |
| 237 {true, ui::DomKey::CONTROL, 0, ui::VKEY_CONTROL}, |
| 238 {true, ui::DomKey::CONTROL, 0, ui::VKEY_CONTROL}}, |
| 239 {ui::DomCode::SHIFT_LEFT, |
| 240 {true, ui::DomKey::SHIFT, 0, ui::VKEY_SHIFT}, |
| 241 {true, ui::DomKey::SHIFT, 0, ui::VKEY_SHIFT}}, |
| 242 {ui::DomCode::SHIFT_RIGHT, |
| 243 {true, ui::DomKey::SHIFT, 0, ui::VKEY_SHIFT}, |
| 244 {true, ui::DomKey::SHIFT, 0, ui::VKEY_SHIFT}}, |
| 245 {ui::DomCode::ALT_LEFT, |
| 246 {true, ui::DomKey::ALT, 0, ui::VKEY_MENU}, |
| 247 {true, ui::DomKey::ALT, 0, ui::VKEY_MENU}}, |
| 248 {ui::DomCode::ALT_RIGHT, |
| 249 {true, ui::DomKey::ALT, 0, ui::VKEY_MENU}, |
| 250 {true, ui::DomKey::ALT, 0, ui::VKEY_MENU}}, |
| 251 {ui::DomCode::OS_LEFT, |
| 252 {true, ui::DomKey::OS, 0, ui::VKEY_LWIN}, |
| 253 {true, ui::DomKey::OS, 0, ui::VKEY_LWIN}}, |
| 254 {ui::DomCode::OS_RIGHT, |
| 255 {true, ui::DomKey::OS, 0, ui::VKEY_LWIN}, |
| 256 {true, ui::DomKey::OS, 0, ui::VKEY_LWIN}}, |
| 257 // Non-modifiers (a representative sample here) succeed with |
| 258 // DomKey::UNIDENTIFIED when Control is down. |
| 259 {ui::DomCode::DIGIT1, |
| 260 {true, ui::DomKey::CHARACTER, '1', ui::VKEY_1}, |
| 261 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_1}}, |
| 262 {ui::DomCode::EQUAL, |
| 263 {true, ui::DomKey::CHARACTER, '=', ui::VKEY_OEM_PLUS}, |
| 264 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_OEM_PLUS}}, |
| 265 {ui::DomCode::TAB, |
| 266 {true, ui::DomKey::TAB, 9, ui::VKEY_TAB}, |
| 267 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_TAB}}, |
| 268 {ui::DomCode::F1, |
| 269 {true, ui::DomKey::F1, 0, ui::VKEY_F1}, |
| 270 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_F1}}, |
| 271 {ui::DomCode::VOLUME_UP, |
| 272 {true, ui::DomKey::VOLUME_UP, 0, ui::VKEY_VOLUME_UP}, |
| 273 {true, ui::DomKey::UNIDENTIFIED, 0, ui::VKEY_VOLUME_UP}}, |
| 274 }; |
| 275 for (const auto& it : kNonControlCharacters) { |
| 276 // Verify |DomCodeToControlCharacter()|. |
| 277 CheckDomCodeToMeaning("n_cc_n", ui::DomCodeToControlCharacter, it.dom_code, |
| 278 ui::EF_NONE, kUndefined); |
| 279 CheckDomCodeToMeaning("n_cc_c", ui::DomCodeToControlCharacter, it.dom_code, |
| 280 ui::EF_CONTROL_DOWN, kUndefined); |
| 281 CheckDomCodeToMeaning("n_cc_cs", ui::DomCodeToControlCharacter, it.dom_code, |
| 282 ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, kUndefined); |
| 283 // Verify |DomCodeToUsLayoutMeaning()|. |
| 284 CheckDomCodeToMeaning("n_us_n", ui::DomCodeToUsLayoutMeaning, it.dom_code, |
| 285 ui::EF_NONE, it.normal); |
| 286 CheckDomCodeToMeaning("n_us_c", ui::DomCodeToUsLayoutMeaning, it.dom_code, |
| 287 ui::EF_CONTROL_DOWN, it.control); |
| 288 CheckDomCodeToMeaning("n_us_cs", ui::DomCodeToUsLayoutMeaning, it.dom_code, |
| 289 ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN, it.control); |
| 290 } |
| 291 } |
| 292 |
| 293 TEST(KeyboardCodeConversion, UsLayout) { |
| 294 static const struct { |
| 295 ui::DomCode dom_code; |
| 296 Meaning normal; |
| 297 Meaning shift; |
| 298 } kPrintableUsLayout[] = { |
| 299 {ui::DomCode::KEY_A, |
| 300 {true, ui::DomKey::CHARACTER, 'a', ui::VKEY_A}, |
| 301 {true, ui::DomKey::CHARACTER, 'A', ui::VKEY_A}}, |
| 302 {ui::DomCode::KEY_B, |
| 303 {true, ui::DomKey::CHARACTER, 'b', ui::VKEY_B}, |
| 304 {true, ui::DomKey::CHARACTER, 'B', ui::VKEY_B}}, |
| 305 {ui::DomCode::KEY_C, |
| 306 {true, ui::DomKey::CHARACTER, 'c', ui::VKEY_C}, |
| 307 {true, ui::DomKey::CHARACTER, 'C', ui::VKEY_C}}, |
| 308 {ui::DomCode::KEY_D, |
| 309 {true, ui::DomKey::CHARACTER, 'd', ui::VKEY_D}, |
| 310 {true, ui::DomKey::CHARACTER, 'D', ui::VKEY_D}}, |
| 311 {ui::DomCode::KEY_E, |
| 312 {true, ui::DomKey::CHARACTER, 'e', ui::VKEY_E}, |
| 313 {true, ui::DomKey::CHARACTER, 'E', ui::VKEY_E}}, |
| 314 {ui::DomCode::KEY_F, |
| 315 {true, ui::DomKey::CHARACTER, 'f', ui::VKEY_F}, |
| 316 {true, ui::DomKey::CHARACTER, 'F', ui::VKEY_F}}, |
| 317 {ui::DomCode::KEY_G, |
| 318 {true, ui::DomKey::CHARACTER, 'g', ui::VKEY_G}, |
| 319 {true, ui::DomKey::CHARACTER, 'G', ui::VKEY_G}}, |
| 320 {ui::DomCode::KEY_H, |
| 321 {true, ui::DomKey::CHARACTER, 'h', ui::VKEY_H}, |
| 322 {true, ui::DomKey::CHARACTER, 'H', ui::VKEY_H}}, |
| 323 {ui::DomCode::KEY_I, |
| 324 {true, ui::DomKey::CHARACTER, 'i', ui::VKEY_I}, |
| 325 {true, ui::DomKey::CHARACTER, 'I', ui::VKEY_I}}, |
| 326 {ui::DomCode::KEY_J, |
| 327 {true, ui::DomKey::CHARACTER, 'j', ui::VKEY_J}, |
| 328 {true, ui::DomKey::CHARACTER, 'J', ui::VKEY_J}}, |
| 329 {ui::DomCode::KEY_K, |
| 330 {true, ui::DomKey::CHARACTER, 'k', ui::VKEY_K}, |
| 331 {true, ui::DomKey::CHARACTER, 'K', ui::VKEY_K}}, |
| 332 {ui::DomCode::KEY_L, |
| 333 {true, ui::DomKey::CHARACTER, 'l', ui::VKEY_L}, |
| 334 {true, ui::DomKey::CHARACTER, 'L', ui::VKEY_L}}, |
| 335 {ui::DomCode::KEY_M, |
| 336 {true, ui::DomKey::CHARACTER, 'm', ui::VKEY_M}, |
| 337 {true, ui::DomKey::CHARACTER, 'M', ui::VKEY_M}}, |
| 338 {ui::DomCode::KEY_N, |
| 339 {true, ui::DomKey::CHARACTER, 'n', ui::VKEY_N}, |
| 340 {true, ui::DomKey::CHARACTER, 'N', ui::VKEY_N}}, |
| 341 {ui::DomCode::KEY_O, |
| 342 {true, ui::DomKey::CHARACTER, 'o', ui::VKEY_O}, |
| 343 {true, ui::DomKey::CHARACTER, 'O', ui::VKEY_O}}, |
| 344 {ui::DomCode::KEY_P, |
| 345 {true, ui::DomKey::CHARACTER, 'p', ui::VKEY_P}, |
| 346 {true, ui::DomKey::CHARACTER, 'P', ui::VKEY_P}}, |
| 347 {ui::DomCode::KEY_Q, |
| 348 {true, ui::DomKey::CHARACTER, 'q', ui::VKEY_Q}, |
| 349 {true, ui::DomKey::CHARACTER, 'Q', ui::VKEY_Q}}, |
| 350 {ui::DomCode::KEY_R, |
| 351 {true, ui::DomKey::CHARACTER, 'r', ui::VKEY_R}, |
| 352 {true, ui::DomKey::CHARACTER, 'R', ui::VKEY_R}}, |
| 353 {ui::DomCode::KEY_S, |
| 354 {true, ui::DomKey::CHARACTER, 's', ui::VKEY_S}, |
| 355 {true, ui::DomKey::CHARACTER, 'S', ui::VKEY_S}}, |
| 356 {ui::DomCode::KEY_T, |
| 357 {true, ui::DomKey::CHARACTER, 't', ui::VKEY_T}, |
| 358 {true, ui::DomKey::CHARACTER, 'T', ui::VKEY_T}}, |
| 359 {ui::DomCode::KEY_U, |
| 360 {true, ui::DomKey::CHARACTER, 'u', ui::VKEY_U}, |
| 361 {true, ui::DomKey::CHARACTER, 'U', ui::VKEY_U}}, |
| 362 {ui::DomCode::KEY_V, |
| 363 {true, ui::DomKey::CHARACTER, 'v', ui::VKEY_V}, |
| 364 {true, ui::DomKey::CHARACTER, 'V', ui::VKEY_V}}, |
| 365 {ui::DomCode::KEY_W, |
| 366 {true, ui::DomKey::CHARACTER, 'w', ui::VKEY_W}, |
| 367 {true, ui::DomKey::CHARACTER, 'W', ui::VKEY_W}}, |
| 368 {ui::DomCode::KEY_X, |
| 369 {true, ui::DomKey::CHARACTER, 'x', ui::VKEY_X}, |
| 370 {true, ui::DomKey::CHARACTER, 'X', ui::VKEY_X}}, |
| 371 {ui::DomCode::KEY_Y, |
| 372 {true, ui::DomKey::CHARACTER, 'y', ui::VKEY_Y}, |
| 373 {true, ui::DomKey::CHARACTER, 'Y', ui::VKEY_Y}}, |
| 374 {ui::DomCode::KEY_Z, |
| 375 {true, ui::DomKey::CHARACTER, 'z', ui::VKEY_Z}, |
| 376 {true, ui::DomKey::CHARACTER, 'Z', ui::VKEY_Z}}, |
| 377 {ui::DomCode::DIGIT1, |
| 378 {true, ui::DomKey::CHARACTER, '1', ui::VKEY_1}, |
| 379 {true, ui::DomKey::CHARACTER, '!', ui::VKEY_1}}, |
| 380 {ui::DomCode::DIGIT2, |
| 381 {true, ui::DomKey::CHARACTER, '2', ui::VKEY_2}, |
| 382 {true, ui::DomKey::CHARACTER, '@', ui::VKEY_2}}, |
| 383 {ui::DomCode::DIGIT3, |
| 384 {true, ui::DomKey::CHARACTER, '3', ui::VKEY_3}, |
| 385 {true, ui::DomKey::CHARACTER, '#', ui::VKEY_3}}, |
| 386 {ui::DomCode::DIGIT4, |
| 387 {true, ui::DomKey::CHARACTER, '4', ui::VKEY_4}, |
| 388 {true, ui::DomKey::CHARACTER, '$', ui::VKEY_4}}, |
| 389 {ui::DomCode::DIGIT5, |
| 390 {true, ui::DomKey::CHARACTER, '5', ui::VKEY_5}, |
| 391 {true, ui::DomKey::CHARACTER, '%', ui::VKEY_5}}, |
| 392 {ui::DomCode::DIGIT6, |
| 393 {true, ui::DomKey::CHARACTER, '6', ui::VKEY_6}, |
| 394 {true, ui::DomKey::CHARACTER, '^', ui::VKEY_6}}, |
| 395 {ui::DomCode::DIGIT7, |
| 396 {true, ui::DomKey::CHARACTER, '7', ui::VKEY_7}, |
| 397 {true, ui::DomKey::CHARACTER, '&', ui::VKEY_7}}, |
| 398 {ui::DomCode::DIGIT8, |
| 399 {true, ui::DomKey::CHARACTER, '8', ui::VKEY_8}, |
| 400 {true, ui::DomKey::CHARACTER, '*', ui::VKEY_8}}, |
| 401 {ui::DomCode::DIGIT9, |
| 402 {true, ui::DomKey::CHARACTER, '9', ui::VKEY_9}, |
| 403 {true, ui::DomKey::CHARACTER, '(', ui::VKEY_9}}, |
| 404 {ui::DomCode::DIGIT0, |
| 405 {true, ui::DomKey::CHARACTER, '0', ui::VKEY_0}, |
| 406 {true, ui::DomKey::CHARACTER, ')', ui::VKEY_0}}, |
| 407 {ui::DomCode::SPACE, |
| 408 {true, ui::DomKey::CHARACTER, ' ', ui::VKEY_SPACE}, |
| 409 {true, ui::DomKey::CHARACTER, ' ', ui::VKEY_SPACE}}, |
| 410 {ui::DomCode::MINUS, |
| 411 {true, ui::DomKey::CHARACTER, '-', ui::VKEY_OEM_MINUS}, |
| 412 {true, ui::DomKey::CHARACTER, '_', ui::VKEY_OEM_MINUS}}, |
| 413 {ui::DomCode::EQUAL, |
| 414 {true, ui::DomKey::CHARACTER, '=', ui::VKEY_OEM_PLUS}, |
| 415 {true, ui::DomKey::CHARACTER, '+', ui::VKEY_OEM_PLUS}}, |
| 416 {ui::DomCode::BRACKET_LEFT, |
| 417 {true, ui::DomKey::CHARACTER, '[', ui::VKEY_OEM_4}, |
| 418 {true, ui::DomKey::CHARACTER, '{', ui::VKEY_OEM_4}}, |
| 419 {ui::DomCode::BRACKET_RIGHT, |
| 420 {true, ui::DomKey::CHARACTER, ']', ui::VKEY_OEM_6}, |
| 421 {true, ui::DomKey::CHARACTER, '}', ui::VKEY_OEM_6}}, |
| 422 {ui::DomCode::BACKSLASH, |
| 423 {true, ui::DomKey::CHARACTER, '\\', ui::VKEY_OEM_5}, |
| 424 {true, ui::DomKey::CHARACTER, '|', ui::VKEY_OEM_5}}, |
| 425 {ui::DomCode::SEMICOLON, |
| 426 {true, ui::DomKey::CHARACTER, ';', ui::VKEY_OEM_1}, |
| 427 {true, ui::DomKey::CHARACTER, ':', ui::VKEY_OEM_1}}, |
| 428 {ui::DomCode::QUOTE, |
| 429 {true, ui::DomKey::CHARACTER, '\'', ui::VKEY_OEM_7}, |
| 430 {true, ui::DomKey::CHARACTER, '"', ui::VKEY_OEM_7}}, |
| 431 {ui::DomCode::BACKQUOTE, |
| 432 {true, ui::DomKey::CHARACTER, '`', ui::VKEY_OEM_3}, |
| 433 {true, ui::DomKey::CHARACTER, '~', ui::VKEY_OEM_3}}, |
| 434 {ui::DomCode::COMMA, |
| 435 {true, ui::DomKey::CHARACTER, ',', ui::VKEY_OEM_COMMA}, |
| 436 {true, ui::DomKey::CHARACTER, '<', ui::VKEY_OEM_COMMA}}, |
| 437 {ui::DomCode::PERIOD, |
| 438 {true, ui::DomKey::CHARACTER, '.', ui::VKEY_OEM_PERIOD}, |
| 439 {true, ui::DomKey::CHARACTER, '>', ui::VKEY_OEM_PERIOD}}, |
| 440 {ui::DomCode::SLASH, |
| 441 {true, ui::DomKey::CHARACTER, '/', ui::VKEY_OEM_2}, |
| 442 {true, ui::DomKey::CHARACTER, '?', ui::VKEY_OEM_2}}, |
| 443 {ui::DomCode::INTL_BACKSLASH, |
| 444 {true, ui::DomKey::CHARACTER, '\\', ui::VKEY_OEM_102}, |
| 445 {true, ui::DomKey::CHARACTER, '|', ui::VKEY_OEM_102}}, |
| 446 {ui::DomCode::INTL_YEN, |
| 447 {true, ui::DomKey::CHARACTER, 0x00A5, ui::VKEY_OEM_5}, |
| 448 {true, ui::DomKey::CHARACTER, '|', ui::VKEY_OEM_5}}, |
| 449 {ui::DomCode::NUMPAD_DIVIDE, |
| 450 {true, ui::DomKey::CHARACTER, '/', ui::VKEY_DIVIDE}, |
| 451 {true, ui::DomKey::CHARACTER, '/', ui::VKEY_DIVIDE}}, |
| 452 {ui::DomCode::NUMPAD_MULTIPLY, |
| 453 {true, ui::DomKey::CHARACTER, '*', ui::VKEY_MULTIPLY}, |
| 454 {true, ui::DomKey::CHARACTER, '*', ui::VKEY_MULTIPLY}}, |
| 455 {ui::DomCode::NUMPAD_SUBTRACT, |
| 456 {true, ui::DomKey::CHARACTER, '-', ui::VKEY_SUBTRACT}, |
| 457 {true, ui::DomKey::CHARACTER, '-', ui::VKEY_SUBTRACT}}, |
| 458 {ui::DomCode::NUMPAD_ADD, |
| 459 {true, ui::DomKey::CHARACTER, '+', ui::VKEY_ADD}, |
| 460 {true, ui::DomKey::CHARACTER, '+', ui::VKEY_ADD}}, |
| 461 {ui::DomCode::NUMPAD1, |
| 462 {true, ui::DomKey::CHARACTER, '1', ui::VKEY_1}, |
| 463 {true, ui::DomKey::CHARACTER, '1', ui::VKEY_1}}, |
| 464 {ui::DomCode::NUMPAD2, |
| 465 {true, ui::DomKey::CHARACTER, '2', ui::VKEY_2}, |
| 466 {true, ui::DomKey::CHARACTER, '2', ui::VKEY_2}}, |
| 467 {ui::DomCode::NUMPAD3, |
| 468 {true, ui::DomKey::CHARACTER, '3', ui::VKEY_3}, |
| 469 {true, ui::DomKey::CHARACTER, '3', ui::VKEY_3}}, |
| 470 {ui::DomCode::NUMPAD4, |
| 471 {true, ui::DomKey::CHARACTER, '4', ui::VKEY_4}, |
| 472 {true, ui::DomKey::CHARACTER, '4', ui::VKEY_4}}, |
| 473 {ui::DomCode::NUMPAD5, |
| 474 {true, ui::DomKey::CHARACTER, '5', ui::VKEY_5}, |
| 475 {true, ui::DomKey::CHARACTER, '5', ui::VKEY_5}}, |
| 476 {ui::DomCode::NUMPAD6, |
| 477 {true, ui::DomKey::CHARACTER, '6', ui::VKEY_6}, |
| 478 {true, ui::DomKey::CHARACTER, '6', ui::VKEY_6}}, |
| 479 {ui::DomCode::NUMPAD7, |
| 480 {true, ui::DomKey::CHARACTER, '7', ui::VKEY_7}, |
| 481 {true, ui::DomKey::CHARACTER, '7', ui::VKEY_7}}, |
| 482 {ui::DomCode::NUMPAD8, |
| 483 {true, ui::DomKey::CHARACTER, '8', ui::VKEY_8}, |
| 484 {true, ui::DomKey::CHARACTER, '8', ui::VKEY_8}}, |
| 485 {ui::DomCode::NUMPAD9, |
| 486 {true, ui::DomKey::CHARACTER, '9', ui::VKEY_9}, |
| 487 {true, ui::DomKey::CHARACTER, '9', ui::VKEY_9}}, |
| 488 {ui::DomCode::NUMPAD0, |
| 489 {true, ui::DomKey::CHARACTER, '0', ui::VKEY_0}, |
| 490 {true, ui::DomKey::CHARACTER, '0', ui::VKEY_0}}, |
| 491 {ui::DomCode::NUMPAD_DECIMAL, |
| 492 {true, ui::DomKey::CHARACTER, '.', ui::VKEY_DECIMAL}, |
| 493 {true, ui::DomKey::CHARACTER, '.', ui::VKEY_DECIMAL}}, |
| 494 {ui::DomCode::NUMPAD_EQUAL, |
| 495 {true, ui::DomKey::CHARACTER, '=', ui::VKEY_UNKNOWN}, |
| 496 {true, ui::DomKey::CHARACTER, '=', ui::VKEY_UNKNOWN}}, |
| 497 {ui::DomCode::NUMPAD_COMMA, |
| 498 {true, ui::DomKey::CHARACTER, ',', ui::VKEY_OEM_COMMA}, |
| 499 {true, ui::DomKey::CHARACTER, ',', ui::VKEY_OEM_COMMA}}, |
| 500 {ui::DomCode::NUMPAD_PAREN_LEFT, |
| 501 {true, ui::DomKey::CHARACTER, '(', ui::VKEY_UNKNOWN}, |
| 502 {true, ui::DomKey::CHARACTER, '(', ui::VKEY_UNKNOWN}}, |
| 503 {ui::DomCode::NUMPAD_PAREN_RIGHT, |
| 504 {true, ui::DomKey::CHARACTER, ')', ui::VKEY_UNKNOWN}, |
| 505 {true, ui::DomKey::CHARACTER, ')', ui::VKEY_UNKNOWN}}, |
| 506 {ui::DomCode::NUMPAD_SIGN_CHANGE, |
| 507 {true, ui::DomKey::CHARACTER, 0xB1, ui::VKEY_UNKNOWN}, |
| 508 {true, ui::DomKey::CHARACTER, 0xB1, ui::VKEY_UNKNOWN}}, |
| 509 }; |
| 510 |
| 511 for (const auto& it : kPrintableUsLayout) { |
| 512 CheckDomCodeToMeaning("p_us_n", ui::DomCodeToUsLayoutMeaning, it.dom_code, |
| 513 ui::EF_NONE, it.normal); |
| 514 CheckDomCodeToMeaning("p_us_s", ui::DomCodeToUsLayoutMeaning, it.dom_code, |
| 515 ui::EF_SHIFT_DOWN, it.shift); |
| 516 CheckDomCodeToMeaning("p_us_a", ui::DomCodeToUsLayoutMeaning, it.dom_code, |
| 517 ui::EF_ALTGR_DOWN, it.normal); |
| 518 CheckDomCodeToMeaning("p_us_a", ui::DomCodeToUsLayoutMeaning, it.dom_code, |
| 519 ui::EF_ALTGR_DOWN|ui::EF_SHIFT_DOWN, it.shift); |
| 520 } |
| 521 } |
| 522 |
| 523 } // namespace |
OLD | NEW |