Title: [165388] trunk
Revision
165388
Author
stav...@adobe.com
Date
2014-03-10 11:48:49 -0700 (Mon, 10 Mar 2014)

Log Message

[CSS Regions] Hit-testing is not working properly inside scrollable regions
https://bugs.webkit.org/show_bug.cgi?id=130015

Reviewed by Antti Koivisto.

Source/WebCore:

When hit-testing inside the flow thread's layer, the scrolled offset
of the current region must be taken into consideration.

Test: fast/regions/scrollable-regions-hit-testing-inside.html

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::calculateClipRects):

LayoutTests:

Added test for hit-testing inside scrollable regions.

* fast/regions/scrollable-regions-hit-testing-inside-expected.html: Added.
* fast/regions/scrollable-regions-hit-testing-inside.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (165387 => 165388)


--- trunk/LayoutTests/ChangeLog	2014-03-10 18:41:34 UTC (rev 165387)
+++ trunk/LayoutTests/ChangeLog	2014-03-10 18:48:49 UTC (rev 165388)
@@ -1,3 +1,15 @@
+2014-03-10  Radu Stavila  <stav...@adobe.com>
+
+        [CSS Regions] Hit-testing is not working properly inside scrollable regions
+        https://bugs.webkit.org/show_bug.cgi?id=130015
+
+        Reviewed by Antti Koivisto.
+
+        Added test for hit-testing inside scrollable regions.
+
+        * fast/regions/scrollable-regions-hit-testing-inside-expected.html: Added.
+        * fast/regions/scrollable-regions-hit-testing-inside.html: Added.
+
 2014-03-10  Hans Muller  <hmul...@adobe.com>
 
         [CSS Shapes] SVG Image valued shape fails if root element's size is relative

Added: trunk/LayoutTests/fast/regions/scrollable-regions-hit-testing-inside-expected.html (0 => 165388)


--- trunk/LayoutTests/fast/regions/scrollable-regions-hit-testing-inside-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/regions/scrollable-regions-hit-testing-inside-expected.html	2014-03-10 18:48:49 UTC (rev 165388)
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<html style="font: 16px/1.25 monospace; font-family: Ahem">
+    <head>
+        <script>
+            _onload_ = function() 
+            {
+                var region = document.getElementById("region");
+                region.scrollTop += 150;
+
+                if (window.eventSender) {
+                    eventSender.mouseMoveTo(140, 160);
+                    eventSender.mouseDown(0);
+                    eventSender.leapForward(500);
+                    eventSender.mouseUp(0);
+                }
+            }
+        </script>
+
+        <style>
+            #container {
+                border: 2px solid green;
+                height: 300px;
+                overflow: visible;
+            }
+
+            #region {
+                width: 600px;
+                height: 200px;
+                border: thick solid red;
+                padding: 50px;
+                overflow: scroll;
+            }
+
+            #innerDiv {
+                width: 100px;
+                height: 100px;
+                background-color: red;
+                margin-left: 30px;
+            }
+
+            #innerDiv:hover
+            {
+                background-color: green;
+            }
+        </style>
+    </head>
+
+    <body>
+        <a style="font-size: 14px" href="" Regions] Hit-testing is not working properly inside scrollable regions</a>
+        <p>This test passes if the red square turns green when hovered, even if the region is scrolled.</p>
+
+        <div id="region">
+            <div id="container">
+                <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent interdum, sapien vitae faucibus suscipit, massa urna sagittis libero, ac imperdiet elit lacus a ligula. Mauris a orci sem.</div>
+                <div id="innerDiv"></div>
+                <div style="color:red">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent interdum, sapien vitae faucibus suscipit, massa urna sagittis libero, ac imperdiet elit lacus a ligula. Mauris a orci sem. Nullam ullamcorper ornare porttitor. Morbi laoreet pellentesque diam, vitae hendrerit sem fringilla id. Maecenas rutrum lacinia lobortis. Praesent elit lectus, porttitor sed semper vel, fringilla id dolor. Sed lacus nisl, rutrum sit amet euismod a, vulputate quis elit. Fusce commodo dui quis lacus viverra vel egestas velit tempus. Donec ut sapien sit amet purus luctus fermentum. Donec eleifend pretium neque quis bibendum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam congue dapibus mi, id ultricies est sagittis et. Integer posuere, eros vitae laoreet congue, tortor purus euismod nibh, eu porta purus arcu id turpis. Donec vitae ultricies nibh. Nullam in urna dolor, at fringilla lorem. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
+            </div>
+        </div>
+    </body>
+</html>

Added: trunk/LayoutTests/fast/regions/scrollable-regions-hit-testing-inside.html (0 => 165388)


