KeyboardEventWx.cpp [plain text]
#include "config.h"
#include "PlatformKeyboardEvent.h"
#include "WindowsKeyboardCodes.h"
#include <wx/defs.h>
#include <wx/event.h>
namespace WebCore {
static String keyIdentifierForWxKeyCode(int keyCode)
{
switch (keyCode) {
case WXK_MENU:
case WXK_ALT:
return "Alt";
case WXK_CLEAR:
return "Clear";
case WXK_DOWN:
return "Down";
case WXK_END:
return "End";
case WXK_RETURN:
return "Enter";
case WXK_EXECUTE:
return "Execute";
case WXK_F1:
return "F1";
case WXK_F2:
return "F2";
case WXK_F3:
return "F3";
case WXK_F4:
return "F4";
case WXK_F5:
return "F5";
case WXK_F6:
return "F6";
case WXK_F7:
return "F7";
case WXK_F8:
return "F8";
case WXK_F9:
return "F9";
case WXK_F10:
return "F10";
case WXK_F11:
return "F11";
case WXK_F12:
return "F12";
case WXK_F13:
return "F13";
case WXK_F14:
return "F14";
case WXK_F15:
return "F15";
case WXK_F16:
return "F16";
case WXK_F17:
return "F17";
case WXK_F18:
return "F18";
case WXK_F19:
return "F19";
case WXK_F20:
return "F20";
case WXK_F21:
return "F21";
case WXK_F22:
return "F22";
case WXK_F23:
return "F23";
case WXK_F24:
return "F24";
case WXK_HELP:
return "Help";
case WXK_HOME:
return "Home";
case WXK_INSERT:
return "Insert";
case WXK_LEFT:
return "Left";
case WXK_PAGEDOWN:
return "PageDown";
case WXK_PAGEUP:
return "PageUp";
case WXK_PAUSE:
return "Pause";
case WXK_PRINT:
return "PrintScreen";
case WXK_RIGHT:
return "Right";
case WXK_SELECT:
return "Select";
case WXK_UP:
return "Up";
case WXK_DELETE:
return "U+007F";
default:
return String::format("U+%04X", toupper(keyCode));
}
}
static int windowsKeyCodeForKeyEvent(unsigned int keycode)
{
switch (keycode) {
case WXK_NUMPAD0:
return VK_NUMPAD0; case WXK_NUMPAD1:
return VK_NUMPAD1; case WXK_NUMPAD2:
return VK_NUMPAD2; case WXK_NUMPAD3:
return VK_NUMPAD3; case WXK_NUMPAD4:
return VK_NUMPAD4; case WXK_NUMPAD5:
return VK_NUMPAD5; case WXK_NUMPAD6:
return VK_NUMPAD6; case WXK_NUMPAD7:
return VK_NUMPAD7; case WXK_NUMPAD8:
return VK_NUMPAD8; case WXK_NUMPAD9:
return VK_NUMPAD9; case WXK_NUMPAD_MULTIPLY:
return VK_MULTIPLY; case WXK_NUMPAD_ADD:
return VK_ADD; case WXK_NUMPAD_SUBTRACT:
return VK_SUBTRACT; case WXK_NUMPAD_DECIMAL:
return VK_DECIMAL; case WXK_DIVIDE:
return VK_DIVIDE; case WXK_NUMPAD_SEPARATOR:
return VK_SEPARATOR;
case WXK_BACK:
return VK_BACK; case WXK_TAB:
case WXK_NUMPAD_TAB:
return VK_TAB; case WXK_CLEAR:
return VK_CLEAR; case WXK_NUMPAD_ENTER:
case WXK_RETURN:
return VK_RETURN; case WXK_SHIFT:
return VK_SHIFT; case WXK_CONTROL:
return VK_CONTROL; case WXK_MENU:
case WXK_ALT:
return VK_MENU;
case WXK_PAUSE:
return VK_PAUSE; case WXK_CAPITAL:
return VK_CAPITAL;
case WXK_ESCAPE:
return VK_ESCAPE; case WXK_NUMPAD_SPACE:
case WXK_SPACE:
return VK_SPACE; case WXK_NUMPAD_PAGEUP:
case WXK_PAGEUP:
return VK_PRIOR; case WXK_NUMPAD_PAGEDOWN:
case WXK_PAGEDOWN:
return VK_NEXT; case WXK_NUMPAD_END:
case WXK_END:
return VK_END; case WXK_NUMPAD_HOME:
case WXK_HOME:
return VK_HOME; case WXK_NUMPAD_LEFT:
case WXK_LEFT:
return VK_LEFT; case WXK_NUMPAD_UP:
case WXK_UP:
return VK_UP; case WXK_NUMPAD_RIGHT:
case WXK_RIGHT:
return VK_RIGHT; case WXK_NUMPAD_DOWN:
case WXK_DOWN:
return VK_DOWN; case WXK_SELECT:
return VK_SELECT; case WXK_PRINT:
return VK_PRINT; case WXK_EXECUTE:
return VK_EXECUTE; case WXK_SNAPSHOT:
return VK_SNAPSHOT; case WXK_NUMPAD_INSERT:
case WXK_INSERT:
return VK_INSERT; case WXK_NUMPAD_DELETE:
case WXK_DELETE:
return VK_DELETE; case WXK_HELP:
return VK_HELP; case '0':
return VK_0; case '1':
return VK_1; case '2':
return VK_2; case '3':
return VK_3; case '4': return VK_4;
case '5':
return VK_5; case '6':
return VK_6; case '7':
return VK_7; case '8':
return VK_8; case '9':
return VK_9; case 'A':
return VK_A; case 'B':
return VK_B; case 'C':
return VK_C; case 'D':
return VK_D; case 'E':
return VK_E; case 'F':
return VK_F; case 'G':
return VK_G; case 'H':
return VK_H; case 'I':
return VK_I; case 'J':
return VK_J; case 'K':
return VK_K; case 'L':
return VK_L; case 'M':
return VK_M; case 'N':
return VK_N; case 'O':
return VK_O; case 'P':
return VK_P; case 'Q':
return VK_Q; case 'R':
return VK_R; case 'S':
return VK_S; case 'T':
return VK_T; case 'U':
return VK_U; case 'V':
return VK_V; case 'W':
return VK_W; case 'X':
return VK_X; case 'Y':
return VK_Y; case 'Z':
return VK_Z; case WXK_WINDOWS_LEFT:
return VK_LWIN;
case WXK_NUMLOCK:
return VK_NUMLOCK;
case WXK_SCROLL:
return VK_SCROLL;
default:
return 0;
}
}
PlatformKeyboardEvent::PlatformKeyboardEvent(wxKeyEvent& event)
{
if (event.GetEventType() == wxEVT_KEY_UP)
m_type = KeyUp;
else if (event.GetEventType() == wxEVT_KEY_DOWN)
m_type = KeyDown;
else if (event.GetEventType() == wxEVT_CHAR)
m_type = Char;
else
ASSERT_NOT_REACHED();
if (m_type != Char)
m_keyIdentifier = keyIdentifierForWxKeyCode(event.GetKeyCode());
else {
if (event.GetKeyCode() == 13 && event.GetUnicodeKey() == wxChar(370))
m_text = "\r";
else
m_text = wxString(event.GetUnicodeKey());
m_unmodifiedText = m_text;
}
m_autoRepeat = false; m_windowsVirtualKeyCode = windowsKeyCodeForKeyEvent(event.GetKeyCode());
m_nativeVirtualKeyCode = event.GetKeyCode();
m_isKeypad = (event.GetKeyCode() >= WXK_NUMPAD_SPACE) && (event.GetKeyCode() <= WXK_NUMPAD_DIVIDE);
m_shiftKey = event.ShiftDown();
m_ctrlKey = event.CmdDown();
m_altKey = event.AltDown();
m_metaKey = event.MetaDown();
}
void PlatformKeyboardEvent::disambiguateKeyDownEvent(Type type, bool)
{
ASSERT(m_type == KeyDown);
m_type = type;
if (type == RawKeyDown) {
m_text = String();
m_unmodifiedText = String();
} else {
m_keyIdentifier = String();
m_windowsVirtualKeyCode = 0;
}
}
bool PlatformKeyboardEvent::currentCapsLockState()
{
return wxGetKeyState(WXK_CAPITAL);
}
void PlatformKeyboardEvent::getCurrentModifierState(bool& shiftKey, bool& ctrlKey, bool& altKey, bool& metaKey)
{
shiftKey = wxGetKeyState(WXK_SHIFT);
ctrlKey = wxGetKeyState(WXK_CONTROL);
altKey = wxGetKeyState(WXK_ALT);
metaKey = false;
}
}