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 10 namespace ui { 11 namespace { 12 13 GestureEventDataPacket::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 35 GestureEventDataPacket::GestureEventDataPacket() 36 : gesture_source_(UNDEFINED) { 37 } 38 39 GestureEventDataPacket::GestureEventDataPacket( 40 base::TimeTicks timestamp, 41 GestureSource source, 42 const gfx::PointF& touch_location, 43 const gfx::PointF& raw_touch_location) 44 : timestamp_(timestamp), 45 touch_location_(touch_location), 46 raw_touch_location_(raw_touch_location), 47 gesture_source_(source) { 48 DCHECK_NE(gesture_source_, UNDEFINED); 49 } 50 51 GestureEventDataPacket::GestureEventDataPacket( 52 const GestureEventDataPacket& other) 53 : timestamp_(other.timestamp_), 54 gestures_(other.gestures_), 55 touch_location_(other.touch_location_), 56 raw_touch_location_(other.raw_touch_location_), 57 gesture_source_(other.gesture_source_) { 58 } 59 60 GestureEventDataPacket::~GestureEventDataPacket() { 61 } 62 63 GestureEventDataPacket& GestureEventDataPacket::operator=( 64 const GestureEventDataPacket& other) { 65 timestamp_ = other.timestamp_; 66 gesture_source_ = other.gesture_source_; 67 touch_location_ = other.touch_location_; 68 raw_touch_location_ = other.raw_touch_location_; 69 gestures_ = other.gestures_; 70 return *this; 71 } 72 73 void GestureEventDataPacket::Push(const GestureEventData& gesture) { 74 DCHECK_NE(ET_UNKNOWN, gesture.type()); 75 gestures_->push_back(gesture); 76 } 77 78 GestureEventDataPacket GestureEventDataPacket::FromTouch( 79 const ui::MotionEvent& touch) { 80 return GestureEventDataPacket(touch.GetEventTime(), 81 ToGestureSource(touch), 82 gfx::PointF(touch.GetX(), touch.GetY()), 83 gfx::PointF(touch.GetRawX(), touch.GetRawY())); 84 } 85 86 GestureEventDataPacket GestureEventDataPacket::FromTouchTimeout( 87 const GestureEventData& gesture) { 88 GestureEventDataPacket packet(gesture.time, 89 TOUCH_TIMEOUT, 90 gfx::PointF(gesture.x, gesture.y), 91 gfx::PointF(gesture.raw_x, gesture.raw_y)); 92 packet.Push(gesture); 93 return packet; 94 } 95 96 } // namespace ui 97