Title: [261229] trunk/Source/WebCore
Revision
261229
Author
[email protected]
Date
2020-05-06 08:30:16 -0700 (Wed, 06 May 2020)

Log Message

Factor EventHandler code that sends mouseEnteredContentArea/mouseExitedContentArea into its own function
https://bugs.webkit.org/show_bug.cgi?id=211494

Reviewed by Antti Koivisto.

mouseEnteredContentArea/mouseEnteredContentArea are used only to notify overlay scrollbars
of state changes. Factor the code that calls these functions into a separate EventHandler
function, and refactor it for clarity, now we know that both lastElementUnderMouse and elementUnderMouse
must belong to this EventHandler's Frame's Document.

* page/EventHandler.cpp:
(WebCore::EventHandler::updateMouseEventTargetNode):
(WebCore::EventHandler::notifyScrollableAreasOfMouseEnterExit):
* page/EventHandler.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (261228 => 261229)


--- trunk/Source/WebCore/ChangeLog	2020-05-06 15:00:50 UTC (rev 261228)
+++ trunk/Source/WebCore/ChangeLog	2020-05-06 15:30:16 UTC (rev 261229)
@@ -1,3 +1,20 @@
+2020-05-06  Simon Fraser  <[email protected]>
+
+        Factor EventHandler code that sends mouseEnteredContentArea/mouseExitedContentArea into its own function
+        https://bugs.webkit.org/show_bug.cgi?id=211494
+
+        Reviewed by Antti Koivisto.
+
+        mouseEnteredContentArea/mouseEnteredContentArea are used only to notify overlay scrollbars
+        of state changes. Factor the code that calls these functions into a separate EventHandler
+        function, and refactor it for clarity, now we know that both lastElementUnderMouse and elementUnderMouse
+        must belong to this EventHandler's Frame's Document.
+
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::updateMouseEventTargetNode):
+        (WebCore::EventHandler::notifyScrollableAreasOfMouseEnterExit):
+        * page/EventHandler.h:
+
 2020-05-06  Zalan Bujtas  <[email protected]>
 
         [LFC] BlockFormattingContext::computeHeightAndMargin should special case the table box

Modified: trunk/Source/WebCore/page/EventHandler.cpp (261228 => 261229)


--- trunk/Source/WebCore/page/EventHandler.cpp	2020-05-06 15:00:50 UTC (rev 261228)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2020-05-06 15:30:16 UTC (rev 261229)
@@ -2548,42 +2548,8 @@
 
     // Fire mouseout/mouseover if the mouse has shifted to a different node.
     if (fireMouseOverOut == FireMouseOverOut::Yes) {
-        auto scrollableAreaForLastNode = enclosingScrollableArea(m_lastElementUnderMouse.get());
-        auto scrollableAreaForNodeUnderMouse = enclosingScrollableArea(m_elementUnderMouse.get());
-        Page* page = m_frame.page();
+        notifyScrollableAreasOfMouseEnterExit(m_lastElementUnderMouse.get(), m_elementUnderMouse.get());
 
-        if (m_lastElementUnderMouse && !m_elementUnderMouse) {
-            // The mouse has moved between frames.
-            if (Frame* frame = m_lastElementUnderMouse->document().frame()) {
-                if (FrameView* frameView = frame->view())
-                    frameView->mouseExitedContentArea();
-            }
-        } else if (page && (scrollableAreaForLastNode && (!scrollableAreaForNodeUnderMouse || scrollableAreaForNodeUnderMouse != scrollableAreaForLastNode))) {
-            // The mouse has moved between layers.
-            if (Frame* frame = m_lastElementUnderMouse->document().frame()) {
-                if (FrameView* frameView = frame->view()) {
-                    if (frameView->containsScrollableArea(scrollableAreaForLastNode))
-                        scrollableAreaForLastNode->mouseExitedContentArea();
-                }
-            }
-        }
-
-        if (m_elementUnderMouse && !m_lastElementUnderMouse) {
-            // The mouse has moved between frames.
-            if (Frame* frame = m_elementUnderMouse->document().frame()) {
-                if (FrameView* frameView = frame->view())
-                    frameView->mouseEnteredContentArea();
-            }
-        } else if (page && (scrollableAreaForNodeUnderMouse && (!scrollableAreaForLastNode || scrollableAreaForNodeUnderMouse != scrollableAreaForLastNode))) {
-            // The mouse has moved between layers.
-            if (Frame* frame = m_elementUnderMouse->document().frame()) {
-                if (FrameView* frameView = frame->view()) {
-                    if (frameView->containsScrollableArea(scrollableAreaForNodeUnderMouse))
-                        scrollableAreaForNodeUnderMouse->mouseEnteredContentArea();
-                }
-            }
-        }
-
         if (m_lastElementUnderMouse && &m_lastElementUnderMouse->document() != m_frame.document()) {
             m_lastElementUnderMouse = nullptr;
             m_lastScrollbarUnderMouse = nullptr;
@@ -2639,6 +2605,38 @@
     }
 }
 
+void EventHandler::notifyScrollableAreasOfMouseEnterExit(Element* lastElementUnderMouse, Element* elementUnderMouse)
+{
+    auto* frameView = m_frame.view();
+    if (!frameView)
+        return;
+
+    auto scrollableAreaForLastNode = enclosingScrollableArea(lastElementUnderMouse);
+    auto scrollableAreaForNodeUnderMouse = enclosingScrollableArea(elementUnderMouse);
+
+    if (!!lastElementUnderMouse != !!elementUnderMouse) {
+        if (elementUnderMouse) {
+            frameView->mouseEnteredContentArea();
+            if (scrollableAreaForNodeUnderMouse)
+                scrollableAreaForNodeUnderMouse->mouseEnteredContentArea();
+        } else {
+            if (scrollableAreaForLastNode)
+                scrollableAreaForLastNode->mouseExitedContentArea();
+            frameView->mouseExitedContentArea();
+        }
+        return;
+    }
+    
+    if ((!scrollableAreaForLastNode && !scrollableAreaForNodeUnderMouse) || scrollableAreaForLastNode == scrollableAreaForNodeUnderMouse)
+        return;
+
+    if (scrollableAreaForLastNode)
+        scrollableAreaForLastNode->mouseExitedContentArea();
+
+    if (scrollableAreaForNodeUnderMouse)
+        scrollableAreaForNodeUnderMouse->mouseEnteredContentArea();
+}
+
 static RefPtr<Element> findFirstMouseFocusableElementInComposedTree(Element& host)
 {
     ASSERT(host.shadowRoot());

Modified: trunk/Source/WebCore/page/EventHandler.h (261228 => 261229)


--- trunk/Source/WebCore/page/EventHandler.h	2020-05-06 15:00:50 UTC (rev 261228)
+++ trunk/Source/WebCore/page/EventHandler.h	2020-05-06 15:30:16 UTC (rev 261229)
@@ -403,6 +403,8 @@
     enum class FireMouseOverOut { No, Yes };
     void updateMouseEventTargetNode(Node*, const PlatformMouseEvent&, FireMouseOverOut);
 
+    void notifyScrollableAreasOfMouseEnterExit(Element* lastElementUnderMouse, Element* elementUnderMouse);
+
     MouseEventWithHitTestResults prepareMouseEvent(const HitTestRequest&, const PlatformMouseEvent&);
 
     enum class Cancelable { No, Yes };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to