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

Unified Diff: third_party/WebKit/Source/core/input/PointerEventManager.cpp

Issue 2350433002: Extract more of the mouse logic from EventHandler (Closed)
Patch Set: Yet another rebase because of a presubmit rule bug Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/input/PointerEventManager.cpp
diff --git a/third_party/WebKit/Source/core/input/PointerEventManager.cpp b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
index 9c1c959f29b6ab4c7e62e0a7f90508fdc5e12128..6cd9a7c9aafeb68509138f3fc34b017efa2964e8 100644
--- a/third_party/WebKit/Source/core/input/PointerEventManager.cpp
+++ b/third_party/WebKit/Source/core/input/PointerEventManager.cpp
@@ -52,6 +52,35 @@ bool isInDocument(EventTarget* n) {
} // namespace
+PointerEventManager::PointerEventManager(LocalFrame* frame,
+ MouseEventManager* mouseEventManager)
+ : m_frame(frame),
+ m_touchEventManager(new TouchEventManager(frame)),
+ m_mouseEventManager(mouseEventManager) {
+ clear();
+}
+
+void PointerEventManager::clear() {
+ for (auto& entry : m_preventMouseEventForPointerType)
+ entry = false;
+ m_touchEventManager->clear();
+ m_inCanceledStateForPointerTypeTouch = false;
+ m_pointerEventFactory.clear();
+ m_touchIdsForCanceledPointerdowns.clear();
+ m_nodeUnderPointer.clear();
+ m_pointerCaptureTarget.clear();
+ m_pendingPointerCaptureTarget.clear();
+}
+
+DEFINE_TRACE(PointerEventManager) {
+ visitor->trace(m_frame);
+ visitor->trace(m_nodeUnderPointer);
+ visitor->trace(m_pointerCaptureTarget);
+ visitor->trace(m_pendingPointerCaptureTarget);
+ visitor->trace(m_touchEventManager);
+ visitor->trace(m_mouseEventManager);
+}
+
PointerEventManager::PointerEventBoundaryEventDispatcher::
PointerEventBoundaryEventDispatcher(
PointerEventManager* pointerEventManager,
@@ -153,11 +182,9 @@ EventTarget* PointerEventManager::getEffectiveTargetForPointerEvent(
return target;
}
-void PointerEventManager::sendMouseAndPossiblyPointerBoundaryEvents(
- Node* exitedNode,
+void PointerEventManager::sendMouseAndPointerBoundaryEvents(
Node* enteredNode,
- const PlatformMouseEvent& mouseEvent,
- bool isFrameBoundaryTransition) {
+ const PlatformMouseEvent& mouseEvent) {
// Mouse event type does not matter as this pointerevent will only be used
// to create boundary pointer events and its type will be overridden in
// |sendBoundaryEvents| function.
@@ -169,15 +196,13 @@ void PointerEventManager::sendMouseAndPossiblyPointerBoundaryEvents(
// stage. So if the event is not frame boundary transition it is only a
// compatibility mouse event and we do not need to change pointer event
// behavior regarding preventMouseEvent state in that case.
- if (isFrameBoundaryTransition && dummyPointerEvent->buttons() == 0 &&
- dummyPointerEvent->isPrimary()) {
+ if (dummyPointerEvent->buttons() == 0 && dummyPointerEvent->isPrimary()) {
m_preventMouseEventForPointerType[toPointerTypeIndex(
mouseEvent.pointerProperties().pointerType)] = false;
}
processCaptureAndPositionOfPointerEvent(dummyPointerEvent, enteredNode,
- exitedNode, mouseEvent, true,
- isFrameBoundaryTransition);
+ mouseEvent, true);
}
void PointerEventManager::sendBoundaryEvents(EventTarget* exitedTarget,
@@ -410,10 +435,7 @@ WebInputEventResult PointerEventManager::sendTouchPointerEvent(
WebInputEventResult PointerEventManager::sendMousePointerEvent(
Node* target,
const AtomicString& mouseEventType,
- int clickCount,
- const PlatformMouseEvent& mouseEvent,
- Node* lastNodeUnderMouse,
- Node** newNodeUnderMouse) {
+ const PlatformMouseEvent& mouseEvent) {
PointerEvent* pointerEvent = m_pointerEventFactory.create(
mouseEventType, mouseEvent, m_frame->document()->domWindow());
@@ -431,14 +453,7 @@ WebInputEventResult PointerEventManager::sendMousePointerEvent(
}
EventTarget* pointerEventTarget = processCaptureAndPositionOfPointerEvent(
- pointerEvent, target, lastNodeUnderMouse, mouseEvent, true, true);
-
- if (pointerEventTarget) {
- // This is to prevent incorrect boundary events if capturing transition was
- // delayed.
- *newNodeUnderMouse = pointerEventTarget->toNode();
- DCHECK(*newNodeUnderMouse);
- }
+ pointerEvent, target, mouseEvent, true);
EventTarget* effectiveTarget = getEffectiveTargetForPointerEvent(
pointerEventTarget, pointerEvent->pointerId());
@@ -468,9 +483,8 @@ WebInputEventResult PointerEventManager::sendMousePointerEvent(
}
}
result = EventHandlingUtil::mergeEventResult(
- result,
- m_mouseEventManager->dispatchMouseEvent(
- mouseTarget, mouseEventType, mouseEvent, nullptr, clickCount));
+ result, m_mouseEventManager->dispatchMouseEvent(
+ mouseTarget, mouseEventType, mouseEvent, nullptr));
}
if (pointerEvent->type() == EventTypeNames::pointerup ||
@@ -488,26 +502,6 @@ WebInputEventResult PointerEventManager::sendMousePointerEvent(
return result;
}
-PointerEventManager::PointerEventManager(LocalFrame* frame,
- MouseEventManager* mouseEventManager)
- : m_frame(frame),
- m_touchEventManager(new TouchEventManager(frame)),
- m_mouseEventManager(mouseEventManager) {
- clear();
-}
-
-void PointerEventManager::clear() {
- for (auto& entry : m_preventMouseEventForPointerType)
- entry = false;
- m_touchEventManager->clear();
- m_inCanceledStateForPointerTypeTouch = false;
- m_pointerEventFactory.clear();
- m_touchIdsForCanceledPointerdowns.clear();
- m_nodeUnderPointer.clear();
- m_pointerCaptureTarget.clear();
- m_pendingPointerCaptureTarget.clear();
-}
-
bool PointerEventManager::getPointerCaptureState(
int pointerId,
EventTarget** pointerCaptureTarget,
@@ -532,27 +526,22 @@ bool PointerEventManager::getPointerCaptureState(
EventTarget* PointerEventManager::processCaptureAndPositionOfPointerEvent(
PointerEvent* pointerEvent,
EventTarget* hitTestTarget,
- EventTarget* lastNodeUnderMouse,
const PlatformMouseEvent& mouseEvent,
- bool sendMouseEvent,
- bool setPointerPosition) {
- if (setPointerPosition) {
- processPendingPointerCapture(pointerEvent);
-
- if (!RuntimeEnabledFeatures::pointerEventV1SpecCapturingEnabled()) {
- PointerCapturingMap::const_iterator it =
- m_pointerCaptureTarget.find(pointerEvent->pointerId());
- if (EventTarget* pointercaptureTarget =
- (it != m_pointerCaptureTarget.end()) ? it->value : nullptr)
- hitTestTarget = pointercaptureTarget;
- }
-
- setNodeUnderPointer(pointerEvent, hitTestTarget);
+ bool sendMouseEvent) {
+ processPendingPointerCapture(pointerEvent);
+
+ if (!RuntimeEnabledFeatures::pointerEventV1SpecCapturingEnabled()) {
+ PointerCapturingMap::const_iterator it =
+ m_pointerCaptureTarget.find(pointerEvent->pointerId());
+ if (EventTarget* pointercaptureTarget =
+ (it != m_pointerCaptureTarget.end()) ? it->value : nullptr)
+ hitTestTarget = pointercaptureTarget;
}
+
+ setNodeUnderPointer(pointerEvent, hitTestTarget);
if (sendMouseEvent) {
- // lastNodeUnderMouse is needed here because it is still stored in EventHandler.
- m_mouseEventManager->sendBoundaryEvents(lastNodeUnderMouse, hitTestTarget,
- mouseEvent);
+ m_mouseEventManager->setNodeUnderMouse(
+ hitTestTarget ? hitTestTarget->toNode() : nullptr, mouseEvent);
}
return hitTestTarget;
}
@@ -690,13 +679,4 @@ EventTarget* PointerEventManager::getMouseCapturingNode() {
return getCapturingNode(PointerEventFactory::s_mouseId);
}
-DEFINE_TRACE(PointerEventManager) {
- visitor->trace(m_frame);
- visitor->trace(m_nodeUnderPointer);
- visitor->trace(m_pointerCaptureTarget);
- visitor->trace(m_pendingPointerCaptureTarget);
- visitor->trace(m_touchEventManager);
- visitor->trace(m_mouseEventManager);
-}
-
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/input/PointerEventManager.h ('k') | third_party/WebKit/Source/core/input/ScrollManager.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698