Chromium Code Reviews| Index: content/renderer/gpu/input_handler_proxy.cc |
| diff --git a/content/renderer/gpu/input_handler_proxy.cc b/content/renderer/gpu/input_handler_proxy.cc |
| index 77dd0f0af8472559f704120c5ad6618f4c2ec418..7dcf656bbd2569c7a6d75851c6a0d751c6b8c00c 100644 |
| --- a/content/renderer/gpu/input_handler_proxy.cc |
| +++ b/content/renderer/gpu/input_handler_proxy.cc |
| @@ -8,7 +8,7 @@ |
| #include "base/logging.h" |
| #include "base/metrics/histogram.h" |
| #include "content/renderer/gpu/input_handler_proxy_client.h" |
| -#include "third_party/WebKit/public/platform/Platform.h" |
| +#include "third_party/WebKit/public/platform/WebFloatSize.h" |
| #include "third_party/WebKit/public/web/WebInputEvent.h" |
| #include "ui/events/latency_info.h" |
| @@ -60,10 +60,7 @@ InputHandlerProxy::InputHandlerProxy(cc::InputHandler* input_handler) |
| expect_pinch_update_end_(false), |
| #endif |
| gesture_scroll_on_impl_thread_(false), |
| - gesture_pinch_on_impl_thread_(false), |
| - fling_may_be_active_on_main_thread_(false), |
| - fling_overscrolled_horizontally_(false), |
| - fling_overscrolled_vertically_(false) { |
| + gesture_pinch_on_impl_thread_(false) { |
| input_handler_->BindToClient(this); |
| } |
| @@ -208,22 +205,15 @@ InputHandlerProxy::EventDisposition InputHandlerProxy::HandleInputEvent( |
| gfx::Point(gesture_event.x, gesture_event.y)); |
| return DID_HANDLE; |
| } else if (event.type == WebInputEvent::GestureFlingStart) { |
| - const WebGestureEvent& gesture_event = |
| - *static_cast<const WebGestureEvent*>(&event); |
| - return HandleGestureFling(gesture_event); |
| + NOTREACHED(); |
|
jamesr
2013/11/27 03:11:27
you still have to hit test in order to bind to the
|
| } else if (event.type == WebInputEvent::GestureFlingCancel) { |
| - if (CancelCurrentFling()) |
| - return DID_HANDLE; |
| - else if (!fling_may_be_active_on_main_thread_) |
| - return DROP_EVENT; |
| + NOTREACHED(); |
| } else if (event.type == WebInputEvent::TouchStart) { |
| const WebTouchEvent& touch_event = |
| *static_cast<const WebTouchEvent*>(&event); |
| if (!input_handler_->HaveTouchEventHandlersAt(touch_event.touches[0] |
| .position)) |
| return DROP_EVENT; |
| - } else if (WebInputEvent::isKeyboardEventType(event.type)) { |
| - CancelCurrentFling(); |
| } else if (event.type == WebInputEvent::MouseMove) { |
| const WebMouseEvent& mouse_event = |
| *static_cast<const WebMouseEvent*>(&event); |
| @@ -234,229 +224,12 @@ InputHandlerProxy::EventDisposition InputHandlerProxy::HandleInputEvent( |
| return DID_NOT_HANDLE; |
| } |
| -InputHandlerProxy::EventDisposition |
| -InputHandlerProxy::HandleGestureFling( |
| - const WebGestureEvent& gesture_event) { |
| - cc::InputHandler::ScrollStatus scroll_status; |
| - |
| - if (gesture_event.sourceDevice == WebGestureEvent::Touchpad) { |
| - scroll_status = input_handler_->ScrollBegin( |
| - gfx::Point(gesture_event.x, gesture_event.y), |
| - cc::InputHandler::NonBubblingGesture); |
| - } else { |
| - if (!gesture_scroll_on_impl_thread_) |
| - scroll_status = cc::InputHandler::ScrollOnMainThread; |
| - else |
| - scroll_status = input_handler_->FlingScrollBegin(); |
| - } |
| - |
| -#ifndef NDEBUG |
| - expect_scroll_update_end_ = false; |
| -#endif |
| - |
| - switch (scroll_status) { |
| - case cc::InputHandler::ScrollStarted: { |
| - if (gesture_event.sourceDevice == WebGestureEvent::Touchpad) |
| - input_handler_->ScrollEnd(); |
| - |
| - fling_curve_.reset(client_->CreateFlingAnimationCurve( |
| - gesture_event.sourceDevice, |
| - WebFloatPoint(gesture_event.data.flingStart.velocityX, |
| - gesture_event.data.flingStart.velocityY), |
| - WebKit::WebSize())); |
| - fling_overscrolled_horizontally_ = false; |
| - fling_overscrolled_vertically_ = false; |
| - TRACE_EVENT_ASYNC_BEGIN0( |
| - "renderer", |
| - "InputHandlerProxy::HandleGestureFling::started", |
| - this); |
| - fling_parameters_.delta = |
| - WebFloatPoint(gesture_event.data.flingStart.velocityX, |
| - gesture_event.data.flingStart.velocityY); |
| - fling_parameters_.point = WebPoint(gesture_event.x, gesture_event.y); |
| - fling_parameters_.globalPoint = |
| - WebPoint(gesture_event.globalX, gesture_event.globalY); |
| - fling_parameters_.modifiers = gesture_event.modifiers; |
| - fling_parameters_.sourceDevice = gesture_event.sourceDevice; |
| - input_handler_->ScheduleAnimation(); |
| - return DID_HANDLE; |
| - } |
| - case cc::InputHandler::ScrollOnMainThread: { |
| - TRACE_EVENT_INSTANT0("renderer", |
| - "InputHandlerProxy::HandleGestureFling::" |
| - "scroll_on_main_thread", |
| - TRACE_EVENT_SCOPE_THREAD); |
| - fling_may_be_active_on_main_thread_ = true; |
| - return DID_NOT_HANDLE; |
| - } |
| - case cc::InputHandler::ScrollIgnored: { |
| - TRACE_EVENT_INSTANT0( |
| - "renderer", |
| - "InputHandlerProxy::HandleGestureFling::ignored", |
| - TRACE_EVENT_SCOPE_THREAD); |
| - if (gesture_event.sourceDevice == WebGestureEvent::Touchpad) { |
| - // We still pass the curve to the main thread if there's nothing |
| - // scrollable, in case something |
| - // registers a handler before the curve is over. |
| - return DID_NOT_HANDLE; |
| - } |
| - return DROP_EVENT; |
| - } |
| - } |
| - return DID_NOT_HANDLE; |
| -} |
| - |
| void InputHandlerProxy::Animate(base::TimeTicks time) { |
| - if (!fling_curve_) |
| - return; |
| - |
| - double monotonic_time_sec = (time - base::TimeTicks()).InSecondsF(); |
| - if (!fling_parameters_.startTime) { |
| - fling_parameters_.startTime = monotonic_time_sec; |
| - input_handler_->ScheduleAnimation(); |
| - return; |
| - } |
| - |
| - if (fling_curve_->apply(monotonic_time_sec - fling_parameters_.startTime, |
| - this)) { |
| - input_handler_->ScheduleAnimation(); |
| - } else { |
| - TRACE_EVENT_INSTANT0("renderer", |
| - "InputHandlerProxy::animate::flingOver", |
| - TRACE_EVENT_SCOPE_THREAD); |
| - CancelCurrentFling(); |
| - } |
| -} |
| - |
| -void InputHandlerProxy::MainThreadHasStoppedFlinging() { |
| - fling_may_be_active_on_main_thread_ = false; |
| } |
| void InputHandlerProxy::DidOverscroll(const cc::DidOverscrollParams& params) { |
| DCHECK(client_); |
| - if (fling_curve_) { |
| - static const int kFlingOverscrollThreshold = 1; |
| - fling_overscrolled_horizontally_ |= |
| - std::abs(params.accumulated_overscroll.x()) >= |
| - kFlingOverscrollThreshold; |
| - fling_overscrolled_vertically_ |= |
| - std::abs(params.accumulated_overscroll.y()) >= |
| - kFlingOverscrollThreshold; |
| - } |
| - |
| client_->DidOverscroll(params); |
| } |
| -bool InputHandlerProxy::CancelCurrentFling() { |
| - bool had_fling_animation = fling_curve_; |
| - if (had_fling_animation && |
| - fling_parameters_.sourceDevice == WebGestureEvent::Touchscreen) { |
| - input_handler_->ScrollEnd(); |
| - TRACE_EVENT_ASYNC_END0( |
| - "renderer", |
| - "InputHandlerProxy::HandleGestureFling::started", |
| - this); |
| - } |
| - |
| - TRACE_EVENT_INSTANT1("renderer", |
| - "InputHandlerProxy::CancelCurrentFling", |
| - TRACE_EVENT_SCOPE_THREAD, |
| - "had_fling_animation", |
| - had_fling_animation); |
| - fling_curve_.reset(); |
| - gesture_scroll_on_impl_thread_ = false; |
| - fling_parameters_ = WebKit::WebActiveWheelFlingParameters(); |
| - return had_fling_animation; |
| -} |
| - |
| -bool InputHandlerProxy::TouchpadFlingScroll( |
| - const WebFloatSize& increment) { |
| - WebMouseWheelEvent synthetic_wheel; |
| - synthetic_wheel.type = WebInputEvent::MouseWheel; |
| - synthetic_wheel.deltaX = increment.width; |
| - synthetic_wheel.deltaY = increment.height; |
| - synthetic_wheel.hasPreciseScrollingDeltas = true; |
| - synthetic_wheel.x = fling_parameters_.point.x; |
| - synthetic_wheel.y = fling_parameters_.point.y; |
| - synthetic_wheel.globalX = fling_parameters_.globalPoint.x; |
| - synthetic_wheel.globalY = fling_parameters_.globalPoint.y; |
| - synthetic_wheel.modifiers = fling_parameters_.modifiers; |
| - |
| - InputHandlerProxy::EventDisposition disposition = |
| - HandleInputEvent(synthetic_wheel); |
| - switch (disposition) { |
| - case DID_HANDLE: |
| - return true; |
| - case DROP_EVENT: |
| - break; |
| - case DID_NOT_HANDLE: |
| - TRACE_EVENT_INSTANT0("renderer", |
| - "InputHandlerProxy::scrollBy::AbortFling", |
| - TRACE_EVENT_SCOPE_THREAD); |
| - // If we got a DID_NOT_HANDLE, that means we need to deliver wheels on the |
| - // main thread. In this case we need to schedule a commit and transfer the |
| - // fling curve over to the main thread and run the rest of the wheels from |
| - // there. This can happen when flinging a page that contains a scrollable |
| - // subarea that we can't scroll on the thread if the fling starts outside |
| - // the subarea but then is flung "under" the pointer. |
| - client_->TransferActiveWheelFlingAnimation(fling_parameters_); |
| - fling_may_be_active_on_main_thread_ = true; |
| - CancelCurrentFling(); |
| - break; |
| - } |
| - |
| - return false; |
| -} |
| - |
| -static gfx::Vector2dF ToClientScrollIncrement(const WebFloatSize& increment) { |
| - return gfx::Vector2dF(-increment.width, -increment.height); |
| -} |
| - |
| -void InputHandlerProxy::scrollBy(const WebFloatSize& increment) { |
| - WebFloatSize clipped_increment; |
| - if (!fling_overscrolled_horizontally_) |
| - clipped_increment.width = increment.width; |
| - if (!fling_overscrolled_vertically_) |
| - clipped_increment.height = increment.height; |
| - |
| - if (clipped_increment == WebFloatSize()) |
| - return; |
| - |
| - TRACE_EVENT2("renderer", |
| - "InputHandlerProxy::scrollBy", |
| - "x", |
| - clipped_increment.width, |
| - "y", |
| - clipped_increment.height); |
| - |
| - bool did_scroll = false; |
| - |
| - switch (fling_parameters_.sourceDevice) { |
| - case WebGestureEvent::Touchpad: |
| - did_scroll = TouchpadFlingScroll(clipped_increment); |
| - break; |
| - case WebGestureEvent::Touchscreen: |
| - clipped_increment = ToClientScrollIncrement(clipped_increment); |
| - did_scroll = input_handler_->ScrollBy(fling_parameters_.point, |
| - clipped_increment); |
| - break; |
| - } |
| - |
| - if (did_scroll) { |
| - fling_parameters_.cumulativeScroll.width += clipped_increment.width; |
| - fling_parameters_.cumulativeScroll.height += clipped_increment.height; |
| - } |
| -} |
| - |
| -void InputHandlerProxy::notifyCurrentFlingVelocity( |
| - const WebFloatSize& velocity) { |
| - TRACE_EVENT2("renderer", |
| - "InputHandlerProxy::notifyCurrentFlingVelocity", |
| - "vx", |
| - velocity.width, |
| - "vy", |
| - velocity.height); |
| - input_handler_->NotifyCurrentFlingVelocity(ToClientScrollIncrement(velocity)); |
| -} |
| - |
| } // namespace content |