| 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/net/input_message_converter.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/platform/WebGestureEvent.h" | |
| 11 | |
| 12 namespace blimp { | |
| 13 namespace { | |
| 14 | |
| 15 std::unique_ptr<blink::WebGestureEvent> BuildCommonWebGesture( | |
| 16 const InputMessage& proto, | |
| 17 blink::WebInputEvent::Type type) { | |
| 18 std::unique_ptr<blink::WebGestureEvent> event(new blink::WebGestureEvent( | |
| 19 type, blink::WebInputEvent::NoModifiers, proto.timestamp_seconds())); | |
| 20 | |
| 21 const GestureCommon& common = proto.gesture_common(); | |
| 22 event->x = common.x(); | |
| 23 event->y = common.y(); | |
| 24 event->globalX = common.global_x(); | |
| 25 event->globalY = common.global_y(); | |
| 26 event->sourceDevice = blink::WebGestureDevice::WebGestureDeviceTouchscreen; | |
| 27 return event; | |
| 28 } | |
| 29 | |
| 30 std::unique_ptr<blink::WebGestureEvent> ProtoToGestureScrollBegin( | |
| 31 const InputMessage& proto) { | |
| 32 std::unique_ptr<blink::WebGestureEvent> event(BuildCommonWebGesture( | |
| 33 proto, blink::WebInputEvent::Type::GestureScrollBegin)); | |
| 34 | |
| 35 const GestureScrollBegin& details = proto.gesture_scroll_begin(); | |
| 36 event->data.scrollBegin.deltaXHint = details.delta_x_hint(); | |
| 37 event->data.scrollBegin.deltaYHint = details.delta_y_hint(); | |
| 38 event->data.scrollBegin.targetViewport = details.target_viewport(); | |
| 39 | |
| 40 return event; | |
| 41 } | |
| 42 | |
| 43 std::unique_ptr<blink::WebGestureEvent> ProtoToGestureScrollEnd( | |
| 44 const InputMessage& proto) { | |
| 45 return BuildCommonWebGesture(proto, | |
| 46 blink::WebInputEvent::Type::GestureScrollEnd); | |
| 47 } | |
| 48 | |
| 49 std::unique_ptr<blink::WebGestureEvent> ProtoToGestureScrollUpdate( | |
| 50 const InputMessage& proto) { | |
| 51 std::unique_ptr<blink::WebGestureEvent> event(BuildCommonWebGesture( | |
| 52 proto, blink::WebInputEvent::Type::GestureScrollUpdate)); | |
| 53 | |
| 54 const GestureScrollUpdate& details = proto.gesture_scroll_update(); | |
| 55 event->data.scrollUpdate.deltaX = details.delta_x(); | |
| 56 event->data.scrollUpdate.deltaY = details.delta_y(); | |
| 57 event->data.scrollUpdate.velocityX = details.velocity_x(); | |
| 58 event->data.scrollUpdate.velocityY = details.velocity_y(); | |
| 59 event->data.scrollUpdate.previousUpdateInSequencePrevented = | |
| 60 details.previous_update_in_sequence_prevented(); | |
| 61 event->data.scrollUpdate.preventPropagation = details.prevent_propagation(); | |
| 62 event->data.scrollUpdate.inertialPhase = | |
| 63 details.inertial() ? blink::WebGestureEvent::MomentumPhase | |
| 64 : blink::WebGestureEvent::UnknownMomentumPhase; | |
| 65 | |
| 66 return event; | |
| 67 } | |
| 68 | |
| 69 std::unique_ptr<blink::WebGestureEvent> ProtoToGestureFlingStart( | |
| 70 const InputMessage& proto) { | |
| 71 std::unique_ptr<blink::WebGestureEvent> event(BuildCommonWebGesture( | |
| 72 proto, blink::WebInputEvent::Type::GestureFlingStart)); | |
| 73 | |
| 74 const GestureFlingStart& details = proto.gesture_fling_start(); | |
| 75 event->data.flingStart.velocityX = details.velocity_x(); | |
| 76 event->data.flingStart.velocityY = details.velocity_y(); | |
| 77 event->data.flingStart.targetViewport = details.target_viewport(); | |
| 78 | |
| 79 return event; | |
| 80 } | |
| 81 | |
| 82 std::unique_ptr<blink::WebGestureEvent> ProtoToGestureFlingCancel( | |
| 83 const InputMessage& proto) { | |
| 84 std::unique_ptr<blink::WebGestureEvent> event(BuildCommonWebGesture( | |
| 85 proto, blink::WebInputEvent::Type::GestureFlingCancel)); | |
| 86 | |
| 87 const GestureFlingCancel& details = proto.gesture_fling_cancel(); | |
| 88 event->data.flingCancel.preventBoosting = details.prevent_boosting(); | |
| 89 | |
| 90 return event; | |
| 91 } | |
| 92 | |
| 93 std::unique_ptr<blink::WebGestureEvent> ProtoToGestureTap( | |
| 94 const InputMessage& proto) { | |
| 95 std::unique_ptr<blink::WebGestureEvent> event( | |
| 96 BuildCommonWebGesture(proto, blink::WebInputEvent::Type::GestureTap)); | |
| 97 | |
| 98 const GestureTap& details = proto.gesture_tap(); | |
| 99 event->data.tap.tapCount = details.tap_count(); | |
| 100 event->data.tap.width = details.width(); | |
| 101 event->data.tap.height = details.height(); | |
| 102 | |
| 103 return event; | |
| 104 } | |
| 105 | |
| 106 std::unique_ptr<blink::WebGestureEvent> ProtoToGesturePinchBegin( | |
| 107 const InputMessage& proto) { | |
| 108 return BuildCommonWebGesture(proto, | |
| 109 blink::WebInputEvent::Type::GesturePinchBegin); | |
| 110 } | |
| 111 | |
| 112 std::unique_ptr<blink::WebGestureEvent> ProtoToGesturePinchEnd( | |
| 113 const InputMessage& proto) { | |
| 114 return BuildCommonWebGesture(proto, | |
| 115 blink::WebInputEvent::Type::GesturePinchEnd); | |
| 116 } | |
| 117 | |
| 118 std::unique_ptr<blink::WebGestureEvent> ProtoToGesturePinchUpdate( | |
| 119 const InputMessage& proto) { | |
| 120 std::unique_ptr<blink::WebGestureEvent> event(BuildCommonWebGesture( | |
| 121 proto, blink::WebInputEvent::Type::GesturePinchUpdate)); | |
| 122 | |
| 123 const GesturePinchUpdate& details = proto.gesture_pinch_update(); | |
| 124 event->data.pinchUpdate.zoomDisabled = details.zoom_disabled(); | |
| 125 event->data.pinchUpdate.scale = details.scale(); | |
| 126 | |
| 127 return event; | |
| 128 } | |
| 129 | |
| 130 std::unique_ptr<blink::WebGestureEvent> ProtoToGestureTapDown( | |
| 131 const InputMessage& proto) { | |
| 132 std::unique_ptr<blink::WebGestureEvent> event( | |
| 133 BuildCommonWebGesture(proto, blink::WebInputEvent::Type::GestureTapDown)); | |
| 134 | |
| 135 const GestureTapDown& details = proto.gesture_tap_down(); | |
| 136 event->data.tapDown.width = details.width(); | |
| 137 event->data.tapDown.height = details.height(); | |
| 138 | |
| 139 return event; | |
| 140 } | |
| 141 | |
| 142 std::unique_ptr<blink::WebGestureEvent> ProtoToGestureTapCancel( | |
| 143 const InputMessage& proto) { | |
| 144 return BuildCommonWebGesture(proto, | |
| 145 blink::WebInputEvent::Type::GestureTapCancel); | |
| 146 } | |
| 147 | |
| 148 std::unique_ptr<blink::WebGestureEvent> ProtoToGestureTapUnconfirmed( | |
| 149 const InputMessage& proto) { | |
| 150 std::unique_ptr<blink::WebGestureEvent> event(BuildCommonWebGesture( | |
| 151 proto, blink::WebInputEvent::Type::GestureTapUnconfirmed)); | |
| 152 | |
| 153 const GestureTap& details = proto.gesture_tap(); | |
| 154 event->data.tap.tapCount = details.tap_count(); | |
| 155 event->data.tap.width = details.width(); | |
| 156 event->data.tap.height = details.height(); | |
| 157 | |
| 158 return event; | |
| 159 } | |
| 160 | |
| 161 std::unique_ptr<blink::WebGestureEvent> ProtoToGestureShowPress( | |
| 162 const InputMessage& proto) { | |
| 163 std::unique_ptr<blink::WebGestureEvent> event(BuildCommonWebGesture( | |
| 164 proto, blink::WebInputEvent::Type::GestureShowPress)); | |
| 165 | |
| 166 const GestureShowPress& details = proto.gesture_show_press(); | |
| 167 event->data.showPress.width = details.width(); | |
| 168 event->data.showPress.height = details.height(); | |
| 169 | |
| 170 return event; | |
| 171 } | |
| 172 | |
| 173 } // namespace | |
| 174 | |
| 175 InputMessageConverter::InputMessageConverter() {} | |
| 176 | |
| 177 InputMessageConverter::~InputMessageConverter() {} | |
| 178 | |
| 179 std::unique_ptr<blink::WebGestureEvent> InputMessageConverter::ProcessMessage( | |
| 180 const InputMessage& message) { | |
| 181 std::unique_ptr<blink::WebGestureEvent> event; | |
| 182 | |
| 183 switch (message.type()) { | |
| 184 case InputMessage::Type_GestureScrollBegin: | |
| 185 event = ProtoToGestureScrollBegin(message); | |
| 186 break; | |
| 187 case InputMessage::Type_GestureScrollEnd: | |
| 188 event = ProtoToGestureScrollEnd(message); | |
| 189 break; | |
| 190 case InputMessage::Type_GestureScrollUpdate: | |
| 191 event = ProtoToGestureScrollUpdate(message); | |
| 192 break; | |
| 193 case InputMessage::Type_GestureFlingStart: | |
| 194 event = ProtoToGestureFlingStart(message); | |
| 195 break; | |
| 196 case InputMessage::Type_GestureFlingCancel: | |
| 197 event = ProtoToGestureFlingCancel(message); | |
| 198 break; | |
| 199 case InputMessage::Type_GestureTap: | |
| 200 event = ProtoToGestureTap(message); | |
| 201 break; | |
| 202 case InputMessage::Type_GesturePinchBegin: | |
| 203 event = ProtoToGesturePinchBegin(message); | |
| 204 break; | |
| 205 case InputMessage::Type_GesturePinchEnd: | |
| 206 event = ProtoToGesturePinchEnd(message); | |
| 207 break; | |
| 208 case InputMessage::Type_GesturePinchUpdate: | |
| 209 event = ProtoToGesturePinchUpdate(message); | |
| 210 break; | |
| 211 case InputMessage::Type_GestureTapDown: | |
| 212 event = ProtoToGestureTapDown(message); | |
| 213 break; | |
| 214 case InputMessage::Type_GestureTapCancel: | |
| 215 event = ProtoToGestureTapCancel(message); | |
| 216 break; | |
| 217 case InputMessage::Type_GestureTapUnconfirmed: | |
| 218 event = ProtoToGestureTapUnconfirmed(message); | |
| 219 break; | |
| 220 case InputMessage::Type_GestureShowPress: | |
| 221 event = ProtoToGestureShowPress(message); | |
| 222 break; | |
| 223 case InputMessage::UNKNOWN: | |
| 224 DLOG(FATAL) << "Received an InputMessage with an unknown type."; | |
| 225 return nullptr; | |
| 226 } | |
| 227 | |
| 228 return event; | |
| 229 } | |
| 230 | |
| 231 ui::TextInputType InputMessageConverter::TextInputTypeFromProto( | |
| 232 ImeMessage_InputType type) { | |
| 233 switch (type) { | |
| 234 case ImeMessage_InputType_NONE: | |
| 235 return ui::TEXT_INPUT_TYPE_NONE; | |
| 236 case ImeMessage_InputType_TEXT: | |
| 237 return ui::TEXT_INPUT_TYPE_TEXT; | |
| 238 case ImeMessage_InputType_PASSWORD: | |
| 239 return ui::TEXT_INPUT_TYPE_PASSWORD; | |
| 240 case ImeMessage_InputType_SEARCH: | |
| 241 return ui::TEXT_INPUT_TYPE_SEARCH; | |
| 242 case ImeMessage_InputType_EMAIL: | |
| 243 return ui::TEXT_INPUT_TYPE_EMAIL; | |
| 244 case ImeMessage_InputType_NUMBER: | |
| 245 return ui::TEXT_INPUT_TYPE_NUMBER; | |
| 246 case ImeMessage_InputType_TELEPHONE: | |
| 247 return ui::TEXT_INPUT_TYPE_TELEPHONE; | |
| 248 case ImeMessage_InputType_URL: | |
| 249 return ui::TEXT_INPUT_TYPE_URL; | |
| 250 case ImeMessage_InputType_DATE: | |
| 251 return ui::TEXT_INPUT_TYPE_DATE; | |
| 252 case ImeMessage_InputType_DATE_TIME: | |
| 253 return ui::TEXT_INPUT_TYPE_DATE_TIME; | |
| 254 case ImeMessage_InputType_DATE_TIME_LOCAL: | |
| 255 return ui::TEXT_INPUT_TYPE_DATE_TIME_LOCAL; | |
| 256 case ImeMessage_InputType_MONTH: | |
| 257 return ui::TEXT_INPUT_TYPE_MONTH; | |
| 258 case ImeMessage_InputType_TIME: | |
| 259 return ui::TEXT_INPUT_TYPE_TIME; | |
| 260 case ImeMessage_InputType_WEEK: | |
| 261 return ui::TEXT_INPUT_TYPE_WEEK; | |
| 262 case ImeMessage_InputType_TEXT_AREA: | |
| 263 return ui::TEXT_INPUT_TYPE_TEXT_AREA; | |
| 264 case ImeMessage_InputType_CONTENT_EDITABLE: | |
| 265 return ui::TEXT_INPUT_TYPE_CONTENT_EDITABLE; | |
| 266 case ImeMessage_InputType_DATE_TIME_FIELD: | |
| 267 return ui::TEXT_INPUT_TYPE_DATE_TIME_FIELD; | |
| 268 } | |
| 269 return ui::TEXT_INPUT_TYPE_NONE; | |
| 270 } | |
| 271 | |
| 272 ImeMessage_InputType InputMessageConverter::TextInputTypeToProto( | |
| 273 ui::TextInputType type) { | |
| 274 switch (type) { | |
| 275 case ui::TEXT_INPUT_TYPE_NONE: | |
| 276 NOTREACHED() << "IME needs an editable TextInputType"; | |
| 277 return ImeMessage_InputType_NONE; | |
| 278 case ui::TEXT_INPUT_TYPE_TEXT: | |
| 279 return ImeMessage_InputType_TEXT; | |
| 280 case ui::TEXT_INPUT_TYPE_PASSWORD: | |
| 281 return ImeMessage_InputType_PASSWORD; | |
| 282 case ui::TEXT_INPUT_TYPE_SEARCH: | |
| 283 return ImeMessage_InputType_SEARCH; | |
| 284 case ui::TEXT_INPUT_TYPE_EMAIL: | |
| 285 return ImeMessage_InputType_EMAIL; | |
| 286 case ui::TEXT_INPUT_TYPE_NUMBER: | |
| 287 return ImeMessage_InputType_NUMBER; | |
| 288 case ui::TEXT_INPUT_TYPE_TELEPHONE: | |
| 289 return ImeMessage_InputType_TELEPHONE; | |
| 290 case ui::TEXT_INPUT_TYPE_URL: | |
| 291 return ImeMessage_InputType_URL; | |
| 292 case ui::TEXT_INPUT_TYPE_DATE: | |
| 293 return ImeMessage_InputType_DATE; | |
| 294 case ui::TEXT_INPUT_TYPE_DATE_TIME: | |
| 295 return ImeMessage_InputType_DATE_TIME; | |
| 296 case ui::TEXT_INPUT_TYPE_DATE_TIME_LOCAL: | |
| 297 return ImeMessage_InputType_DATE_TIME_LOCAL; | |
| 298 case ui::TEXT_INPUT_TYPE_MONTH: | |
| 299 return ImeMessage_InputType_MONTH; | |
| 300 case ui::TEXT_INPUT_TYPE_TIME: | |
| 301 return ImeMessage_InputType_TIME; | |
| 302 case ui::TEXT_INPUT_TYPE_WEEK: | |
| 303 return ImeMessage_InputType_WEEK; | |
| 304 case ui::TEXT_INPUT_TYPE_TEXT_AREA: | |
| 305 return ImeMessage_InputType_TEXT_AREA; | |
| 306 case ui::TEXT_INPUT_TYPE_CONTENT_EDITABLE: | |
| 307 return ImeMessage_InputType_CONTENT_EDITABLE; | |
| 308 case ui::TEXT_INPUT_TYPE_DATE_TIME_FIELD: | |
| 309 return ImeMessage_InputType_DATE_TIME_FIELD; | |
| 310 } | |
| 311 return ImeMessage_InputType_NONE; | |
| 312 } | |
| 313 | |
| 314 } // namespace blimp | |
| OLD | NEW |