diff options
author | avi@google.com <avi@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-26 15:05:02 +0000 |
---|---|---|
committer | avi@google.com <avi@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-26 15:05:02 +0000 |
commit | 869288c1efa3943226545a6763e066094a16ec74 (patch) | |
tree | 6ad07d82e44d9b7dc215214114ec08d9f50f5457 /webkit/glue | |
parent | b3da408c038bb17c40958c177eb36c65942e035e (diff) | |
download | chromium_src-869288c1efa3943226545a6763e066094a16ec74.zip chromium_src-869288c1efa3943226545a6763e066094a16ec74.tar.gz chromium_src-869288c1efa3943226545a6763e066094a16ec74.tar.bz2 |
Mac-ify webinputevent
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1382 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r-- | webkit/glue/SConscript | 2 | ||||
-rw-r--r-- | webkit/glue/webinputevent.h | 52 | ||||
-rw-r--r-- | webkit/glue/webinputevent_mac.mm | 166 | ||||
-rw-r--r-- | webkit/glue/webinputevent_win.cc (renamed from webkit/glue/webinputevent.cc) | 0 |
4 files changed, 209 insertions, 11 deletions
diff --git a/webkit/glue/SConscript b/webkit/glue/SConscript index 760b067..f71cdf5 100644 --- a/webkit/glue/SConscript +++ b/webkit/glue/SConscript @@ -93,7 +93,7 @@ input_files = [ 'webframe_impl.cc', 'webframeloaderclient_impl.cc', 'webhistoryitem_impl.cc', - 'webinputevent.cc', + 'webinputevent_win.cc', 'webkit_glue.cc', 'webplugin_impl.cc', 'webtextinput_impl.cc', diff --git a/webkit/glue/webinputevent.h b/webkit/glue/webinputevent.h index 5658c6a..07e2cab 100644 --- a/webkit/glue/webinputevent.h +++ b/webkit/glue/webinputevent.h @@ -2,12 +2,22 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef WEBKIT_GLUE_WEBINPUTEVENT_H__ -#define WEBKIT_GLUE_WEBINPUTEVENT_H__ +#ifndef WEBKIT_GLUE_WEBINPUTEVENT_H_ +#define WEBKIT_GLUE_WEBINPUTEVENT_H_ -#include <windows.h> #include "base/basictypes.h" +#if defined(OS_WIN) +#include <windows.h> +#elif defined(OS_MACOSX) +#include <wtf/RetainPtr.h> +#ifdef __OBJC__ +@class NSEvent; +#else +class NSEvent; +#endif // __OBJC__ +#endif // OS_MACOSX + // The classes defined in this file are intended to be used with WebView's // HandleInputEvent method. These event types are cross-platform; however, // there are platform-specific constructors that accept native UI events. @@ -50,6 +60,11 @@ class WebInputEvent { Type type; int modifiers; +#if defined(OS_MACOSX) + // For now, good enough for the test shell. TODO(avi): Revisit when we need + // to start sending this over an IPC pipe. + RetainPtr<NSEvent> mac_event; +#endif }; // WebMouseEvent -------------------------------------------------------------- @@ -73,7 +88,11 @@ class WebMouseEvent : public WebInputEvent { int layout_test_click_count; // Only used during layout tests. WebMouseEvent() {} +#if defined(OS_WIN) WebMouseEvent(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam); +#elif defined(OS_MACOSX) + WebMouseEvent(NSEvent *event); +#endif }; // WebMouseWheelEvent --------------------------------------------------------- @@ -84,28 +103,41 @@ class WebMouseWheelEvent : public WebMouseEvent { int delta_y; WebMouseWheelEvent() {} +#if defined(OS_WIN) WebMouseWheelEvent(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam); +#elif defined(OS_MACOSX) + WebMouseWheelEvent(NSEvent *event); +#endif }; // WebKeyboardEvent ----------------------------------------------------------- class WebKeyboardEvent : public WebInputEvent { public: - bool system_key; // Set if we receive a SYSKEYDOWN/WM_SYSKEYUP message. - MSG actual_message; // Set to the current keyboard message. int key_code; int key_data; +#if defined(OS_WIN) + bool system_key; // Set if we receive a SYSKEYDOWN/WM_SYSKEYUP message. + MSG actual_message; // Set to the current keyboard message. +#endif WebKeyboardEvent() - : system_key(false), - key_code(0), - key_data(0) { + : key_code(0), + key_data(0) +#if defined(OS_WIN) + , system_key(false) { memset(&actual_message, 0, sizeof(actual_message)); } +#else + {} +#endif +#if defined(OS_WIN) WebKeyboardEvent(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam); +#elif defined(OS_MACOSX) + WebKeyboardEvent(NSEvent *event); +#endif }; -#endif // WEBKIT_GLUE_WEBINPUTEVENT_H__ - +#endif // WEBKIT_GLUE_WEBINPUTEVENT_H_ diff --git a/webkit/glue/webinputevent_mac.mm b/webkit/glue/webinputevent_mac.mm new file mode 100644 index 0000000..08da30f --- /dev/null +++ b/webkit/glue/webinputevent_mac.mm @@ -0,0 +1,166 @@ +// Copyright (c) 2006-2008 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. + +#import <Cocoa/Cocoa.h> + +#include "config.h" + +#include "webkit/glue/webinputevent.h" + +#include "webkit/glue/event_conversion.h" + +#undef LOG +#include "base/logging.h" + +static const unsigned long kDefaultScrollLinesPerWheelDelta = 3; + +// WebMouseEvent -------------------------------------------------------------- + +WebMouseEvent::WebMouseEvent(NSEvent *event) { + switch ([event type]) { + case NSMouseExited: + type = MOUSE_LEAVE; + button = BUTTON_NONE; + break; + case NSLeftMouseDown: + type = [event clickCount] == 2 ? MOUSE_DOUBLE_CLICK : MOUSE_DOWN; + button = BUTTON_LEFT; + break; + case NSOtherMouseDown: + type = [event clickCount] == 2 ? MOUSE_DOUBLE_CLICK : MOUSE_DOWN; + button = BUTTON_MIDDLE; + break; + case NSRightMouseDown: + type = [event clickCount] == 2 ? MOUSE_DOUBLE_CLICK : MOUSE_DOWN; + button = BUTTON_RIGHT; + break; + case NSLeftMouseUp: + type = MOUSE_UP; + button = BUTTON_LEFT; + break; + case NSOtherMouseUp: + type = MOUSE_UP; + button = BUTTON_MIDDLE; + break; + case NSRightMouseUp: + type = MOUSE_UP; + button = BUTTON_RIGHT; + break; + case NSMouseMoved: + case NSMouseEntered: + type = MOUSE_MOVE; + break; + case NSLeftMouseDragged: + type = MOUSE_MOVE; + button = BUTTON_LEFT; + break; + case NSOtherMouseDragged: + type = MOUSE_MOVE; + button = BUTTON_MIDDLE; + break; + case NSRightMouseDragged: + type = MOUSE_MOVE; + button = BUTTON_RIGHT; + break; + default: + NOTREACHED() << "unexpected native message"; + } + + // set position fields: + NSPoint location = [NSEvent mouseLocation]; // global coordinates + global_x = location.x; + global_y = location.y; + + location = [event locationInWindow]; // local (to receiving window) + x = location.x; + y = location.y; + + // set modifiers: + + modifiers = 0; + if ([event modifierFlags] & NSControlKeyMask) + modifiers |= CTRL_KEY; + if ([event modifierFlags] & NSShiftKeyMask) + modifiers |= SHIFT_KEY; + if ([event modifierFlags] & NSAlternateKeyMask) + modifiers |= (ALT_KEY | META_KEY); // TODO(darin): set META properly + + timestamp_sec = [event timestamp]; + + layout_test_click_count = 0; + + mac_event.adoptNS(event); +} + +// WebMouseWheelEvent --------------------------------------------------------- + +WebMouseWheelEvent::WebMouseWheelEvent(NSEvent *event) { + type = MOUSE_WHEEL; + button = BUTTON_NONE; + + NSPoint location = [NSEvent mouseLocation]; // global coordinates + global_x = location.x; + global_y = location.y; + + location = [event locationInWindow]; // local (to receiving window) + x = location.x; + y = location.y; + + int wheel_delta = [event deltaY]; + const int delta_lines = wheel_delta * kDefaultScrollLinesPerWheelDelta; + + // Scroll horizontally if shift is held. WebKit's WebKit/win/WebView.cpp + // does the equivalent. + // TODO(jackson): Support WM_MOUSEHWHEEL = 0x020E event as well. + // (Need a mouse with horizontal scrolling capabilities to test it.) + if ([event modifierFlags] & NSShiftKeyMask) { + // Scrolling up should move left, scrolling down should move right + delta_x = -delta_lines; + delta_y = 0; + } else { + delta_x = 0; + delta_y = delta_lines; + } + + modifiers = 0; + if ([event modifierFlags] & NSControlKeyMask) + modifiers |= CTRL_KEY; + if ([event modifierFlags] & NSShiftKeyMask) + modifiers |= SHIFT_KEY; + if ([event modifierFlags] & NSAlternateKeyMask) + modifiers |= ALT_KEY; + + mac_event.adoptNS(event); +} + +// WebKeyboardEvent ----------------------------------------------------------- + +WebKeyboardEvent::WebKeyboardEvent(NSEvent *event) { + switch ([event type]) { + case NSKeyDown: + type = KEY_DOWN; + break; + case NSKeyUp: + type = KEY_UP; + break; + default: + NOTREACHED() << "unexpected native message"; + } + + modifiers = 0; + if ([event modifierFlags] & NSControlKeyMask) + modifiers |= CTRL_KEY; + if ([event modifierFlags] & NSShiftKeyMask) + modifiers |= SHIFT_KEY; + if ([event modifierFlags] & NSAlternateKeyMask) + modifiers |= ALT_KEY; + + if ([event isARepeat]) + modifiers |= IS_AUTO_REPEAT; + + key_code = [event keyCode]; + key_data = [[event characters] characterAtIndex:0]; + + mac_event.adoptNS(event); +} diff --git a/webkit/glue/webinputevent.cc b/webkit/glue/webinputevent_win.cc index 93f5da7..93f5da7 100644 --- a/webkit/glue/webinputevent.cc +++ b/webkit/glue/webinputevent_win.cc |