summaryrefslogtreecommitdiffstats
path: root/ui/events/gestures
diff options
context:
space:
mode:
authorjdduke <jdduke@chromium.org>2014-12-15 13:49:06 -0800
committerCommit bot <commit-bot@chromium.org>2014-12-15 21:50:22 +0000
commit11e45a87addf6fa39f6a7d505ff318236b7b82f4 (patch)
tree21a669e92a399bf20523fe72d8f9b5c63368aaec /ui/events/gestures
parent13fbeece908a65fb7264a3ccc3ce522fb62c276f (diff)
downloadchromium_src-11e45a87addf6fa39f6a7d505ff318236b7b82f4.zip
chromium_src-11e45a87addf6fa39f6a7d505ff318236b7b82f4.tar.gz
chromium_src-11e45a87addf6fa39f6a7d505ff318236b7b82f4.tar.bz2
Expose native, desktop and mobile gesture detection defaults
Provide generic desktop and mobile gesture configurations, in addition to the native platform configuration. This will allow devtools touch emulation to more faithfully emulate a particular device. Note that this change involved decoupling the TouchEventQueue from platform-specific slop region constants, afforded by a WebTouchEvent flag indicating whether the event may cause scrolling as a default action. BUG=425586 Review URL: https://codereview.chromium.org/679633005 Cr-Commit-Position: refs/heads/master@{#308429}
Diffstat (limited to 'ui/events/gestures')
-rw-r--r--ui/events/gestures/gesture_provider_aura.cc35
-rw-r--r--ui/events/gestures/gesture_provider_aura.h2
-rw-r--r--ui/events/gestures/gesture_provider_aura_unittest.cc28
-rw-r--r--ui/events/gestures/gesture_recognizer.h2
-rw-r--r--ui/events/gestures/gesture_recognizer_impl.cc6
-rw-r--r--ui/events/gestures/gesture_recognizer_impl.h2
-rw-r--r--ui/events/gestures/gesture_recognizer_impl_mac.cc2
7 files changed, 43 insertions, 34 deletions
diff --git a/ui/events/gestures/gesture_provider_aura.cc b/ui/events/gestures/gesture_provider_aura.cc
index ad66092..97d875c 100644
--- a/ui/events/gestures/gesture_provider_aura.cc
+++ b/ui/events/gestures/gesture_provider_aura.cc
@@ -15,7 +15,9 @@ namespace ui {
GestureProviderAura::GestureProviderAura(GestureProviderAuraClient* client)
: client_(client),
- filtered_gesture_provider_(DefaultGestureProviderConfig(), this),
+ filtered_gesture_provider_(
+ GetGestureProviderConfig(GestureProviderConfigType::CURRENT_PLATFORM),
+ this),
handling_event_(false),
last_unique_touch_event_id_(
std::numeric_limits<unsigned long long>::max()) {
@@ -24,15 +26,16 @@ GestureProviderAura::GestureProviderAura(GestureProviderAuraClient* client)
GestureProviderAura::~GestureProviderAura() {}
-bool GestureProviderAura::OnTouchEvent(const TouchEvent& event) {
- last_unique_touch_event_id_ = event.unique_event_id();
- int index = pointer_state_.FindPointerIndexOfId(event.touch_id());
+bool GestureProviderAura::OnTouchEvent(TouchEvent* event) {
+ DCHECK(event);
+ last_unique_touch_event_id_ = event->unique_event_id();
+ int index = pointer_state_.FindPointerIndexOfId(event->touch_id());
bool pointer_id_is_active = index != -1;
- if (event.type() == ET_TOUCH_PRESSED && pointer_id_is_active) {
+ if (event->type() == ET_TOUCH_PRESSED && pointer_id_is_active) {
// Ignore touch press events if we already believe the pointer is down.
return false;
- } else if (event.type() != ET_TOUCH_PRESSED && !pointer_id_is_active) {
+ } else if (event->type() != ET_TOUCH_PRESSED && !pointer_id_is_active) {
// We could have an active touch stream transfered to us, resulting in touch
// move or touch up events without associated touch down events. Ignore
// them.
@@ -41,18 +44,22 @@ bool GestureProviderAura::OnTouchEvent(const TouchEvent& event) {
// If this is a touchmove event, and it isn't different from the last
// event, ignore it.
- if (event.type() == ET_TOUCH_MOVED &&
- event.x() == pointer_state_.GetX(index) &&
- event.y() == pointer_state_.GetY(index)) {
+ if (event->type() == ET_TOUCH_MOVED &&
+ event->x() == pointer_state_.GetX(index) &&
+ event->y() == pointer_state_.GetY(index)) {
return false;
}
- last_touch_event_latency_info_ = *event.latency();
- pointer_state_.OnTouch(event);
+ last_touch_event_latency_info_ = *event->latency();
+ pointer_state_.OnTouch(*event);
- bool result = filtered_gesture_provider_.OnTouchEvent(pointer_state_);
- pointer_state_.CleanupRemovedTouchPoints(event);
- return result;
+ auto result = filtered_gesture_provider_.OnTouchEvent(pointer_state_);
+ if (!result.succeeded)
+ return false;
+
+ event->set_may_cause_scrolling(result.did_generate_scroll);
+ pointer_state_.CleanupRemovedTouchPoints(*event);
+ return true;
}
void GestureProviderAura::OnAsyncTouchEventAck(bool event_consumed) {
diff --git a/ui/events/gestures/gesture_provider_aura.h b/ui/events/gestures/gesture_provider_aura.h
index 25769d6..9f537c8 100644
--- a/ui/events/gestures/gesture_provider_aura.h
+++ b/ui/events/gestures/gesture_provider_aura.h
@@ -29,7 +29,7 @@ class EVENTS_EXPORT GestureProviderAura : public GestureProviderClient {
GestureProviderAura(GestureProviderAuraClient* client);
~GestureProviderAura() override;
- bool OnTouchEvent(const TouchEvent& event);
+ bool OnTouchEvent(TouchEvent* event);
void OnAsyncTouchEventAck(bool event_consumed);
void OnSyncTouchEventAck(const uint64 unique_event_id, bool event_consumed);
const MotionEventAura& pointer_state() { return pointer_state_; }
diff --git a/ui/events/gestures/gesture_provider_aura_unittest.cc b/ui/events/gestures/gesture_provider_aura_unittest.cc
index 0ce3de5..9b52dd3 100644
--- a/ui/events/gestures/gesture_provider_aura_unittest.cc
+++ b/ui/events/gestures/gesture_provider_aura_unittest.cc
@@ -33,30 +33,30 @@ class GestureProviderAuraTest : public testing::Test,
TEST_F(GestureProviderAuraTest, IgnoresExtraPressEvents) {
base::TimeDelta time = ui::EventTimeForNow();
TouchEvent press1(ET_TOUCH_PRESSED, gfx::PointF(10, 10), 0, time);
- EXPECT_TRUE(provider()->OnTouchEvent(press1));
+ EXPECT_TRUE(provider()->OnTouchEvent(&press1));
time += base::TimeDelta::FromMilliseconds(10);
TouchEvent press2(ET_TOUCH_PRESSED, gfx::PointF(30, 40), 0, time);
// Redundant press with same id is ignored.
- EXPECT_FALSE(provider()->OnTouchEvent(press2));
+ EXPECT_FALSE(provider()->OnTouchEvent(&press2));
}
TEST_F(GestureProviderAuraTest, IgnoresExtraMoveOrReleaseEvents) {
base::TimeDelta time = ui::EventTimeForNow();
TouchEvent press1(ET_TOUCH_PRESSED, gfx::PointF(10, 10), 0, time);
- EXPECT_TRUE(provider()->OnTouchEvent(press1));
+ EXPECT_TRUE(provider()->OnTouchEvent(&press1));
time += base::TimeDelta::FromMilliseconds(10);
TouchEvent release1(ET_TOUCH_RELEASED, gfx::PointF(30, 40), 0, time);
- EXPECT_TRUE(provider()->OnTouchEvent(release1));
+ EXPECT_TRUE(provider()->OnTouchEvent(&release1));
time += base::TimeDelta::FromMilliseconds(10);
TouchEvent release2(ET_TOUCH_RELEASED, gfx::PointF(30, 45), 0, time);
- EXPECT_FALSE(provider()->OnTouchEvent(release1));
+ EXPECT_FALSE(provider()->OnTouchEvent(&release1));
time += base::TimeDelta::FromMilliseconds(10);
TouchEvent move1(ET_TOUCH_MOVED, gfx::PointF(70, 75), 0, time);
- EXPECT_FALSE(provider()->OnTouchEvent(move1));
+ EXPECT_FALSE(provider()->OnTouchEvent(&move1));
}
TEST_F(GestureProviderAuraTest, IgnoresIdenticalMoveEvents) {
@@ -69,10 +69,10 @@ TEST_F(GestureProviderAuraTest, IgnoresIdenticalMoveEvents) {
base::TimeDelta time = ui::EventTimeForNow();
TouchEvent press0_1(ET_TOUCH_PRESSED, gfx::PointF(9, 10), kTouchId0, time);
- EXPECT_TRUE(provider()->OnTouchEvent(press0_1));
+ EXPECT_TRUE(provider()->OnTouchEvent(&press0_1));
TouchEvent press1_1(ET_TOUCH_PRESSED, gfx::PointF(40, 40), kTouchId1, time);
- EXPECT_TRUE(provider()->OnTouchEvent(press1_1));
+ EXPECT_TRUE(provider()->OnTouchEvent(&press1_1));
time += base::TimeDelta::FromMilliseconds(10);
TouchEvent move0_1(ET_TOUCH_MOVED,
@@ -84,7 +84,7 @@ TEST_F(GestureProviderAuraTest, IgnoresIdenticalMoveEvents) {
kRadiusY,
kAngle,
kForce);
- EXPECT_TRUE(provider()->OnTouchEvent(move0_1));
+ EXPECT_TRUE(provider()->OnTouchEvent(&move0_1));
TouchEvent move1_1(ET_TOUCH_MOVED,
gfx::PointF(100, 200),
@@ -95,7 +95,7 @@ TEST_F(GestureProviderAuraTest, IgnoresIdenticalMoveEvents) {
kRadiusY,
kAngle,
kForce);
- EXPECT_TRUE(provider()->OnTouchEvent(move1_1));
+ EXPECT_TRUE(provider()->OnTouchEvent(&move1_1));
time += base::TimeDelta::FromMilliseconds(10);
TouchEvent move0_2(ET_TOUCH_MOVED,
@@ -108,7 +108,7 @@ TEST_F(GestureProviderAuraTest, IgnoresIdenticalMoveEvents) {
kAngle,
kForce);
// Nothing has changed, so ignore the move.
- EXPECT_FALSE(provider()->OnTouchEvent(move0_2));
+ EXPECT_FALSE(provider()->OnTouchEvent(&move0_2));
TouchEvent move1_2(ET_TOUCH_MOVED,
gfx::PointF(100, 200),
@@ -120,7 +120,7 @@ TEST_F(GestureProviderAuraTest, IgnoresIdenticalMoveEvents) {
kAngle,
kForce);
// Nothing has changed, so ignore the move.
- EXPECT_FALSE(provider()->OnTouchEvent(move1_2));
+ EXPECT_FALSE(provider()->OnTouchEvent(&move1_2));
time += base::TimeDelta::FromMilliseconds(10);
TouchEvent move0_3(ET_TOUCH_MOVED,
@@ -133,7 +133,7 @@ TEST_F(GestureProviderAuraTest, IgnoresIdenticalMoveEvents) {
kAngle,
kForce);
// Position has changed, so don't ignore the move.
- EXPECT_TRUE(provider()->OnTouchEvent(move0_3));
+ EXPECT_TRUE(provider()->OnTouchEvent(&move0_3));
time += base::TimeDelta::FromMilliseconds(10);
TouchEvent move0_4(ET_TOUCH_MOVED,
@@ -147,4 +147,6 @@ TEST_F(GestureProviderAuraTest, IgnoresIdenticalMoveEvents) {
kForce);
}
+// TODO(jdduke): Test whether event marked as scroll trigger.
+
} // namespace ui
diff --git a/ui/events/gestures/gesture_recognizer.h b/ui/events/gestures/gesture_recognizer.h
index f062177..9ed0704 100644
--- a/ui/events/gestures/gesture_recognizer.h
+++ b/ui/events/gestures/gesture_recognizer.h
@@ -29,7 +29,7 @@ class EVENTS_EXPORT GestureRecognizer {
// Invoked before event dispatch. If the event is invalid given the current
// touch sequence, returns false.
- virtual bool ProcessTouchEventPreDispatch(const TouchEvent& event,
+ virtual bool ProcessTouchEventPreDispatch(TouchEvent* event,
GestureConsumer* consumer) = 0;
// Returns a list of zero or more GestureEvents. The caller is responsible for
diff --git a/ui/events/gestures/gesture_recognizer_impl.cc b/ui/events/gestures/gesture_recognizer_impl.cc
index acd9643..7250bf22 100644
--- a/ui/events/gestures/gesture_recognizer_impl.cc
+++ b/ui/events/gestures/gesture_recognizer_impl.cc
@@ -239,11 +239,11 @@ void GestureRecognizerImpl::DispatchGestureEvent(GestureEvent* event) {
}
bool GestureRecognizerImpl::ProcessTouchEventPreDispatch(
- const TouchEvent& event,
+ TouchEvent* event,
GestureConsumer* consumer) {
- SetupTargets(event, consumer);
+ SetupTargets(*event, consumer);
- if (event.result() & ER_CONSUMED)
+ if (event->result() & ER_CONSUMED)
return false;
GestureProviderAura* gesture_provider =
diff --git a/ui/events/gestures/gesture_recognizer_impl.h b/ui/events/gestures/gesture_recognizer_impl.h
index 39598be..c7bea45 100644
--- a/ui/events/gestures/gesture_recognizer_impl.h
+++ b/ui/events/gestures/gesture_recognizer_impl.h
@@ -57,7 +57,7 @@ class EVENTS_EXPORT GestureRecognizerImpl : public GestureRecognizer,
void DispatchGestureEvent(GestureEvent* event);
// Overridden from GestureRecognizer
- bool ProcessTouchEventPreDispatch(const TouchEvent& event,
+ bool ProcessTouchEventPreDispatch(TouchEvent* event,
GestureConsumer* consumer) override;
Gestures* AckAsyncTouchEvent(const TouchEvent& event,
diff --git a/ui/events/gestures/gesture_recognizer_impl_mac.cc b/ui/events/gestures/gesture_recognizer_impl_mac.cc
index 8a9fe34..3a80e5d 100644
--- a/ui/events/gestures/gesture_recognizer_impl_mac.cc
+++ b/ui/events/gestures/gesture_recognizer_impl_mac.cc
@@ -17,7 +17,7 @@ class GestureRecognizerImplMac : public GestureRecognizer {
~GestureRecognizerImplMac() override {}
private:
- bool ProcessTouchEventPreDispatch(const TouchEvent& event,
+ bool ProcessTouchEventPreDispatch(TouchEvent* event,
GestureConsumer* consumer) override {
return false;
}