gesture_event_data_packet.cc 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#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_END;
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(GestureSource source)
39    : gesture_count_(0), gesture_source_(source) {
40  DCHECK_NE(gesture_source_, UNDEFINED);
41}
42
43GestureEventDataPacket::GestureEventDataPacket(
44    const GestureEventDataPacket& other)
45    : gesture_count_(other.gesture_count_),
46      gesture_source_(other.gesture_source_) {
47  std::copy(other.gestures_, other.gestures_ + other.gesture_count_, gestures_);
48}
49
50GestureEventDataPacket::~GestureEventDataPacket() {}
51
52GestureEventDataPacket& GestureEventDataPacket::operator=(
53    const GestureEventDataPacket& other) {
54  gesture_count_ = other.gesture_count_;
55  gesture_source_ = other.gesture_source_;
56  std::copy(other.gestures_, other.gestures_ + other.gesture_count_, gestures_);
57  return *this;
58}
59
60void GestureEventDataPacket::Push(const GestureEventData& gesture) {
61  DCHECK_NE(ET_UNKNOWN, gesture.type);
62  CHECK_LT(gesture_count_, static_cast<size_t>(kMaxGesturesPerTouch));
63  gestures_[gesture_count_++] = gesture;
64}
65
66GestureEventDataPacket GestureEventDataPacket::FromTouch(
67    const ui::MotionEvent& touch) {
68  return GestureEventDataPacket(ToGestureSource(touch));
69}
70
71GestureEventDataPacket GestureEventDataPacket::FromTouchTimeout(
72    const GestureEventData& gesture) {
73  GestureEventDataPacket packet(TOUCH_TIMEOUT);
74  packet.Push(gesture);
75  return packet;
76}
77
78}  // namespace ui
79