Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "core/input/PointerEventManager.h" | 5 #include "core/input/PointerEventManager.h" |
| 6 | 6 |
| 7 #include "core/dom/shadow/FlatTreeTraversal.h" | 7 #include "core/dom/shadow/FlatTreeTraversal.h" |
| 8 #include "core/events/MouseEvent.h" | 8 #include "core/events/MouseEvent.h" |
| 9 #include "core/input/EventHandler.h" | 9 #include "core/input/EventHandler.h" |
| 10 | 10 |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 287 if (sendEvent) | 287 if (sendEvent) |
| 288 sendNodeTransitionEvents(node.target, target, pointerEvent); | 288 sendNodeTransitionEvents(node.target, target, pointerEvent); |
| 289 } else if (target) { | 289 } else if (target) { |
| 290 m_nodeUnderPointer.add(pointerEvent->pointerId(), | 290 m_nodeUnderPointer.add(pointerEvent->pointerId(), |
| 291 EventTargetAttributes(target, false)); | 291 EventTargetAttributes(target, false)); |
| 292 if (sendEvent) | 292 if (sendEvent) |
| 293 sendNodeTransitionEvents(nullptr, target, pointerEvent); | 293 sendNodeTransitionEvents(nullptr, target, pointerEvent); |
| 294 } | 294 } |
| 295 } | 295 } |
| 296 | 296 |
| 297 void PointerEventManager::sendTouchCancelPointerEvent(PassRefPtrWillBeRawPtr<Eve ntTarget> prpTarget, const PlatformTouchPoint& point) | 297 void PointerEventManager::blockTouchPointers() |
| 298 { | 298 { |
| 299 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; | 299 if (m_inCanceledStateForPointerTypeTouch) |
| 300 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.create PointerCancelEvent(point); | 300 return; |
| 301 m_inCanceledStateForPointerTypeTouch = true; | |
| 301 | 302 |
| 303 WillBeHeapVector<int> touchPointerIds | |
| 304 = m_pointerEventFactory.getPointerIdsOfType(WebPointerProperties::Pointe rType::Touch); | |
| 302 | 305 |
| 303 processCaptureAndPositionOfPointerEvent(pointerEvent, target); | 306 for (int pointerId : touchPointerIds) { |
| 307 RefPtrWillBeRawPtr<PointerEvent> pointerEvent | |
| 308 = m_pointerEventFactory.createPointerCancelEvent( | |
| 309 pointerId, WebPointerProperties::PointerType::Touch); | |
| 304 | 310 |
| 305 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v s pointer event capturing | 311 ASSERT(m_nodeUnderPointer.contains(pointerId)); |
| 306 dispatchPointerEvent( | 312 RefPtrWillBeRawPtr<EventTarget> target = m_nodeUnderPointer.get(pointerI d).target; |
| 307 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()), | |
| 308 pointerEvent.get()); | |
| 309 | 313 |
| 310 setNodeUnderPointer(pointerEvent, nullptr); | 314 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturi ng vs pointer event capturing |
|
tdresser
2016/03/30 19:19:01
Missing .
mustaq
2016/03/30 20:21:05
Done.
| |
| 315 target->dispatchEvent(pointerEvent.get()); | |
| 311 | 316 |
| 312 removePointer(pointerEvent); | 317 setNodeUnderPointer(pointerEvent, nullptr); |
| 318 m_pointerEventFactory.remove(pointerId); | |
| 319 } | |
| 320 } | |
| 321 | |
| 322 void PointerEventManager::unblockTouchPointers() | |
| 323 { | |
| 324 m_inCanceledStateForPointerTypeTouch = false; | |
| 313 } | 325 } |
| 314 | 326 |
| 315 WebInputEventResult PointerEventManager::sendTouchPointerEvent( | 327 WebInputEventResult PointerEventManager::sendTouchPointerEvent( |
| 316 PassRefPtrWillBeRawPtr<EventTarget> prpTarget, | 328 PassRefPtrWillBeRawPtr<EventTarget> prpTarget, |
| 317 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, | 329 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, |
| 318 const double width, const double height, | 330 const double width, const double height, |
| 319 const double clientX, const double clientY) | 331 const double clientX, const double clientY) |
| 320 { | 332 { |
| 333 if (m_inCanceledStateForPointerTypeTouch) | |
| 334 return WebInputEventResult::NotHandled; | |
| 335 | |
| 321 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; | 336 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; |
| 322 | 337 |
| 323 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = | 338 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = |
| 324 m_pointerEventFactory.create( | 339 m_pointerEventFactory.create( |
| 325 pointerEventNameForTouchPointState(touchPoint.state()), | 340 pointerEventNameForTouchPointState(touchPoint.state()), |
| 326 touchPoint, modifiers, width, height, clientX, clientY); | 341 touchPoint, modifiers, width, height, clientX, clientY); |
| 327 | 342 |
| 328 processCaptureAndPositionOfPointerEvent(pointerEvent, target); | 343 processCaptureAndPositionOfPointerEvent(pointerEvent, target); |
| 329 | 344 |
| 330 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v s pointer event capturing | 345 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v s pointer event capturing |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 392 clear(); | 407 clear(); |
| 393 } | 408 } |
| 394 | 409 |
| 395 PointerEventManager::~PointerEventManager() | 410 PointerEventManager::~PointerEventManager() |
| 396 { | 411 { |
| 397 } | 412 } |
| 398 | 413 |
| 399 void PointerEventManager::clear() | 414 void PointerEventManager::clear() |
| 400 { | 415 { |
| 401 m_preventMouseEventForPointerTypeMouse = false; | 416 m_preventMouseEventForPointerTypeMouse = false; |
| 417 m_inCanceledStateForPointerTypeTouch = false; | |
| 402 m_pointerEventFactory.clear(); | 418 m_pointerEventFactory.clear(); |
| 403 m_nodeUnderPointer.clear(); | 419 m_nodeUnderPointer.clear(); |
| 404 } | 420 } |
| 405 | 421 |
| 406 void PointerEventManager::processCaptureAndPositionOfPointerEvent( | 422 void PointerEventManager::processCaptureAndPositionOfPointerEvent( |
| 407 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, | 423 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent, |
| 408 const PassRefPtrWillBeRawPtr<EventTarget> prpHitTestTarget, | 424 const PassRefPtrWillBeRawPtr<EventTarget> prpHitTestTarget, |
| 409 const PassRefPtrWillBeRawPtr<EventTarget> lastNodeUnderMouse, | 425 const PassRefPtrWillBeRawPtr<EventTarget> lastNodeUnderMouse, |
| 410 const PlatformMouseEvent& mouseEvent, | 426 const PlatformMouseEvent& mouseEvent, |
| 411 bool sendMouseEvent, bool setPointerPosition) | 427 bool sendMouseEvent, bool setPointerPosition) |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 524 { | 540 { |
| 525 if (m_pointerCaptureTarget.contains(pointerId)) | 541 if (m_pointerCaptureTarget.contains(pointerId)) |
| 526 return m_pointerCaptureTarget.get(pointerId); | 542 return m_pointerCaptureTarget.get(pointerId); |
| 527 return nullptr; | 543 return nullptr; |
| 528 } | 544 } |
| 529 | 545 |
| 530 void PointerEventManager::removePointer( | 546 void PointerEventManager::removePointer( |
| 531 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent) | 547 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent) |
| 532 { | 548 { |
| 533 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; | 549 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; |
| 534 if (m_pointerEventFactory.remove(pointerEvent)) { | 550 int pointerId = pointerEvent->pointerId(); |
| 535 int pointerId = pointerEvent->pointerId(); | 551 if (m_pointerEventFactory.remove(pointerId)) { |
| 536 m_pendingPointerCaptureTarget.remove(pointerId); | 552 m_pendingPointerCaptureTarget.remove(pointerId); |
| 537 m_pointerCaptureTarget.remove(pointerId); | 553 m_pointerCaptureTarget.remove(pointerId); |
| 538 m_nodeUnderPointer.remove(pointerId); | 554 m_nodeUnderPointer.remove(pointerId); |
| 539 } | 555 } |
| 540 } | 556 } |
| 541 | 557 |
| 542 void PointerEventManager::elementRemoved(EventTarget* target) | 558 void PointerEventManager::elementRemoved(EventTarget* target) |
| 543 { | 559 { |
| 544 removeTargetFromPointerCapturingMapping(m_pendingPointerCaptureTarget, targe t); | 560 removeTargetFromPointerCapturingMapping(m_pendingPointerCaptureTarget, targe t); |
| 545 } | 561 } |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 570 { | 586 { |
| 571 #if ENABLE(OILPAN) | 587 #if ENABLE(OILPAN) |
| 572 visitor->trace(m_nodeUnderPointer); | 588 visitor->trace(m_nodeUnderPointer); |
| 573 visitor->trace(m_pointerCaptureTarget); | 589 visitor->trace(m_pointerCaptureTarget); |
| 574 visitor->trace(m_pendingPointerCaptureTarget); | 590 visitor->trace(m_pendingPointerCaptureTarget); |
| 575 #endif | 591 #endif |
| 576 } | 592 } |
| 577 | 593 |
| 578 | 594 |
| 579 } // namespace blink | 595 } // namespace blink |
| OLD | NEW |