Chromium Code Reviews| Index: content/browser/renderer_host/render_widget_host_view_aura.cc |
| 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 7e1e827a3fe25ad305e15ba165f99315f0c1c68a..61e1a4b16fc73edb1d5ebcde5e863b8ac419a329 100644 |
| --- a/content/browser/renderer_host/render_widget_host_view_aura.cc |
| +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc |
| @@ -25,6 +25,8 @@ |
| #include "ui/gfx/gl/gl_bindings.h" |
| #endif |
| +using WebKit::WebTouchEvent; |
| + |
| namespace { |
| #if defined(UI_COMPOSITOR_IMAGE_TRANSPORT) |
| @@ -36,6 +38,37 @@ void AcknowledgeSwapBuffers(int32 route_id, int gpu_host_id) { |
| } |
| #endif |
| +ui::TouchStatus DecideTouchStatus(const WebKit::WebTouchEvent& event, |
| + WebKit::WebTouchPoint* point) { |
| + if (event.type == WebKit::WebInputEvent::TouchStart && |
| + event.touchesLength == 1) |
| + return ui::TOUCH_STATUS_START; |
| + |
| + if (event.type == WebKit::WebInputEvent::TouchMove && point == NULL) |
| + return ui::TOUCH_STATUS_CONTINUE; |
| + |
| + if (event.type == WebKit::WebInputEvent::TouchEnd && |
| + event.touchesLength == 0) |
| + return ui::TOUCH_STATUS_END; |
| + |
| + if (event.type == WebKit::WebInputEvent::TouchCancel) |
| + return ui::TOUCH_STATUS_CANCEL; |
| + |
| + return point ? ui::TOUCH_STATUS_CONTINUE : ui::TOUCH_STATUS_UNKNOWN; |
| +} |
| + |
| +void UpdateWebTouchEventAfterDispatch(WebKit::WebTouchEvent* event, |
| + WebKit::WebTouchPoint* point) { |
| + if (point->state != WebKit::WebTouchPoint::StateReleased) |
|
sadrul
2011/10/25 19:09:55
I kept this here, and didn't move to content:: sin
|
| + return; |
| + --event->touchesLength; |
| + for (unsigned i = point - event->touches; |
| + i < event->touchesLength; |
| + ++i) { |
| + event->touches[i] = event->touches[i + 1]; |
| + } |
| +} |
| + |
| } // namespace |
| //////////////////////////////////////////////////////////////////////////////// |
| @@ -360,8 +393,17 @@ bool RenderWidgetHostViewAura::OnMouseEvent(aura::MouseEvent* event) { |
| ui::TouchStatus RenderWidgetHostViewAura::OnTouchEvent( |
| aura::TouchEvent* event) { |
| - NOTIMPLEMENTED(); |
| - return ui::TOUCH_STATUS_UNKNOWN; |
| + // Update the touch event first. |
| + WebKit::WebTouchPoint* point = content::UpdateWebTouchEvent(event, |
| + &touch_event_); |
| + |
| + // Forward the touch event only if a touch point was updated. |
| + if (point) { |
| + host_->ForwardTouchEvent(touch_event_); |
| + UpdateWebTouchEventAfterDispatch(&touch_event_, point); |
| + } |
| + |
| + return DecideTouchStatus(touch_event_, point); |
| } |
| bool RenderWidgetHostViewAura::ShouldActivate(aura::Event* event) { |