1 // Copyright 2016 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 "third_party/blink/public/platform/web_coalesced_input_event.h"
6
7 #include "third_party/blink/public/common/input/web_gesture_event.h"
8 #include "third_party/blink/public/common/input/web_keyboard_event.h"
9 #include "third_party/blink/public/common/input/web_mouse_wheel_event.h"
10 #include "third_party/blink/public/common/input/web_pointer_event.h"
11 #include "third_party/blink/public/common/input/web_touch_event.h"
12
13 namespace blink {
14
EventPointer()15 WebInputEvent* WebCoalescedInputEvent::EventPointer() {
16 return event_.get();
17 }
18
AddCoalescedEvent(const blink::WebInputEvent & event)19 void WebCoalescedInputEvent::AddCoalescedEvent(
20 const blink::WebInputEvent& event) {
21 coalesced_events_.emplace_back(MakeWebScopedInputEvent(event));
22 }
23
Event() const24 const WebInputEvent& WebCoalescedInputEvent::Event() const {
25 return *event_.get();
26 }
27
CoalescedEventSize() const28 size_t WebCoalescedInputEvent::CoalescedEventSize() const {
29 return coalesced_events_.size();
30 }
31
CoalescedEvent(size_t index) const32 const WebInputEvent& WebCoalescedInputEvent::CoalescedEvent(
33 size_t index) const {
34 return *coalesced_events_[index].get();
35 }
36
37 WebVector<const WebInputEvent*>
GetCoalescedEventsPointers() const38 WebCoalescedInputEvent::GetCoalescedEventsPointers() const {
39 WebVector<const WebInputEvent*> events;
40 for (const auto& event : coalesced_events_)
41 events.emplace_back(event.get());
42 return events;
43 }
44
AddPredictedEvent(const blink::WebInputEvent & event)45 void WebCoalescedInputEvent::AddPredictedEvent(
46 const blink::WebInputEvent& event) {
47 predicted_events_.emplace_back(MakeWebScopedInputEvent(event));
48 }
49
PredictedEventSize() const50 size_t WebCoalescedInputEvent::PredictedEventSize() const {
51 return predicted_events_.size();
52 }
53
PredictedEvent(size_t index) const54 const WebInputEvent& WebCoalescedInputEvent::PredictedEvent(
55 size_t index) const {
56 return *predicted_events_[index].get();
57 }
58
59 WebVector<const WebInputEvent*>
GetPredictedEventsPointers() const60 WebCoalescedInputEvent::GetPredictedEventsPointers() const {
61 WebVector<const WebInputEvent*> events;
62 for (const auto& event : predicted_events_)
63 events.emplace_back(event.get());
64 return events;
65 }
66
WebCoalescedInputEvent(const WebInputEvent & event)67 WebCoalescedInputEvent::WebCoalescedInputEvent(const WebInputEvent& event) {
68 event_ = MakeWebScopedInputEvent(event);
69 coalesced_events_.emplace_back(MakeWebScopedInputEvent(event));
70 }
71
WebCoalescedInputEvent(const WebInputEvent & event,const WebVector<const WebInputEvent * > & coalesced_events,const WebVector<const WebInputEvent * > & predicted_events)72 WebCoalescedInputEvent::WebCoalescedInputEvent(
73 const WebInputEvent& event,
74 const WebVector<const WebInputEvent*>& coalesced_events,
75 const WebVector<const WebInputEvent*>& predicted_events) {
76 event_ = MakeWebScopedInputEvent(event);
77 for (auto* const coalesced_event : coalesced_events)
78 coalesced_events_.emplace_back(MakeWebScopedInputEvent(*coalesced_event));
79 for (auto* const predicted_event : predicted_events)
80 predicted_events_.emplace_back(MakeWebScopedInputEvent(*predicted_event));
81 }
82
WebCoalescedInputEvent(const WebPointerEvent & event,const WebVector<WebPointerEvent> & coalesced_events,const WebVector<WebPointerEvent> & predicted_events)83 WebCoalescedInputEvent::WebCoalescedInputEvent(
84 const WebPointerEvent& event,
85 const WebVector<WebPointerEvent>& coalesced_events,
86 const WebVector<WebPointerEvent>& predicted_events) {
87 event_ = MakeWebScopedInputEvent(event);
88 for (const auto& coalesced_event : coalesced_events)
89 coalesced_events_.emplace_back(MakeWebScopedInputEvent(coalesced_event));
90 for (const auto& predicted_event : predicted_events)
91 predicted_events_.emplace_back(MakeWebScopedInputEvent(predicted_event));
92 }
93
WebCoalescedInputEvent(const WebCoalescedInputEvent & event)94 WebCoalescedInputEvent::WebCoalescedInputEvent(
95 const WebCoalescedInputEvent& event)
96 : WebCoalescedInputEvent(event.Event(),
97 event.GetCoalescedEventsPointers(),
98 event.GetPredictedEventsPointers()) {}
99
100 WebCoalescedInputEvent::WebScopedInputEvent
MakeWebScopedInputEvent(const blink::WebInputEvent & event)101 WebCoalescedInputEvent::MakeWebScopedInputEvent(
102 const blink::WebInputEvent& event) {
103 if (blink::WebInputEvent::IsGestureEventType(event.GetType())) {
104 return WebScopedInputEvent(new blink::WebGestureEvent(
105 static_cast<const blink::WebGestureEvent&>(event)));
106 }
107 if (blink::WebInputEvent::IsMouseEventType(event.GetType())) {
108 return WebScopedInputEvent(new blink::WebMouseEvent(
109 static_cast<const blink::WebMouseEvent&>(event)));
110 }
111 if (blink::WebInputEvent::IsTouchEventType(event.GetType())) {
112 return WebScopedInputEvent(new blink::WebTouchEvent(
113 static_cast<const blink::WebTouchEvent&>(event)));
114 }
115 if (event.GetType() == blink::WebInputEvent::kMouseWheel) {
116 return WebScopedInputEvent(new blink::WebMouseWheelEvent(
117 static_cast<const blink::WebMouseWheelEvent&>(event)));
118 }
119 if (blink::WebInputEvent::IsKeyboardEventType(event.GetType())) {
120 return WebScopedInputEvent(new blink::WebKeyboardEvent(
121 static_cast<const blink::WebKeyboardEvent&>(event)));
122 }
123 if (blink::WebInputEvent::IsPointerEventType(event.GetType())) {
124 return WebScopedInputEvent(new blink::WebPointerEvent(
125 static_cast<const blink::WebPointerEvent&>(event)));
126 }
127 NOTREACHED();
128 return WebScopedInputEvent();
129 }
130
131 } // namespace blink
132