diff options
Diffstat (limited to 'chromium/third_party/WebKit/Source/web/WebInputEvent.cpp')
-rw-r--r-- | chromium/third_party/WebKit/Source/web/WebInputEvent.cpp | 239 |
1 files changed, 239 insertions, 0 deletions
diff --git a/chromium/third_party/WebKit/Source/web/WebInputEvent.cpp b/chromium/third_party/WebKit/Source/web/WebInputEvent.cpp new file mode 100644 index 00000000000..5b810249b19 --- /dev/null +++ b/chromium/third_party/WebKit/Source/web/WebInputEvent.cpp @@ -0,0 +1,239 @@ +/* + * Copyright (C) 2009 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "WebInputEvent.h" + +#include <ctype.h> +#include "core/platform/chromium/KeyboardCodes.h" +#include "wtf/Assertions.h" +#include "wtf/StringExtras.h" + +using namespace WebCore; + +namespace WebKit { + +struct SameSizeAsWebInputEvent { + int inputData[5]; +}; + +struct SameSizeAsWebKeyboardEvent : public SameSizeAsWebInputEvent { + int keyboardData[12]; +}; + +struct SameSizeAsWebMouseEvent : public SameSizeAsWebInputEvent { + int mouseData[10]; +}; + +struct SameSizeAsWebMouseWheelEvent : public SameSizeAsWebMouseEvent { + int mousewheelData[10]; +}; + +struct SameSizeAsWebGestureEvent : public SameSizeAsWebInputEvent { + int gestureData[9]; +}; + +struct SameSizeAsWebTouchEvent : public SameSizeAsWebInputEvent { + WebTouchPoint touchPoints[3 * WebTouchEvent::touchesLengthCap]; + int touchData[3]; +}; + +COMPILE_ASSERT(sizeof(WebInputEvent) == sizeof(SameSizeAsWebInputEvent), WebInputEvent_has_gaps); +COMPILE_ASSERT(sizeof(WebKeyboardEvent) == sizeof(SameSizeAsWebKeyboardEvent), WebKeyboardEvent_has_gaps); +COMPILE_ASSERT(sizeof(WebMouseEvent) == sizeof(SameSizeAsWebMouseEvent), WebMouseEvent_has_gaps); +COMPILE_ASSERT(sizeof(WebMouseWheelEvent) == sizeof(SameSizeAsWebMouseWheelEvent), WebMouseWheelEvent_has_gaps); +COMPILE_ASSERT(sizeof(WebGestureEvent) == sizeof(SameSizeAsWebGestureEvent), WebGestureEvent_has_gaps); +COMPILE_ASSERT(sizeof(WebTouchEvent) == sizeof(SameSizeAsWebTouchEvent), WebTouchEvent_has_gaps); + +static const char* staticKeyIdentifiers(unsigned short keyCode) +{ + switch (keyCode) { + case VKEY_MENU: + return "Alt"; + case VKEY_CONTROL: + return "Control"; + case VKEY_SHIFT: + return "Shift"; + case VKEY_CAPITAL: + return "CapsLock"; + case VKEY_LWIN: + case VKEY_RWIN: + return "Win"; + case VKEY_CLEAR: + return "Clear"; + case VKEY_DOWN: + return "Down"; + case VKEY_END: + return "End"; + case VKEY_RETURN: + return "Enter"; + case VKEY_EXECUTE: + return "Execute"; + case VKEY_F1: + return "F1"; + case VKEY_F2: + return "F2"; + case VKEY_F3: + return "F3"; + case VKEY_F4: + return "F4"; + case VKEY_F5: + return "F5"; + case VKEY_F6: + return "F6"; + case VKEY_F7: + return "F7"; + case VKEY_F8: + return "F8"; + case VKEY_F9: + return "F9"; + case VKEY_F10: + return "F10"; + case VKEY_F11: + return "F11"; + case VKEY_F12: + return "F12"; + case VKEY_F13: + return "F13"; + case VKEY_F14: + return "F14"; + case VKEY_F15: + return "F15"; + case VKEY_F16: + return "F16"; + case VKEY_F17: + return "F17"; + case VKEY_F18: + return "F18"; + case VKEY_F19: + return "F19"; + case VKEY_F20: + return "F20"; + case VKEY_F21: + return "F21"; + case VKEY_F22: + return "F22"; + case VKEY_F23: + return "F23"; + case VKEY_F24: + return "F24"; + case VKEY_HELP: + return "Help"; + case VKEY_HOME: + return "Home"; + case VKEY_INSERT: + return "Insert"; + case VKEY_LEFT: + return "Left"; + case VKEY_NEXT: + return "PageDown"; + case VKEY_PRIOR: + return "PageUp"; + case VKEY_PAUSE: + return "Pause"; + case VKEY_SNAPSHOT: + return "PrintScreen"; + case VKEY_RIGHT: + return "Right"; + case VKEY_SCROLL: + return "Scroll"; + case VKEY_SELECT: + return "Select"; + case VKEY_UP: + return "Up"; + case VKEY_DELETE: + return "U+007F"; // Standard says that DEL becomes U+007F. + case VKEY_MEDIA_NEXT_TRACK: + return "MediaNextTrack"; + case VKEY_MEDIA_PREV_TRACK: + return "MediaPreviousTrack"; + case VKEY_MEDIA_STOP: + return "MediaStop"; + case VKEY_MEDIA_PLAY_PAUSE: + return "MediaPlayPause"; + case VKEY_VOLUME_MUTE: + return "VolumeMute"; + case VKEY_VOLUME_DOWN: + return "VolumeDown"; + case VKEY_VOLUME_UP: + return "VolumeUp"; + default: + return 0; + } +} + +void WebKeyboardEvent::setKeyIdentifierFromWindowsKeyCode() +{ + const char* id = staticKeyIdentifiers(windowsKeyCode); + if (id) { + strncpy(keyIdentifier, id, sizeof(keyIdentifier) - 1); + keyIdentifier[sizeof(keyIdentifier) - 1] = '\0'; + } else + snprintf(keyIdentifier, sizeof(keyIdentifier), "U+%04X", toupper(windowsKeyCode)); +} + +// static +int WebKeyboardEvent::windowsKeyCodeWithoutLocation(int keycode) +{ + switch (keycode) { + case VK_LCONTROL: + case VK_RCONTROL: + return VK_CONTROL; + case VK_LSHIFT: + case VK_RSHIFT: + return VK_SHIFT; + case VK_LMENU: + case VK_RMENU: + return VK_MENU; + default: + return keycode; + } +} + +// static +int WebKeyboardEvent::locationModifiersFromWindowsKeyCode(int keycode) +{ + switch (keycode) { + case VK_LCONTROL: + case VK_LSHIFT: + case VK_LMENU: + case VK_LWIN: + return IsLeft; + case VK_RCONTROL: + case VK_RSHIFT: + case VK_RMENU: + case VK_RWIN: + return IsRight; + default: + return 0; + } +} + +} // namespace WebKit |