Changeset 169408 in webkit
- Timestamp:
- May 27, 2014 9:44:48 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r169407 r169408 1 2014-05-27 Simon Fraser <simon.fraser@apple.com> 2 3 Prepare for position:sticky support inside accelerated overflow-scroll with WK2 4 https://bugs.webkit.org/show_bug.cgi?id=133329 5 6 Reviewed by Tim Horton. 7 8 RenderLayerCompositor::computeStickyViewportConstraints() was always using 9 the viewport rect as the constraining rect for sticky position. This is not 10 correct when inside overflow:scroll. 11 12 Refactor code in RenderBoxModelObject to make getting the rect easy, and use 13 it to compute the constraints. 14 15 * rendering/RenderBoxModelObject.cpp: 16 (WebCore::RenderBoxModelObject::constrainingRectForStickyPosition): 17 (WebCore::RenderBoxModelObject::stickyPositionOffset): 18 * rendering/RenderBoxModelObject.h: 19 * rendering/RenderLayerCompositor.cpp: 20 (WebCore::RenderLayerCompositor::computeStickyViewportConstraints): 21 1 22 2014-05-27 Bem Jones-Bey <bjonesbe@adobe.com> 2 23 -
trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp
r169407 r169408 436 436 } 437 437 438 LayoutSize RenderBoxModelObject::stickyPositionOffset() const 439 { 440 FloatRect constrainingRect; 441 442 ASSERT(hasLayer()); 438 FloatRect RenderBoxModelObject::constrainingRectForStickyPosition() const 439 { 443 440 RenderLayer* enclosingClippingLayer = layer()->enclosingOverflowClipLayer(ExcludeSelf); 444 441 if (enclosingClippingLayer) { … … 447 444 clipRect.contract(LayoutSize(enclosingClippingBox.paddingLeft() + enclosingClippingBox.paddingRight(), 448 445 enclosingClippingBox.paddingTop() + enclosingClippingBox.paddingBottom())); 449 constrainingRect = enclosingClippingBox.localToContainerQuad(FloatRect(clipRect), &view()).boundingBox(); 446 447 FloatRect constrainingRect = enclosingClippingBox.localToContainerQuad(FloatRect(clipRect), &view()).boundingBox(); 450 448 451 449 FloatPoint scrollOffset = FloatPoint() + enclosingClippingLayer->scrollOffset(); 452 450 constrainingRect.setLocation(scrollOffset); 453 } else { 454 LayoutRect viewportRect = view().frameView().viewportConstrainedVisibleContentRect(); 455 float scale = view().frameView().frame().frameScaleFactor(); 456 viewportRect.scale(1 / scale); 457 constrainingRect = viewportRect; 451 return constrainingRect; 458 452 } 459 453 454 LayoutRect viewportRect = view().frameView().viewportConstrainedVisibleContentRect(); 455 float scale = frame().frameScaleFactor(); 456 viewportRect.scale(1 / scale); 457 return viewportRect; 458 } 459 460 LayoutSize RenderBoxModelObject::stickyPositionOffset() const 461 { 462 ASSERT(hasLayer()); 463 464 FloatRect constrainingRect = constrainingRectForStickyPosition(); 460 465 StickyPositionViewportConstraints constraints; 461 466 computeStickyPositionConstraints(constraints, constrainingRect); -
trunk/Source/WebCore/rendering/RenderBoxModelObject.h
r168967 r169408 70 70 LayoutSize relativePositionLogicalOffset() const { return style().isHorizontalWritingMode() ? relativePositionOffset() : relativePositionOffset().transposedSize(); } 71 71 72 void computeStickyPositionConstraints(StickyPositionViewportConstraints&, const FloatRect& viewportRect) const; 72 FloatRect constrainingRectForStickyPosition() const; 73 void computeStickyPositionConstraints(StickyPositionViewportConstraints&, const FloatRect& constrainingRect) const; 73 74 LayoutSize stickyPositionOffset() const; 74 75 LayoutSize stickyPositionLogicalOffset() const { return style().isHorizontalWritingMode() ? stickyPositionOffset() : stickyPositionOffset().transposedSize(); } -
trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp
r169299 r169408 3559 3559 #endif 3560 3560 3561 LayoutRect viewportRect = m_renderView.frameView().viewportConstrainedVisibleContentRect();3562 3561 RenderBoxModelObject& renderer = toRenderBoxModelObject(layer.renderer()); 3563 3562 3564 3563 StickyPositionViewportConstraints constraints; 3565 renderer.computeStickyPositionConstraints(constraints, viewportRect);3564 renderer.computeStickyPositionConstraints(constraints, renderer.constrainingRectForStickyPosition()); 3566 3565 3567 3566 GraphicsLayer* graphicsLayer = layer.backing()->graphicsLayer();
Note: See TracChangeset
for help on using the changeset viewer.