--- trunk/LayoutTests/fast/regions/scrollable-regions-hit-testing-inside.html	                        (rev 0)
+++ trunk/LayoutTests/fast/regions/scrollable-regions-hit-testing-inside.html	2014-03-10 18:48:49 UTC (rev 165388)
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<html style="font: 16px/1.25 monospace; font-family: Ahem">
+    <head>
+        <script>
+            _onload_ = function() 
+            {
+                var region = document.getElementById("region");
+                region.scrollTop += 150;
+
+                if (window.eventSender) {
+                    eventSender.mouseMoveTo(140, 160);
+                    eventSender.mouseDown(0);
+                    eventSender.leapForward(500);
+                    eventSender.mouseUp(0);
+                }
+            }
+        </script>
+
+        <style>
+            #container {
+                border: 2px solid green;
+                height: 300px;
+                overflow: visible;
+                -webkit-flow-into: flow;
+            }
+
+            #region {
+                width: 600px;
+                height: 200px;
+                -webkit-flow-from: flow;
+                border: thick solid red;
+                padding: 50px;
+                overflow: scroll;
+            }
+
+            #innerDiv {
+                width: 100px;
+                height: 100px;
+                background-color: red;
+                margin-left: 30px;
+            }
+
+            #innerDiv:hover
+            {
+                background-color: green;
+            }
+        </style>
+    </head>
+
+    <body>
+        <a style="font-size: 14px" href="" Regions] Hit-testing is not working properly inside scrollable regions</a>
+        <p>This test passes if the red square turns green when hovered, even if the region is scrolled.</p>
+
+        <div id="region"></div>
+
+        <div id="container">
+            <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent interdum, sapien vitae faucibus suscipit, massa urna sagittis libero, ac imperdiet elit lacus a ligula. Mauris a orci sem.</div>
+            <div id="innerDiv"></div>
+            <div style="color:red">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent interdum, sapien vitae faucibus suscipit, massa urna sagittis libero, ac imperdiet elit lacus a ligula. Mauris a orci sem. Nullam ullamcorper ornare porttitor. Morbi laoreet pellentesque diam, vitae hendrerit sem fringilla id. Maecenas rutrum lacinia lobortis. Praesent elit lectus, porttitor sed semper vel, fringilla id dolor. Sed lacus nisl, rutrum sit amet euismod a, vulputate quis elit. Fusce commodo dui quis lacus viverra vel egestas velit tempus. Donec ut sapien sit amet purus luctus fermentum. Donec eleifend pretium neque quis bibendum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam congue dapibus mi, id ultricies est sagittis et. Integer posuere, eros vitae laoreet congue, tortor purus euismod nibh, eu porta purus arcu id turpis. Donec vitae ultricies nibh. Nullam in urna dolor, at fringilla lorem. Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
+        </div>
+    </body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (165387 => 165388)


--- trunk/Source/WebCore/ChangeLog	2014-03-10 18:41:34 UTC (rev 165387)
+++ trunk/Source/WebCore/ChangeLog	2014-03-10 18:48:49 UTC (rev 165388)
@@ -1,3 +1,18 @@
+2014-03-10  Radu Stavila  <stav...@adobe.com>
+
+        [CSS Regions] Hit-testing is not working properly inside scrollable regions
+        https://bugs.webkit.org/show_bug.cgi?id=130015
+
+        Reviewed by Antti Koivisto.
+
+        When hit-testing inside the flow thread's layer, the scrolled offset
+        of the current region must be taken into consideration.
+
+        Test: fast/regions/scrollable-regions-hit-testing-inside.html
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::calculateClipRects):
+
 2014-03-10  Hans Muller  <hmul...@adobe.com>
 
         [CSS Shapes] SVG Image valued shape fails if root element's size is relative

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (165387 => 165388)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2014-03-10 18:41:34 UTC (rev 165387)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2014-03-10 18:48:49 UTC (rev 165388)
@@ -6876,6 +6876,7 @@
     }
 
     LayoutRect regionContentBox = toRenderBlockFlow(&renderer())->contentBoxRect();
+    IntSize scrolledContentOffset = region->fragmentContainer().hasOverflowClip() ? region->fragmentContainer().scrolledContentOffset() : IntSize();
 
     RenderLayer* resultLayer = 0;
     for (int i = fragments.size() - 1; i >= 0; --i) {
@@ -6884,7 +6885,7 @@
         if (!fragment.backgroundRect.intersects(hitTestLocation))
             continue;
 
-        LayoutSize hitTestOffset = portionLocation - (fragment.layerBounds.location() + regionContentBox.location());
+        LayoutSize hitTestOffset = portionLocation - (fragment.layerBounds.location() + regionContentBox.location()) + scrolledContentOffset;
 
         // Always ignore clipping, since the RenderFlowThread has nothing to do with the bounds of the FrameView.
         HitTestRequest newRequest(request.type() | HitTestRequest::IgnoreClipping | HitTestRequest::DisallowShadowContent);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to