diff options
author | jdduke <jdduke@chromium.org> | 2014-12-15 13:49:06 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-15 21:50:22 +0000 |
commit | 11e45a87addf6fa39f6a7d505ff318236b7b82f4 (patch) | |
tree | 21a669e92a399bf20523fe72d8f9b5c63368aaec /ui/events/gestures | |
parent | 13fbeece908a65fb7264a3ccc3ce522fb62c276f (diff) | |
download | chromium_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.cc | 35 | ||||
-rw-r--r-- | ui/events/gestures/gesture_provider_aura.h | 2 | ||||
-rw-r--r-- | ui/events/gestures/gesture_provider_aura_unittest.cc | 28 | ||||
-rw-r--r-- | ui/events/gestures/gesture_recognizer.h | 2 | ||||
-rw-r--r-- | ui/events/gestures/gesture_recognizer_impl.cc | 6 | ||||
-rw-r--r-- | ui/events/gestures/gesture_recognizer_impl.h | 2 | ||||
-rw-r--r-- | ui/events/gestures/gesture_recognizer_impl_mac.cc | 2 |
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; } |