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

Side by Side Diff: ui/events/blink/blink_event_util.cc

Issue 2573073003: Collapse the API surface on WebInputEvent via accessor functions. (Closed)
Patch Set: Rebase Created 3 years, 11 months 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 2015 The Chromium Authors. All rights reserved. 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 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 "ui/events/blink/blink_event_util.h" 8 #include "ui/events/blink/blink_event_util.h"
9 9
10 #include <stddef.h> 10 #include <stddef.h>
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 static_assert( 234 static_assert(
235 WebInputEvent::DispatchType::ListenersNonBlockingPassive < 235 WebInputEvent::DispatchType::ListenersNonBlockingPassive <
236 WebInputEvent::DispatchType::ListenersForcedNonBlockingDueToFling, 236 WebInputEvent::DispatchType::ListenersForcedNonBlockingDueToFling,
237 "Enum not ordered correctly"); 237 "Enum not ordered correctly");
238 return static_cast<WebInputEvent::DispatchType>( 238 return static_cast<WebInputEvent::DispatchType>(
239 std::min(static_cast<int>(type_1), static_cast<int>(type_2))); 239 std::min(static_cast<int>(type_1), static_cast<int>(type_2)));
240 } 240 }
241 241
242 bool CanCoalesce(const WebMouseEvent& event_to_coalesce, 242 bool CanCoalesce(const WebMouseEvent& event_to_coalesce,
243 const WebMouseEvent& event) { 243 const WebMouseEvent& event) {
244 return event.type == event_to_coalesce.type && 244 return event.type() == event_to_coalesce.type() &&
245 event.type == WebInputEvent::MouseMove; 245 event.type() == WebInputEvent::MouseMove;
246 } 246 }
247 247
248 void Coalesce(const WebMouseEvent& event_to_coalesce, WebMouseEvent* event) { 248 void Coalesce(const WebMouseEvent& event_to_coalesce, WebMouseEvent* event) {
249 DCHECK(CanCoalesce(event_to_coalesce, *event)); 249 DCHECK(CanCoalesce(event_to_coalesce, *event));
250 // Accumulate movement deltas. 250 // Accumulate movement deltas.
251 int x = event->movementX; 251 int x = event->movementX;
252 int y = event->movementY; 252 int y = event->movementY;
253 *event = event_to_coalesce; 253 *event = event_to_coalesce;
254 event->movementX += x; 254 event->movementX += x;
255 event->movementY += y; 255 event->movementY += y;
256 } 256 }
257 257
258 bool CanCoalesce(const WebMouseWheelEvent& event_to_coalesce, 258 bool CanCoalesce(const WebMouseWheelEvent& event_to_coalesce,
259 const WebMouseWheelEvent& event) { 259 const WebMouseWheelEvent& event) {
260 return event.modifiers == event_to_coalesce.modifiers && 260 return event.modifiers() == event_to_coalesce.modifiers() &&
261 event.scrollByPage == event_to_coalesce.scrollByPage && 261 event.scrollByPage == event_to_coalesce.scrollByPage &&
262 event.phase == event_to_coalesce.phase && 262 event.phase == event_to_coalesce.phase &&
263 event.momentumPhase == event_to_coalesce.momentumPhase && 263 event.momentumPhase == event_to_coalesce.momentumPhase &&
264 event.hasPreciseScrollingDeltas == 264 event.hasPreciseScrollingDeltas ==
265 event_to_coalesce.hasPreciseScrollingDeltas; 265 event_to_coalesce.hasPreciseScrollingDeltas;
266 } 266 }
267 267
268 void Coalesce(const WebMouseWheelEvent& event_to_coalesce, 268 void Coalesce(const WebMouseWheelEvent& event_to_coalesce,
269 WebMouseWheelEvent* event) { 269 WebMouseWheelEvent* event) {
270 DCHECK(CanCoalesce(event_to_coalesce, *event)); 270 DCHECK(CanCoalesce(event_to_coalesce, *event));
(...skipping 19 matching lines...) Expand all
290 event->movementX += old_movementX; 290 event->movementX += old_movementX;
291 event->movementY += old_movementY; 291 event->movementY += old_movementY;
292 event->accelerationRatioX = 292 event->accelerationRatioX =
293 GetAccelerationRatio(event->deltaX, unaccelerated_x); 293 GetAccelerationRatio(event->deltaX, unaccelerated_x);
294 event->accelerationRatioY = 294 event->accelerationRatioY =
295 GetAccelerationRatio(event->deltaY, unaccelerated_y); 295 GetAccelerationRatio(event->deltaY, unaccelerated_y);
296 } 296 }
297 297
298 bool CanCoalesce(const WebTouchEvent& event_to_coalesce, 298 bool CanCoalesce(const WebTouchEvent& event_to_coalesce,
299 const WebTouchEvent& event) { 299 const WebTouchEvent& event) {
300 if (event.type != event_to_coalesce.type || 300 if (event.type() != event_to_coalesce.type() ||
301 event.type != WebInputEvent::TouchMove || 301 event.type() != WebInputEvent::TouchMove ||
302 event.modifiers != event_to_coalesce.modifiers || 302 event.modifiers() != event_to_coalesce.modifiers() ||
303 event.touchesLength != event_to_coalesce.touchesLength || 303 event.touchesLength != event_to_coalesce.touchesLength ||
304 event.touchesLength > WebTouchEvent::kTouchesLengthCap) 304 event.touchesLength > WebTouchEvent::kTouchesLengthCap)
305 return false; 305 return false;
306 306
307 static_assert(WebTouchEvent::kTouchesLengthCap <= sizeof(int32_t) * 8U, 307 static_assert(WebTouchEvent::kTouchesLengthCap <= sizeof(int32_t) * 8U,
308 "suboptimal kTouchesLengthCap size"); 308 "suboptimal kTouchesLengthCap size");
309 // Ensure that we have a 1-to-1 mapping of pointer ids between touches. 309 // Ensure that we have a 1-to-1 mapping of pointer ids between touches.
310 std::bitset<WebTouchEvent::kTouchesLengthCap> unmatched_event_touches( 310 std::bitset<WebTouchEvent::kTouchesLengthCap> unmatched_event_touches(
311 (1 << event.touchesLength) - 1); 311 (1 << event.touchesLength) - 1);
312 for (unsigned i = 0; i < event_to_coalesce.touchesLength; ++i) { 312 for (unsigned i = 0; i < event_to_coalesce.touchesLength; ++i) {
(...skipping 23 matching lines...) Expand all
336 if (old_event.touches[i_old].state == blink::WebTouchPoint::StateMoved) 336 if (old_event.touches[i_old].state == blink::WebTouchPoint::StateMoved)
337 event->touches[i].state = blink::WebTouchPoint::StateMoved; 337 event->touches[i].state = blink::WebTouchPoint::StateMoved;
338 } 338 }
339 event->movedBeyondSlopRegion |= old_event.movedBeyondSlopRegion; 339 event->movedBeyondSlopRegion |= old_event.movedBeyondSlopRegion;
340 event->dispatchType = MergeDispatchTypes(old_event.dispatchType, 340 event->dispatchType = MergeDispatchTypes(old_event.dispatchType,
341 event_to_coalesce.dispatchType); 341 event_to_coalesce.dispatchType);
342 } 342 }
343 343
344 bool CanCoalesce(const WebGestureEvent& event_to_coalesce, 344 bool CanCoalesce(const WebGestureEvent& event_to_coalesce,
345 const WebGestureEvent& event) { 345 const WebGestureEvent& event) {
346 if (event.type != event_to_coalesce.type || 346 if (event.type() != event_to_coalesce.type() ||
347 event.sourceDevice != event_to_coalesce.sourceDevice || 347 event.sourceDevice != event_to_coalesce.sourceDevice ||
348 event.modifiers != event_to_coalesce.modifiers) 348 event.modifiers() != event_to_coalesce.modifiers())
349 return false; 349 return false;
350 350
351 if (event.type == WebInputEvent::GestureScrollUpdate) 351 if (event.type() == WebInputEvent::GestureScrollUpdate)
352 return true; 352 return true;
353 353
354 // GesturePinchUpdate scales can be combined only if they share a focal point, 354 // GesturePinchUpdate scales can be combined only if they share a focal point,
355 // e.g., with double-tap drag zoom. 355 // e.g., with double-tap drag zoom.
356 if (event.type == WebInputEvent::GesturePinchUpdate && 356 if (event.type() == WebInputEvent::GesturePinchUpdate &&
357 event.x == event_to_coalesce.x && event.y == event_to_coalesce.y) 357 event.x == event_to_coalesce.x && event.y == event_to_coalesce.y)
358 return true; 358 return true;
359 359
360 return false; 360 return false;
361 } 361 }
362 362
363 void Coalesce(const WebGestureEvent& event_to_coalesce, 363 void Coalesce(const WebGestureEvent& event_to_coalesce,
364 WebGestureEvent* event) { 364 WebGestureEvent* event) {
365 DCHECK(CanCoalesce(event_to_coalesce, *event)); 365 DCHECK(CanCoalesce(event_to_coalesce, *event));
366 if (event->type == WebInputEvent::GestureScrollUpdate) { 366 if (event->type() == WebInputEvent::GestureScrollUpdate) {
367 event->data.scrollUpdate.deltaX += 367 event->data.scrollUpdate.deltaX +=
368 event_to_coalesce.data.scrollUpdate.deltaX; 368 event_to_coalesce.data.scrollUpdate.deltaX;
369 event->data.scrollUpdate.deltaY += 369 event->data.scrollUpdate.deltaY +=
370 event_to_coalesce.data.scrollUpdate.deltaY; 370 event_to_coalesce.data.scrollUpdate.deltaY;
371 DCHECK_EQ( 371 DCHECK_EQ(
372 event->data.scrollUpdate.previousUpdateInSequencePrevented, 372 event->data.scrollUpdate.previousUpdateInSequencePrevented,
373 event_to_coalesce.data.scrollUpdate.previousUpdateInSequencePrevented); 373 event_to_coalesce.data.scrollUpdate.previousUpdateInSequencePrevented);
374 } else if (event->type == WebInputEvent::GesturePinchUpdate) { 374 } else if (event->type() == WebInputEvent::GesturePinchUpdate) {
375 event->data.pinchUpdate.scale *= event_to_coalesce.data.pinchUpdate.scale; 375 event->data.pinchUpdate.scale *= event_to_coalesce.data.pinchUpdate.scale;
376 // Ensure the scale remains bounded above 0 and below Infinity so that 376 // Ensure the scale remains bounded above 0 and below Infinity so that
377 // we can reliably perform operations like log on the values. 377 // we can reliably perform operations like log on the values.
378 if (event->data.pinchUpdate.scale < numeric_limits<float>::min()) 378 if (event->data.pinchUpdate.scale < numeric_limits<float>::min())
379 event->data.pinchUpdate.scale = numeric_limits<float>::min(); 379 event->data.pinchUpdate.scale = numeric_limits<float>::min();
380 else if (event->data.pinchUpdate.scale > numeric_limits<float>::max()) 380 else if (event->data.pinchUpdate.scale > numeric_limits<float>::max())
381 event->data.pinchUpdate.scale = numeric_limits<float>::max(); 381 event->data.pinchUpdate.scale = numeric_limits<float>::max();
382 } 382 }
383 } 383 }
384 384
385 // Returns the transform matrix corresponding to the gesture event. 385 // Returns the transform matrix corresponding to the gesture event.
386 gfx::Transform GetTransformForEvent(const WebGestureEvent& gesture_event) { 386 gfx::Transform GetTransformForEvent(const WebGestureEvent& gesture_event) {
387 gfx::Transform gesture_transform; 387 gfx::Transform gesture_transform;
388 if (gesture_event.type == WebInputEvent::GestureScrollUpdate) { 388 if (gesture_event.type() == WebInputEvent::GestureScrollUpdate) {
389 gesture_transform.Translate(gesture_event.data.scrollUpdate.deltaX, 389 gesture_transform.Translate(gesture_event.data.scrollUpdate.deltaX,
390 gesture_event.data.scrollUpdate.deltaY); 390 gesture_event.data.scrollUpdate.deltaY);
391 } else if (gesture_event.type == WebInputEvent::GesturePinchUpdate) { 391 } else if (gesture_event.type() == WebInputEvent::GesturePinchUpdate) {
392 float scale = gesture_event.data.pinchUpdate.scale; 392 float scale = gesture_event.data.pinchUpdate.scale;
393 gesture_transform.Translate(-gesture_event.x, -gesture_event.y); 393 gesture_transform.Translate(-gesture_event.x, -gesture_event.y);
394 gesture_transform.Scale(scale, scale); 394 gesture_transform.Scale(scale, scale);
395 gesture_transform.Translate(gesture_event.x, gesture_event.y); 395 gesture_transform.Translate(gesture_event.x, gesture_event.y);
396 } else { 396 } else {
397 NOTREACHED() << "Invalid event type for transform retrieval: " 397 NOTREACHED() << "Invalid event type for transform retrieval: "
398 << WebInputEvent::GetName(gesture_event.type); 398 << WebInputEvent::GetName(gesture_event.type());
399 } 399 }
400 return gesture_transform; 400 return gesture_transform;
401 } 401 }
402 402
403 } // namespace 403 } // namespace
404 404
405 bool CanCoalesce(const blink::WebInputEvent& event_to_coalesce, 405 bool CanCoalesce(const blink::WebInputEvent& event_to_coalesce,
406 const blink::WebInputEvent& event) { 406 const blink::WebInputEvent& event) {
407 if (blink::WebInputEvent::isGestureEventType(event_to_coalesce.type) && 407 if (blink::WebInputEvent::isGestureEventType(event_to_coalesce.type()) &&
408 blink::WebInputEvent::isGestureEventType(event.type)) { 408 blink::WebInputEvent::isGestureEventType(event.type())) {
409 return CanCoalesce( 409 return CanCoalesce(
410 static_cast<const blink::WebGestureEvent&>(event_to_coalesce), 410 static_cast<const blink::WebGestureEvent&>(event_to_coalesce),
411 static_cast<const blink::WebGestureEvent&>(event)); 411 static_cast<const blink::WebGestureEvent&>(event));
412 } 412 }
413 if (blink::WebInputEvent::isMouseEventType(event_to_coalesce.type) && 413 if (blink::WebInputEvent::isMouseEventType(event_to_coalesce.type()) &&
414 blink::WebInputEvent::isMouseEventType(event.type)) { 414 blink::WebInputEvent::isMouseEventType(event.type())) {
415 return CanCoalesce( 415 return CanCoalesce(
416 static_cast<const blink::WebMouseEvent&>(event_to_coalesce), 416 static_cast<const blink::WebMouseEvent&>(event_to_coalesce),
417 static_cast<const blink::WebMouseEvent&>(event)); 417 static_cast<const blink::WebMouseEvent&>(event));
418 } 418 }
419 if (blink::WebInputEvent::isTouchEventType(event_to_coalesce.type) && 419 if (blink::WebInputEvent::isTouchEventType(event_to_coalesce.type()) &&
420 blink::WebInputEvent::isTouchEventType(event.type)) { 420 blink::WebInputEvent::isTouchEventType(event.type())) {
421 return CanCoalesce( 421 return CanCoalesce(
422 static_cast<const blink::WebTouchEvent&>(event_to_coalesce), 422 static_cast<const blink::WebTouchEvent&>(event_to_coalesce),
423 static_cast<const blink::WebTouchEvent&>(event)); 423 static_cast<const blink::WebTouchEvent&>(event));
424 } 424 }
425 if (event_to_coalesce.type == blink::WebInputEvent::MouseWheel && 425 if (event_to_coalesce.type() == blink::WebInputEvent::MouseWheel &&
426 event.type == blink::WebInputEvent::MouseWheel) { 426 event.type() == blink::WebInputEvent::MouseWheel) {
427 return CanCoalesce( 427 return CanCoalesce(
428 static_cast<const blink::WebMouseWheelEvent&>(event_to_coalesce), 428 static_cast<const blink::WebMouseWheelEvent&>(event_to_coalesce),
429 static_cast<const blink::WebMouseWheelEvent&>(event)); 429 static_cast<const blink::WebMouseWheelEvent&>(event));
430 } 430 }
431 return false; 431 return false;
432 } 432 }
433 433
434 void Coalesce(const blink::WebInputEvent& event_to_coalesce, 434 void Coalesce(const blink::WebInputEvent& event_to_coalesce,
435 blink::WebInputEvent* event) { 435 blink::WebInputEvent* event) {
436 if (blink::WebInputEvent::isGestureEventType(event_to_coalesce.type) && 436 if (blink::WebInputEvent::isGestureEventType(event_to_coalesce.type()) &&
437 blink::WebInputEvent::isGestureEventType(event->type)) { 437 blink::WebInputEvent::isGestureEventType(event->type())) {
438 Coalesce(static_cast<const blink::WebGestureEvent&>(event_to_coalesce), 438 Coalesce(static_cast<const blink::WebGestureEvent&>(event_to_coalesce),
439 static_cast<blink::WebGestureEvent*>(event)); 439 static_cast<blink::WebGestureEvent*>(event));
440 return; 440 return;
441 } 441 }
442 if (blink::WebInputEvent::isMouseEventType(event_to_coalesce.type) && 442 if (blink::WebInputEvent::isMouseEventType(event_to_coalesce.type()) &&
443 blink::WebInputEvent::isMouseEventType(event->type)) { 443 blink::WebInputEvent::isMouseEventType(event->type())) {
444 Coalesce(static_cast<const blink::WebMouseEvent&>(event_to_coalesce), 444 Coalesce(static_cast<const blink::WebMouseEvent&>(event_to_coalesce),
445 static_cast<blink::WebMouseEvent*>(event)); 445 static_cast<blink::WebMouseEvent*>(event));
446 return; 446 return;
447 } 447 }
448 if (blink::WebInputEvent::isTouchEventType(event_to_coalesce.type) && 448 if (blink::WebInputEvent::isTouchEventType(event_to_coalesce.type()) &&
449 blink::WebInputEvent::isTouchEventType(event->type)) { 449 blink::WebInputEvent::isTouchEventType(event->type())) {
450 Coalesce(static_cast<const blink::WebTouchEvent&>(event_to_coalesce), 450 Coalesce(static_cast<const blink::WebTouchEvent&>(event_to_coalesce),
451 static_cast<blink::WebTouchEvent*>(event)); 451 static_cast<blink::WebTouchEvent*>(event));
452 return; 452 return;
453 } 453 }
454 if (event_to_coalesce.type == blink::WebInputEvent::MouseWheel && 454 if (event_to_coalesce.type() == blink::WebInputEvent::MouseWheel &&
455 event->type == blink::WebInputEvent::MouseWheel) { 455 event->type() == blink::WebInputEvent::MouseWheel) {
456 Coalesce(static_cast<const blink::WebMouseWheelEvent&>(event_to_coalesce), 456 Coalesce(static_cast<const blink::WebMouseWheelEvent&>(event_to_coalesce),
457 static_cast<blink::WebMouseWheelEvent*>(event)); 457 static_cast<blink::WebMouseWheelEvent*>(event));
458 } 458 }
459 } 459 }
460 460
461 // Whether |event_in_queue| is GesturePinchUpdate or GestureScrollUpdate and 461 // Whether |event_in_queue| is GesturePinchUpdate or GestureScrollUpdate and
462 // has the same modifiers/source as the new scroll/pinch event. Compatible 462 // has the same modifiers/source as the new scroll/pinch event. Compatible
463 // scroll and pinch event pairs can be logically coalesced. 463 // scroll and pinch event pairs can be logically coalesced.
464 bool IsCompatibleScrollorPinch(const WebGestureEvent& new_event, 464 bool IsCompatibleScrollorPinch(const WebGestureEvent& new_event,
465 const WebGestureEvent& event_in_queue) { 465 const WebGestureEvent& event_in_queue) {
466 DCHECK(new_event.type == WebInputEvent::GestureScrollUpdate || 466 DCHECK(new_event.type() == WebInputEvent::GestureScrollUpdate ||
467 new_event.type == WebInputEvent::GesturePinchUpdate) 467 new_event.type() == WebInputEvent::GesturePinchUpdate)
468 << "Invalid event type for pinch/scroll coalescing: " 468 << "Invalid event type for pinch/scroll coalescing: "
469 << WebInputEvent::GetName(new_event.type); 469 << WebInputEvent::GetName(new_event.type());
470 DLOG_IF(WARNING, new_event.timeStampSeconds < event_in_queue.timeStampSeconds) 470 DLOG_IF(WARNING,
471 new_event.timeStampSeconds() < event_in_queue.timeStampSeconds())
471 << "Event time not monotonic?\n"; 472 << "Event time not monotonic?\n";
472 return (event_in_queue.type == WebInputEvent::GestureScrollUpdate || 473 return (event_in_queue.type() == WebInputEvent::GestureScrollUpdate ||
473 event_in_queue.type == WebInputEvent::GesturePinchUpdate) && 474 event_in_queue.type() == WebInputEvent::GesturePinchUpdate) &&
474 event_in_queue.modifiers == new_event.modifiers && 475 event_in_queue.modifiers() == new_event.modifiers() &&
475 event_in_queue.sourceDevice == new_event.sourceDevice; 476 event_in_queue.sourceDevice == new_event.sourceDevice;
476 } 477 }
477 478
478 std::pair<WebGestureEvent, WebGestureEvent> CoalesceScrollAndPinch( 479 std::pair<WebGestureEvent, WebGestureEvent> CoalesceScrollAndPinch(
479 const WebGestureEvent* second_last_event, 480 const WebGestureEvent* second_last_event,
480 const WebGestureEvent& last_event, 481 const WebGestureEvent& last_event,
481 const WebGestureEvent& new_event) { 482 const WebGestureEvent& new_event) {
482 DCHECK(!CanCoalesce(new_event, last_event)) 483 DCHECK(!CanCoalesce(new_event, last_event))
483 << "New event can be coalesced with the last event in queue directly."; 484 << "New event can be coalesced with the last event in queue directly.";
484 DCHECK(IsContinuousGestureEvent(new_event.type)); 485 DCHECK(IsContinuousGestureEvent(new_event.type()));
485 DCHECK(IsCompatibleScrollorPinch(new_event, last_event)); 486 DCHECK(IsCompatibleScrollorPinch(new_event, last_event));
486 DCHECK(!second_last_event || 487 DCHECK(!second_last_event ||
487 IsCompatibleScrollorPinch(new_event, *second_last_event)); 488 IsCompatibleScrollorPinch(new_event, *second_last_event));
488 489
489 WebGestureEvent scroll_event; 490 WebGestureEvent scroll_event(WebInputEvent::GestureScrollUpdate,
491 new_event.modifiers(),
492 new_event.timeStampSeconds());
490 WebGestureEvent pinch_event; 493 WebGestureEvent pinch_event;
491 scroll_event.modifiers |= new_event.modifiers;
492 scroll_event.sourceDevice = new_event.sourceDevice; 494 scroll_event.sourceDevice = new_event.sourceDevice;
493 scroll_event.timeStampSeconds = new_event.timeStampSeconds;
494 pinch_event = scroll_event; 495 pinch_event = scroll_event;
495 scroll_event.type = WebInputEvent::GestureScrollUpdate; 496 pinch_event.setType(WebInputEvent::GesturePinchUpdate);
496 pinch_event.type = WebInputEvent::GesturePinchUpdate; 497 pinch_event.x = new_event.type() == WebInputEvent::GesturePinchUpdate
497 pinch_event.x = new_event.type == WebInputEvent::GesturePinchUpdate
498 ? new_event.x 498 ? new_event.x
499 : last_event.x; 499 : last_event.x;
500 pinch_event.y = new_event.type == WebInputEvent::GesturePinchUpdate 500 pinch_event.y = new_event.type() == WebInputEvent::GesturePinchUpdate
501 ? new_event.y 501 ? new_event.y
502 : last_event.y; 502 : last_event.y;
503 503
504 gfx::Transform combined_scroll_pinch = GetTransformForEvent(last_event); 504 gfx::Transform combined_scroll_pinch = GetTransformForEvent(last_event);
505 if (second_last_event) { 505 if (second_last_event) {
506 combined_scroll_pinch.PreconcatTransform( 506 combined_scroll_pinch.PreconcatTransform(
507 GetTransformForEvent(*second_last_event)); 507 GetTransformForEvent(*second_last_event));
508 } 508 }
509 combined_scroll_pinch.ConcatTransform(GetTransformForEvent(new_event)); 509 combined_scroll_pinch.ConcatTransform(GetTransformForEvent(new_event));
510 510
(...skipping 18 matching lines...) Expand all
529 const MotionEvent& event, 529 const MotionEvent& event,
530 bool moved_beyond_slop_region) { 530 bool moved_beyond_slop_region) {
531 static_assert(static_cast<int>(MotionEvent::MAX_TOUCH_POINT_COUNT) == 531 static_assert(static_cast<int>(MotionEvent::MAX_TOUCH_POINT_COUNT) ==
532 static_cast<int>(blink::WebTouchEvent::kTouchesLengthCap), 532 static_cast<int>(blink::WebTouchEvent::kTouchesLengthCap),
533 "inconsistent maximum number of active touch points"); 533 "inconsistent maximum number of active touch points");
534 534
535 blink::WebTouchEvent result( 535 blink::WebTouchEvent result(
536 ToWebTouchEventType(event.GetAction()), 536 ToWebTouchEventType(event.GetAction()),
537 EventFlagsToWebEventModifiers(event.GetFlags()), 537 EventFlagsToWebEventModifiers(event.GetFlags()),
538 ui::EventTimeStampToSeconds(event.GetEventTime())); 538 ui::EventTimeStampToSeconds(event.GetEventTime()));
539 result.dispatchType = result.type == WebInputEvent::TouchCancel 539 result.dispatchType = result.type() == WebInputEvent::TouchCancel
540 ? WebInputEvent::EventNonBlocking 540 ? WebInputEvent::EventNonBlocking
541 : WebInputEvent::Blocking; 541 : WebInputEvent::Blocking;
542 result.movedBeyondSlopRegion = moved_beyond_slop_region; 542 result.movedBeyondSlopRegion = moved_beyond_slop_region;
543 543
544 // TODO(mustaq): MotionEvent flags seems unrelated, should use 544 // TODO(mustaq): MotionEvent flags seems unrelated, should use
545 // metaState instead? 545 // metaState instead?
546 546
547 DCHECK_NE(event.GetUniqueEventId(), 0U); 547 DCHECK_NE(event.GetUniqueEventId(), 0U);
548 result.uniqueTouchEventId = event.GetUniqueEventId(); 548 result.uniqueTouchEventId = event.GetUniqueEventId();
549 result.touchesLength = 549 result.touchesLength =
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 return TranslateAndScaleWebInputEvent(event, gfx::Vector2d(0, 0), scale); 732 return TranslateAndScaleWebInputEvent(event, gfx::Vector2d(0, 0), scale);
733 } 733 }
734 734
735 std::unique_ptr<blink::WebInputEvent> TranslateAndScaleWebInputEvent( 735 std::unique_ptr<blink::WebInputEvent> TranslateAndScaleWebInputEvent(
736 const blink::WebInputEvent& event, 736 const blink::WebInputEvent& event,
737 const gfx::Vector2d& delta, 737 const gfx::Vector2d& delta,
738 float scale) { 738 float scale) {
739 std::unique_ptr<blink::WebInputEvent> scaled_event; 739 std::unique_ptr<blink::WebInputEvent> scaled_event;
740 if (scale == 1.f && delta.IsZero()) 740 if (scale == 1.f && delta.IsZero())
741 return scaled_event; 741 return scaled_event;
742 if (event.type == blink::WebMouseEvent::MouseWheel) { 742 if (event.type() == blink::WebMouseEvent::MouseWheel) {
743 blink::WebMouseWheelEvent* wheel_event = new blink::WebMouseWheelEvent; 743 blink::WebMouseWheelEvent* wheel_event = new blink::WebMouseWheelEvent;
744 scaled_event.reset(wheel_event); 744 scaled_event.reset(wheel_event);
745 *wheel_event = static_cast<const blink::WebMouseWheelEvent&>(event); 745 *wheel_event = static_cast<const blink::WebMouseWheelEvent&>(event);
746 wheel_event->x += delta.x(); 746 wheel_event->x += delta.x();
747 wheel_event->y += delta.y(); 747 wheel_event->y += delta.y();
748 wheel_event->x *= scale; 748 wheel_event->x *= scale;
749 wheel_event->y *= scale; 749 wheel_event->y *= scale;
750 wheel_event->deltaX *= scale; 750 wheel_event->deltaX *= scale;
751 wheel_event->deltaY *= scale; 751 wheel_event->deltaY *= scale;
752 wheel_event->wheelTicksX *= scale; 752 wheel_event->wheelTicksX *= scale;
753 wheel_event->wheelTicksY *= scale; 753 wheel_event->wheelTicksY *= scale;
754 } else if (blink::WebInputEvent::isMouseEventType(event.type)) { 754 } else if (blink::WebInputEvent::isMouseEventType(event.type())) {
755 blink::WebMouseEvent* mouse_event = new blink::WebMouseEvent; 755 blink::WebMouseEvent* mouse_event = new blink::WebMouseEvent;
756 scaled_event.reset(mouse_event); 756 scaled_event.reset(mouse_event);
757 *mouse_event = static_cast<const blink::WebMouseEvent&>(event); 757 *mouse_event = static_cast<const blink::WebMouseEvent&>(event);
758 mouse_event->x += delta.x(); 758 mouse_event->x += delta.x();
759 mouse_event->y += delta.y(); 759 mouse_event->y += delta.y();
760 mouse_event->x *= scale; 760 mouse_event->x *= scale;
761 mouse_event->y *= scale; 761 mouse_event->y *= scale;
762 mouse_event->windowX = mouse_event->x; 762 mouse_event->windowX = mouse_event->x;
763 mouse_event->windowY = mouse_event->y; 763 mouse_event->windowY = mouse_event->y;
764 mouse_event->movementX *= scale; 764 mouse_event->movementX *= scale;
765 mouse_event->movementY *= scale; 765 mouse_event->movementY *= scale;
766 } else if (blink::WebInputEvent::isTouchEventType(event.type)) { 766 } else if (blink::WebInputEvent::isTouchEventType(event.type())) {
767 blink::WebTouchEvent* touch_event = new blink::WebTouchEvent; 767 blink::WebTouchEvent* touch_event = new blink::WebTouchEvent;
768 scaled_event.reset(touch_event); 768 scaled_event.reset(touch_event);
769 *touch_event = static_cast<const blink::WebTouchEvent&>(event); 769 *touch_event = static_cast<const blink::WebTouchEvent&>(event);
770 for (unsigned i = 0; i < touch_event->touchesLength; i++) { 770 for (unsigned i = 0; i < touch_event->touchesLength; i++) {
771 touch_event->touches[i].position.x += delta.x(); 771 touch_event->touches[i].position.x += delta.x();
772 touch_event->touches[i].position.y += delta.y(); 772 touch_event->touches[i].position.y += delta.y();
773 touch_event->touches[i].position.x *= scale; 773 touch_event->touches[i].position.x *= scale;
774 touch_event->touches[i].position.y *= scale; 774 touch_event->touches[i].position.y *= scale;
775 touch_event->touches[i].radiusX *= scale; 775 touch_event->touches[i].radiusX *= scale;
776 touch_event->touches[i].radiusY *= scale; 776 touch_event->touches[i].radiusY *= scale;
777 } 777 }
778 } else if (blink::WebInputEvent::isGestureEventType(event.type)) { 778 } else if (blink::WebInputEvent::isGestureEventType(event.type())) {
779 blink::WebGestureEvent* gesture_event = new blink::WebGestureEvent; 779 blink::WebGestureEvent* gesture_event = new blink::WebGestureEvent;
780 scaled_event.reset(gesture_event); 780 scaled_event.reset(gesture_event);
781 *gesture_event = static_cast<const blink::WebGestureEvent&>(event); 781 *gesture_event = static_cast<const blink::WebGestureEvent&>(event);
782 gesture_event->x += delta.x(); 782 gesture_event->x += delta.x();
783 gesture_event->y += delta.y(); 783 gesture_event->y += delta.y();
784 gesture_event->x *= scale; 784 gesture_event->x *= scale;
785 gesture_event->y *= scale; 785 gesture_event->y *= scale;
786 switch (gesture_event->type) { 786 switch (gesture_event->type()) {
787 case blink::WebInputEvent::GestureScrollUpdate: 787 case blink::WebInputEvent::GestureScrollUpdate:
788 gesture_event->data.scrollUpdate.deltaX *= scale; 788 gesture_event->data.scrollUpdate.deltaX *= scale;
789 gesture_event->data.scrollUpdate.deltaY *= scale; 789 gesture_event->data.scrollUpdate.deltaY *= scale;
790 break; 790 break;
791 case blink::WebInputEvent::GestureScrollBegin: 791 case blink::WebInputEvent::GestureScrollBegin:
792 gesture_event->data.scrollBegin.deltaXHint *= scale; 792 gesture_event->data.scrollBegin.deltaXHint *= scale;
793 gesture_event->data.scrollBegin.deltaYHint *= scale; 793 gesture_event->data.scrollBegin.deltaYHint *= scale;
794 break; 794 break;
795 795
796 case blink::WebInputEvent::GesturePinchUpdate: 796 case blink::WebInputEvent::GesturePinchUpdate:
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
961 switch (type) { 961 switch (type) {
962 case blink::WebGestureEvent::GestureScrollUpdate: 962 case blink::WebGestureEvent::GestureScrollUpdate:
963 case blink::WebGestureEvent::GesturePinchUpdate: 963 case blink::WebGestureEvent::GesturePinchUpdate:
964 return true; 964 return true;
965 default: 965 default:
966 return false; 966 return false;
967 } 967 }
968 } 968 }
969 969
970 } // namespace ui 970 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698