summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorrjkroege@chromium.org <rjkroege@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-03 22:36:46 +0000
committerrjkroege@chromium.org <rjkroege@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-03 22:36:46 +0000
commit88acff193cff7645b912252230e1fc20d5b19f89 (patch)
tree1455d8bdb7fb2e1df692340340199e781557011f /content
parent6a15176798f91b11225f08faee35917f9b856ea7 (diff)
downloadchromium_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.cc73
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.