| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/renderer_host/ui_events_helper.h" | 5 #include "content/browser/renderer_host/ui_events_helper.h" |
| 6 | 6 |
| 7 #include "content/browser/renderer_host/input/web_input_event_util.h" | 7 #include "content/browser/renderer_host/input/web_input_event_util.h" |
| 8 #include "content/common/input/web_touch_event_traits.h" | 8 #include "content/common/input/web_touch_event_traits.h" |
| 9 #include "third_party/WebKit/public/web/WebInputEvent.h" | 9 #include "third_party/WebKit/public/web/WebInputEvent.h" |
| 10 #include "ui/events/event.h" | 10 #include "ui/events/event.h" |
| 11 #include "ui/events/event_constants.h" | 11 #include "ui/events/event_constants.h" |
| 12 | 12 |
| 13 namespace { | 13 namespace { |
| 14 | 14 |
| 15 int WebModifiersToUIFlags(int modifiers) { | |
| 16 int flags = ui::EF_NONE; | |
| 17 | |
| 18 if (modifiers & blink::WebInputEvent::ShiftKey) | |
| 19 flags |= ui::EF_SHIFT_DOWN; | |
| 20 if (modifiers & blink::WebInputEvent::ControlKey) | |
| 21 flags |= ui::EF_CONTROL_DOWN; | |
| 22 if (modifiers & blink::WebInputEvent::AltKey) | |
| 23 flags |= ui::EF_ALT_DOWN; | |
| 24 if (modifiers & blink::WebInputEvent::MetaKey) | |
| 25 flags |= ui::EF_COMMAND_DOWN; | |
| 26 | |
| 27 if (modifiers & blink::WebInputEvent::LeftButtonDown) | |
| 28 flags |= ui::EF_LEFT_MOUSE_BUTTON; | |
| 29 if (modifiers & blink::WebInputEvent::RightButtonDown) | |
| 30 flags |= ui::EF_RIGHT_MOUSE_BUTTON; | |
| 31 if (modifiers & blink::WebInputEvent::MiddleButtonDown) | |
| 32 flags |= ui::EF_MIDDLE_MOUSE_BUTTON; | |
| 33 | |
| 34 if (modifiers & blink::WebInputEvent::CapsLockOn) | |
| 35 flags |= ui::EF_CAPS_LOCK_DOWN; | |
| 36 | |
| 37 return flags; | |
| 38 } | |
| 39 | |
| 40 ui::EventType WebTouchPointStateToEventType( | 15 ui::EventType WebTouchPointStateToEventType( |
| 41 blink::WebTouchPoint::State state) { | 16 blink::WebTouchPoint::State state) { |
| 42 switch (state) { | 17 switch (state) { |
| 43 case blink::WebTouchPoint::StateReleased: | 18 case blink::WebTouchPoint::StateReleased: |
| 44 return ui::ET_TOUCH_RELEASED; | 19 return ui::ET_TOUCH_RELEASED; |
| 45 | 20 |
| 46 case blink::WebTouchPoint::StatePressed: | 21 case blink::WebTouchPoint::StatePressed: |
| 47 return ui::ET_TOUCH_PRESSED; | 22 return ui::ET_TOUCH_PRESSED; |
| 48 | 23 |
| 49 case blink::WebTouchPoint::StateMoved: | 24 case blink::WebTouchPoint::StateMoved: |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 type = ui::ET_TOUCH_MOVED; | 85 type = ui::ET_TOUCH_MOVED; |
| 111 break; | 86 break; |
| 112 case blink::WebInputEvent::TouchCancel: | 87 case blink::WebInputEvent::TouchCancel: |
| 113 type = ui::ET_TOUCH_CANCELLED; | 88 type = ui::ET_TOUCH_CANCELLED; |
| 114 break; | 89 break; |
| 115 default: | 90 default: |
| 116 NOTREACHED(); | 91 NOTREACHED(); |
| 117 return false; | 92 return false; |
| 118 } | 93 } |
| 119 | 94 |
| 120 int flags = WebModifiersToUIFlags(touch.modifiers); | 95 int flags = WebEventModifiersToEventFlags(touch.modifiers); |
| 121 base::TimeDelta timestamp = base::TimeDelta::FromMicroseconds( | 96 base::TimeDelta timestamp = base::TimeDelta::FromMicroseconds( |
| 122 static_cast<int64>(touch.timeStampSeconds * 1000000)); | 97 static_cast<int64>(touch.timeStampSeconds * 1000000)); |
| 123 for (unsigned i = 0; i < touch.touchesLength; ++i) { | 98 for (unsigned i = 0; i < touch.touchesLength; ++i) { |
| 124 const blink::WebTouchPoint& point = touch.touches[i]; | 99 const blink::WebTouchPoint& point = touch.touches[i]; |
| 125 if (WebTouchPointStateToEventType(point.state) != type) | 100 if (WebTouchPointStateToEventType(point.state) != type) |
| 126 continue; | 101 continue; |
| 127 // ui events start in the co-ordinate space of the EventDispatcher. | 102 // ui events start in the co-ordinate space of the EventDispatcher. |
| 128 gfx::PointF location; | 103 gfx::PointF location; |
| 129 if (coordinate_system == LOCAL_COORDINATES) | 104 if (coordinate_system == LOCAL_COORDINATES) |
| 130 location = point.position; | 105 location = point.position; |
| 131 else | 106 else |
| 132 location = point.screenPosition; | 107 location = point.screenPosition; |
| 133 ui::TouchEvent* uievent = new ui::TouchEvent(type, | 108 ui::TouchEvent* uievent = new ui::TouchEvent(type, |
| 134 location, | 109 location, |
| 135 flags, | 110 flags, |
| 136 point.id, | 111 point.id, |
| 137 timestamp, | 112 timestamp, |
| 138 point.radiusX, | 113 point.radiusX, |
| 139 point.radiusY, | 114 point.radiusY, |
| 140 point.rotationAngle, | 115 point.rotationAngle, |
| 141 point.force); | 116 point.force); |
| 142 uievent->set_latency(touch_with_latency.latency); | 117 uievent->set_latency(touch_with_latency.latency); |
| 143 list->push_back(uievent); | 118 list->push_back(uievent); |
| 144 } | 119 } |
| 145 return true; | 120 return true; |
| 146 } | 121 } |
| 147 | 122 |
| 148 blink::WebGestureEvent MakeWebGestureEventFromUIEvent( | 123 blink::WebGestureEvent MakeWebGestureEventFromUIEvent( |
| 149 const ui::GestureEvent& event) { | 124 const ui::GestureEvent& event) { |
| 150 blink::WebGestureEvent gesture_event; | 125 return CreateWebGestureEvent(event.details(), |
| 151 | 126 event.time_stamp(), |
| 152 switch (event.type()) { | 127 event.location_f(), |
| 153 case ui::ET_GESTURE_TAP: | 128 event.root_location_f(), |
| 154 gesture_event.type = blink::WebInputEvent::GestureTap; | 129 event.flags()); |
| 155 gesture_event.data.tap.tapCount = event.details().tap_count(); | |
| 156 gesture_event.data.tap.width = event.details().bounding_box().width(); | |
| 157 gesture_event.data.tap.height = event.details().bounding_box().height(); | |
| 158 break; | |
| 159 case ui::ET_GESTURE_TAP_DOWN: | |
| 160 gesture_event.type = blink::WebInputEvent::GestureTapDown; | |
| 161 gesture_event.data.tapDown.width = | |
| 162 event.details().bounding_box().width(); | |
| 163 gesture_event.data.tapDown.height = | |
| 164 event.details().bounding_box().height(); | |
| 165 break; | |
| 166 case ui::ET_GESTURE_SHOW_PRESS: | |
| 167 gesture_event.type = blink::WebInputEvent::GestureShowPress; | |
| 168 gesture_event.data.showPress.width = | |
| 169 event.details().bounding_box().width(); | |
| 170 gesture_event.data.showPress.height = | |
| 171 event.details().bounding_box().height(); | |
| 172 break; | |
| 173 case ui::ET_GESTURE_TAP_CANCEL: | |
| 174 gesture_event.type = blink::WebInputEvent::GestureTapCancel; | |
| 175 break; | |
| 176 case ui::ET_GESTURE_SCROLL_BEGIN: | |
| 177 gesture_event.type = blink::WebInputEvent::GestureScrollBegin; | |
| 178 gesture_event.data.scrollBegin.deltaXHint = | |
| 179 event.details().scroll_x_hint(); | |
| 180 gesture_event.data.scrollBegin.deltaYHint = | |
| 181 event.details().scroll_y_hint(); | |
| 182 break; | |
| 183 case ui::ET_GESTURE_SCROLL_UPDATE: | |
| 184 gesture_event.type = blink::WebInputEvent::GestureScrollUpdate; | |
| 185 gesture_event.data.scrollUpdate.deltaX = event.details().scroll_x(); | |
| 186 gesture_event.data.scrollUpdate.deltaY = event.details().scroll_y(); | |
| 187 break; | |
| 188 case ui::ET_GESTURE_SCROLL_END: | |
| 189 gesture_event.type = blink::WebInputEvent::GestureScrollEnd; | |
| 190 break; | |
| 191 case ui::ET_GESTURE_PINCH_BEGIN: | |
| 192 gesture_event.type = blink::WebInputEvent::GesturePinchBegin; | |
| 193 break; | |
| 194 case ui::ET_GESTURE_PINCH_UPDATE: | |
| 195 gesture_event.type = blink::WebInputEvent::GesturePinchUpdate; | |
| 196 gesture_event.data.pinchUpdate.scale = event.details().scale(); | |
| 197 break; | |
| 198 case ui::ET_GESTURE_PINCH_END: | |
| 199 gesture_event.type = blink::WebInputEvent::GesturePinchEnd; | |
| 200 break; | |
| 201 case ui::ET_SCROLL_FLING_START: | |
| 202 gesture_event.type = blink::WebInputEvent::GestureFlingStart; | |
| 203 gesture_event.data.flingStart.velocityX = event.details().velocity_x(); | |
| 204 gesture_event.data.flingStart.velocityY = event.details().velocity_y(); | |
| 205 break; | |
| 206 case ui::ET_SCROLL_FLING_CANCEL: | |
| 207 gesture_event.type = blink::WebInputEvent::GestureFlingCancel; | |
| 208 break; | |
| 209 case ui::ET_GESTURE_LONG_PRESS: | |
| 210 gesture_event.type = blink::WebInputEvent::GestureLongPress; | |
| 211 gesture_event.data.longPress.width = | |
| 212 event.details().bounding_box().width(); | |
| 213 gesture_event.data.longPress.height = | |
| 214 event.details().bounding_box().height(); | |
| 215 break; | |
| 216 case ui::ET_GESTURE_LONG_TAP: | |
| 217 gesture_event.type = blink::WebInputEvent::GestureLongTap; | |
| 218 gesture_event.data.longPress.width = | |
| 219 event.details().bounding_box().width(); | |
| 220 gesture_event.data.longPress.height = | |
| 221 event.details().bounding_box().height(); | |
| 222 break; | |
| 223 case ui::ET_GESTURE_TWO_FINGER_TAP: | |
| 224 gesture_event.type = blink::WebInputEvent::GestureTwoFingerTap; | |
| 225 gesture_event.data.twoFingerTap.firstFingerWidth = | |
| 226 event.details().first_finger_width(); | |
| 227 gesture_event.data.twoFingerTap.firstFingerHeight = | |
| 228 event.details().first_finger_height(); | |
| 229 break; | |
| 230 case ui::ET_GESTURE_BEGIN: | |
| 231 case ui::ET_GESTURE_END: | |
| 232 case ui::ET_GESTURE_SWIPE: | |
| 233 gesture_event.type = blink::WebInputEvent::Undefined; | |
| 234 break; | |
| 235 default: | |
| 236 NOTREACHED() << "Unknown gesture type: " << event.type(); | |
| 237 } | |
| 238 | |
| 239 gesture_event.sourceDevice = blink::WebGestureDeviceTouchscreen; | |
| 240 gesture_event.modifiers = EventFlagsToWebEventModifiers(event.flags()); | |
| 241 gesture_event.timeStampSeconds = event.time_stamp().InSecondsF(); | |
| 242 | |
| 243 return gesture_event; | |
| 244 } | 130 } |
| 245 | 131 |
| 246 blink::WebTouchPoint* UpdateWebTouchEventFromUIEvent( | 132 blink::WebTouchPoint* UpdateWebTouchEventFromUIEvent( |
| 247 const ui::TouchEvent& event, | 133 const ui::TouchEvent& event, |
| 248 blink::WebTouchEvent* web_event) { | 134 blink::WebTouchEvent* web_event) { |
| 249 blink::WebTouchPoint* point = NULL; | 135 blink::WebTouchPoint* point = NULL; |
| 250 switch (event.type()) { | 136 switch (event.type()) { |
| 251 case ui::ET_TOUCH_PRESSED: | 137 case ui::ET_TOUCH_PRESSED: |
| 252 // Add a new touch point. | 138 // Add a new touch point. |
| 253 if (web_event->touchesLength < blink::WebTouchEvent::touchesLengthCap) { | 139 if (web_event->touchesLength < blink::WebTouchEvent::touchesLengthCap) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 // Update the type of the touch event. | 189 // Update the type of the touch event. |
| 304 WebTouchEventTraits::ResetType(TouchEventTypeFromEvent(event), | 190 WebTouchEventTraits::ResetType(TouchEventTypeFromEvent(event), |
| 305 event.time_stamp().InSecondsF(), | 191 event.time_stamp().InSecondsF(), |
| 306 web_event); | 192 web_event); |
| 307 web_event->modifiers = EventFlagsToWebEventModifiers(event.flags()); | 193 web_event->modifiers = EventFlagsToWebEventModifiers(event.flags()); |
| 308 | 194 |
| 309 return point; | 195 return point; |
| 310 } | 196 } |
| 311 | 197 |
| 312 } // namespace content | 198 } // namespace content |
| OLD | NEW |