Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Unified Diff: ui/aura/gestures/gesture_sequence.cc

Issue 9566020: Revert 124071 - Gestures are now possible using touch events with any ids (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/aura/gestures/gesture_sequence.h ('k') | ui/aura/window_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/aura/gestures/gesture_sequence.cc
===================================================================
--- ui/aura/gestures/gesture_sequence.cc (revision 124450)
+++ ui/aura/gestures/gesture_sequence.cc (working copy)
@@ -12,6 +12,11 @@
#include "ui/aura/gestures/gesture_configuration.h"
#include "ui/base/events.h"
+// TODO(sad): Pinch gestures currently always assume that the first two
+// touch-points (i.e. at indices 0 and 1) are involved. This may not
+// always be the case. This needs to be fixed eventually.
+// http://crbug.com/113144
+
namespace {
// TODO(girard): Make these configurable in sync with this CL
@@ -94,6 +99,18 @@
GST_SCROLL_FIRST_CANCELLED =
G(GS_SCROLL, 0, TS_CANCELLED, false),
+ GST_SCROLL_FIRST_PRESSED =
+ G(GS_SCROLL, 0, TS_PRESSED, false),
+
+ GST_SCROLL_SECOND_RELEASED =
+ G(GS_SCROLL, 1, TS_RELEASED, false),
+
+ GST_SCROLL_SECOND_MOVED =
+ G(GS_SCROLL, 1, TS_MOVED, false),
+
+ GST_SCROLL_SECOND_CANCELLED =
+ G(GS_SCROLL, 1, TS_CANCELLED, false),
+
GST_SCROLL_SECOND_PRESSED =
G(GS_SCROLL, 1, TS_PRESSED, false),
@@ -147,6 +164,9 @@
long_press_timer_(CreateTimer()),
point_count_(0),
root_window_(root_window) {
+ for (int i = 0; i < kMaxGesturePoints; ++i) {
+ points_[i].set_touch_id(i);
+ }
}
GestureSequence::~GestureSequence() {
@@ -165,13 +185,7 @@
if (event.type() == ui::ET_TOUCH_PRESSED) {
if (point_count_ == kMaxGesturePoints)
return NULL;
- GesturePoint* new_point = &points_[event.touch_id()];
- // We shouldn't be able to get two PRESSED events, without a RELEASE
- DCHECK(!points_[event.touch_id()].in_use());
- new_point->set_point_id(point_count_++);
- } else {
- // Make sure the point we're modifying was PRESSED at some point in the past
- DCHECK(points_[event.touch_id()].in_use());
+ ++point_count_;
}
GestureState last_state = state_;
@@ -181,8 +195,7 @@
GesturePoint& point = GesturePointForEvent(event);
point.UpdateValues(event);
flags_ = event.flags();
- const int point_id = points_[event.touch_id()].point_id();
- switch (Signature(state_, point_id, event.type(), false)) {
+ switch (Signature(state_, event.touch_id(), event.type(), false)) {
case GST_NO_GESTURE_FIRST_PRESSED:
TouchDown(event, point, gestures.get());
set_state(GS_PENDING_SYNTHETIC_CLICK);
@@ -204,6 +217,7 @@
NoGesture(event, point, gestures.get());
break;
case GST_SCROLL_FIRST_MOVED:
+ case GST_SCROLL_SECOND_MOVED:
if (scroll_type_ == ST_VERTICAL ||
scroll_type_ == ST_HORIZONTAL)
BreakRailScroll(event, point, gestures.get());
@@ -212,9 +226,12 @@
break;
case GST_SCROLL_FIRST_RELEASED:
case GST_SCROLL_FIRST_CANCELLED:
+ case GST_SCROLL_SECOND_RELEASED:
+ case GST_SCROLL_SECOND_CANCELLED:
ScrollEnd(event, point, gestures.get());
set_state(GS_NO_GESTURE);
break;
+ case GST_SCROLL_FIRST_PRESSED:
case GST_SCROLL_SECOND_PRESSED:
case GST_PENDING_SYNTHETIC_CLICK_SECOND_PRESSED:
PinchStart(event, point, gestures.get());
@@ -248,27 +265,15 @@
if (last_state == GS_PENDING_SYNTHETIC_CLICK && state_ != last_state)
long_press_timer_->Stop();
- // The set of point_ids must be contiguous and include 0.
- // When a touch point is released, all points with ids greater than the
- // released point must have their ids decremented, or the set of point_ids
- // could end up with gaps.
- if (event.type() == ui::ET_TOUCH_RELEASED) {
- GesturePoint& old_point = points_[event.touch_id()];
- for (int i = 0; i < kMaxGesturePoints; ++i) {
- GesturePoint& point = points_[i];
- if (point.point_id() > old_point.point_id())
- point.set_point_id(point.point_id() - 1);
- }
- old_point.Reset();
+ if (event.type() == ui::ET_TOUCH_RELEASED)
--point_count_;
- }
return gestures.release();
}
void GestureSequence::Reset() {
set_state(GS_NO_GESTURE);
- for (int i = 0; i < kMaxGesturePoints; ++i)
+ for (int i = 0; i < point_count_; ++i)
points_[i].Reset();
}
@@ -287,17 +292,6 @@
return points_[event.touch_id()];
}
-GesturePoint* GestureSequence::GetPointByPointId(int point_id) {
- DCHECK(0 <= point_id && point_id < kMaxGesturePoints);
- for (int i = 0; i < kMaxGesturePoints; ++i) {
- GesturePoint& point = points_[i];
- if (point.in_use() && point.point_id() == point_id)
- return &point;
- }
- NOTREACHED();
- return NULL;
-}
-
void GestureSequence::AppendTapDownGestureEvent(const GesturePoint& point,
Gestures* gestures) {
gestures->push_back(linked_ptr<GestureEvent>(new GestureEvent(
@@ -488,14 +482,16 @@
}
void GestureSequence::AppendLongPressGestureEvent() {
- const GesturePoint* point = GetPointByPointId(0);
+ // TODO(tdresser) - this may not always be the first point
+ const GesturePoint& point = points_[0];
GestureEvent* gesture = new GestureEvent(
ui::ET_GESTURE_LONG_PRESS,
- point->first_touch_position().x(),
- point->first_touch_position().y(),
+ point.first_touch_position().x(),
+ point.first_touch_position().y(),
flags_,
- base::Time::FromDoubleT(point->last_touch_time()),
- point->point_id(), 0.f);
+ base::Time::FromDoubleT(point.last_touch_time()),
+ point.touch_id(), 0.f);
+
root_window_->DispatchGestureEvent(gesture);
}
@@ -518,16 +514,13 @@
state_ == GS_PENDING_SYNTHETIC_CLICK);
AppendTapDownGestureEvent(point, gestures);
- const GesturePoint* point1 = GetPointByPointId(0);
- const GesturePoint* point2 = GetPointByPointId(1);
-
- pinch_distance_current_ = point1->Distance(*point2);
+ pinch_distance_current_ = points_[0].Distance(points_[1]);
pinch_distance_start_ = pinch_distance_current_;
- AppendPinchGestureBegin(*point1, *point2, gestures);
+ AppendPinchGestureBegin(points_[0], points_[1], gestures);
if (state_ == GS_PENDING_SYNTHETIC_CLICK) {
- gfx::Point center = point1->last_touch_position().Middle(
- point2->last_touch_position());
+ gfx::Point center = points_[0].last_touch_position().Middle(
+ points_[1].last_touch_position());
AppendScrollGestureBegin(point, center, gestures);
}
@@ -537,27 +530,23 @@
bool GestureSequence::PinchUpdate(const TouchEvent& event,
const GesturePoint& point, Gestures* gestures) {
DCHECK(state_ == GS_PINCH);
-
- const GesturePoint* point1 = GetPointByPointId(0);
- const GesturePoint* point2 = GetPointByPointId(1);
-
- float distance = point1->Distance(*point2);
+ float distance = points_[0].Distance(points_[1]);
if (abs(distance - pinch_distance_current_) <
GestureConfiguration::minimum_pinch_update_distance_in_pixels()) {
// The fingers didn't move towards each other, or away from each other,
// enough to constitute a pinch. But perhaps they moved enough in the same
// direction to do a two-finger scroll.
- if (!point1->DidScroll(event,
+ if (!points_[0].DidScroll(event,
GestureConfiguration::minimum_distance_for_pinch_scroll_in_pixels()) ||
- !point2->DidScroll(event,
+ !points_[1].DidScroll(event,
GestureConfiguration::minimum_distance_for_pinch_scroll_in_pixels()))
return false;
- gfx::Point center = point1->last_touch_position().Middle(
- point2->last_touch_position());
+ gfx::Point center = points_[0].last_touch_position().Middle(
+ points_[1].last_touch_position());
AppendScrollGestureUpdate(point, center, gestures);
} else {
- AppendPinchGestureUpdate(*point1, *point2,
+ AppendPinchGestureUpdate(points_[0], points_[1],
distance / pinch_distance_current_, gestures);
pinch_distance_current_ = distance;
}
@@ -567,12 +556,8 @@
bool GestureSequence::PinchEnd(const TouchEvent& event,
const GesturePoint& point, Gestures* gestures) {
DCHECK(state_ == GS_PINCH);
-
- const GesturePoint* point1 = GetPointByPointId(0);
- const GesturePoint* point2 = GetPointByPointId(1);
-
- float distance = point1->Distance(*point2);
- AppendPinchGestureEnd(*point1, *point2,
+ float distance = points_[0].Distance(points_[1]);
+ AppendPinchGestureEnd(points_[0], points_[1],
distance / pinch_distance_start_, gestures);
pinch_distance_start_ = 0;
« no previous file with comments | « ui/aura/gestures/gesture_sequence.h ('k') | ui/aura/window_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698