| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |