Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Side by Side Diff: blimp/common/input/input_event_conversions.cc

Issue 1426993008: Serialize a subset of WebInputEvents to protobufs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 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 "blimp/common/input/input_event_conversions.h"
6
7 #include "base/logging.h"
8 #include "blimp/common/proto/input.pb.h"
9 #include "third_party/WebKit/public/platform/WebGestureDevice.h"
10 #include "third_party/WebKit/public/web/WebInputEvent.h"
11
12 namespace blimp {
13
14 namespace {
15
16 blink::WebInputEvent::Type ProtoToWebInputEventType(
17 const InputMessage::Type& type) {
Kevin M 2015/11/12 00:53:49 No need to take a const ref to a value type
David Trainor- moved to gerrit 2015/11/12 16:34:28 ah good point thanks! habit.
18 switch (type) {
19 case InputMessage::Type_GestureScrollBegin:
20 return blink::WebInputEvent::Type::GestureScrollBegin;
21 case InputMessage::Type_GestureScrollEnd:
22 return blink::WebInputEvent::Type::GestureScrollEnd;
23 case InputMessage::Type_GestureScrollUpdate:
24 return blink::WebInputEvent::Type::GestureScrollUpdate;
25 case InputMessage::Type_GestureFlingStart:
26 return blink::WebInputEvent::Type::GestureFlingStart;
27 case InputMessage::Type_GestureFlingCancel:
28 return blink::WebInputEvent::Type::GestureFlingCancel;
29 case InputMessage::Type_GestureShowPress:
30 return blink::WebInputEvent::Type::GestureShowPress;
31 case InputMessage::Type_GestureTap:
32 return blink::WebInputEvent::Type::GestureTap;
33 case InputMessage::Type_GestureTapUnconfirmed:
34 return blink::WebInputEvent::Type::GestureTapUnconfirmed;
35 case InputMessage::Type_GestureTapDown:
36 return blink::WebInputEvent::Type::GestureTapDown;
37 case InputMessage::Type_GestureTapCancel:
38 return blink::WebInputEvent::Type::GestureTapCancel;
39 case InputMessage::Type_GestureDoubleTap:
40 return blink::WebInputEvent::Type::GestureDoubleTap;
41 case InputMessage::Type_GestureTwoFingerTap:
42 return blink::WebInputEvent::Type::GestureTwoFingerTap;
43 case InputMessage::Type_GestureLongPress:
44 return blink::WebInputEvent::Type::GestureLongPress;
45 case InputMessage::Type_GestureLongTap:
46 return blink::WebInputEvent::Type::GestureLongTap;
47 case InputMessage::Type_GesturePinchBegin:
48 return blink::WebInputEvent::Type::GesturePinchBegin;
49 case InputMessage::Type_GesturePinchEnd:
50 return blink::WebInputEvent::Type::GesturePinchEnd;
51 case InputMessage::Type_GesturePinchUpdate:
52 return blink::WebInputEvent::Type::GesturePinchUpdate;
53 case InputMessage::Type_Undefined:
Kevin M 2015/11/12 00:53:50 Redundant with "default"
David Trainor- moved to gerrit 2015/11/12 16:34:27 Done.
54 return blink::WebInputEvent::Type::Undefined;
55 default:
56 return blink::WebInputEvent::Type::Undefined;
57 }
58 }
59
60 InputMessage::Type WebInputEventTypeToProto(
61 const blink::WebInputEvent::Type& type) {
Kevin M 2015/11/12 00:53:50 ditto on const ref input
David Trainor- moved to gerrit 2015/11/12 16:34:27 Done.
62 switch (type) {
63 case blink::WebInputEvent::Type::GestureScrollBegin:
64 return InputMessage::Type_GestureScrollBegin;
65 case blink::WebInputEvent::Type::GestureScrollEnd:
66 return InputMessage::Type_GestureScrollEnd;
67 case blink::WebInputEvent::Type::GestureScrollUpdate:
68 return InputMessage::Type_GestureScrollUpdate;
69 case blink::WebInputEvent::Type::GestureFlingStart:
70 return InputMessage::Type_GestureFlingStart;
71 case blink::WebInputEvent::Type::GestureFlingCancel:
72 return InputMessage::Type_GestureFlingCancel;
73 case blink::WebInputEvent::Type::GestureShowPress:
74 return InputMessage::Type_GestureShowPress;
75 case blink::WebInputEvent::Type::GestureTap:
76 return InputMessage::Type_GestureTap;
77 case blink::WebInputEvent::Type::GestureTapUnconfirmed:
78 return InputMessage::Type_GestureTapUnconfirmed;
79 case blink::WebInputEvent::Type::GestureTapDown:
80 return InputMessage::Type_GestureTapDown;
81 case blink::WebInputEvent::Type::GestureTapCancel:
82 return InputMessage::Type_GestureTapCancel;
83 case blink::WebInputEvent::Type::GestureDoubleTap:
84 return InputMessage::Type_GestureDoubleTap;
85 case blink::WebInputEvent::Type::GestureTwoFingerTap:
86 return InputMessage::Type_GestureTwoFingerTap;
87 case blink::WebInputEvent::Type::GestureLongPress:
88 return InputMessage::Type_GestureLongPress;
89 case blink::WebInputEvent::Type::GestureLongTap:
90 return InputMessage::Type_GestureLongTap;
91 case blink::WebInputEvent::Type::GesturePinchBegin:
92 return InputMessage::Type_GesturePinchBegin;
93 case blink::WebInputEvent::Type::GesturePinchEnd:
94 return InputMessage::Type_GesturePinchEnd;
95 case blink::WebInputEvent::Type::GesturePinchUpdate:
96 return InputMessage::Type_GesturePinchUpdate;
97 case blink::WebInputEvent::Type::Undefined:
Kevin M 2015/11/12 00:53:49 unnecessary
David Trainor- moved to gerrit 2015/11/12 16:34:28 Done.
98 return InputMessage::Type_Undefined;
99 default:
100 return InputMessage::Type_Undefined;
101 }
102 }
103
104 blink::WebGestureDevice ProtoToWebGestureDevice(
105 const blimp::WebGestureDevice& type) {
106 switch (type) {
107 case WebGestureDevice::WebGestureDevice_Uninitialized:
108 return blink::WebGestureDevice::WebGestureDeviceUninitialized;
109 case WebGestureDevice::WebGestureDevice_Touchpad:
110 return blink::WebGestureDevice::WebGestureDeviceTouchpad;
111 case WebGestureDevice::WebGestureDevice_Touchscreen:
112 return blink::WebGestureDevice::WebGestureDeviceTouchscreen;
113 }
114 return blink::WebGestureDevice::WebGestureDeviceUninitialized;
115 }
116
117 blimp::WebGestureDevice WebGestureDeviceToProto(
118 const blink::WebGestureDevice& type) {
119 switch (type) {
120 case blink::WebGestureDevice::WebGestureDeviceUninitialized:
121 return WebGestureDevice::WebGestureDevice_Uninitialized;
122 case blink::WebGestureDevice::WebGestureDeviceTouchpad:
123 return WebGestureDevice::WebGestureDevice_Touchpad;
124 case blink::WebGestureDevice::WebGestureDeviceTouchscreen:
125 return WebGestureDevice::WebGestureDevice_Touchscreen;
126 }
127 return WebGestureDevice::WebGestureDevice_Uninitialized;
128 }
129
130 void WebGestureEventToProto(const blink::WebGestureEvent& event,
131 GestureArgs* proto) {
132 proto->set_x(event.x);
133 proto->set_y(event.y);
134 proto->set_global_x(event.globalX);
135 proto->set_global_y(event.globalY);
136 proto->set_source_device(WebGestureDeviceToProto(event.sourceDevice));
137
138 if (event.type == blink::WebInputEvent::GestureTap ||
139 event.type == blink::WebInputEvent::GestureTapUnconfirmed ||
140 event.type == blink::WebInputEvent::GestureDoubleTap) {
141 GestureArgs::Tap* args = proto->mutable_tap();
Kevin M 2015/11/12 00:53:50 Indented 2 spcs too many
David Trainor- moved to gerrit 2015/11/12 16:34:27 Done.
142 args->set_tap_count(event.data.tap.tapCount);
143 args->set_width(event.data.tap.width);
144 args->set_height(event.data.tap.height);
145 } else if (event.type == blink::WebInputEvent::GestureTapDown) {
146 GestureArgs::TapDown* args = proto->mutable_tap_down();
147 args->set_width(event.data.tapDown.width);
148 args->set_height(event.data.tapDown.height);
149 } else if (event.type == blink::WebInputEvent::GestureShowPress) {
150 GestureArgs::ShowPress* args = proto->mutable_show_press();
151 args->set_width(event.data.showPress.width);
152 args->set_height(event.data.showPress.height);
153 } else if (event.type == blink::WebInputEvent::GestureLongPress) {
154 GestureArgs::LongPress* args = proto->mutable_long_press();
155 args->set_width(event.data.longPress.width);
156 args->set_height(event.data.longPress.height);
157 } else if (event.type == blink::WebInputEvent::GestureTwoFingerTap) {
158 GestureArgs::TwoFingerTap* args = proto->mutable_two_finger_tap();
159 args->set_first_finger_width(event.data.twoFingerTap.firstFingerWidth);
160 args->set_first_finger_height(
161 event.data.twoFingerTap.firstFingerHeight);
162 } else if (event.type == blink::WebInputEvent::GestureScrollBegin) {
163 GestureArgs::ScrollBegin* args = proto->mutable_scroll_begin();
164 args->set_delta_x_hint(event.data.scrollBegin.deltaXHint);
165 args->set_delta_y_hint(event.data.scrollBegin.deltaYHint);
166 args->set_target_viewport(event.data.scrollBegin.targetViewport);
167 } else if (event.type == blink::WebInputEvent::GestureScrollUpdate) {
168 GestureArgs::ScrollUpdate* args = proto->mutable_scroll_update();
169 args->set_delta_x(event.data.scrollUpdate.deltaX);
170 args->set_delta_y(event.data.scrollUpdate.deltaY);
171 args->set_velocity_x(event.data.scrollUpdate.velocityX);
172 args->set_velocity_y(event.data.scrollUpdate.velocityY);
173 args->set_previous_update_in_sequence_prevented(
174 event.data.scrollUpdate.previousUpdateInSequencePrevented);
175 args->set_prevent_propagation(
176 event.data.scrollUpdate.preventPropagation);
177 args->set_inertial(event.data.scrollUpdate.inertial);
178 } else if (event.type == blink::WebInputEvent::GestureFlingStart) {
179 GestureArgs::FlingStart* args = proto->mutable_fling_start();
180 args->set_velocity_x(event.data.flingStart.velocityX);
181 args->set_velocity_y(event.data.flingStart.velocityY);
182 args->set_target_viewport(event.data.flingStart.targetViewport);
183 } else if (event.type == blink::WebInputEvent::GestureFlingCancel) {
184 GestureArgs::FlingCancel* args = proto->mutable_fling_cancel();
185 args->set_prevent_boosting(event.data.flingCancel.preventBoosting);
186 } else if (event.type == blink::WebInputEvent::GesturePinchUpdate) {
187 GestureArgs::PinchUpdate* args = proto->mutable_pinch_update();
188 args->set_zoom_disabled(event.data.pinchUpdate.zoomDisabled);
189 args->set_scale(event.data.pinchUpdate.scale);
190 }
191 }
192
193 scoped_ptr<blink::WebInputEvent> ProtoToWebGestureEvent(
194 const GestureArgs& proto) {
195 scoped_ptr<blink::WebGestureEvent> event(new blink::WebGestureEvent);
196 event->x = proto.x();
197 event->y = proto.y();
198 event->globalX = proto.global_x();
199 event->globalY = proto.global_y();
200 event->sourceDevice = ProtoToWebGestureDevice(proto.source_device());
201
202 if (proto.has_tap()) {
203 event->data.tap.tapCount = proto.tap().tap_count();
204 event->data.tap.width = proto.tap().width();
205 event->data.tap.height = proto.tap().height();
206 } else if (proto.has_tap_down()) {
207 event->data.tapDown.width = proto.tap_down().width();
208 event->data.tapDown.height = proto.tap_down().height();
209 } else if (proto.has_show_press()) {
210 event->data.showPress.width = proto.show_press().width();
211 event->data.showPress.height = proto.show_press().height();
212 } else if (proto.has_long_press()) {
213 event->data.longPress.width = proto.long_press().width();
214 event->data.longPress.height = proto.long_press().height();
215 } else if (proto.has_two_finger_tap()) {
216 event->data.twoFingerTap.firstFingerWidth =
217 proto.two_finger_tap().first_finger_width();
218 event->data.twoFingerTap.firstFingerHeight =
219 proto.two_finger_tap().first_finger_height();
220 } else if (proto.has_scroll_begin()) {
221 event->data.scrollBegin.deltaXHint = proto.scroll_begin().delta_x_hint();
222 event->data.scrollBegin.deltaYHint = proto.scroll_begin().delta_y_hint();
223 event->data.scrollBegin.targetViewport =
224 proto.scroll_begin().target_viewport();
225 } else if (proto.has_scroll_update()) {
226 event->data.scrollUpdate.deltaX = proto.scroll_update().delta_x();
227 event->data.scrollUpdate.deltaY = proto.scroll_update().delta_y();
228 event->data.scrollUpdate.velocityX = proto.scroll_update().velocity_x();
229 event->data.scrollUpdate.velocityY = proto.scroll_update().velocity_y();
230 event->data.scrollUpdate.previousUpdateInSequencePrevented =
231 proto.scroll_update().previous_update_in_sequence_prevented();
232 event->data.scrollUpdate.preventPropagation =
233 proto.scroll_update().prevent_propagation();
234 event->data.scrollUpdate.inertial = proto.scroll_update().inertial();
235 } else if (proto.has_fling_start()) {
236 event->data.flingStart.velocityX = proto.fling_start().velocity_x();
237 event->data.flingStart.velocityY = proto.fling_start().velocity_y();
238 event->data.flingStart.targetViewport =
239 proto.fling_start().target_viewport();
240 } else if (proto.has_fling_cancel()) {
241 event->data.flingCancel.preventBoosting =
242 proto.fling_cancel().prevent_boosting();
243 } else if (proto.has_pinch_update()) {
244 event->data.pinchUpdate.zoomDisabled = proto.pinch_update().zoom_disabled();
245 event->data.pinchUpdate.scale = proto.pinch_update().scale();
246 }
247
248 return event.Pass();
249 }
250
251 } // namespace
252
253 void WebInputEventToProto(const blink::WebInputEvent& event,
254 InputMessage* proto) {
255 // Serialize the common WebInputEvent fields.
256 proto->set_type(WebInputEventTypeToProto(event.type));
257 proto->set_timestamp_seconds(event.timeStampSeconds);
258
259 // Serialize the specific WebInputEvent fields.
260 if (event.type >= blink::WebInputEvent::Type::GestureTypeFirst &&
261 event.type <= blink::WebInputEvent::Type::GestureTypeLast) {
262 WebGestureEventToProto(*static_cast<const blink::WebGestureEvent*>(&event),
263 proto->mutable_gesture());
264 } else {
265 NOTIMPLEMENTED();
266 }
267 }
268
269 scoped_ptr<blink::WebInputEvent> ProtoToWebInputEvent(
270 const InputMessage& proto) {
271 blink::WebInputEvent::Type type = ProtoToWebInputEventType(proto.type());
272
273 scoped_ptr<blink::WebInputEvent> event;
274
275 // Build the specific type of WebInputEvent and deserialize the specific
276 // fields.
277 if (type >= blink::WebInputEvent::Type::GestureTypeFirst &&
278 type <= blink::WebInputEvent::Type::GestureTypeLast) {
279 DCHECK(proto.has_gesture());
280 event = ProtoToWebGestureEvent(proto.gesture()).Pass();
281 } else {
282 NOTIMPLEMENTED();
283 return nullptr;
284 }
285
286 // Deserialize the common WebInputEvent fields.
287 event->type = type;
288 event->timeStampSeconds = proto.timestamp_seconds();
289
290 return event;
291 }
292
293 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698