| Index: ui/events/gestures/gesture_event_queue.h
|
| diff --git a/ui/events/gestures/gesture_event_queue.h b/ui/events/gestures/gesture_event_queue.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c43c97a46b4820b6887b6365c59a7a4490658f13
|
| --- /dev/null
|
| +++ b/ui/events/gestures/gesture_event_queue.h
|
| @@ -0,0 +1,104 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef UI_EVENTS_GESTURES_GESTURE_EVENT_QUEUE_H_
|
| +#define UI_EVENTS_GESTURES_GESTURE_EVENT_QUEUE_H_
|
| +
|
| +#include <list>
|
| +#include <set>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/scoped_vector.h"
|
| +#include "ui/events/event.h"
|
| +#include "ui/events/gestures/touch_point_state.h"
|
| +
|
| +namespace ui {
|
| +class TouchEvent;
|
| +
|
| +class GestureEventQueueDelegate {
|
| + public:
|
| + virtual ~GestureEventQueueDelegate() {};
|
| + virtual void DispatchGestureEvent(GestureEvent* event) = 0;
|
| +};
|
| +
|
| +class GestureEventQueueTimerInterface {
|
| + public:
|
| + virtual void TimerFired() = 0;
|
| + virtual void TimerCancelled() = 0;
|
| +};
|
| +
|
| +// A GestureEventQueue consumes a stream of gestures, and a stream of touch
|
| +// acks. It sends the |GestureEventQueueDelegate| a filtered stream of gestures,
|
| +// with some gestures removed due to touches having been consumed.
|
| +class EVENTS_EXPORT GestureEventQueue : public GestureEventQueueTimerInterface {
|
| + public:
|
| + GestureEventQueue(GestureEventQueueDelegate* geqd);
|
| + virtual ~GestureEventQueue();
|
| +
|
| + void OnTouchEvent(const TouchEvent& event);
|
| +
|
| + void OnTouchEventAck(const TouchEvent& event,
|
| + EventResult result);
|
| +
|
| + // Takes ownership of event.
|
| + void QueueGestureEvent(GestureEvent* event,
|
| + TouchPointState::RequiresAck requires_ack);
|
| +
|
| + virtual void TimerFired() OVERRIDE;
|
| + virtual void TimerCancelled() OVERRIDE;
|
| +
|
| + protected:
|
| + void QueueGestureEvent(
|
| + GestureEvent* event,
|
| + std::vector<TouchPointState*>& touch_point_states);
|
| +
|
| + class GestureWithState {
|
| + public:
|
| + // Clears touch_point_states, and takes ownership of its members.
|
| + GestureWithState(GestureEvent* event,
|
| + std::vector<TouchPointState*>& touch_point_states);
|
| + ~GestureWithState();
|
| + GestureEvent* event() { return event_.get(); }
|
| + std::vector<TouchPointState*>& touch_point_states() {
|
| + return touch_point_states_.get();
|
| + }
|
| +
|
| + private:
|
| + scoped_ptr<GestureEvent> event_;
|
| + ScopedVector<TouchPointState> touch_point_states_;
|
| + DISALLOW_COPY_AND_ASSIGN(GestureWithState);
|
| + };
|
| +
|
| + typedef ScopedVector<GestureWithState> Sequence;
|
| + // sequences_ owns all of the TouchPointState objects keeping tracking of
|
| + // which acks a given event depends on.
|
| + std::list<Sequence*> sequences_;
|
| +
|
| + private:
|
| + void SendGestureEvent(GestureEvent* event);
|
| +
|
| + // Returns true if we've seen unconsumed acks in the current sequence for
|
| + // every touch contributing to |gesture_touches|.
|
| + bool CanSend(const std::vector<TouchPointState*>& gesture_touches) const;
|
| +
|
| + // Returns true if we've seen consumed acks in the current sequence for any
|
| + // touch contributing to |gesture_touches|.
|
| + bool CanDelete(const std::vector<TouchPointState*>& gesture_touches) const;
|
| +
|
| + void SendAckedEvents();
|
| + void DeleteConsumedEvents();
|
| + void RemoveEmptyFirstSequence();
|
| +
|
| + ScopedVector<TouchPointState> touch_point_states_;
|
| + ScopedVector<TouchPointState> acked_touch_point_states_;
|
| + ScopedVector<TouchPointState> consumed_touch_point_states_;
|
| + GestureEventQueueDelegate* gesture_event_queue_delegate_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(GestureEventQueue);
|
| +};
|
| +
|
| +} // namespace ui
|
| +
|
| +#endif // UI_EVENTS_GESTURES_GESTURE_EVENT_QUEUE_H_
|
|
|