Changeset 169408 in webkit


Ignore:
Timestamp:
May 27, 2014 9:44:48 PM (10 years ago)
Author:
Simon Fraser
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):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r169407 r169408  
     12014-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
    1222014-05-27  Bem Jones-Bey  <bjonesbe@adobe.com>
    223
  • trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp

    r169407 r169408  
    436436}
    437437
    438 LayoutSize RenderBoxModelObject::stickyPositionOffset() const
    439 {
    440     FloatRect constrainingRect;
    441 
    442     ASSERT(hasLayer());
     438FloatRect RenderBoxModelObject::constrainingRectForStickyPosition() const
     439{
    443440    RenderLayer* enclosingClippingLayer = layer()->enclosingOverflowClipLayer(ExcludeSelf);
    444441    if (enclosingClippingLayer) {
     
    447444        clipRect.contract(LayoutSize(enclosingClippingBox.paddingLeft() + enclosingClippingBox.paddingRight(),
    448445            enclosingClippingBox.paddingTop() + enclosingClippingBox.paddingBottom()));
    449         constrainingRect = enclosingClippingBox.localToContainerQuad(FloatRect(clipRect), &view()).boundingBox();
     446
     447        FloatRect constrainingRect = enclosingClippingBox.localToContainerQuad(FloatRect(clipRect), &view()).boundingBox();
    450448
    451449        FloatPoint scrollOffset = FloatPoint() + enclosingClippingLayer->scrollOffset();
    452450        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;
    458452    }
    459453   
     454    LayoutRect viewportRect = view().frameView().viewportConstrainedVisibleContentRect();
     455    float scale = frame().frameScaleFactor();
     456    viewportRect.scale(1 / scale);
     457    return viewportRect;
     458}
     459
     460LayoutSize RenderBoxModelObject::stickyPositionOffset() const
     461{
     462    ASSERT(hasLayer());
     463   
     464    FloatRect constrainingRect = constrainingRectForStickyPosition();
    460465    StickyPositionViewportConstraints constraints;
    461466    computeStickyPositionConstraints(constraints, constrainingRect);
  • trunk/Source/WebCore/rendering/RenderBoxModelObject.h

    r168967 r169408  
    7070    LayoutSize relativePositionLogicalOffset() const { return style().isHorizontalWritingMode() ? relativePositionOffset() : relativePositionOffset().transposedSize(); }
    7171
    72     void computeStickyPositionConstraints(StickyPositionViewportConstraints&, const FloatRect& viewportRect) const;
     72    FloatRect constrainingRectForStickyPosition() const;
     73    void computeStickyPositionConstraints(StickyPositionViewportConstraints&, const FloatRect& constrainingRect) const;
    7374    LayoutSize stickyPositionOffset() const;
    7475    LayoutSize stickyPositionLogicalOffset() const { return style().isHorizontalWritingMode() ? stickyPositionOffset() : stickyPositionOffset().transposedSize(); }
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp

    r169299 r169408  
    35593559#endif
    35603560
    3561     LayoutRect viewportRect = m_renderView.frameView().viewportConstrainedVisibleContentRect();
    35623561    RenderBoxModelObject& renderer = toRenderBoxModelObject(layer.renderer());
    35633562
    35643563    StickyPositionViewportConstraints constraints;
    3565     renderer.computeStickyPositionConstraints(constraints, viewportRect);
     3564    renderer.computeStickyPositionConstraints(constraints, renderer.constrainingRectForStickyPosition());
    35663565
    35673566    GraphicsLayer* graphicsLayer = layer.backing()->graphicsLayer();
Note: See TracChangeset for help on using the changeset viewer.