diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-17 23:31:16 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-17 23:31:16 +0000 |
commit | 7e9acd08b34f56b7eab5f9d93a8c69c556d5b0c7 (patch) | |
tree | 8a309abf13991f5f5998c8071b902100ecb7b199 /ui/events/keycodes/keyboard_code_conversion.cc | |
parent | b1d571afd4400219ee44bd15ac9cea7f0ff8e31f (diff) | |
download | chromium_src-7e9acd08b34f56b7eab5f9d93a8c69c556d5b0c7.zip chromium_src-7e9acd08b34f56b7eab5f9d93a8c69c556d5b0c7.tar.gz chromium_src-7e9acd08b34f56b7eab5f9d93a8c69c556d5b0c7.tar.bz2 |
Moves most files from ui/base/keycodes to ui/events/keycodes
I'm leaving usb_keycodes_map in ui/base for now.
BUG=none
TEST=none
R=ben@chromium.org, benm@chromium.org, scherkus@chromium.org
TBR=benm@chromium.org, brettw@chromium.org, scherkus@chromium.org
Review URL: https://codereview.chromium.org/23480084
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@223739 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/events/keycodes/keyboard_code_conversion.cc')
-rw-r--r-- | ui/events/keycodes/keyboard_code_conversion.cc | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/ui/events/keycodes/keyboard_code_conversion.cc b/ui/events/keycodes/keyboard_code_conversion.cc new file mode 100644 index 0000000..293790b --- /dev/null +++ b/ui/events/keycodes/keyboard_code_conversion.cc @@ -0,0 +1,115 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/events/keycodes/keyboard_code_conversion.h" + +#include "ui/base/events/event_constants.h" + +namespace ui { + +uint16 GetCharacterFromKeyCode(KeyboardCode key_code, int flags) { + const bool ctrl = (flags & EF_CONTROL_DOWN) != 0; + const bool shift = (flags & EF_SHIFT_DOWN) != 0; + const bool upper = shift ^ ((flags & EF_CAPS_LOCK_DOWN) != 0); + + // Following Windows behavior to map ctrl-a ~ ctrl-z to \x01 ~ \x1A. + if (key_code >= VKEY_A && key_code <= VKEY_Z) + return key_code - VKEY_A + (ctrl ? 1 : (upper ? 'A' : 'a')); + + // Other ctrl characters + if (ctrl) { + if (shift) { + // following graphics chars require shift key to input. + switch (key_code) { + // ctrl-@ maps to \x00 (Null byte) + case VKEY_2: + return 0; + // ctrl-^ maps to \x1E (Record separator, Information separator two) + case VKEY_6: + return 0x1E; + // ctrl-_ maps to \x1F (Unit separator, Information separator one) + case VKEY_OEM_MINUS: + return 0x1F; + // Returns 0 for all other keys to avoid inputting unexpected chars. + default: + return 0; + } + } else { + switch (key_code) { + // ctrl-[ maps to \x1B (Escape) + case VKEY_OEM_4: + return 0x1B; + // ctrl-\ maps to \x1C (File separator, Information separator four) + case VKEY_OEM_5: + return 0x1C; + // ctrl-] maps to \x1D (Group separator, Information separator three) + case VKEY_OEM_6: + return 0x1D; + // ctrl-Enter maps to \x0A (Line feed) + case VKEY_RETURN: + return 0x0A; + // Returns 0 for all other keys to avoid inputting unexpected chars. + default: + return 0; + } + } + } + + // For IME support. + if (key_code == ui::VKEY_PROCESSKEY) + return 0xE5; + + // Normal characters + if (key_code >= VKEY_0 && key_code <= VKEY_9) { + return shift ? ")!@#$%^&*("[key_code - VKEY_0] : + static_cast<uint16>(key_code); + } else if (key_code >= VKEY_NUMPAD0 && key_code <= VKEY_NUMPAD9) { + return key_code - VKEY_NUMPAD0 + '0'; + } + + switch (key_code) { + case VKEY_TAB: + return '\t'; + case VKEY_RETURN: + return '\r'; + case VKEY_MULTIPLY: + return '*'; + case VKEY_ADD: + return '+'; + case VKEY_SUBTRACT: + return '-'; + case VKEY_DECIMAL: + return '.'; + case VKEY_DIVIDE: + return '/'; + case VKEY_SPACE: + return ' '; + case VKEY_OEM_1: + return shift ? ':' : ';'; + case VKEY_OEM_PLUS: + return shift ? '+' : '='; + case VKEY_OEM_COMMA: + return shift ? '<' : ','; + case VKEY_OEM_MINUS: + return shift ? '_' : '-'; + case VKEY_OEM_PERIOD: + return shift ? '>' : '.'; + case VKEY_OEM_2: + return shift ? '?' : '/'; + case VKEY_OEM_3: + return shift ? '~' : '`'; + case VKEY_OEM_4: + return shift ? '{' : '['; + case VKEY_OEM_5: + return shift ? '|' : '\\'; + case VKEY_OEM_6: + return shift ? '}' : ']'; + case VKEY_OEM_7: + return shift ? '"' : '\''; + default: + return 0; + } +} + +} // namespace ui |