Changeset 122342 in webkit


Ignore:
Timestamp:
Jul 11, 2012 10:50:47 AM (12 years ago)
Author:
jchaffraix@webkit.org
Message:

REGRESSION (r116203): overflow sections don't have scrollbars
https://bugs.webkit.org/show_bug.cgi?id=90052

Reviewed by Simon Fraser.

This issue stems from RenderLayers with overlay scrollbars not being considered
self-painting.

After r120395 (follow-up of r116203), we ignore subtrees that have no self-painting layer for
painting. Normal scrollbars are painted by their renderer so they were properly painted. However
overlay scrollbars need to be painted by their RenderLayer as a separate phase (see bug 57057) so
they were not painted anymore. The fix is simple: make RenderLayer with overlay scrollbars
self-painting as they should have been in the first place.

Unfortunately no tests as I don't think we have a good way of testing overlay
scrollbars. Tested manually though on the super simple test case from the bug.

  • rendering/RenderLayer.cpp:

(WebCore::RenderLayer::shouldBeSelfPaintingLayer):
Overlay scrollbars make the layer self-painting.

(WebCore::RenderLayer::updateScrollbarsAfterLayout):
Added a call to updateSelfPaintingLayer.

(WebCore::RenderLayer::styleChanged):
Moved the call to updateSelfPaintingLayer after recomputing the scrollbars to ensure proper behavior.
Added a comment underlining the reason.

(WebCore::RenderLayer::updateSelfPaintingLayer):
Renamed as it is now called during layout too.

  • rendering/RenderLayer.h:

(RenderLayer): Updated after updateSelfPaintingLayer rename.

Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r122339 r122342  
     12012-07-11  Julien Chaffraix  <jchaffraix@webkit.org>
     2
     3        REGRESSION (r116203): overflow sections don't have scrollbars
     4        https://bugs.webkit.org/show_bug.cgi?id=90052
     5
     6        Reviewed by Simon Fraser.
     7
     8        This issue stems from RenderLayers with overlay scrollbars not being considered
     9        self-painting.
     10
     11        After r120395 (follow-up of r116203), we ignore subtrees that have no self-painting layer for
     12        painting. Normal scrollbars are painted by their renderer so they were properly painted. However
     13        overlay scrollbars need to be painted by their RenderLayer as a separate phase (see bug 57057) so
     14        they were not painted anymore. The fix is simple: make RenderLayer with overlay scrollbars
     15        self-painting as they should have been in the first place.
     16
     17        Unfortunately no tests as I don't think we have a good way of testing overlay
     18        scrollbars. Tested manually though on the super simple test case from the bug.
     19
     20        * rendering/RenderLayer.cpp:
     21        (WebCore::RenderLayer::shouldBeSelfPaintingLayer):
     22        Overlay scrollbars make the layer self-painting.
     23
     24        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
     25        Added a call to updateSelfPaintingLayer.
     26
     27        (WebCore::RenderLayer::styleChanged):
     28        Moved the call to updateSelfPaintingLayer after recomputing the scrollbars to ensure proper behavior.
     29        Added a comment underlining the reason.
     30
     31        (WebCore::RenderLayer::updateSelfPaintingLayer):
     32        Renamed as it is now called during layout too.
     33
     34        * rendering/RenderLayer.h:
     35        (RenderLayer): Updated after updateSelfPaintingLayer rename.
     36
    1372012-07-11  Allan Sandfeld Jensen  <allan.jensen@nokia.com>
    238
  • trunk/Source/WebCore/rendering/RenderLayer.cpp

    r122130 r122342  
    25352535            setHasVerticalScrollbar(hasVerticalOverflow);
    25362536
     2537        updateSelfPaintingLayer();
     2538
    25372539#if ENABLE(DASHBOARD_SUPPORT)
    25382540        // Force an update since we know the scrollbars have changed things.
     
    47414743{
    47424744    return !isNormalFlowOnly()
     4745        || hasOverlayScrollbars()
    47434746        || renderer()->hasReflection()
    47444747        || renderer()->hasMask()
     
    47514754}
    47524755
    4753 void RenderLayer::updateSelfPaintingLayerAfterStyleChange(const RenderStyle*)
     4756void RenderLayer::updateSelfPaintingLayer()
    47544757{
    47554758    bool isSelfPaintingLayer = shouldBeSelfPaintingLayer();
     
    48464849    }
    48474850
    4848     updateSelfPaintingLayerAfterStyleChange(oldStyle);
    48494851    updateStackingContextsAfterStyleChange(oldStyle);
    48504852    updateScrollbarsAfterStyleChange(oldStyle);
     4853    // Overlay scrollbars can make this layer self-painting so we need
     4854    // to recompute the bit once scrollbars have been updated.
     4855    updateSelfPaintingLayer();
    48514856
    48524857    if (!hasReflection() && m_reflection)
  • trunk/Source/WebCore/rendering/RenderLayer.h

    r122130 r122342  
    680680    bool shouldRepaintAfterLayout() const;
    681681
    682     void updateSelfPaintingLayerAfterStyleChange(const RenderStyle* oldStyle);
     682    void updateSelfPaintingLayer();
    683683    void updateStackingContextsAfterStyleChange(const RenderStyle* oldStyle);
    684684
Note: See TracChangeset for help on using the changeset viewer.