Chromium Code Reviews| Index: ui/events/gesture_detection/gesture_provider.cc |
| diff --git a/ui/events/gesture_detection/gesture_provider.cc b/ui/events/gesture_detection/gesture_provider.cc |
| index c76460e53c63da200bda0dcf3cec80946e79fd0a..4c8fe915a94d6a285382c015d6cca0305faaf900 100644 |
| --- a/ui/events/gesture_detection/gesture_provider.cc |
| +++ b/ui/events/gesture_detection/gesture_provider.cc |
| @@ -54,6 +54,13 @@ gfx::RectF GetBoundingBox(const MotionEvent& event) { |
| return gfx::RectF(left, top, right - left, bottom - top); |
| } |
| +gfx::RectF GetBoundingBox(float x, float y, float max_diameter) { |
| + // Can't use gfx::RectF::Union, as it ignores touches with a radius of 0. |
| + float left = x - max_diameter / 2; |
| + float top = y - max_diameter / 2; |
| + return gfx::RectF(left, top, max_diameter, max_diameter); |
| +} |
| + |
| GestureEventData CreateGesture(const GestureEventDetails& details, |
| int motion_event_id, |
| MotionEvent::ToolType primary_tool_type, |
| @@ -116,6 +123,48 @@ GestureEventData CreateGesture(EventType type, const MotionEvent& event) { |
| return CreateGesture(GestureEventDetails(type, 0, 0), event); |
| } |
| +GestureEventData CreateGesture(const GestureEventDetails& details, |
|
tdresser
2014/09/04 13:54:00
Hmmm, I don't really like adding even more |Create
|
| + const MotionEvent& event, |
| + float max_diameter) { |
| + return GestureEventData( |
| + details, |
| + event.GetId(), |
| + event.GetToolType(), |
| + event.GetEventTime(), |
| + event.GetX(), |
| + event.GetY(), |
| + event.GetRawX(), |
| + event.GetRawY(), |
| + event.GetPointerCount(), |
| + GetBoundingBox(event.GetX(), event.GetY(), max_diameter)); |
| +} |
| + |
| +GestureEventData CreateGesture(const GestureEventDetails& details, |
| + const MotionEvent& event, |
| + float x, |
| + float y, |
| + float max_diameter) { |
| + return GestureEventData(details, |
| + event.GetId(), |
| + event.GetToolType(), |
| + event.GetEventTime(), |
| + event.GetX(), |
| + event.GetY(), |
| + event.GetRawX(), |
| + event.GetRawY(), |
| + event.GetPointerCount(), |
| + GetBoundingBox(x, y, max_diameter)); |
| +} |
| + |
| +GestureEventData CreateTapGesture(EventType type, |
| + const MotionEvent& event, |
| + float x, |
| + float y, |
| + float max_diameter) { |
| + return CreateGesture( |
| + GestureEventDetails(type, 1, 0), event, x, y, max_diameter); |
| +} |
| + |
| GestureEventData CreateTapGesture(EventType type, const MotionEvent& event) { |
| // Set the tap count to 1 even for ET_GESTURE_DOUBLE_TAP, in order to be |
| // consistent with double tap behavior on a mobile viewport. See |
| @@ -472,12 +521,15 @@ class GestureProvider::GestureListenerImpl |
| return true; |
| } |
| - virtual void OnShowPress(const MotionEvent& e) OVERRIDE { |
| + virtual void OnShowPress(const MotionEvent& e, float max_diameter) OVERRIDE { |
| GestureEventDetails show_press_details(ET_GESTURE_SHOW_PRESS, 0, 0); |
| - Send(CreateGesture(show_press_details, e)); |
| + Send(CreateGesture(show_press_details, e, max_diameter)); |
| } |
| - virtual bool OnSingleTapUp(const MotionEvent& e) OVERRIDE { |
| + virtual bool OnSingleTapUp(const MotionEvent& e, |
| + float x, |
| + float y, |
| + float max_diameter) OVERRIDE { |
| // This is a hack to address the issue where user hovers |
| // over a link for longer than double_tap_timeout_, then |
| // OnSingleTapConfirmed() is not triggered. But we still |
| @@ -487,15 +539,16 @@ class GestureProvider::GestureListenerImpl |
| if (!ignore_single_tap_) { |
| if (e.GetEventTime() - current_down_time_ > |
| config_.gesture_detector_config.double_tap_timeout) { |
| - return OnSingleTapConfirmed(e); |
| + return OnSingleTapConfirmed(e, x, y, max_diameter); |
| } else if (!IsDoubleTapEnabled() || config_.disable_click_delay) { |
| // If double-tap has been disabled, there is no need to wait |
| // for the double-tap timeout. |
| - return OnSingleTapConfirmed(e); |
| + return OnSingleTapConfirmed(e, x, y, max_diameter); |
| } else { |
| // Notify Blink about this tapUp event anyway, when none of the above |
| // conditions applied. |
| - Send(CreateTapGesture(ET_GESTURE_TAP_UNCONFIRMED, e)); |
| + Send(CreateTapGesture( |
| + ET_GESTURE_TAP_UNCONFIRMED, e, x, y, max_diameter)); |
|
tdresser
2014/09/04 13:54:01
Add a space to line up with "Create"
|
| } |
| } |
| @@ -511,7 +564,10 @@ class GestureProvider::GestureListenerImpl |
| } |
| // GestureDetector::DoubleTapListener implementation. |
| - virtual bool OnSingleTapConfirmed(const MotionEvent& e) OVERRIDE { |
| + virtual bool OnSingleTapConfirmed(const MotionEvent& e, |
| + float x, |
| + float y, |
| + float max_diameter) OVERRIDE { |
| // Long taps in the edges of the screen have their events delayed by |
| // ContentViewHolder for tab swipe operations. As a consequence of the delay |
| // this method might be called after receiving the up event. |
| @@ -521,7 +577,7 @@ class GestureProvider::GestureListenerImpl |
| ignore_single_tap_ = true; |
| - Send(CreateTapGesture(ET_GESTURE_TAP, e)); |
| + Send(CreateTapGesture(ET_GESTURE_TAP, e, x, y, max_diameter)); |
| return true; |
| } |