Title: [169408] trunk/Source/WebCore
Revision
169408
Author
simon.fra...@apple.com
Date
2014-05-27 21:44:48 -0700 (Tue, 27 May 2014)

Log Message

Prepare for position:sticky support inside accelerated overflow-scroll with WK2
https://bugs.webkit.org/show_bug.cgi?id=133329

Reviewed by Tim Horton.

RenderLayerCompositor::computeStickyViewportConstraints() was always using
the viewport rect as the constraining rect for sticky position. This is not
correct when inside overflow:scroll.

Refactor code in RenderBoxModelObject to make getting the rect easy, and use
it to compute the constraints.

* rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::constrainingRectForStickyPosition):
(WebCore::RenderBoxModelObject::stickyPositionOffset):
* rendering/RenderBoxModelObject.h:
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::computeStickyViewportConstraints):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (169407 => 169408)


--- trunk/Source/WebCore/ChangeLog	2014-05-28 01:33:26 UTC (rev 169407)
+++ trunk/Source/WebCore/ChangeLog	2014-05-28 04:44:48 UTC (rev 169408)
@@ -1,3 +1,24 @@
+2014-05-27  Simon Fraser  <simon.fra...@apple.com>
+
+        Prepare for position:sticky support inside accelerated overflow-scroll with WK2
+        https://bugs.webkit.org/show_bug.cgi?id=133329
+
+        Reviewed by Tim Horton.
+
+        RenderLayerCompositor::computeStickyViewportConstraints() was always using
+        the viewport rect as the constraining rect for sticky position. This is not
+        correct when inside overflow:scroll.
+        
+        Refactor code in RenderBoxModelObject to make getting the rect easy, and use
+        it to compute the constraints.
+
+        * rendering/RenderBoxModelObject.cpp:
+        (WebCore::RenderBoxModelObject::constrainingRectForStickyPosition):
+        (WebCore::RenderBoxModelObject::stickyPositionOffset):
+        * rendering/RenderBoxModelObject.h:
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints):
+
 2014-05-27  Bem Jones-Bey  <bjone...@adobe.com>
 
         vw/vh units used as font/line-height values don't scale with the viewport

Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp (169407 => 169408)


--- trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp	2014-05-28 01:33:26 UTC (rev 169407)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp	2014-05-28 04:44:48 UTC (rev 169408)
@@ -435,28 +435,33 @@
     }
 }
 
-LayoutSize RenderBoxModelObject::stickyPositionOffset() const
+FloatRect RenderBoxModelObject::constrainingRectForStickyPosition() const
 {
-    FloatRect constrainingRect;
-
-    ASSERT(hasLayer());
     RenderLayer* enclosingClippingLayer = layer()->enclosingOverflowClipLayer(ExcludeSelf);
     if (enclosingClippingLayer) {
         RenderBox& enclosingClippingBox = toRenderBox(enclosingClippingLayer->renderer());
         LayoutRect clipRect = enclosingClippingBox.overflowClipRect(LayoutPoint(), 0); // FIXME: make this work in regions.
         clipRect.contract(LayoutSize(enclosingClippingBox.paddingLeft() + enclosingClippingBox.paddingRight(),
             enclosingClippingBox.paddingTop() + enclosingClippingBox.paddingBottom()));
-        constrainingRect = enclosingClippingBox.localToContainerQuad(FloatRect(clipRect), &view()).boundingBox();
 
+        FloatRect constrainingRect = enclosingClippingBox.localToContainerQuad(FloatRect(clipRect), &view()).boundingBox();
+
         FloatPoint scrollOffset = FloatPoint() + enclosingClippingLayer->scrollOffset();
         constrainingRect.setLocation(scrollOffset);
-    } else {
-        LayoutRect viewportRect = view().frameView().viewportConstrainedVisibleContentRect();
-        float scale = view().frameView().frame().frameScaleFactor();
-        viewportRect.scale(1 / scale);
-        constrainingRect = viewportRect;
+        return constrainingRect;
     }
     
+    LayoutRect viewportRect = view().frameView().viewportConstrainedVisibleContentRect();
+    float scale = frame().frameScaleFactor();
+    viewportRect.scale(1 / scale);
+    return viewportRect;
+}
+
+LayoutSize RenderBoxModelObject::stickyPositionOffset() const
+{
+    ASSERT(hasLayer());
+    
+    FloatRect constrainingRect = constrainingRectForStickyPosition();
     StickyPositionViewportConstraints constraints;
     computeStickyPositionConstraints(constraints, constrainingRect);
     

Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.h (169407 => 169408)


--- trunk/Source/WebCore/rendering/RenderBoxModelObject.h	2014-05-28 01:33:26 UTC (rev 169407)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.h	2014-05-28 04:44:48 UTC (rev 169408)
@@ -69,7 +69,8 @@
     LayoutSize relativePositionOffset() const;
     LayoutSize relativePositionLogicalOffset() const { return style().isHorizontalWritingMode() ? relativePositionOffset() : relativePositionOffset().transposedSize(); }
 
-    void computeStickyPositionConstraints(StickyPositionViewportConstraints&, const FloatRect& viewportRect) const;
+    FloatRect constrainingRectForStickyPosition() const;
+    void computeStickyPositionConstraints(StickyPositionViewportConstraints&, const FloatRect& constrainingRect) const;
     LayoutSize stickyPositionOffset() const;
     LayoutSize stickyPositionLogicalOffset() const { return style().isHorizontalWritingMode() ? stickyPositionOffset() : stickyPositionOffset().transposedSize(); }
 

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (169407 => 169408)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2014-05-28 01:33:26 UTC (rev 169407)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2014-05-28 04:44:48 UTC (rev 169408)
@@ -3558,11 +3558,10 @@
     ASSERT(!layer.enclosingOverflowClipLayer(ExcludeSelf));
 #endif
 
-    LayoutRect viewportRect = m_renderView.frameView().viewportConstrainedVisibleContentRect();
     RenderBoxModelObject& renderer = toRenderBoxModelObject(layer.renderer());
 
     StickyPositionViewportConstraints constraints;
-    renderer.computeStickyPositionConstraints(constraints, viewportRect);
+    renderer.computeStickyPositionConstraints(constraints, renderer.constrainingRectForStickyPosition());
 
     GraphicsLayer* graphicsLayer = layer.backing()->graphicsLayer();
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to