gesture_event_data_packet.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// Copyright 2014 The Chromium Authors. All rights reserved.
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// Use of this source code is governed by a BSD-style license that can be
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// found in the LICENSE file.
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant#include "ui/events/gesture_detection/gesture_event_data_packet.h"
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "base/logging.h"
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "ui/events/gesture_detection/motion_event.h"
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantnamespace ui {
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantnamespace {
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantGestureEventDataPacket::GestureSource ToGestureSource(
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    const ui::MotionEvent& event) {
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  switch (event.GetAction()) {
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    case ui::MotionEvent::ACTION_DOWN:
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant      return GestureEventDataPacket::TOUCH_SEQUENCE_START;
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    case ui::MotionEvent::ACTION_UP:
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant      return GestureEventDataPacket::TOUCH_SEQUENCE_END;
20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    case ui::MotionEvent::ACTION_MOVE:
21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant      return GestureEventDataPacket::TOUCH_MOVE;
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    case ui::MotionEvent::ACTION_CANCEL:
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant      return GestureEventDataPacket::TOUCH_SEQUENCE_CANCEL;
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    case ui::MotionEvent::ACTION_POINTER_DOWN:
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant      return GestureEventDataPacket::TOUCH_START;
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    case ui::MotionEvent::ACTION_POINTER_UP:
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant      return GestureEventDataPacket::TOUCH_END;
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  };
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  NOTREACHED() << "Invalid ui::MotionEvent action: " << event.GetAction();
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  return GestureEventDataPacket::INVALID;
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}  // namespace
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantGestureEventDataPacket::GestureEventDataPacket()
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    : gesture_count_(0), gesture_source_(UNDEFINED) {}
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantGestureEventDataPacket::GestureEventDataPacket(GestureSource source)
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    : gesture_count_(0), gesture_source_(source) {
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  DCHECK_NE(gesture_source_, UNDEFINED);
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantGestureEventDataPacket::GestureEventDataPacket(
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    const GestureEventDataPacket& other)
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    : gesture_count_(other.gesture_count_),
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant      gesture_source_(other.gesture_source_) {
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  std::copy(other.gestures_, other.gestures_ + other.gesture_count_, gestures_);
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantGestureEventDataPacket::~GestureEventDataPacket() {}
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantGestureEventDataPacket& GestureEventDataPacket::operator=(
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    const GestureEventDataPacket& other) {
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  gesture_count_ = other.gesture_count_;
55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  gesture_source_ = other.gesture_source_;
56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  std::copy(other.gestures_, other.gestures_ + other.gesture_count_, gestures_);
57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  return *this;
58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid GestureEventDataPacket::Push(const GestureEventData& gesture) {
61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant  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