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

Unified Diff: Source/core/paint/DeprecatedPaintLayerScrollableArea.cpp

Issue 1295933003: Add overflow:auto scrollbars to child flex basis. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add all tests, even failing ones Created 5 years, 4 months 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
Index: Source/core/paint/DeprecatedPaintLayerScrollableArea.cpp
diff --git a/Source/core/paint/DeprecatedPaintLayerScrollableArea.cpp b/Source/core/paint/DeprecatedPaintLayerScrollableArea.cpp
index 75b2999646e092109c931114f7a27add34ba4c50..96514a631ad091cd0422521c64b1855b150cec43 100644
--- a/Source/core/paint/DeprecatedPaintLayerScrollableArea.cpp
+++ b/Source/core/paint/DeprecatedPaintLayerScrollableArea.cpp
@@ -642,12 +642,35 @@ void DeprecatedPaintLayerScrollableArea::scrollToOffset(const DoubleSize& scroll
}
}
-void DeprecatedPaintLayerScrollableArea::updateAfterLayout()
+void DeprecatedPaintLayerScrollableArea::updateScrollDimensions(DoubleSize& scrollOffset, bool& autoHorizontalScrollBarChanged, bool& autoVerticalScrollBarChanged)
{
ASSERT(box().hasOverflowClip());
- DoubleSize originalScrollOffset = adjustedScrollOffset();
+ scrollOffset = adjustedScrollOffset();
computeScrollDimensions();
+ bool hasHorizontalOverflow = this->hasHorizontalOverflow();
+ bool hasVerticalOverflow = this->hasVerticalOverflow();
+ if (hasOverlayScrollbars()) {
+ if (!scrollSize(HorizontalScrollbar))
+ setHasHorizontalScrollbar(false);
+ if (!scrollSize(VerticalScrollbar))
+ setHasVerticalScrollbar(false);
+ }
+
+ // overflow:auto may need to lay out again if scrollbars got added/removed.
+ autoHorizontalScrollBarChanged = box().hasAutoHorizontalScrollbar() && (hasHorizontalScrollbar() != hasHorizontalOverflow);
+ autoVerticalScrollBarChanged = box().hasAutoVerticalScrollbar() && (hasVerticalScrollbar() != hasVerticalOverflow);
+ if (!visualViewportSuppliesScrollbars() && (autoHorizontalScrollBarChanged || autoVerticalScrollBarChanged)) {
+ if (box().hasAutoHorizontalScrollbar())
+ setHasHorizontalScrollbar(hasHorizontalOverflow);
+ if (box().hasAutoVerticalScrollbar())
+ setHasVerticalScrollbar(hasVerticalOverflow);
+ }
+}
+
+void DeprecatedPaintLayerScrollableArea::finalizeScrollDimensions(const DoubleSize& originalScrollOffset, bool autoHorizontalScrollBarChanged, bool autoVerticalScrollBarChanged)
+{
+ ASSERT(box().hasOverflowClip());
// Layout may cause us to be at an invalid scroll position. In this case we need
// to pull our scroll offsets back to the max (or push them up to the min).
@@ -673,22 +696,8 @@ void DeprecatedPaintLayerScrollableArea::updateAfterLayout()
if (box().style()->overflowY() == OSCROLL && verticalScrollbar())
verticalScrollbar()->setEnabled(hasVerticalOverflow);
}
- if (hasOverlayScrollbars()) {
- if (!scrollSize(HorizontalScrollbar))
- setHasHorizontalScrollbar(false);
- if (!scrollSize(VerticalScrollbar))
- 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);
if (!visualViewportSuppliesScrollbars() && (autoHorizontalScrollBarChanged || autoVerticalScrollBarChanged)) {
- if (box().hasAutoHorizontalScrollbar())
- setHasHorizontalScrollbar(hasHorizontalOverflow);
- if (box().hasAutoVerticalScrollbar())
- setHasVerticalScrollbar(hasVerticalOverflow);
-
if (hasVerticalOverflow || hasHorizontalOverflow)
updateScrollCornerStyle();
@@ -738,6 +747,15 @@ void DeprecatedPaintLayerScrollableArea::updateAfterLayout()
positionOverflowControls();
}
+void DeprecatedPaintLayerScrollableArea::updateAfterLayout()
+{
+ DoubleSize originalScrollOffset;
+ bool autoHorizontalScrollBarChanged;
leviw_travelin_and_unemployed 2015/08/20 18:53:06 Kinda sucks that these are necessary and un-used h
szager1 2015/08/20 21:53:29 But they are used: updateScrollDimensions will pop
+ bool autoVerticalScrollBarChanged;
+ updateScrollDimensions(originalScrollOffset, autoHorizontalScrollBarChanged, autoVerticalScrollBarChanged);
+ finalizeScrollDimensions(originalScrollOffset, autoHorizontalScrollBarChanged, autoVerticalScrollBarChanged);
+}
+
ScrollBehavior DeprecatedPaintLayerScrollableArea::scrollBehaviorStyle() const
{
return box().style()->scrollBehavior();

Powered by Google App Engine
This is Rietveld 408576698