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