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