gesture_event_data_packet.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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 "ui/events/gesture_detection/gesture_detection_export.h"
9#include "ui/events/gesture_detection/gesture_event_data.h"
10
11namespace ui {
12
13class MotionEvent;
14
15// Acts as a transport container for gestures created (directly or indirectly)
16// by a touch event.
17class GESTURE_DETECTION_EXPORT GestureEventDataPacket {
18 public:
19  enum GestureSource {
20    UNDEFINED = -1,        // Used only for a default-constructed packet.
21    INVALID,               // The source of the gesture was invalid.
22    TOUCH_SEQUENCE_START,  // The start of a new gesture sequence.
23    TOUCH_SEQUENCE_END,    // The end of gesture sequence.
24    TOUCH_START,           // A touch down occured during a gesture sequence.
25    TOUCH_MOVE,            // A touch move occured during a gesture sequence.
26    TOUCH_END,             // A touch up occured during a gesture sequence.
27    TOUCH_TIMEOUT,         // Timeout from an existing gesture sequence.
28  };
29
30  GestureEventDataPacket();
31  GestureEventDataPacket(const GestureEventDataPacket& other);
32  ~GestureEventDataPacket();
33  GestureEventDataPacket& operator=(const GestureEventDataPacket& other);
34
35  // Factory methods for creating a packet from a particular event.
36  static GestureEventDataPacket FromTouch(const ui::MotionEvent& touch);
37  static GestureEventDataPacket FromTouchTimeout(
38      const GestureEventData& gesture);
39
40  void Push(const GestureEventData& gesture);
41
42  const GestureEventData& gesture(size_t i) const { return gestures_[i]; }
43  size_t gesture_count() const { return gesture_count_; }
44  GestureSource gesture_source() const { return gesture_source_; }
45
46 private:
47  explicit GestureEventDataPacket(GestureSource source);
48
49  enum { kMaxGesturesPerTouch = 5 };
50  GestureEventData gestures_[kMaxGesturesPerTouch];
51  size_t gesture_count_;
52  GestureSource gesture_source_;
53};
54
55}  // namespace ui
56
57#endif  // UI_EVENTS_GESTURE_DETECTION_GESTURE_EVENT_DATA_PACKET_H_
58