diff options
author | rjkroege@chromium.org <rjkroege@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-03 22:36:46 +0000 |
---|---|---|
committer | rjkroege@chromium.org <rjkroege@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-03 22:36:46 +0000 |
commit | 88acff193cff7645b912252230e1fc20d5b19f89 (patch) | |
tree | 1455d8bdb7fb2e1df692340340199e781557011f /content | |
parent | 6a15176798f91b11225f08faee35917f9b856ea7 (diff) | |
download | chromium_src-88acff193cff7645b912252230e1fc20d5b19f89.zip chromium_src-88acff193cff7645b912252230e1fc20d5b19f89.tar.gz chromium_src-88acff193cff7645b912252230e1fc20d5b19f89.tar.bz2 |
Add gesture event conversion for full-screen pepper.
WebViews convert selected gesture event instances into mouse events
using code in WebCore::EventHandler::handleGestureEvent. A full-screen
pepper plugin does not run inside a WebView and so does not receive
the benefit of this event conversion. This patch adds the minimal
event conversion necessary to support touch control of flash-based
plugins.
BUG=151154
Review URL: https://chromiumcodereview.appspot.com/11046017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@159995 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/renderer/render_widget_fullscreen_pepper.cc | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/content/renderer/render_widget_fullscreen_pepper.cc b/content/renderer/render_widget_fullscreen_pepper.cc index d02c459..44941c8 100644 --- a/content/renderer/render_widget_fullscreen_pepper.cc +++ b/content/renderer/render_widget_fullscreen_pepper.cc @@ -28,8 +28,10 @@ using WebKit::WebCanvas; using WebKit::WebCompositionUnderline; using WebKit::WebCursorInfo; +using WebKit::WebGestureEvent; using WebKit::WebInputEvent; using WebKit::WebMouseEvent; +using WebKit::WebMouseWheelEvent; using WebKit::WebPoint; using WebKit::WebRect; using WebKit::WebSize; @@ -42,6 +44,9 @@ using WebKit::WGC3Dintptr; namespace { +// See third_party/WebKit/Source/WebCore/dom/WheelEvent.h. +const float kTickDivisor = 120.0f; + class FullscreenMouseLockDispatcher : public MouseLockDispatcher { public: explicit FullscreenMouseLockDispatcher(RenderWidgetFullscreenPepper* widget); @@ -161,6 +166,74 @@ class PepperWidget : public WebWidget { WebCursorInfo cursor; bool result = widget_->plugin()->HandleInputEvent(event, &cursor); + // For normal web pages, WebCore::EventHandler converts selected + // gesture events into mouse and wheel events. We don't have a WebView + // so do this translation here. + if (!result && WebInputEvent::isGestureEventType(event.type)) { + switch (event.type) { + case WebInputEvent::GestureScrollUpdate: { + const WebGestureEvent* gesture_event = + static_cast<const WebGestureEvent*>(&event); + WebMouseWheelEvent wheel_event; + wheel_event.timeStampSeconds = gesture_event->timeStampSeconds; + wheel_event.type = WebInputEvent::MouseWheel; + wheel_event.modifiers = gesture_event->modifiers; + + wheel_event.x = gesture_event->x; + wheel_event.y = gesture_event->y; + wheel_event.windowX = gesture_event->globalX; + wheel_event.windowY = gesture_event->globalX; + wheel_event.globalX = gesture_event->globalX; + wheel_event.globalY = gesture_event->globalY; + wheel_event.movementX = 0; + wheel_event.movementY = 0; + + wheel_event.deltaX = gesture_event->data.scrollUpdate.deltaX; + wheel_event.deltaY = gesture_event->data.scrollUpdate.deltaY; + wheel_event.wheelTicksX = + gesture_event->data.scrollUpdate.deltaX / kTickDivisor; + wheel_event.wheelTicksY = + gesture_event->data.scrollUpdate.deltaY / kTickDivisor; + wheel_event.hasPreciseScrollingDeltas = 1; + wheel_event.phase = WebMouseWheelEvent::PhaseNone; + wheel_event.momentumPhase = WebMouseWheelEvent::PhaseNone; + + result |= widget_->plugin()->HandleInputEvent(wheel_event, &cursor); + break; + } + case WebInputEvent::GestureTap: { + const WebGestureEvent* gesture_event = + static_cast<const WebGestureEvent*>(&event); + WebMouseEvent mouseEvent; + + mouseEvent.timeStampSeconds = gesture_event->timeStampSeconds; + mouseEvent.type = WebInputEvent::MouseMove; + mouseEvent.modifiers = gesture_event->modifiers; + + mouseEvent.x = gesture_event->x; + mouseEvent.y = gesture_event->y; + mouseEvent.windowX = gesture_event->globalX; + mouseEvent.windowY = gesture_event->globalX; + mouseEvent.globalX = gesture_event->globalX; + mouseEvent.globalY = gesture_event->globalY; + mouseEvent.movementX = 0; + mouseEvent.movementY = 0; + result |= widget_->plugin()->HandleInputEvent(mouseEvent, &cursor); + + mouseEvent.type = WebInputEvent::MouseDown; + mouseEvent.button = WebMouseEvent::ButtonLeft; + mouseEvent.clickCount = gesture_event->data.tap.tapCount; + result |= widget_->plugin()->HandleInputEvent(mouseEvent, &cursor); + + mouseEvent.type = WebInputEvent::MouseUp; + result |= widget_->plugin()->HandleInputEvent(mouseEvent, &cursor); + break; + } + default: + break; + } + } + // For normal web pages, WebViewImpl does input event translations and // generates context menu events. Since we don't have a WebView, we need to // do the necessary translation ourselves. |