| // Copyright 2014 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/base/ime/chromeos/ime_keymap.h" |
| |
| #include <map> |
| |
| #include "base/lazy_instance.h" |
| |
| namespace ui { |
| |
| namespace { |
| |
| const struct KeyCodeTable { |
| KeyboardCode keyboard_code; |
| const char* dom_code; |
| } kKeyCodeTable[] = { |
| {VKEY_BACK, "Backspace"}, |
| {VKEY_TAB, "Tab"}, |
| {VKEY_RETURN, "Enter"}, |
| {VKEY_MENU, "ContextMenu"}, |
| {VKEY_PAUSE, "Pause"}, |
| {VKEY_CAPITAL, "CapsLock"}, |
| {VKEY_KANA, "KanaMode"}, |
| {VKEY_HANGUL, "HangulMode"}, |
| {VKEY_HANJA, "Hanja"}, |
| {VKEY_KANJI, "Kanji"}, |
| {VKEY_ESCAPE, "Escape"}, |
| {VKEY_CONVERT, "Convert"}, |
| {VKEY_NONCONVERT, "NoConvert"}, |
| {VKEY_SPACE, "Space"}, |
| {VKEY_END, "End"}, |
| {VKEY_HOME, "Home"}, |
| {VKEY_LEFT, "ArrowLeft"}, |
| {VKEY_UP, "ArrowUp"}, |
| {VKEY_RIGHT, "ArrowRight"}, |
| {VKEY_DOWN, "ArrowDown"}, |
| {VKEY_PRINT, "PrintScreen"}, |
| {VKEY_INSERT, "Insert"}, |
| {VKEY_DELETE, "Delete"}, |
| {VKEY_HELP, "Help"}, |
| {VKEY_0, "Digit0"}, |
| {VKEY_1, "Digit1"}, |
| {VKEY_2, "Digit2"}, |
| {VKEY_3, "Digit3"}, |
| {VKEY_4, "Digit4"}, |
| {VKEY_5, "Digit5"}, |
| {VKEY_6, "Digit6"}, |
| {VKEY_7, "Digit7"}, |
| {VKEY_8, "Digit8"}, |
| {VKEY_9, "Digit9"}, |
| {VKEY_A, "KeyA"}, |
| {VKEY_B, "KeyB"}, |
| {VKEY_C, "KeyC"}, |
| {VKEY_D, "KeyD"}, |
| {VKEY_E, "KeyE"}, |
| {VKEY_F, "KeyF"}, |
| {VKEY_G, "KeyG"}, |
| {VKEY_H, "KeyH"}, |
| {VKEY_I, "KeyI"}, |
| {VKEY_J, "KeyJ"}, |
| {VKEY_K, "KeyK"}, |
| {VKEY_L, "KeyL"}, |
| {VKEY_M, "KeyM"}, |
| {VKEY_N, "KeyN"}, |
| {VKEY_O, "KeyO"}, |
| {VKEY_P, "KeyP"}, |
| {VKEY_Q, "KeyQ"}, |
| {VKEY_R, "KeyR"}, |
| {VKEY_S, "KeyS"}, |
| {VKEY_T, "KeyT"}, |
| {VKEY_U, "KeyU"}, |
| {VKEY_V, "KeyV"}, |
| {VKEY_W, "KeyW"}, |
| {VKEY_X, "KeyX"}, |
| {VKEY_Y, "KeyY"}, |
| {VKEY_Z, "KeyZ"}, |
| {VKEY_LWIN, "OSLeft"}, |
| {VKEY_RWIN, "OSRight"}, |
| {VKEY_NUMPAD0, "Numpad0"}, |
| {VKEY_NUMPAD1, "Numpad1"}, |
| {VKEY_NUMPAD2, "Numpad2"}, |
| {VKEY_NUMPAD3, "Numpad3"}, |
| {VKEY_NUMPAD4, "Numpad4"}, |
| {VKEY_NUMPAD5, "Numpad5"}, |
| {VKEY_NUMPAD6, "Numpad6"}, |
| {VKEY_NUMPAD7, "Numpad7"}, |
| {VKEY_NUMPAD8, "Numpad8"}, |
| {VKEY_NUMPAD9, "Numpad9"}, |
| {VKEY_MULTIPLY, "NumpadMultiply"}, |
| {VKEY_ADD, "NumpadAdd"}, |
| {VKEY_SUBTRACT, "NumpadSubtract"}, |
| {VKEY_DECIMAL, "NumpadDecimal"}, |
| {VKEY_DIVIDE, "NumpadDivide"}, |
| {VKEY_F1, "F1"}, |
| {VKEY_F2, "F2"}, |
| {VKEY_F3, "F3"}, |
| {VKEY_F4, "F4"}, |
| {VKEY_F5, "F5"}, |
| {VKEY_F6, "F6"}, |
| {VKEY_F7, "F7"}, |
| {VKEY_F8, "F8"}, |
| {VKEY_F9, "F9"}, |
| {VKEY_F10, "F10"}, |
| {VKEY_F11, "F11"}, |
| {VKEY_F12, "F12"}, |
| {VKEY_F13, "F13"}, |
| {VKEY_F14, "F14"}, |
| {VKEY_F15, "F15"}, |
| {VKEY_F16, "F16"}, |
| {VKEY_F17, "F17"}, |
| {VKEY_F18, "F18"}, |
| {VKEY_F19, "F19"}, |
| {VKEY_F20, "F20"}, |
| {VKEY_F21, "F21"}, |
| {VKEY_F22, "F22"}, |
| {VKEY_F23, "F23"}, |
| {VKEY_F24, "F24"}, |
| {VKEY_NUMLOCK, "NumLock"}, |
| {VKEY_SCROLL, "ScrollLock"}, |
| {VKEY_LSHIFT, "ShiftLeft"}, |
| {VKEY_RSHIFT, "ShiftRight"}, |
| {VKEY_LCONTROL, "CtrlLeft"}, |
| {VKEY_RCONTROL, "CtrlRight"}, |
| {VKEY_LMENU, "AltLeft"}, |
| {VKEY_RMENU, "AltRight"}, |
| {VKEY_BROWSER_BACK, "BrowserBack"}, |
| {VKEY_BROWSER_FORWARD, "BrowserForward"}, |
| {VKEY_BROWSER_REFRESH, "BrowserRefresh"}, |
| {VKEY_BROWSER_STOP, "BrowserStop"}, |
| {VKEY_BROWSER_SEARCH, "BrowserSearch"}, |
| {VKEY_BROWSER_HOME, "BrowserHome"}, |
| {VKEY_VOLUME_MUTE, "VolumeMute"}, |
| {VKEY_VOLUME_DOWN, "VolumeDown"}, |
| {VKEY_VOLUME_UP, "VolumeUp"}, |
| {VKEY_BRIGHTNESS_DOWN, "BrightnessDown"}, |
| {VKEY_BRIGHTNESS_UP, "BrightnessUp"}, |
| {VKEY_MEDIA_LAUNCH_APP1, "ChromeOSSwitchWindow"}, |
| {VKEY_MEDIA_LAUNCH_APP2, "ChromeOSFullscreen"}, |
| {VKEY_MEDIA_NEXT_TRACK, "MediaTrackNext"}, |
| {VKEY_MEDIA_PREV_TRACK, "MediaTrackPrevious"}, |
| {VKEY_MEDIA_STOP, "MediaStop"}, |
| {VKEY_MEDIA_PLAY_PAUSE, "MediaPlayPause"}, |
| {VKEY_MEDIA_LAUNCH_MAIL, "LaunchMail"}, |
| {VKEY_OEM_1, "Semicolon"}, |
| {VKEY_OEM_PLUS, "Equal"}, |
| {VKEY_OEM_COMMA, "Comma"}, |
| {VKEY_OEM_MINUS, "Minus"}, |
| {VKEY_OEM_PERIOD, "Period"}, |
| {VKEY_OEM_2, "Slash"}, |
| {VKEY_OEM_3, "Backquote"}, |
| {VKEY_OEM_4, "BracketLeft"}, |
| {VKEY_OEM_5, "Backslash"}, |
| {VKEY_OEM_6, "BracketRight"}, |
| {VKEY_OEM_7, "Quote"}}; |
| |
| class KeyCodeMap { |
| public: |
| KeyCodeMap() { |
| for (size_t i = 0; i < arraysize(kKeyCodeTable); ++i) { |
| map_dom_key_[kKeyCodeTable[i].dom_code] = kKeyCodeTable[i].keyboard_code; |
| map_key_dom_[kKeyCodeTable[i].keyboard_code] = kKeyCodeTable[i].dom_code; |
| } |
| } |
| |
| KeyboardCode GetKeyboardCode(const std::string& dom_code) const { |
| std::map<std::string, KeyboardCode>::const_iterator it = |
| map_dom_key_.find(dom_code); |
| return (it == map_dom_key_.end()) ? VKEY_UNKNOWN : it->second; |
| } |
| |
| std::string GetDomKeycode(KeyboardCode key_code) const { |
| std::map<KeyboardCode, std::string>::const_iterator it = |
| map_key_dom_.find(key_code); |
| return (it == map_key_dom_.end()) ? "" : it->second; |
| } |
| |
| private: |
| std::map<std::string, KeyboardCode> map_dom_key_; |
| std::map<KeyboardCode, std::string> map_key_dom_; |
| }; |
| |
| base::LazyInstance<KeyCodeMap>::Leaky g_keycode_map = |
| LAZY_INSTANCE_INITIALIZER; |
| |
| } // namespace |
| |
| KeyboardCode DomKeycodeToKeyboardCode(const std::string& code) { |
| return g_keycode_map.Get().GetKeyboardCode(code); |
| } |
| |
| std::string KeyboardCodeToDomKeycode(KeyboardCode code) { |
| return g_keycode_map.Get().GetDomKeycode(code); |
| } |
| |
| } // namespace ui |