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

Side by Side Diff: content/browser/renderer_host/input/web_input_event_util.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 // MSVC++ requires this to be set before any other includes to get M_PI. 5 // MSVC++ requires this to be set before any other includes to get M_PI.
6 #define _USE_MATH_DEFINES 6 #define _USE_MATH_DEFINES
7 7
8 #include "content/browser/renderer_host/input/web_input_event_util.h" 8 #include "content/browser/renderer_host/input/web_input_event_util.h"
9 9
10 #include <cmath> 10 #include <cmath>
11 11
12 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
13 #include "content/common/input/web_touch_event_traits.h" 13 #include "content/common/input/web_touch_event_traits.h"
14 #include "ui/events/event_constants.h" 14 #include "ui/events/event_constants.h"
15 #include "ui/events/gesture_detection/gesture_event_data.h" 15 #include "ui/events/gesture_detection/gesture_event_data.h"
16 #include "ui/events/gesture_detection/motion_event.h" 16 #include "ui/events/gesture_detection/motion_event.h"
17 #include "ui/gfx/geometry/safe_integer_conversions.h"
17 18
18 using blink::WebGestureEvent; 19 using blink::WebGestureEvent;
19 using blink::WebInputEvent; 20 using blink::WebInputEvent;
20 using blink::WebTouchEvent; 21 using blink::WebTouchEvent;
21 using blink::WebTouchPoint; 22 using blink::WebTouchPoint;
22 using ui::MotionEvent; 23 using ui::MotionEvent;
23 24
24 namespace { 25 namespace {
25 26
26 const char* GetKeyIdentifier(ui::KeyboardCode key_code) { 27 const char* GetKeyIdentifier(ui::KeyboardCode key_code) {
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 std::min(event.GetPointerCount(), 273 std::min(event.GetPointerCount(),
273 static_cast<size_t>(WebTouchEvent::touchesLengthCap)); 274 static_cast<size_t>(WebTouchEvent::touchesLengthCap));
274 DCHECK_GT(result.touchesLength, 0U); 275 DCHECK_GT(result.touchesLength, 0U);
275 276
276 for (size_t i = 0; i < result.touchesLength; ++i) 277 for (size_t i = 0; i < result.touchesLength; ++i)
277 result.touches[i] = CreateWebTouchPoint(event, i); 278 result.touches[i] = CreateWebTouchPoint(event, i);
278 279
279 return result; 280 return result;
280 } 281 }
281 282
282 WebGestureEvent CreateWebGestureEventFromGestureEventData( 283 WebGestureEvent CreateWebGestureEvent(const ui::GestureEventDetails& details,
283 const ui::GestureEventData& data) { 284 base::TimeDelta timestamp,
285 const gfx::PointF& location,
286 const gfx::PointF& raw_location,
287 int flags) {
284 WebGestureEvent gesture; 288 WebGestureEvent gesture;
285 gesture.modifiers = EventFlagsToWebEventModifiers(data.flags); 289 gesture.timeStampSeconds = timestamp.InSecondsF();
286 gesture.x = data.x; 290 gesture.x = gfx::ToFlooredInt(location.x());
287 gesture.y = data.y; 291 gesture.y = gfx::ToFlooredInt(location.y());
288 gesture.globalX = data.raw_x; 292 gesture.globalX = gfx::ToFlooredInt(raw_location.x());
289 gesture.globalY = data.raw_y; 293 gesture.globalY = gfx::ToFlooredInt(raw_location.y());
290 gesture.timeStampSeconds = (data.time - base::TimeTicks()).InSecondsF(); 294 gesture.modifiers = EventFlagsToWebEventModifiers(flags);
291 gesture.sourceDevice = blink::WebGestureDeviceTouchscreen; 295 gesture.sourceDevice = blink::WebGestureDeviceTouchscreen;
292 296
293 switch (data.type()) { 297 switch (details.type()) {
294 case ui::ET_GESTURE_SHOW_PRESS: 298 case ui::ET_GESTURE_SHOW_PRESS:
295 gesture.type = WebInputEvent::GestureShowPress; 299 gesture.type = WebInputEvent::GestureShowPress;
296 gesture.data.showPress.width = data.details.bounding_box_f().width(); 300 gesture.data.showPress.width = details.bounding_box_f().width();
297 gesture.data.showPress.height = data.details.bounding_box_f().height(); 301 gesture.data.showPress.height = details.bounding_box_f().height();
298 break; 302 break;
299 case ui::ET_GESTURE_DOUBLE_TAP: 303 case ui::ET_GESTURE_DOUBLE_TAP:
300 gesture.type = WebInputEvent::GestureDoubleTap; 304 gesture.type = WebInputEvent::GestureDoubleTap;
301 DCHECK_EQ(1, data.details.tap_count()); 305 DCHECK_EQ(1, details.tap_count());
302 gesture.data.tap.tapCount = data.details.tap_count(); 306 gesture.data.tap.tapCount = details.tap_count();
303 gesture.data.tap.width = data.details.bounding_box_f().width(); 307 gesture.data.tap.width = details.bounding_box_f().width();
304 gesture.data.tap.height = data.details.bounding_box_f().height(); 308 gesture.data.tap.height = details.bounding_box_f().height();
305 break; 309 break;
306 case ui::ET_GESTURE_TAP: 310 case ui::ET_GESTURE_TAP:
307 gesture.type = WebInputEvent::GestureTap; 311 gesture.type = WebInputEvent::GestureTap;
308 DCHECK_EQ(1, data.details.tap_count()); 312 DCHECK_GE(details.tap_count(), 1);
309 gesture.data.tap.tapCount = data.details.tap_count(); 313 gesture.data.tap.tapCount = details.tap_count();
310 gesture.data.tap.width = data.details.bounding_box_f().width(); 314 gesture.data.tap.width = details.bounding_box_f().width();
311 gesture.data.tap.height = data.details.bounding_box_f().height(); 315 gesture.data.tap.height = details.bounding_box_f().height();
312 break; 316 break;
313 case ui::ET_GESTURE_TAP_UNCONFIRMED: 317 case ui::ET_GESTURE_TAP_UNCONFIRMED:
314 gesture.type = WebInputEvent::GestureTapUnconfirmed; 318 gesture.type = WebInputEvent::GestureTapUnconfirmed;
315 DCHECK_EQ(1, data.details.tap_count()); 319 DCHECK_EQ(1, details.tap_count());
316 gesture.data.tap.tapCount = data.details.tap_count(); 320 gesture.data.tap.tapCount = details.tap_count();
317 gesture.data.tap.width = data.details.bounding_box_f().width(); 321 gesture.data.tap.width = details.bounding_box_f().width();
318 gesture.data.tap.height = data.details.bounding_box_f().height(); 322 gesture.data.tap.height = details.bounding_box_f().height();
319 break; 323 break;
320 case ui::ET_GESTURE_LONG_PRESS: 324 case ui::ET_GESTURE_LONG_PRESS:
321 gesture.type = WebInputEvent::GestureLongPress; 325 gesture.type = WebInputEvent::GestureLongPress;
322 gesture.data.longPress.width = data.details.bounding_box_f().width(); 326 gesture.data.longPress.width = details.bounding_box_f().width();
323 gesture.data.longPress.height = data.details.bounding_box_f().height(); 327 gesture.data.longPress.height = details.bounding_box_f().height();
324 break; 328 break;
325 case ui::ET_GESTURE_LONG_TAP: 329 case ui::ET_GESTURE_LONG_TAP:
326 gesture.type = WebInputEvent::GestureLongTap; 330 gesture.type = WebInputEvent::GestureLongTap;
327 gesture.data.longPress.width = data.details.bounding_box_f().width(); 331 gesture.data.longPress.width = details.bounding_box_f().width();
328 gesture.data.longPress.height = data.details.bounding_box_f().height(); 332 gesture.data.longPress.height = details.bounding_box_f().height();
333 break;
334 case ui::ET_GESTURE_TWO_FINGER_TAP:
335 gesture.type = blink::WebInputEvent::GestureTwoFingerTap;
336 gesture.data.twoFingerTap.firstFingerWidth = details.first_finger_width();
337 gesture.data.twoFingerTap.firstFingerHeight =
338 details.first_finger_height();
329 break; 339 break;
330 case ui::ET_GESTURE_SCROLL_BEGIN: 340 case ui::ET_GESTURE_SCROLL_BEGIN:
331 gesture.type = WebInputEvent::GestureScrollBegin; 341 gesture.type = WebInputEvent::GestureScrollBegin;
332 gesture.data.scrollBegin.deltaXHint = data.details.scroll_x_hint(); 342 gesture.data.scrollBegin.deltaXHint = details.scroll_x_hint();
333 gesture.data.scrollBegin.deltaYHint = data.details.scroll_y_hint(); 343 gesture.data.scrollBegin.deltaYHint = details.scroll_y_hint();
334 break; 344 break;
335 case ui::ET_GESTURE_SCROLL_UPDATE: 345 case ui::ET_GESTURE_SCROLL_UPDATE:
336 gesture.type = WebInputEvent::GestureScrollUpdate; 346 gesture.type = WebInputEvent::GestureScrollUpdate;
337 gesture.data.scrollUpdate.deltaX = data.details.scroll_x(); 347 gesture.data.scrollUpdate.deltaX = details.scroll_x();
338 gesture.data.scrollUpdate.deltaY = data.details.scroll_y(); 348 gesture.data.scrollUpdate.deltaY = details.scroll_y();
349 gesture.data.scrollUpdate.previousUpdateInSequencePrevented =
350 details.previous_scroll_update_in_sequence_prevented();
339 break; 351 break;
340 case ui::ET_GESTURE_SCROLL_END: 352 case ui::ET_GESTURE_SCROLL_END:
341 gesture.type = WebInputEvent::GestureScrollEnd; 353 gesture.type = WebInputEvent::GestureScrollEnd;
342 break; 354 break;
343 case ui::ET_SCROLL_FLING_START: 355 case ui::ET_SCROLL_FLING_START:
344 gesture.type = WebInputEvent::GestureFlingStart; 356 gesture.type = WebInputEvent::GestureFlingStart;
345 gesture.data.flingStart.velocityX = data.details.velocity_x(); 357 gesture.data.flingStart.velocityX = details.velocity_x();
346 gesture.data.flingStart.velocityY = data.details.velocity_y(); 358 gesture.data.flingStart.velocityY = details.velocity_y();
347 break; 359 break;
348 case ui::ET_SCROLL_FLING_CANCEL: 360 case ui::ET_SCROLL_FLING_CANCEL:
349 gesture.type = WebInputEvent::GestureFlingCancel; 361 gesture.type = WebInputEvent::GestureFlingCancel;
350 break; 362 break;
351 case ui::ET_GESTURE_PINCH_BEGIN: 363 case ui::ET_GESTURE_PINCH_BEGIN:
352 gesture.type = WebInputEvent::GesturePinchBegin; 364 gesture.type = WebInputEvent::GesturePinchBegin;
353 break; 365 break;
354 case ui::ET_GESTURE_PINCH_UPDATE: 366 case ui::ET_GESTURE_PINCH_UPDATE:
355 gesture.type = WebInputEvent::GesturePinchUpdate; 367 gesture.type = WebInputEvent::GesturePinchUpdate;
356 gesture.data.pinchUpdate.scale = data.details.scale(); 368 gesture.data.pinchUpdate.scale = details.scale();
357 break; 369 break;
358 case ui::ET_GESTURE_PINCH_END: 370 case ui::ET_GESTURE_PINCH_END:
359 gesture.type = WebInputEvent::GesturePinchEnd; 371 gesture.type = WebInputEvent::GesturePinchEnd;
360 break; 372 break;
361 case ui::ET_GESTURE_TAP_CANCEL: 373 case ui::ET_GESTURE_TAP_CANCEL:
362 gesture.type = WebInputEvent::GestureTapCancel; 374 gesture.type = WebInputEvent::GestureTapCancel;
363 break; 375 break;
364 case ui::ET_GESTURE_TAP_DOWN: 376 case ui::ET_GESTURE_TAP_DOWN:
365 gesture.type = WebInputEvent::GestureTapDown; 377 gesture.type = WebInputEvent::GestureTapDown;
366 gesture.data.tapDown.width = data.details.bounding_box_f().width(); 378 gesture.data.tapDown.width = details.bounding_box_f().width();
367 gesture.data.tapDown.height = data.details.bounding_box_f().height(); 379 gesture.data.tapDown.height = details.bounding_box_f().height();
368 break; 380 break;
369 case ui::ET_GESTURE_BEGIN: 381 case ui::ET_GESTURE_BEGIN:
370 case ui::ET_GESTURE_END: 382 case ui::ET_GESTURE_END:
371 NOTREACHED() << "ET_GESTURE_BEGIN and ET_GESTURE_END are only produced " 383 case ui::ET_GESTURE_SWIPE:
372 << "in Aura, and should never end up here."; 384 // The caller is responsible for discarding these gestures appropriately.
385 gesture.type = WebInputEvent::Undefined;
373 break; 386 break;
374 default: 387 default:
375 NOTREACHED() << "ui::EventType provided wasn't a valid gesture event."; 388 NOTREACHED() << "ui::EventType provided wasn't a valid gesture event: "
376 break; 389 << details.type();
377 } 390 }
378 391
379 return gesture; 392 return gesture;
380 } 393 }
381 394
395 WebGestureEvent CreateWebGestureEventFromGestureEventData(
396 const ui::GestureEventData& data) {
397 return CreateWebGestureEvent(data.details,
398 data.time - base::TimeTicks(),
399 gfx::PointF(data.x, data.y),
400 gfx::PointF(data.raw_x, data.raw_y),
401 data.flags);
402 }
403
382 int EventFlagsToWebEventModifiers(int flags) { 404 int EventFlagsToWebEventModifiers(int flags) {
383 int modifiers = 0; 405 int modifiers = 0;
384 406
385 if (flags & ui::EF_SHIFT_DOWN) 407 if (flags & ui::EF_SHIFT_DOWN)
386 modifiers |= blink::WebInputEvent::ShiftKey; 408 modifiers |= blink::WebInputEvent::ShiftKey;
387 if (flags & ui::EF_CONTROL_DOWN) 409 if (flags & ui::EF_CONTROL_DOWN)
388 modifiers |= blink::WebInputEvent::ControlKey; 410 modifiers |= blink::WebInputEvent::ControlKey;
389 if (flags & ui::EF_ALT_DOWN) 411 if (flags & ui::EF_ALT_DOWN)
390 modifiers |= blink::WebInputEvent::AltKey; 412 modifiers |= blink::WebInputEvent::AltKey;
391 if (flags & ui::EF_COMMAND_DOWN) 413 if (flags & ui::EF_COMMAND_DOWN)
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 flags |= ui::EF_CAPS_LOCK_DOWN; 451 flags |= ui::EF_CAPS_LOCK_DOWN;
430 if (modifiers & blink::WebInputEvent::IsAutoRepeat) 452 if (modifiers & blink::WebInputEvent::IsAutoRepeat)
431 flags |= ui::EF_IS_REPEAT; 453 flags |= ui::EF_IS_REPEAT;
432 if (modifiers & blink::WebInputEvent::IsKeyPad) 454 if (modifiers & blink::WebInputEvent::IsKeyPad)
433 flags |= ui::EF_NUMPAD_KEY; 455 flags |= ui::EF_NUMPAD_KEY;
434 456
435 return flags; 457 return flags;
436 } 458 }
437 459
438 } // namespace content 460 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698