Title: [246389] trunk
Revision
246389
Author
[email protected]
Date
2019-06-12 20:21:36 -0700 (Wed, 12 Jun 2019)

Log Message

paddingBoxRect() is wrong with RTL scrollbars on the left
https://bugs.webkit.org/show_bug.cgi?id=198816

Reviewed by Jon Lee.

Source/WebCore:

RenderBox::paddingBoxRect() needs to offset the left side of the box for the
vertical scrollbar, if it's placed on the left.

Test: compositing/geometry/rtl-overflow-scroll.html

* rendering/RenderBox.cpp:
(WebCore::RenderBox::paddingBoxRect const):
* rendering/RenderBox.h:
(WebCore::RenderBox::paddingBoxRect const): Deleted.
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateGeometry):
* rendering/RenderListBox.cpp:
(WebCore::RenderListBox::controlClipRect const):

LayoutTests:

* compositing/geometry/rtl-overflow-scroll-expected.html: Added.
* compositing/geometry/rtl-overflow-scroll.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (246388 => 246389)


--- trunk/LayoutTests/ChangeLog	2019-06-13 01:04:16 UTC (rev 246388)
+++ trunk/LayoutTests/ChangeLog	2019-06-13 03:21:36 UTC (rev 246389)
@@ -1,3 +1,13 @@
+2019-06-12  Simon Fraser  <[email protected]>
+
+        paddingBoxRect() is wrong with RTL scrollbars on the left
+        https://bugs.webkit.org/show_bug.cgi?id=198816
+
+        Reviewed by Jon Lee.
+
+        * compositing/geometry/rtl-overflow-scroll-expected.html: Added.
+        * compositing/geometry/rtl-overflow-scroll.html: Added.
+
 2019-06-12  Eric Carlson  <[email protected]>
 
         [High Sierra / Mojave Debug WK2] Layout Test media/video-restricted-invisible-autoplay-allowed-when-visible.html is a flaky failure

Added: trunk/LayoutTests/compositing/geometry/rtl-overflow-scroll-expected.html (0 => 246389)


--- trunk/LayoutTests/compositing/geometry/rtl-overflow-scroll-expected.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/geometry/rtl-overflow-scroll-expected.html	2019-06-13 03:21:36 UTC (rev 246389)
@@ -0,0 +1,37 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
+<html>
+<head>
+    <style>
+        .scroller {
+            direction: rtl;
+            width: 300px;
+            height: 300px;
+            border: 5px solid black;
+            padding: 2px;
+            box-sizing: border-box;
+            overflow: hidden;
+        }
+        
+        .contents {
+            width: 200%;
+            height: 200%;
+            background-color: green;
+        }
+        
+        .scrollbar-hider {
+            position: absolute;
+            top: 8px;
+            left: 13px;
+            width: 16px;
+            height: 300px;
+            background-color: gray;
+        }
+    </style>
+</head>
+<body>
+    <div class="scroller">
+        <div class="contents"></div>
+    </div>
+    <div class="scrollbar-hider"></div>
+</body>
+</html>

Added: trunk/LayoutTests/compositing/geometry/rtl-overflow-scroll.html (0 => 246389)


--- trunk/LayoutTests/compositing/geometry/rtl-overflow-scroll.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/geometry/rtl-overflow-scroll.html	2019-06-13 03:21:36 UTC (rev 246389)
@@ -0,0 +1,38 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ internal:AsyncOverflowScrollingEnabled=true ] -->
+<html>
+<head>
+    <style>
+        .scroller {
+            direction: rtl;
+            width: 300px;
+            height: 300px;
+            border: 5px solid black;
+            padding: 2px;
+            box-sizing: border-box;
+            overflow-y: scroll;
+            overflow-x: hidden;
+        }
+        
+        .contents {
+            width: 200%;
+            height: 200%;
+            background-color: green;
+        }
+        
+        .scrollbar-hider {
+            position: absolute;
+            top: 8px;
+            left: 13px;
+            width: 16px;
+            height: 300px;
+            background-color: gray;
+        }
+    </style>
+</head>
+<body>
+    <div class="scroller">
+        <div class="contents"></div>
+    </div>
+    <div class="scrollbar-hider"></div>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (246388 => 246389)


--- trunk/Source/WebCore/ChangeLog	2019-06-13 01:04:16 UTC (rev 246388)
+++ trunk/Source/WebCore/ChangeLog	2019-06-13 03:21:36 UTC (rev 246389)
@@ -1,3 +1,24 @@
+2019-06-12  Simon Fraser  <[email protected]>
+
+        paddingBoxRect() is wrong with RTL scrollbars on the left
+        https://bugs.webkit.org/show_bug.cgi?id=198816
+
+        Reviewed by Jon Lee.
+
+        RenderBox::paddingBoxRect() needs to offset the left side of the box for the
+        vertical scrollbar, if it's placed on the left.
+
+        Test: compositing/geometry/rtl-overflow-scroll.html
+
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::paddingBoxRect const):
+        * rendering/RenderBox.h:
+        (WebCore::RenderBox::paddingBoxRect const): Deleted.
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateGeometry):
+        * rendering/RenderListBox.cpp:
+        (WebCore::RenderListBox::controlClipRect const):
+
 2019-06-12  Youenn Fablet  <[email protected]>
 
         Use NSURLSession for WebSocket

Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (246388 => 246389)


--- trunk/Source/WebCore/rendering/RenderBox.cpp	2019-06-13 01:04:16 UTC (rev 246388)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp	2019-06-13 03:21:36 UTC (rev 246389)
@@ -658,6 +658,16 @@
     return style.getRoundedBorderFor(bounds).radii();
 }
 
