summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-27 01:55:01 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-27 01:55:01 +0000
commitd329a9128d17cfcf4189d2c42b25374836b02fe3 (patch)
treef821e5adb44a4bb8650e4910118c83241fd6bb73
parent9a7f74a32db80e1fc45fd0ba5862ee6acea81a12 (diff)
downloadchromium_src-d329a9128d17cfcf4189d2c42b25374836b02fe3.zip
chromium_src-d329a9128d17cfcf4189d2c42b25374836b02fe3.tar.gz
chromium_src-d329a9128d17cfcf4189d2c42b25374836b02fe3.tar.bz2
aura: Create appropriate WebGestureEvents and send them to renderers.
BUG=110230 TEST=none Review URL: https://chromiumcodereview.appspot.com/9289018 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@119332 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--content/browser/renderer_host/render_widget_host.cc4
-rw-r--r--content/browser/renderer_host/render_widget_host_view_aura.cc10
-rw-r--r--content/browser/renderer_host/web_input_event_aura.cc22
-rw-r--r--content/browser/renderer_host/web_input_event_aura.h4
-rw-r--r--content/browser/renderer_host/web_input_event_aurawin.cc9
-rw-r--r--content/browser/renderer_host/web_input_event_aurax11.cc35
-rw-r--r--content/renderer/render_widget.cc2
7 files changed, 79 insertions, 7 deletions
diff --git a/content/browser/renderer_host/render_widget_host.cc b/content/browser/renderer_host/render_widget_host.cc
index 403330a..288a411 100644
--- a/content/browser/renderer_host/render_widget_host.cc
+++ b/content/browser/renderer_host/render_widget_host.cc
@@ -623,7 +623,7 @@ void RenderWidgetHost::ForwardWheelEvent(
void RenderWidgetHost::ForwardGestureEvent(
const WebKit::WebGestureEvent& gesture_event) {
- TRACE_EVENT0("renderer_host", "RenderWidgetHost::ForwardWheelEvent");
+ TRACE_EVENT0("renderer_host", "RenderWidgetHost::ForwardGestureEvent");
if (ignore_input_events_ || process_->IgnoreInputEvents())
return;
@@ -1161,7 +1161,7 @@ void RenderWidgetHost::OnMsgInputEventAck(WebInputEvent::Type event_type,
ProcessKeyboardEventAck(type, processed);
} else if (type == WebInputEvent::MouseWheel) {
ProcessWheelAck(processed);
- } else if (type == WebInputEvent::TouchMove) {
+ } else if (WebInputEvent::isTouchEventType(type)) {
ProcessTouchAck(processed);
}
// This is used only for testing.
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index cc5fbf0..9b7b662 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -883,8 +883,14 @@ ui::TouchStatus RenderWidgetHostViewAura::OnTouchEvent(
ui::GestureStatus RenderWidgetHostViewAura::OnGestureEvent(
aura::GestureEvent* event) {
- // TODO(sad):
- return ui::GESTURE_STATUS_UNKNOWN;
+ WebKit::WebGestureEvent gesture = content::MakeWebGestureEvent(event);
+ host_->ForwardGestureEvent(gesture);
+
+ // If a gesture is not processed by the webpage, then WebKit processes it
+ // (e.g. generates synthetic mouse events). So CONSUMED should be returned
+ // from here to avoid any duplicate synthetic mouse-events being generated
+ // from aura.
+ return ui::GESTURE_STATUS_CONSUMED;
}
bool RenderWidgetHostViewAura::CanFocus() {
diff --git a/content/browser/renderer_host/web_input_event_aura.cc b/content/browser/renderer_host/web_input_event_aura.cc
index 984224e..a395fed 100644
--- a/content/browser/renderer_host/web_input_event_aura.cc
+++ b/content/browser/renderer_host/web_input_event_aura.cc
@@ -16,6 +16,8 @@ WebKit::WebMouseWheelEvent MakeUntranslatedWebMouseWheelEventFromNativeEvent(
base::NativeEvent native_event);
WebKit::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent(
base::NativeEvent native_event);
+WebKit::WebGestureEvent MakeWebGestureEventFromNativeEvent(
+ base::NativeEvent native_event);
WebKit::WebTouchPoint* UpdateWebTouchEventFromNativeEvent(
base::NativeEvent native_event, WebKit::WebTouchEvent* web_event);
#else
@@ -26,6 +28,8 @@ WebKit::WebMouseWheelEvent MakeWebMouseWheelEventFromAuraEvent(
aura::ScrollEvent* event);
WebKit::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent(
aura::KeyEvent* event);
+WebKit::WebGestureEvent MakeWebGestureEventFromAuraEvent(
+ aura::GestureEvent* event);
WebKit::WebTouchPoint* UpdateWebTouchEventFromAuraEvent(
aura::TouchEvent* event, WebKit::WebTouchEvent* web_event);
#endif
@@ -133,6 +137,24 @@ WebKit::WebKeyboardEvent MakeWebKeyboardEvent(aura::KeyEvent* event) {
#endif
}
+WebKit::WebGestureEvent MakeWebGestureEvent(aura::GestureEvent* event) {
+ WebKit::WebGestureEvent gesture_event;
+#if defined(OS_WIN)
+ gesture_event = MakeWebGestureEventFromNativeEvent(event->native_event());
+#else
+ gesture_event = MakeWebGestureEventFromAuraEvent(event);
+#endif
+
+ gesture_event.x = event->x();
+ gesture_event.y = event->y();
+
+ const gfx::Point root_point = event->root_location();
+ gesture_event.globalX = root_point.x();
+ gesture_event.globalY = root_point.y();
+
+ return gesture_event;
+}
+
WebKit::WebTouchPoint* UpdateWebTouchEvent(aura::TouchEvent* event,
WebKit::WebTouchEvent* web_event) {
#if defined(OS_WIN)
diff --git a/content/browser/renderer_host/web_input_event_aura.h b/content/browser/renderer_host/web_input_event_aura.h
index be6167b..40599ea 100644
--- a/content/browser/renderer_host/web_input_event_aura.h
+++ b/content/browser/renderer_host/web_input_event_aura.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -9,6 +9,7 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
namespace aura {
+class GestureEvent;
class KeyEvent;
class MouseEvent;
class ScrollEvent;
@@ -21,6 +22,7 @@ WebKit::WebMouseEvent MakeWebMouseEvent(aura::MouseEvent* event);
WebKit::WebMouseWheelEvent MakeWebMouseWheelEvent(aura::MouseEvent* event);
WebKit::WebMouseWheelEvent MakeWebMouseWheelEvent(aura::ScrollEvent* event);
WebKit::WebKeyboardEvent MakeWebKeyboardEvent(aura::KeyEvent* event);
+WebKit::WebGestureEvent MakeWebGestureEvent(aura::GestureEvent* event);
// Updates the WebTouchEvent based on the TouchEvent. It returns the updated
// WebTouchPoint contained in the WebTouchEvent, or NULL if no point was
diff --git a/content/browser/renderer_host/web_input_event_aurawin.cc b/content/browser/renderer_host/web_input_event_aurawin.cc
index 1d9d770..7cdb7bd 100644
--- a/content/browser/renderer_host/web_input_event_aurawin.cc
+++ b/content/browser/renderer_host/web_input_event_aurawin.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -37,6 +37,13 @@ WebKit::WebKeyboardEvent MakeWebKeyboardEventFromNativeEvent(
native_event.lParam);
}
+WebKit::WebGestureEvent MakeWebGestureEventFromNativeEvent(
+ base::NativeEvent native_event) {
+ // TODO: Create gestures from native event.
+ NOTIMPLEMENTED();
+ return WebKit::WebGestureEvent();
+}
+
WebKit::WebTouchPoint* UpdateWebTouchEventFromNativeEvent(
base::NativeEvent native_event, WebKit::WebTouchEvent* web_event) {
NOTIMPLEMENTED();
diff --git a/content/browser/renderer_host/web_input_event_aurax11.cc b/content/browser/renderer_host/web_input_event_aurax11.cc
index 6317729..3d856c2 100644
--- a/content/browser/renderer_host/web_input_event_aurax11.cc
+++ b/content/browser/renderer_host/web_input_event_aurax11.cc
@@ -298,6 +298,41 @@ WebKit::WebKeyboardEvent MakeWebKeyboardEventFromAuraEvent(
return webkit_event;
}
+WebKit::WebGestureEvent MakeWebGestureEventFromAuraEvent(
+ aura::GestureEvent* event) {
+ WebKit::WebGestureEvent gesture_event;
+
+ switch (event->type()) {
+ case ui::ET_GESTURE_TAP:
+ gesture_event.type = WebKit::WebInputEvent::GestureTap;
+ break;
+ case ui::ET_GESTURE_TAP_DOWN:
+ // TODO(sad): http://crbug.com/111402
+ // gesture_event.type = WebKit::WebInputEvent::GestureTapDown;
+ break;
+ case ui::ET_GESTURE_DOUBLE_TAP:
+ // TODO(sad): http://crbug.com/111402
+ // gesture_event.type = WebKit::WebInputEvent::GestureDoubleTap;
+ break;
+ case ui::ET_GESTURE_SCROLL_BEGIN:
+ gesture_event.type = WebKit::WebInputEvent::GestureScrollBegin;
+ break;
+ case ui::ET_GESTURE_SCROLL_UPDATE:
+ gesture_event.type = WebKit::WebInputEvent::GestureScrollUpdate;
+ break;
+ case ui::ET_GESTURE_SCROLL_END:
+ gesture_event.type = WebKit::WebInputEvent::GestureScrollEnd;
+ break;
+ default:
+ NOTREACHED() << "Unknown gesture type: " << event->type();
+ }
+
+ gesture_event.deltaX = event->delta_x();
+ gesture_event.deltaY = event->delta_y();
+
+ return gesture_event;
+}
+
WebKit::WebTouchPoint* UpdateWebTouchEventFromAuraEvent(
aura::TouchEvent* event, WebKit::WebTouchEvent* web_event) {
WebKit::WebTouchPoint* point = NULL;
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index dfdae16..6527b3b 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -504,7 +504,7 @@ void RenderWidget::OnHandleInputEvent(const IPC::Message& message) {
if ((input_event->type == WebInputEvent::MouseMove ||
input_event->type == WebInputEvent::MouseWheel ||
- input_event->type == WebInputEvent::TouchMove) &&
+ WebInputEvent::isTouchEventType(input_event->type)) &&
paint_aggregator_.HasPendingUpdate()) {
// We want to rate limit the input events in this case, so we'll wait for
// painting to finish before ACKing this message.