gesture_event_data_packet.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
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