+LayoutRect RenderBox::paddingBoxRect() const
+{
+    auto verticalScrollbarWidth = this->verticalScrollbarWidth();
+    LayoutUnit offsetForScrollbar = shouldPlaceBlockDirectionScrollbarOnLeft() ? verticalScrollbarWidth : 0;
+
+    return LayoutRect(borderLeft() + offsetForScrollbar, borderTop(),
+        width() - borderLeft() - borderRight() - verticalScrollbarWidth,
+        height() - borderTop() - borderBottom() - horizontalScrollbarHeight());
+}
+
 LayoutRect RenderBox::contentBoxRect() const
 {
     return { contentBoxLocation(), contentSize() };

Modified: trunk/Source/WebCore/rendering/RenderBox.h (246388 => 246389)


--- trunk/Source/WebCore/rendering/RenderBox.h	2019-06-13 01:04:16 UTC (rev 246388)
+++ trunk/Source/WebCore/rendering/RenderBox.h	2019-06-13 03:21:36 UTC (rev 246389)
@@ -219,7 +219,7 @@
 
     LayoutUnit paddingBoxWidth() const { return width() - borderLeft() - borderRight() - verticalScrollbarWidth(); }
     LayoutUnit paddingBoxHeight() const { return height() - borderTop() - borderBottom() - horizontalScrollbarHeight(); }
-    LayoutRect paddingBoxRect() const { return LayoutRect(borderLeft(), borderTop(), paddingBoxWidth(), paddingBoxHeight()); }
+    LayoutRect paddingBoxRect() const;
     LayoutRect paddingBoxRectIncludingScrollbar() const { return LayoutRect(borderLeft(), borderTop(), width() - borderLeft() - borderRight(), height() - borderTop() - borderBottom()); }
 
     // IE extensions. Used to calculate offsetWidth/Height.  Overridden by inlines (RenderFlow)

Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (246388 => 246389)


--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2019-06-13 01:04:16 UTC (rev 246388)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2019-06-13 03:21:36 UTC (rev 246389)
@@ -1216,11 +1216,11 @@
     if (m_scrollContainerLayer) {
         ASSERT(m_scrolledContentsLayer);
         auto& renderBox = downcast<RenderBox>(renderer());
-        LayoutRect paddingBoxIncludingScrollbar = renderBox.paddingBoxRectIncludingScrollbar();
+        LayoutRect paddingBox = renderBox.paddingBoxRect();
         LayoutRect parentLayerBounds = clippingLayer() ? clippingBox : compositedBounds();
 
         // FIXME: need to do some pixel snapping here.
-        m_scrollContainerLayer->setPosition(FloatPoint(paddingBoxIncludingScrollbar.location() - parentLayerBounds.location()));
+        m_scrollContainerLayer->setPosition(FloatPoint(paddingBox.location() - parentLayerBounds.location()));
         m_scrollContainerLayer->setSize(roundedIntSize(LayoutSize(renderBox.paddingBoxWidth(), renderBox.paddingBoxHeight())));
 
         ScrollOffset scrollOffset = m_owningLayer.scrollOffset();
@@ -1230,12 +1230,12 @@
 #endif
 
         FloatSize oldScrollingLayerOffset = m_scrollContainerLayer->offsetFromRenderer();
-        m_scrollContainerLayer->setOffsetFromRenderer(toFloatSize(paddingBoxIncludingScrollbar.location()));
+        m_scrollContainerLayer->setOffsetFromRenderer(toFloatSize(paddingBox.location()));
 
         if (m_childClippingMaskLayer) {
             m_childClippingMaskLayer->setPosition(m_scrollContainerLayer->position());
             m_childClippingMaskLayer->setSize(m_scrollContainerLayer->size());
-            m_childClippingMaskLayer->setOffsetFromRenderer(toFloatSize(paddingBoxIncludingScrollbar.location()));
+            m_childClippingMaskLayer->setOffsetFromRenderer(toFloatSize(paddingBox.location()));
         }
 
         bool paddingBoxOffsetChanged = oldScrollingLayerOffset != m_scrollContainerLayer->offsetFromRenderer();
@@ -1246,7 +1246,7 @@
 
         m_scrolledContentsLayer->setSize(scrollSize);
         m_scrolledContentsLayer->setScrollOffset(scrollOffset, GraphicsLayer::DontSetNeedsDisplay);
-        m_scrolledContentsLayer->setOffsetFromRenderer(toLayoutSize(paddingBoxIncludingScrollbar.location()), GraphicsLayer::DontSetNeedsDisplay);
+        m_scrolledContentsLayer->setOffsetFromRenderer(toLayoutSize(paddingBox.location()), GraphicsLayer::DontSetNeedsDisplay);
         
         adjustTiledBackingCoverage();
     }

Modified: trunk/Source/WebCore/rendering/RenderListBox.cpp (246388 => 246389)


--- trunk/Source/WebCore/rendering/RenderListBox.cpp	2019-06-13 01:04:16 UTC (rev 246388)
+++ trunk/Source/WebCore/rendering/RenderListBox.cpp	2019-06-13 03:21:36 UTC (rev 246389)
@@ -804,8 +804,6 @@
     // Clip against the padding box, to give <option>s and overlay scrollbar some extra space
     // to get painted.
     LayoutRect clipRect = paddingBoxRect();
-    if (shouldPlaceBlockDirectionScrollbarOnLeft())
-        clipRect.move(m_vBar->occupiedWidth(), 0);
     clipRect.moveBy(additionalOffset);
     return clipRect;
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to