• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef UI_EVENTS_GESTURE_DETECTION_GESTURE_EVENT_DATA_PACKET_H_
6 #define UI_EVENTS_GESTURE_DETECTION_GESTURE_EVENT_DATA_PACKET_H_
7 
8 #include "base/containers/stack_container.h"
9 #include "ui/events/gesture_detection/gesture_detection_export.h"
10 #include "ui/events/gesture_detection/gesture_event_data.h"
11 
12 namespace ui {
13 
14 class MotionEvent;
15 
16 // Acts as a transport container for gestures created (directly or indirectly)
17 // by a touch event.
18 class GESTURE_DETECTION_EXPORT GestureEventDataPacket {
19  public:
20   enum GestureSource {
21     UNDEFINED = -1,        // Used only for a default-constructed packet.
22     INVALID,               // The source of the gesture was invalid.
23     TOUCH_SEQUENCE_START,  // The start of a new gesture sequence.
24     TOUCH_SEQUENCE_END,    // The end of a gesture sequence.
25     TOUCH_SEQUENCE_CANCEL, // The gesture sequence was cancelled.
26     TOUCH_START,           // A touch down occured during a gesture sequence.
27     TOUCH_MOVE,            // A touch move occured during a gesture sequence.
28     TOUCH_END,             // A touch up occured during a gesture sequence.
29     TOUCH_TIMEOUT,         // Timeout from an existing gesture sequence.
30   };
31 
32   GestureEventDataPacket();
33   GestureEventDataPacket(const GestureEventDataPacket& other);
34   ~GestureEventDataPacket();
35   GestureEventDataPacket& operator=(const GestureEventDataPacket& other);
36 
37   // Factory methods for creating a packet from a particular event.
38   static GestureEventDataPacket FromTouch(const ui::MotionEvent& touch);
39   static GestureEventDataPacket FromTouchTimeout(
40       const GestureEventData& gesture);
41 
42   void Push(const GestureEventData& gesture);
43 
timestamp()44   const base::TimeTicks& timestamp() const { return timestamp_; }
gesture(size_t i)45   const GestureEventData& gesture(size_t i) const { return gestures_[i]; }
gesture_count()46   size_t gesture_count() const { return gestures_->size(); }
gesture_source()47   GestureSource gesture_source() const { return gesture_source_; }
touch_location()48   const gfx::PointF& touch_location() const { return touch_location_; }
raw_touch_location()49   const gfx::PointF& raw_touch_location() const { return raw_touch_location_; }
50 
51  private:
52   GestureEventDataPacket(base::TimeTicks timestamp,
53                          GestureSource source,
54                          const gfx::PointF& touch_location,
55                          const gfx::PointF& raw_touch_location);
56 
57   enum { kTypicalMaxGesturesPerTouch = 5 };
58   base::TimeTicks timestamp_;
59   base::StackVector<GestureEventData, kTypicalMaxGesturesPerTouch> gestures_;
60   gfx::PointF touch_location_;
61   gfx::PointF raw_touch_location_;
62   GestureSource gesture_source_;
63 };
64 
65 }  // namespace ui
66 
67 #endif  // UI_EVENTS_GESTURE_DETECTION_GESTURE_EVENT_DATA_PACKET_H_
68