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