| 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 c96a30aa0d9b8bd816c5f69095610b68f88fee71..0acbd1989629a64738a99ed64f7b07f3426b5f30 100644
|
| --- a/ui/events/gesture_detection/gesture_provider.cc
|
| +++ b/ui/events/gesture_detection/gesture_provider.cc
|
| @@ -35,16 +35,25 @@ GestureEventData CreateGesture(EventType type,
|
| base::TimeTicks time,
|
| float x,
|
| float y,
|
| + size_t touch_point_count,
|
| const GestureEventDetails& details) {
|
| - return GestureEventData(type, motion_event_id, time, x, y, details);
|
| + return GestureEventData(type,
|
| + motion_event_id,
|
| + time,
|
| + x,
|
| + y,
|
| + static_cast<int>(touch_point_count),
|
| + details);
|
| }
|
|
|
| GestureEventData CreateGesture(EventType type,
|
| int motion_event_id,
|
| base::TimeTicks time,
|
| float x,
|
| - float y) {
|
| - return GestureEventData(type, motion_event_id, time, x, y);
|
| + float y,
|
| + size_t touch_point_count) {
|
| + return GestureEventData(
|
| + type, motion_event_id, time, x, y, static_cast<int>(touch_point_count));
|
| }
|
|
|
| GestureEventData CreateGesture(EventType type,
|
| @@ -55,13 +64,18 @@ GestureEventData CreateGesture(EventType type,
|
| event.GetEventTime(),
|
| event.GetX(),
|
| event.GetY(),
|
| + event.GetPointerCount(),
|
| details);
|
| }
|
|
|
| GestureEventData CreateGesture(EventType type,
|
| const MotionEvent& event) {
|
| - return CreateGesture(
|
| - type, event.GetId(), event.GetEventTime(), event.GetX(), event.GetY());
|
| + return CreateGesture(type,
|
| + event.GetId(),
|
| + event.GetEventTime(),
|
| + event.GetX(),
|
| + event.GetY(),
|
| + event.GetPointerCount());
|
| }
|
|
|
| GestureEventDetails CreateTapGestureDetails(EventType type,
|
| @@ -123,8 +137,12 @@ class GestureProvider::ScaleGestureListenerImpl
|
| const MotionEvent& e) OVERRIDE {
|
| if (!pinch_event_sent_)
|
| return;
|
| - provider_->Send(CreateGesture(
|
| - ET_GESTURE_PINCH_END, e.GetId(), detector.GetEventTime(), 0, 0));
|
| + provider_->Send(CreateGesture(ET_GESTURE_PINCH_END,
|
| + e.GetId(),
|
| + detector.GetEventTime(),
|
| + 0,
|
| + 0,
|
| + e.GetPointerCount()));
|
| pinch_event_sent_ = false;
|
| }
|
|
|
| @@ -138,7 +156,8 @@ class GestureProvider::ScaleGestureListenerImpl
|
| e.GetId(),
|
| detector.GetEventTime(),
|
| detector.GetFocusX(),
|
| - detector.GetFocusY()));
|
| + detector.GetFocusY(),
|
| + e.GetPointerCount()));
|
| }
|
|
|
| float scale = detector.GetScaleFactor();
|
| @@ -163,6 +182,7 @@ class GestureProvider::ScaleGestureListenerImpl
|
| detector.GetEventTime(),
|
| detector.GetFocusX(),
|
| detector.GetFocusY(),
|
| + e.GetPointerCount(),
|
| pinch_details));
|
| return true;
|
| }
|
| @@ -305,11 +325,15 @@ class GestureProvider::GestureListenerImpl
|
| // scroll deltas are in the opposite direction.
|
| GestureEventDetails scroll_details(
|
| ET_GESTURE_SCROLL_BEGIN, -raw_distance_x, -raw_distance_y);
|
| +
|
| + // Use the co-ordinates from the touch down, as these co-ordinates are
|
| + // used to determine which layer the scroll should affect.
|
| provider_->Send(CreateGesture(ET_GESTURE_SCROLL_BEGIN,
|
| e2.GetId(),
|
| e2.GetEventTime(),
|
| e1.GetX(),
|
| e1.GetY(),
|
| + e2.GetPointerCount(),
|
| scroll_details));
|
| }
|
|
|
| @@ -541,6 +565,9 @@ GestureProvider::~GestureProvider() {}
|
| bool GestureProvider::OnTouchEvent(const MotionEvent& event) {
|
| TRACE_EVENT1("input", "GestureProvider::OnTouchEvent",
|
| "action", GetMotionEventActionName(event.GetAction()));
|
| +
|
| + DCHECK_NE(0u, event.GetPointerCount());
|
| +
|
| if (!CanHandle(event))
|
| return false;
|
|
|
| @@ -669,7 +696,8 @@ void GestureProvider::Send(const GestureEventData& gesture) {
|
| gesture.motion_event_id,
|
| gesture.time,
|
| gesture.x,
|
| - gesture.y));
|
| + gesture.y,
|
| + gesture.details.touch_points()));
|
| touch_scroll_in_progress_ = false;
|
| break;
|
| case ET_GESTURE_PINCH_BEGIN:
|
| @@ -679,7 +707,8 @@ void GestureProvider::Send(const GestureEventData& gesture) {
|
| gesture.motion_event_id,
|
| gesture.time,
|
| gesture.x,
|
| - gesture.y));
|
| + gesture.y,
|
| + gesture.details.touch_points()));
|
| pinch_in_progress_ = true;
|
| break;
|
| case ET_GESTURE_PINCH_END:
|
|
|