| 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 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 EventTargetAttributes(target, false)); | 267 EventTargetAttributes(target, false)); |
| 268 } | 268 } |
| 269 sendNodeTransitionEvents(node.target, target, pointerEvent); | 269 sendNodeTransitionEvents(node.target, target, pointerEvent); |
| 270 } else if (target) { | 270 } else if (target) { |
| 271 m_nodeUnderPointer.add(pointerEvent->pointerId(), | 271 m_nodeUnderPointer.add(pointerEvent->pointerId(), |
| 272 EventTargetAttributes(target, false)); | 272 EventTargetAttributes(target, false)); |
| 273 sendNodeTransitionEvents(nullptr, target, pointerEvent); | 273 sendNodeTransitionEvents(nullptr, target, pointerEvent); |
| 274 } | 274 } |
| 275 } | 275 } |
| 276 | 276 |
| 277 void PointerEventManager::sendTouchCancelPointerEvent(PassRefPtrWillBeRawPtr<Eve
ntTarget> prpTarget, const PlatformTouchPoint& point) | 277 void PointerEventManager::blockTouchPointers() |
| 278 { | 278 { |
| 279 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; | 279 if (m_inCanceledStateForPointerTypeTouch) |
| 280 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.create
PointerCancel(point); | 280 return; |
| 281 m_inCanceledStateForPointerTypeTouch = true; |
| 281 | 282 |
| 282 processPendingPointerCapture(pointerEvent, target); | 283 for (int pointerId : m_pointerEventFactory.getPointerIdsOfType(WebPointerPro
perties::PointerType::Touch)) { |
| 284 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = m_pointerEventFactory.cr
eatePointerCancel( |
| 285 pointerId, WebPointerProperties::PointerType::Touch); |
| 283 | 286 |
| 284 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturing v
s pointer event capturing | 287 ASSERT(m_nodeUnderPointer.contains(pointerId)); |
| 285 dispatchPointerEvent( | 288 RefPtrWillBeRawPtr<EventTarget> target = m_nodeUnderPointer.get(pointerI
d).target; |
| 286 getEffectiveTargetForPointerEvent(target, pointerEvent->pointerId()), | |
| 287 pointerEvent.get()); | |
| 288 | 289 |
| 289 setNodeUnderPointer(pointerEvent, nullptr); | 290 // TODO(nzolghadr): crbug.com/579553 dealing with implicit touch capturi
ng vs pointer event capturing |
| 291 target->dispatchEvent(pointerEvent.get()); |
| 290 | 292 |
| 291 removePointer(pointerEvent); | 293 m_pointerEventFactory.remove(pointerId); |
| 294 setNodeUnderPointer(pointerEvent, nullptr); |
| 295 } |
| 296 } |
| 297 |
| 298 void PointerEventManager::unblockTouchPointers() |
| 299 { |
| 300 m_inCanceledStateForPointerTypeTouch = false; |
| 292 } | 301 } |
| 293 | 302 |
| 294 WebInputEventResult PointerEventManager::sendTouchPointerEvent( | 303 WebInputEventResult PointerEventManager::sendTouchPointerEvent( |
| 295 PassRefPtrWillBeRawPtr<EventTarget> prpTarget, | 304 PassRefPtrWillBeRawPtr<EventTarget> prpTarget, |
| 296 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, | 305 const PlatformTouchPoint& touchPoint, PlatformEvent::Modifiers modifiers, |
| 297 const double width, const double height, | 306 const double width, const double height, |
| 298 const double clientX, const double clientY) | 307 const double clientX, const double clientY) |
| 299 { | 308 { |
| 309 if (m_inCanceledStateForPointerTypeTouch) |
| 310 return WebInputEventResult::NotHandled; |
| 311 |
| 300 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; | 312 RefPtrWillBeRawPtr<EventTarget> target = prpTarget; |
| 301 | 313 |
| 302 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = | 314 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = |
| 303 m_pointerEventFactory.create( | 315 m_pointerEventFactory.create( |
| 304 pointerEventNameForTouchPointState(touchPoint.state()), | 316 pointerEventNameForTouchPointState(touchPoint.state()), |
| 305 touchPoint, modifiers, width, height, clientX, clientY); | 317 touchPoint, modifiers, width, height, clientX, clientY); |
| 306 | 318 |
| 307 processPendingPointerCapture(pointerEvent, target); | 319 processPendingPointerCapture(pointerEvent, target); |
| 308 | 320 |
| 309 setNodeUnderPointer(pointerEvent, target); | 321 setNodeUnderPointer(pointerEvent, target); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 clear(); | 377 clear(); |
| 366 } | 378 } |
| 367 | 379 |
| 368 PointerEventManager::~PointerEventManager() | 380 PointerEventManager::~PointerEventManager() |
| 369 { | 381 { |
| 370 } | 382 } |
| 371 | 383 |
| 372 void PointerEventManager::clear() | 384 void PointerEventManager::clear() |
| 373 { | 385 { |
| 374 m_preventMouseEventForPointerTypeMouse = false; | 386 m_preventMouseEventForPointerTypeMouse = false; |
| 387 m_inCanceledStateForPointerTypeTouch = false; |
| 375 m_pointerEventFactory.clear(); | 388 m_pointerEventFactory.clear(); |
| 376 m_nodeUnderPointer.clear(); | 389 m_nodeUnderPointer.clear(); |
| 377 } | 390 } |
| 378 | 391 |
| 379 void PointerEventManager::conditionallyEnableMouseEventForPointerTypeMouse( | 392 void PointerEventManager::conditionallyEnableMouseEventForPointerTypeMouse( |
| 380 unsigned modifiers) | 393 unsigned modifiers) |
| 381 { | 394 { |
| 382 | 395 |
| 383 if (MouseEvent::platformModifiersToButtons(modifiers) == | 396 if (MouseEvent::platformModifiersToButtons(modifiers) == |
| 384 static_cast<unsigned short>(MouseEvent::Buttons::None)) | 397 static_cast<unsigned short>(MouseEvent::Buttons::None)) |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 { | 460 { |
| 448 if (m_pointerCaptureTarget.contains(pointerId)) | 461 if (m_pointerCaptureTarget.contains(pointerId)) |
| 449 return m_pointerCaptureTarget.get(pointerId); | 462 return m_pointerCaptureTarget.get(pointerId); |
| 450 return nullptr; | 463 return nullptr; |
| 451 } | 464 } |
| 452 | 465 |
| 453 void PointerEventManager::removePointer( | 466 void PointerEventManager::removePointer( |
| 454 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent) | 467 const PassRefPtrWillBeRawPtr<PointerEvent> prpPointerEvent) |
| 455 { | 468 { |
| 456 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; | 469 RefPtrWillBeRawPtr<PointerEvent> pointerEvent = prpPointerEvent; |
| 457 if (m_pointerEventFactory.remove(pointerEvent)) { | 470 int pointerId = pointerEvent->pointerId(); |
| 458 int pointerId = pointerEvent->pointerId(); | 471 if (m_pointerEventFactory.remove(pointerId)) { |
| 459 m_pendingPointerCaptureTarget.remove(pointerId); | 472 m_pendingPointerCaptureTarget.remove(pointerId); |
| 460 m_pointerCaptureTarget.remove(pointerId); | 473 m_pointerCaptureTarget.remove(pointerId); |
| 461 m_nodeUnderPointer.remove(pointerId); | 474 m_nodeUnderPointer.remove(pointerId); |
| 462 } | 475 } |
| 463 } | 476 } |
| 464 | 477 |
| 465 void PointerEventManager::elementRemoved(EventTarget* target) | 478 void PointerEventManager::elementRemoved(EventTarget* target) |
| 466 { | 479 { |
| 467 removeTargetFromPointerCapturingMapping(m_pointerCaptureTarget, target); | 480 removeTargetFromPointerCapturingMapping(m_pointerCaptureTarget, target); |
| 468 removeTargetFromPointerCapturingMapping(m_pendingPointerCaptureTarget, targe
t); | 481 removeTargetFromPointerCapturingMapping(m_pendingPointerCaptureTarget, targe
t); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 495 { | 508 { |
| 496 #if ENABLE(OILPAN) | 509 #if ENABLE(OILPAN) |
| 497 visitor->trace(m_nodeUnderPointer); | 510 visitor->trace(m_nodeUnderPointer); |
| 498 visitor->trace(m_pointerCaptureTarget); | 511 visitor->trace(m_pointerCaptureTarget); |
| 499 visitor->trace(m_pendingPointerCaptureTarget); | 512 visitor->trace(m_pendingPointerCaptureTarget); |
| 500 #endif | 513 #endif |
| 501 } | 514 } |
| 502 | 515 |
| 503 | 516 |
| 504 } // namespace blink | 517 } // namespace blink |
| OLD | NEW |