Home | History | Annotate | Download | only in gesture_detection
      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 
     44   const base::TimeTicks& timestamp() const { return timestamp_; }
     45   const GestureEventData& gesture(size_t i) const { return gestures_[i]; }
     46   size_t gesture_count() const { return gestures_->size(); }
     47   GestureSource gesture_source() const { return gesture_source_; }
     48   const gfx::PointF& touch_location() const { return 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