Commit 4567d59b authored by cbiesinger's avatar cbiesinger Committed by Commit bot

[css-flexbox] Fix size comparison when scrollbars are present

BUG=646288

Review-Url: https://codereview.chromium.org/2342663002
Cr-Commit-Position: refs/heads/master@{#418846}
parent 3b022272
<!DOCTYPE html>
<style>
body { width: 800px; }
* { min-width: 0; min-height: 0; }
#list-wrapper {
display: flex;
flex-direction: column;
}
#player-list-wrapper {
flex-grow: 1;
overflow: auto;
}
</style>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../../resources/check-layout-th.js"></script>
<p>Tests that there's no vertical scrollbar for this content</p>
<body onload="checkLayout('#list-wrapper')">
<div id="list-wrapper" data-expected-width="800">
<div id="player-list-wrapper" data-expected-width="800">
<div data-expected-width="800">http://www.ispeech.org/p/generic/getaudio?text=http%3A%2F%2Fwww.ispeech.org%2Ftext.to.speech%3Flink%3Dhttp%253A%252F%252Fwww.ispeech.org%252Ftext.to.speech%253Fvoice%253Dusenglishfemale%2526action%253Dconvert%2526speed%253D0%2526text%253DType%252520some%252520text%252520and%252520click%252520play%2C&amp;voice=usenglishfemale&amp;speed=0&amp;action=convert</div>
</div>
</div>
</body>
...@@ -521,9 +521,9 @@ LayoutUnit LayoutFlexibleBox::mainAxisExtentForChild(const LayoutBox& child) con ...@@ -521,9 +521,9 @@ LayoutUnit LayoutFlexibleBox::mainAxisExtentForChild(const LayoutBox& child) con
return isHorizontalFlow() ? child.size().width() : child.size().height(); return isHorizontalFlow() ? child.size().width() : child.size().height();
} }
LayoutUnit LayoutFlexibleBox::mainAxisContentExtentForChild(const LayoutBox& child) const LayoutUnit LayoutFlexibleBox::mainAxisContentExtentForChildIncludingScrollbar(const LayoutBox& child) const
{ {
return isHorizontalFlow() ? child.contentWidth() : child.contentHeight(); return isHorizontalFlow() ? child.contentWidth() + child.verticalScrollbarWidth() : child.contentHeight() + child.horizontalScrollbarHeight();
} }
LayoutUnit LayoutFlexibleBox::crossAxisExtent() const LayoutUnit LayoutFlexibleBox::crossAxisExtent() const
...@@ -1662,7 +1662,10 @@ void LayoutFlexibleBox::layoutAndPlaceChildren(LayoutUnit& crossAxisOffset, cons ...@@ -1662,7 +1662,10 @@ void LayoutFlexibleBox::layoutAndPlaceChildren(LayoutUnit& crossAxisOffset, cons
child->setMayNeedPaintInvalidation(); child->setMayNeedPaintInvalidation();
setOverrideMainAxisContentSizeForChild(*child, flexItem.flexedContentSize); setOverrideMainAxisContentSizeForChild(*child, flexItem.flexedContentSize);
if (flexItem.flexedContentSize != mainAxisContentExtentForChild(*child)) { // The flexed content size and the override size include the scrollbar
// width, so we need to compare to the size including the scrollbar.
// TODO(cbiesinger): Should it include the scrollbar?
if (flexItem.flexedContentSize != mainAxisContentExtentForChildIncludingScrollbar(*child)) {
child->setChildNeedsLayout(MarkOnlyThis); child->setChildNeedsLayout(MarkOnlyThis);
} else { } else {
// To avoid double applying margin changes in updateAutoMarginsInCrossAxis, we reset the margins here. // To avoid double applying margin changes in updateAutoMarginsInCrossAxis, we reset the margins here.
......
...@@ -121,7 +121,7 @@ private: ...@@ -121,7 +121,7 @@ private:
LayoutUnit childIntrinsicLogicalHeight(const LayoutBox& child) const; LayoutUnit childIntrinsicLogicalHeight(const LayoutBox& child) const;
LayoutUnit childIntrinsicLogicalWidth(const LayoutBox& child) const; LayoutUnit childIntrinsicLogicalWidth(const LayoutBox& child) const;
LayoutUnit mainAxisExtentForChild(const LayoutBox& child) const; LayoutUnit mainAxisExtentForChild(const LayoutBox& child) const;
LayoutUnit mainAxisContentExtentForChild(const LayoutBox& child) const; LayoutUnit mainAxisContentExtentForChildIncludingScrollbar(const LayoutBox& child) const;
LayoutUnit crossAxisExtent() const; LayoutUnit crossAxisExtent() const;
LayoutUnit mainAxisExtent() const; LayoutUnit mainAxisExtent() const;
LayoutUnit crossAxisContentExtent() const; LayoutUnit crossAxisContentExtent() const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment