OLD | NEW |
| (Empty) |
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 "content/browser/renderer_host/input/gesture_event_packet.h" | |
6 | |
7 #include "base/logging.h" | |
8 | |
9 using blink::WebGestureEvent; | |
10 using blink::WebInputEvent; | |
11 using blink::WebTouchEvent; | |
12 using blink::WebTouchPoint; | |
13 | |
14 namespace content { | |
15 namespace { | |
16 | |
17 GestureEventPacket::GestureSource ToGestureSource(const WebTouchEvent& event) { | |
18 if (!event.touchesLength) | |
19 return GestureEventPacket::INVALID; | |
20 switch (event.type) { | |
21 case WebInputEvent::TouchStart: | |
22 for (size_t i = 0; i < event.touchesLength; i++) { | |
23 if (event.touches[i].state != WebTouchPoint::StatePressed) | |
24 return GestureEventPacket::TOUCH_START; | |
25 } | |
26 return GestureEventPacket::TOUCH_SEQUENCE_START; | |
27 case WebInputEvent::TouchMove: | |
28 return GestureEventPacket::TOUCH_MOVE; | |
29 case WebInputEvent::TouchEnd: | |
30 case WebInputEvent::TouchCancel: | |
31 for (size_t i = 0; i < event.touchesLength; i++) { | |
32 if (event.touches[i].state != WebTouchPoint::StateReleased && | |
33 event.touches[i].state != WebTouchPoint::StateCancelled) { | |
34 return GestureEventPacket::TOUCH_END; | |
35 } | |
36 } | |
37 return GestureEventPacket::TOUCH_SEQUENCE_END; | |
38 default: | |
39 return GestureEventPacket::INVALID; | |
40 } | |
41 } | |
42 | |
43 } // namespace | |
44 | |
45 GestureEventPacket::GestureEventPacket() | |
46 : gesture_count_(0), | |
47 gesture_source_(UNDEFINED) {} | |
48 | |
49 GestureEventPacket::GestureEventPacket(GestureSource source) | |
50 : gesture_count_(0), | |
51 gesture_source_(source) { | |
52 DCHECK_NE(gesture_source_, UNDEFINED); | |
53 } | |
54 | |
55 GestureEventPacket::GestureEventPacket(const GestureEventPacket& other) | |
56 : gesture_count_(other.gesture_count_), | |
57 gesture_source_(other.gesture_source_) { | |
58 std::copy(other.gestures_, other.gestures_ + other.gesture_count_, gestures_); | |
59 } | |
60 | |
61 GestureEventPacket::~GestureEventPacket() {} | |
62 | |
63 GestureEventPacket& GestureEventPacket::operator=( | |
64 const GestureEventPacket& other) { | |
65 gesture_count_ = other.gesture_count_; | |
66 gesture_source_ = other.gesture_source_; | |
67 std::copy(other.gestures_, other.gestures_ + other.gesture_count_, gestures_); | |
68 return *this; | |
69 } | |
70 | |
71 void GestureEventPacket::Push(const blink::WebGestureEvent& gesture) { | |
72 DCHECK(WebInputEvent::isGestureEventType(gesture.type)); | |
73 CHECK_LT(gesture_count_, static_cast<size_t>(kMaxGesturesPerTouch)); | |
74 gestures_[gesture_count_++] = gesture; | |
75 } | |
76 | |
77 GestureEventPacket GestureEventPacket::FromTouch(const WebTouchEvent& event) { | |
78 return GestureEventPacket(ToGestureSource(event)); | |
79 } | |
80 | |
81 GestureEventPacket GestureEventPacket::FromTouchTimeout( | |
82 const WebGestureEvent& event) { | |
83 GestureEventPacket packet(TOUCH_TIMEOUT); | |
84 packet.Push(event); | |
85 return packet; | |
86 } | |
87 | |
88 } // namespace content | |
OLD | NEW |