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 4deeba2580f3a7a72928cd3cec30f4a401aa2f18..56232582ad9bf0f32547f1ca00f7b3632793171c 100644 |
--- a/ui/events/gesture_detection/gesture_provider.cc |
+++ b/ui/events/gesture_detection/gesture_provider.cc |
@@ -31,30 +31,40 @@ const char* GetMotionEventActionName(MotionEvent::Action action) { |
} |
GestureEventData CreateGesture(EventType type, |
+ int motion_event_id, |
base::TimeTicks time, |
float x, |
float y, |
const GestureEventDetails& details) { |
- return GestureEventData(type, time, x, y, details); |
+ return GestureEventData(type, motion_event_id, time, x, y, details); |
} |
GestureEventData CreateGesture(EventType type, |
+ int motion_event_id, |
base::TimeTicks time, |
float x, |
float y) { |
- return GestureEventData(type, time, x, y); |
- } |
+ return GestureEventData(type, motion_event_id, time, x, y); |
+} |
GestureEventData CreateGesture(EventType type, |
const MotionEvent& event, |
const GestureEventDetails& details) { |
- return CreateGesture( |
- type, event.GetEventTime(), event.GetX(), event.GetY(), details); |
+ return GestureEventData(type, |
+ event.GetId(), |
+ event.GetEventTime(), |
+ event.GetX(), |
+ event.GetY(), |
+ details); |
} |
GestureEventData CreateGesture(EventType type, |
const MotionEvent& event) { |
- return CreateGesture(type, event.GetEventTime(), event.GetX(), event.GetY()); |
+ return CreateGesture(type, |
+ event.GetId(), |
+ event.GetEventTime(), |
+ event.GetX(), |
+ event.GetY()); |
} |
float Round(float f) { |
@@ -105,27 +115,34 @@ class GestureProvider::ScaleGestureListenerImpl |
} |
// ScaleGestureDetector::ScaleGestureListener implementation. |
- virtual bool OnScaleBegin(const ScaleGestureDetector& detector) OVERRIDE { |
+ virtual bool OnScaleBegin(const ScaleGestureDetector& detector, |
+ const MotionEvent& e) OVERRIDE { |
if (ignore_detector_events_) |
return false; |
pinch_event_sent_ = false; |
return true; |
} |
- virtual void OnScaleEnd(const ScaleGestureDetector& detector) OVERRIDE { |
+ virtual void OnScaleEnd(const ScaleGestureDetector& detector, |
+ const MotionEvent& e) OVERRIDE { |
if (!pinch_event_sent_) |
return; |
- provider_->Send( |
- CreateGesture(ET_GESTURE_PINCH_END, detector.GetEventTime(), 0, 0)); |
+ provider_->Send(CreateGesture(ET_GESTURE_PINCH_END, |
+ e.GetId(), |
+ detector.GetEventTime(), |
+ 0, |
+ 0)); |
pinch_event_sent_ = false; |
} |
- virtual bool OnScale(const ScaleGestureDetector& detector) OVERRIDE { |
+ virtual bool OnScale(const ScaleGestureDetector& detector, |
+ const MotionEvent& e) OVERRIDE { |
if (ignore_detector_events_) |
return false; |
if (!pinch_event_sent_) { |
pinch_event_sent_ = true; |
provider_->Send(CreateGesture(ET_GESTURE_PINCH_BEGIN, |
+ e.GetId(), |
detector.GetEventTime(), |
detector.GetFocusX(), |
detector.GetFocusY())); |
@@ -133,6 +150,7 @@ class GestureProvider::ScaleGestureListenerImpl |
GestureEventDetails pinch_details( |
ET_GESTURE_PINCH_UPDATE, detector.GetScaleFactor(), 0); |
provider_->Send(CreateGesture(ET_GESTURE_PINCH_UPDATE, |
+ e.GetId(), |
detector.GetEventTime(), |
detector.GetFocusX(), |
detector.GetFocusY(), |
@@ -275,6 +293,7 @@ class GestureProvider::GestureListenerImpl |
GestureEventDetails scroll_details( |
ET_GESTURE_SCROLL_BEGIN, -raw_distance_x, -raw_distance_y); |
provider_->Send(CreateGesture(ET_GESTURE_SCROLL_BEGIN, |
+ e1.GetId(), |
jdduke (slow)
2014/04/02 18:33:12
Hmm... e1 is the ACTION_DOWN, don't we want the id
tdresser
2014/04/03 14:01:23
There were a couple other similar issues - my init
|
e2.GetEventTime(), |
e1.GetX(), |
e1.GetY(), |
@@ -314,8 +333,12 @@ class GestureProvider::GestureListenerImpl |
} |
} |
- provider_->Fling( |
- e2.GetEventTime(), e1.GetX(), e1.GetY(), velocity_x, velocity_y); |
+ provider_->Fling(e2.GetEventTime(), |
+ e1.GetId(), |
jdduke (slow)
2014/04/02 18:33:12
Hmm, I think we want e2.getId() on the fling (the
tdresser
2014/04/03 14:01:23
Done.
|
+ e1.GetX(), |
+ e1.GetY(), |
+ velocity_x, |
+ velocity_y); |
return true; |
} |
@@ -403,10 +426,11 @@ class GestureProvider::GestureListenerImpl |
if (IsDistanceGreaterThanTouchSlop(distance_x, distance_y)) { |
GestureEventDetails scroll_details( |
ET_GESTURE_SCROLL_BEGIN, -distance_x, -distance_y); |
- provider_->Send( |
- CreateGesture(ET_GESTURE_SCROLL_BEGIN, e, scroll_details)); |
+ provider_->Send(CreateGesture( |
+ ET_GESTURE_SCROLL_BEGIN, e, scroll_details)); |
provider_->Send( |
CreateGesture(ET_GESTURE_PINCH_BEGIN, |
+ e.GetId(), |
e.GetEventTime(), |
Round(double_tap_drag_zoom_anchor_x_), |
Round(double_tap_drag_zoom_anchor_y_))); |
@@ -421,6 +445,7 @@ class GestureProvider::GestureListenerImpl |
std::abs(dy * px_to_dp_)); |
GestureEventDetails pinch_details(ET_GESTURE_PINCH_UPDATE, scale, 0); |
provider_->Send(CreateGesture(ET_GESTURE_PINCH_UPDATE, |
+ e.GetId(), |
e.GetEventTime(), |
Round(double_tap_drag_zoom_anchor_x_), |
Round(double_tap_drag_zoom_anchor_y_), |
@@ -637,7 +662,7 @@ bool GestureProvider::OnTouchEvent(const MotionEvent& event) { |
// "Last finger raised" could be an end to movement, but it should |
// only terminate scrolling if the event did not cause a fling. |
if (was_touch_scrolling_ && !handled) |
- EndTouchScrollIfNecessary(event.GetEventTime(), true); |
+ EndTouchScrollIfNecessary(event.GetEventTime(), event.GetId(), true); |
// We shouldn't necessarily cancel a tap on ACTION_UP, as the double-tap |
// timeout may yet trigger a SINGLE_TAP. |
@@ -703,12 +728,13 @@ bool GestureProvider::CanHandle(const MotionEvent& event) const { |
} |
void GestureProvider::Fling(base::TimeTicks time, |
+ int motion_event_id, |
float x, |
float y, |
float velocity_x, |
float velocity_y) { |
if (!velocity_x && !velocity_y) { |
- EndTouchScrollIfNecessary(time, true); |
+ EndTouchScrollIfNecessary(time, motion_event_id, true); |
return; |
} |
@@ -719,13 +745,15 @@ void GestureProvider::Fling(base::TimeTicks time, |
// start hint. |
GestureEventDetails scroll_details( |
ET_GESTURE_SCROLL_BEGIN, velocity_x, velocity_y); |
- Send(CreateGesture(ET_GESTURE_SCROLL_BEGIN, time, x, y, scroll_details)); |
+ Send(CreateGesture( |
+ ET_GESTURE_SCROLL_BEGIN, motion_event_id, time, x, y, scroll_details)); |
} |
- EndTouchScrollIfNecessary(time, false); |
+ EndTouchScrollIfNecessary(time, motion_event_id, false); |
GestureEventDetails fling_details( |
ET_SCROLL_FLING_START, velocity_x, velocity_y); |
- Send(CreateGesture(ET_SCROLL_FLING_START, time, x, y, fling_details)); |
+ Send(CreateGesture( |
+ ET_SCROLL_FLING_START, motion_event_id, time, x, y, fling_details)); |
} |
void GestureProvider::Send(const GestureEventData& gesture) { |
@@ -745,8 +773,11 @@ void GestureProvider::Send(const GestureEventData& gesture) { |
break; |
case ET_GESTURE_TAP: |
if (needs_show_press_event_) |
- Send(CreateGesture( |
- ET_GESTURE_SHOW_PRESS, gesture.time, gesture.x, gesture.y)); |
+ Send(CreateGesture(ET_GESTURE_SHOW_PRESS, |
+ gesture.motion_event_id, |
+ gesture.time, |
+ gesture.x, |
+ gesture.y)); |
needs_tap_ending_event_ = false; |
break; |
case ET_GESTURE_DOUBLE_TAP: |
@@ -810,12 +841,13 @@ bool GestureProvider::SendLongTapIfNecessary(const MotionEvent& event) { |
} |
void GestureProvider::EndTouchScrollIfNecessary(base::TimeTicks time, |
+ int motion_event_id, |
bool send_scroll_end_event) { |
if (!touch_scroll_in_progress_) |
return; |
touch_scroll_in_progress_ = false; |
if (send_scroll_end_event) |
- Send(CreateGesture(ET_GESTURE_SCROLL_END, time, 0, 0)); |
+ Send(CreateGesture(ET_GESTURE_SCROLL_END, motion_event_id, time, 0, 0)); |
} |
} // namespace ui |