diff options
author | Steve Block <steveblock@google.com> | 2010-04-27 16:31:00 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-05-11 14:42:12 +0100 |
commit | dcc8cf2e65d1aa555cce12431a16547e66b469ee (patch) | |
tree | 92a8d65cd5383bca9749f5327fb5e440563926e6 /WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp | |
parent | ccac38a6b48843126402088a309597e682f40fe6 (diff) | |
download | external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.zip external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.gz external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.bz2 |
Merge webkit.org at r58033 : Initial merge by git
Change-Id: If006c38561af287c50cd578d251629b51e4d8cd1
Diffstat (limited to 'WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp')
-rw-r--r-- | WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp | 225 |
1 files changed, 211 insertions, 14 deletions
diff --git a/WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp b/WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp index 1545dfb..ecf5921 100644 --- a/WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp +++ b/WebCore/platform/haiku/PlatformKeyboardEventHaiku.cpp @@ -1,6 +1,7 @@ /* * Copyright (C) 2007 Ryan Leavengood <leavengood@gmail.com> * Copyright (C) 2008 Andrea Anzani <andrea.anzani@gmail.com> + * Copyright (C) 2010 Stephan Aßmus <superstippi@gmx.de> * * All rights reserved. * @@ -29,11 +30,12 @@ #include "config.h" #include "PlatformKeyboardEvent.h" -#include "KeyboardCodes.h" #include "NotImplemented.h" +#include "WindowsKeyboardCodes.h" #include <InterfaceDefs.h> #include <Message.h> #include <String.h> +#include <wtf/text/CString.h> namespace WebCore { @@ -78,7 +80,7 @@ static String keyIdentifierForHaikuKeyCode(char singleByte, int keyCode) break; case B_BACKSPACE: - return "U+0009"; + return "U+0008"; case B_LEFT_ARROW: return "Left"; case B_RIGHT_ARROW: @@ -105,12 +107,47 @@ static String keyIdentifierForHaikuKeyCode(char singleByte, int keyCode) return "U+0009"; } - return String::format("U+%04X", toASCIIUpper(keyCode)); + return String::format("U+%04X", toASCIIUpper(singleByte)); } -static int windowsKeyCodeForKeyEvent(char singleByte) +static int windowsKeyCodeForKeyEvent(char singleByte, int keyCode) { switch (singleByte) { + case B_FUNCTION_KEY: + switch (keyCode) { + case B_F1_KEY: + return VK_F1; + case B_F2_KEY: + return VK_F2; + case B_F3_KEY: + return VK_F3; + case B_F4_KEY: + return VK_F4; + case B_F5_KEY: + return VK_F5; + case B_F6_KEY: + return VK_F6; + case B_F7_KEY: + return VK_F7; + case B_F8_KEY: + return VK_F8; + case B_F9_KEY: + return VK_F9; + case B_F10_KEY: + return VK_F10; + case B_F11_KEY: + return VK_F11; + case B_F12_KEY: + return VK_F12; + case B_PRINT_KEY: + return VK_PRINT; + case B_PAUSE_KEY: + return 0; // FIXME + case B_SCROLL_KEY: + return 0; // FIXME + } + break; + case B_BACKSPACE: return VK_BACK; // (08) BACKSPACE key case B_TAB: @@ -141,39 +178,191 @@ static int windowsKeyCodeForKeyEvent(char singleByte) return VK_INSERT; // (2D) INS key case B_DELETE: return VK_DELETE; // (2E) DEL key - case 0x2e: - default: - return 0; + + case '0': + case ')': + return VK_0; + case '1': + case '!': + return VK_1; + case '2': + case '@': + return VK_2; + case '3': + case '#': + return VK_3; + case '4': + case '$': + return VK_4; + case '5': + case '%': + return VK_5; + case '6': + case '^': + return VK_6; + case '7': + case '&': + return VK_7; + case '8': + case '*': + return VK_8; + case '9': + case '(': + return VK_9; + case 'a': + case 'A': + return VK_A; + case 'b': + case 'B': + return VK_B; + case 'c': + case 'C': + return VK_C; + case 'd': + case 'D': + return VK_D; + case 'e': + case 'E': + return VK_E; + case 'f': + case 'F': + return VK_F; + case 'g': + case 'G': + return VK_G; + case 'h': + case 'H': + return VK_H; + case 'i': + case 'I': + return VK_I; + case 'j': + case 'J': + return VK_J; + case 'k': + case 'K': + return VK_K; + case 'l': + case 'L': + return VK_L; + case 'm': + case 'M': + return VK_M; + case 'n': + case 'N': + return VK_N; + case 'o': + case 'O': + return VK_O; + case 'p': + case 'P': + return VK_P; + case 'q': + case 'Q': + return VK_Q; + case 'r': + case 'R': + return VK_R; + case 's': + case 'S': + return VK_S; + case 't': + case 'T': + return VK_T; + case 'u': + case 'U': + return VK_U; + case 'v': + case 'V': + return VK_V; + case 'w': + case 'W': + return VK_W; + case 'x': + case 'X': + return VK_X; + case 'y': + case 'Y': + return VK_Y; + case 'z': + case 'Z': + return VK_Z; + case ';': + case ':': + return VK_OEM_1; + case '+': + case '=': + return VK_OEM_PLUS; + case ',': + case '<': + return VK_OEM_COMMA; + case '-': + case '_': + return VK_OEM_MINUS; + case '.': + case '>': + return VK_OEM_PERIOD; + case '/': + case '?': + return VK_OEM_2; + case '`': + case '~': + return VK_OEM_3; + case '[': + case '{': + return VK_OEM_4; + case '\\': + case '|': + return VK_OEM_5; + case ']': + case '}': + return VK_OEM_6; + case '\'': + case '"': + return VK_OEM_7; } + return singleByte; } PlatformKeyboardEvent::PlatformKeyboardEvent(BMessage* message) : m_autoRepeat(false) + , m_isKeypad(false) + , m_shiftKey(false) , m_ctrlKey(false) , m_altKey(false) , m_metaKey(false) - , m_isKeypad(false) - , m_shiftKey(false) { BString bytes = message->FindString("bytes"); + m_nativeVirtualKeyCode = message->FindInt32("key"); + m_text = String::fromUTF8(bytes.String(), bytes.Length()); m_unmodifiedText = String(bytes.String(), bytes.Length()); - m_keyIdentifier = keyIdentifierForHaikuKeyCode(bytes.ByteAt(0), message->FindInt32("key")); + m_keyIdentifier = keyIdentifierForHaikuKeyCode(bytes.ByteAt(0), m_nativeVirtualKeyCode); + + m_windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(bytes.ByteAt(0), m_nativeVirtualKeyCode); if (message->what == B_KEY_UP) m_type = KeyUp; else if (message->what == B_KEY_DOWN) m_type = KeyDown; - m_windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(bytes.ByteAt(0)); + int32 modifiers = message->FindInt32("modifiers"); + m_shiftKey = modifiers & B_SHIFT_KEY; + m_ctrlKey = modifiers & B_COMMAND_KEY; + m_altKey = modifiers & B_CONTROL_KEY; + m_metaKey = modifiers & B_OPTION_KEY; } -void PlatformKeyboardEvent::disambiguateKeyDownEvent(Type type, bool) +void PlatformKeyboardEvent::disambiguateKeyDownEvent(Type type, bool backwardCompatibilityMode) { // Can only change type from KeyDown to RawKeyDown or Char, as we lack information for other conversions. ASSERT(m_type == KeyDown); m_type = type; + + if (backwardCompatibilityMode) + return; + if (type == RawKeyDown) { m_text = String(); m_unmodifiedText = String(); @@ -185,8 +374,16 @@ void PlatformKeyboardEvent::disambiguateKeyDownEvent(Type type, bool) bool PlatformKeyboardEvent::currentCapsLockState() { - notImplemented(); - return false; + return ::modifiers() & B_CAPS_LOCK; +} + +void PlatformKeyboardEvent::getCurrentModifierState(bool& shiftKey, bool& ctrlKey, bool& altKey, bool& metaKey) +{ + unit32 modifiers = ::modifiers(); + shiftKey = modifiers & B_SHIFT_KEY; + ctrlKey = modifiers & B_COMMAND_KEY; + altKey = modifiers & B_CONTROL_KEY; + metaKey = modifiers & B_OPTION_KEY; } } // namespace WebCore |