diff options
author | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-27 01:55:01 +0000 |
---|---|---|
committer | sadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-27 01:55:01 +0000 |
commit | d329a9128d17cfcf4189d2c42b25374836b02fe3 (patch) | |
tree | f821e5adb44a4bb8650e4910118c83241fd6bb73 | |
parent | 9a7f74a32db80e1fc45fd0ba5862ee6acea81a12 (diff) | |
download | chromium_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
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. |