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

Side by Side Diff: content/browser/renderer_host/ui_events_helper.cc

Issue 712133003: Track whether a scroll sequence has been partially prevented (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698