Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 | |
| OLD | NEW |