Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1510)

Unified Diff: Source/core/rendering/RenderLayerScrollableArea.cpp

Issue 708283002: RLSA needsLayout on customscrollbar thickness change. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: added testcase Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/rendering/RenderLayerScrollableArea.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderLayerScrollableArea.cpp
diff --git a/Source/core/rendering/RenderLayerScrollableArea.cpp b/Source/core/rendering/RenderLayerScrollableArea.cpp
index d61144d26f7814ff6db932f4099e431361ea5cfc..981d1586f6857d2d4596dbb029b15d99adb1b394 100644
--- a/Source/core/rendering/RenderLayerScrollableArea.cpp
+++ b/Source/core/rendering/RenderLayerScrollableArea.cpp
@@ -87,6 +87,8 @@ RenderLayerScrollableArea::RenderLayerScrollableArea(RenderLayer& layer)
, m_nextTopmostScrollChild(0)
, m_topmostScrollChild(0)
, m_needsCompositedScrolling(false)
+ , m_horizontalScrollbarRectChanged(false)
+ , m_verticalScrollbarRectChanged(false)
, m_scrollCorner(nullptr)
, m_resizer(nullptr)
{
@@ -619,10 +621,10 @@ void RenderLayerScrollableArea::updateAfterLayout()
setHasVerticalScrollbar(false);
}
// overflow:auto may need to lay out again if scrollbars got added/removed.
- bool autoHorizontalScrollBarChanged = box().hasAutoHorizontalScrollbar() && (hasHorizontalScrollbar() != hasHorizontalOverflow);
- bool autoVerticalScrollBarChanged = box().hasAutoVerticalScrollbar() && (hasVerticalScrollbar() != hasVerticalOverflow);
+ bool horizontalScrollBarChanged = (box().hasAutoHorizontalScrollbar() && (hasHorizontalScrollbar() != hasHorizontalOverflow)) || m_horizontalScrollbarRectChanged;
+ bool verticalScrollBarChanged = (box().hasAutoVerticalScrollbar() && (hasVerticalScrollbar() != hasVerticalOverflow)) || m_verticalScrollbarRectChanged;
- if (autoHorizontalScrollBarChanged || autoVerticalScrollBarChanged) {
+ if (horizontalScrollBarChanged || verticalScrollBarChanged) {
if (box().hasAutoHorizontalScrollbar())
setHasHorizontalScrollbar(hasHorizontalOverflow);
if (box().hasAutoVerticalScrollbar())
@@ -637,7 +639,7 @@ void RenderLayerScrollableArea::updateAfterLayout()
if (box().document().hasAnnotatedRegions())
box().document().setAnnotatedRegionsDirty(true);
- if (box().style()->overflowX() == OAUTO || box().style()->overflowY() == OAUTO) {
+ if (box().style()->overflowX() == OAUTO || box().style()->overflowY() == OAUTO || m_verticalScrollbarRectChanged || m_horizontalScrollbarRectChanged) {
skobes 2014/11/10 20:26:09 I think this codepath is intended for the case whe
if (!m_inOverflowRelayout) {
// Our proprietary overflow: overlay value doesn't trigger a layout.
m_inOverflowRelayout = true;
@@ -645,13 +647,15 @@ void RenderLayerScrollableArea::updateAfterLayout()
layoutScope.setNeedsLayout(&box());
if (box().isRenderBlock()) {
RenderBlock& block = toRenderBlock(box());
- block.scrollbarsChanged(autoHorizontalScrollBarChanged, autoVerticalScrollBarChanged);
+ block.scrollbarsChanged(horizontalScrollBarChanged, verticalScrollBarChanged);
block.layoutBlock(true);
} else {
box().layout();
}
m_inOverflowRelayout = false;
}
+ m_verticalScrollbarRectChanged = false;
+ m_horizontalScrollbarRectChanged = false;
}
}
@@ -753,10 +757,18 @@ void RenderLayerScrollableArea::updateAfterStyleChange(const RenderStyle* oldSty
}
// FIXME: Need to detect a swap from custom to native scrollbars (and vice versa).
- if (m_hBar)
+ if (m_hBar) {
+ IntRect oldHBarRect = m_hBar->frameRect();
m_hBar->styleChanged();
- if (m_vBar)
+ if (oldHBarRect != m_hBar->frameRect())
+ m_horizontalScrollbarRectChanged = true;
+ }
+ if (m_vBar) {
+ IntRect oldVBarRect = m_vBar->frameRect();
m_vBar->styleChanged();
+ if (oldVBarRect != m_vBar->frameRect())
+ m_verticalScrollbarRectChanged = true;
+ }
MuVen 2014/11/11 14:45:04 if (box().isRenderBlock()) { RenderBlock&
updateScrollCornerStyle();
updateResizerAreaSet();
« no previous file with comments | « Source/core/rendering/RenderLayerScrollableArea.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698