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

Unified Diff: ui/base/gestures/gesture_recognizer_impl.cc

Issue 11188012: gesture recognizer: Remove the touch-event queue. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: tot-merge Created 8 years, 2 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/base/gestures/gesture_recognizer_impl.h ('k') | ui/base/gestures/gesture_sequence.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/gestures/gesture_recognizer_impl.cc
diff --git a/ui/base/gestures/gesture_recognizer_impl.cc b/ui/base/gestures/gesture_recognizer_impl.cc
index 7cb686ed1ced936327465b3b5e66bad25840b3b8..78adfab9c0e6a1b0649a75ecd68f7320a29f96a1 100644
--- a/ui/base/gestures/gesture_recognizer_impl.cc
+++ b/ui/base/gestures/gesture_recognizer_impl.cc
@@ -17,22 +17,6 @@ namespace ui {
namespace {
-// This is used to pop a std::queue when returning from a function.
-class ScopedPop {
- public:
- explicit ScopedPop(std::queue<TouchEvent*>* queue) : queue_(queue) {
- }
-
- ~ScopedPop() {
- delete queue_->front();
- queue_->pop();
- }
-
- private:
- std::queue<TouchEvent*>* queue_;
- DISALLOW_COPY_AND_ASSIGN(ScopedPop);
-};
-
// CancelledTouchEvent mirrors a TouchEvent object.
class MirroredTouchEvent : public TouchEvent {
public:
@@ -54,24 +38,6 @@ class MirroredTouchEvent : public TouchEvent {
DISALLOW_COPY_AND_ASSIGN(MirroredTouchEvent);
};
-class QueuedTouchEvent : public MirroredTouchEvent {
- public:
- QueuedTouchEvent(const TouchEvent* real, EventResult result)
- : MirroredTouchEvent(real),
- result_(result) {
- }
-
- virtual ~QueuedTouchEvent() {
- }
-
- EventResult result() const { return result_; }
-
- private:
- EventResult result_;
-
- DISALLOW_COPY_AND_ASSIGN(QueuedTouchEvent);
-};
-
// A mirrored event, except for the type, which is always ET_TOUCH_CANCELLED.
class CancelledTouchEvent : public MirroredTouchEvent {
public:
@@ -139,7 +105,6 @@ GestureRecognizerImpl::GestureRecognizerImpl(GestureEventHelper* helper)
GestureRecognizerImpl::~GestureRecognizerImpl() {
STLDeleteValues(&consumer_sequence_);
- STLDeleteValues(&event_queue_);
}
// Checks if this finger is already down, if so, returns the current target.
@@ -208,7 +173,6 @@ void GestureRecognizerImpl::TransferEventsTo(GestureConsumer* current_consumer,
&touch_id_target_);
TransferTouchIdToConsumerMap(current_consumer, new_consumer,
&touch_id_target_for_gestures_);
- TransferConsumer(current_consumer, new_consumer, &event_queue_);
TransferConsumer(current_consumer, new_consumer, &consumer_sequence_);
}
}
@@ -256,103 +220,21 @@ void GestureRecognizerImpl::SetupTargets(const TouchEvent& event,
}
}
-GestureSequence::Gestures* GestureRecognizerImpl::AdvanceTouchQueueByOne(
- GestureConsumer* consumer,
- ui::EventResult result) {
- CHECK(event_queue_[consumer]);
- CHECK(!event_queue_[consumer]->empty());
-
- ScopedPop pop(event_queue_[consumer]);
- TouchEvent* event = event_queue_[consumer]->front();
- GestureSequence* sequence = GetGestureSequenceForConsumer(consumer);
- if (result != ER_UNHANDLED &&
- event->type() == ET_TOUCH_RELEASED) {
- // A touch release was was processed (e.g. preventDefault()ed by a
- // web-page), but we still need to process a touch cancel.
- CancelledTouchEvent cancelled(event);
- return sequence->ProcessTouchEventForGesture(cancelled,
- ER_UNHANDLED);
- }
- return sequence->ProcessTouchEventForGesture(*event, result);
-}
-
GestureSequence::Gestures* GestureRecognizerImpl::ProcessTouchEventForGesture(
const TouchEvent& event,
ui::EventResult result,
GestureConsumer* target) {
- if (event_queue_[target] && event_queue_[target]->size() > 0) {
- // There are some queued touch-events for this target. Processing |event|
- // before those queued events will result in unexpected gestures. So
- // postpone the processing of the events until the queued events have been
- // processed.
- event_queue_[target]->push(new QueuedTouchEvent(&event, result));
- return NULL;
- }
-
SetupTargets(event, target);
-
GestureSequence* gesture_sequence = GetGestureSequenceForConsumer(target);
return gesture_sequence->ProcessTouchEventForGesture(event, result);
}
-void GestureRecognizerImpl::QueueTouchEventForGesture(GestureConsumer* consumer,
- const TouchEvent& event) {
- if (!event_queue_[consumer])
- event_queue_[consumer] = new std::queue<TouchEvent*>();
- event_queue_[consumer]->push(
- new QueuedTouchEvent(&event, ER_ASYNC));
-
- SetupTargets(event, consumer);
-}
-
-GestureSequence::Gestures* GestureRecognizerImpl::AdvanceTouchQueue(
- GestureConsumer* consumer,
- bool processed) {
- if (!event_queue_[consumer] || event_queue_[consumer]->empty()) {
- LOG(ERROR) << "Trying to advance an empty gesture queue for " << consumer;
- return NULL;
- }
-
- scoped_ptr<GestureSequence::Gestures> gestures(
- AdvanceTouchQueueByOne(consumer, processed ? ER_HANDLED :
- ER_UNHANDLED));
-
- // Are there any queued touch-events that should be auto-dequeued?
- while (!event_queue_[consumer]->empty()) {
- QueuedTouchEvent* event =
- static_cast<QueuedTouchEvent*>(event_queue_[consumer]->front());
- if (event->result() == ER_ASYNC)
- break;
-
- scoped_ptr<GestureSequence::Gestures> current_gestures(
- AdvanceTouchQueueByOne(consumer, event->result()));
- if (current_gestures.get()) {
- if (!gestures.get()) {
- gestures.reset(current_gestures.release());
- } else {
- gestures->insert(gestures->end(), current_gestures->begin(),
- current_gestures->end());
- // The gestures in |current_gestures| are now owned by |gestures|. Make
- // sure they don't get freed with |current_gestures|.
- current_gestures->weak_clear();
- }
- }
- }
-
- return gestures.release();
-}
-
-void GestureRecognizerImpl::FlushTouchQueue(GestureConsumer* consumer) {
+void GestureRecognizerImpl::CleanupStateForConsumer(GestureConsumer* consumer) {
if (consumer_sequence_.count(consumer)) {
delete consumer_sequence_[consumer];
consumer_sequence_.erase(consumer);
}
- if (event_queue_.count(consumer)) {
- delete event_queue_[consumer];
- event_queue_.erase(consumer);
- }
-
RemoveConsumerFromMap(consumer, &touch_id_target_);
RemoveConsumerFromMap(consumer, &touch_id_target_for_gestures_);
}
« no previous file with comments | « ui/base/gestures/gesture_recognizer_impl.h ('k') | ui/base/gestures/gesture_sequence.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698