gesture_event_data_packet.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
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#include "ui/events/gesture_detection/gesture_event_data_packet.h"
6
7#include "base/logging.h"
8#include "ui/events/gesture_detection/motion_event.h"
9
10namespace ui {
11namespace {
12
13GestureEventDataPacket::GestureSource ToGestureSource(
14    const ui::MotionEvent& event) {
15  switch (event.GetAction()) {
16    case ui::MotionEvent::ACTION_DOWN:
17      return GestureEventDataPacket::TOUCH_SEQUENCE_START;
18    case ui::MotionEvent::ACTION_UP:
19      return GestureEventDataPacket::TOUCH_SEQUENCE_END;
20    case ui::MotionEvent::ACTION_MOVE:
21      return GestureEventDataPacket::TOUCH_MOVE;
22    case ui::MotionEvent::ACTION_CANCEL:
23      return GestureEventDataPacket::TOUCH_SEQUENCE_CANCEL;
24    case ui::MotionEvent::ACTION_POINTER_DOWN:
25      return GestureEventDataPacket::TOUCH_START;
26    case ui::MotionEvent::ACTION_POINTER_UP:
27      return GestureEventDataPacket::TOUCH_END;
28  };
29  NOTREACHED() << "Invalid ui::MotionEvent action: " << event.GetAction();
30  return GestureEventDataPacket::INVALID;
31}
32
33}  // namespace
34
35GestureEventDataPacket::GestureEventDataPacket()
36    : gesture_count_(0), gesture_source_(UNDEFINED) {}
37
38GestureEventDataPacket::GestureEventDataPacket(base::TimeTicks timestamp,
39                                               GestureSource source,
40                                               gfx::PointF touch_location)
41    : timestamp_(timestamp),
42      gesture_count_(0),
43      touch_location_(touch_location),
44      gesture_source_(source) {
45  DCHECK_NE(gesture_source_, UNDEFINED);
46}
47
48GestureEventDataPacket::GestureEventDataPacket(
49    const GestureEventDataPacket& other)
50    : timestamp_(other.timestamp_),
51      gesture_count_(other.gesture_count_),
52      touch_location_(other.touch_location_),
53      gesture_source_(other.gesture_source_) {
54  std::copy(other.gestures_, other.gestures_ + other.gesture_count_, gestures_);
55}
56
57GestureEventDataPacket::~GestureEventDataPacket() {}
58
59GestureEventDataPacket& GestureEventDataPacket::operator=(
60    const GestureEventDataPacket& other) {
61  timestamp_ = other.timestamp_;
62  gesture_count_ = other.gesture_count_;
63  gesture_source_ = other.gesture_source_;
64  touch_location_ = other.touch_location_;
65  std::copy(other.gestures_, other.gestures_ + other.gesture_count_, gestures_);
66  return *this;
67}
68
69void GestureEventDataPacket::Push(const GestureEventData& gesture) {
70  DCHECK_NE(ET_UNKNOWN, gesture.type);
71  CHECK_LT(gesture_count_, static_cast<size_t>(kMaxGesturesPerTouch));
72  gestures_[gesture_count_++] = gesture;
73}
74
75GestureEventDataPacket GestureEventDataPacket::FromTouch(
76    const ui::MotionEvent& touch) {
77  return GestureEventDataPacket(touch.GetEventTime(),
78                                ToGestureSource(touch),
79                                gfx::PointF(touch.GetX(), touch.GetY()));
80}
81
82GestureEventDataPacket GestureEventDataPacket::FromTouchTimeout(
83    const GestureEventData& gesture) {
84  GestureEventDataPacket packet(
85      gesture.time, TOUCH_TIMEOUT, gfx::PointF(gesture.x, gesture.y));
86  packet.Push(gesture);
87  return packet;
88}
89
90}  // namespace ui
91