Bug 1301014 - Fix intrinsic inline-size of flex container in vertical writing modes. r=dholbert
MozReview-Commit-ID: 7ef2EqMxOI5
--- a/layout/generic/nsFlexContainerFrame.cpp
+++ b/layout/generic/nsFlexContainerFrame.cpp
@@ -4387,61 +4387,62 @@ nsFlexContainerFrame::ReflowFlexItem(nsP
if (aItem.Frame() == mFrames.FirstChild()) {
aItem.SetAscent(childDesiredSize.BlockStartAscent());
}
}
/* virtual */ nscoord
nsFlexContainerFrame::GetMinISize(nsRenderingContext* aRenderingContext)
{
- nscoord minWidth = 0;
- DISPLAY_MIN_WIDTH(this, minWidth);
+ nscoord minISize = 0;
+ DISPLAY_MIN_WIDTH(this, minISize);
RenumberList();
const nsStylePosition* stylePos = StylePosition();
const FlexboxAxisTracker axisTracker(this, GetWritingMode());
for (nsIFrame* childFrame : mFrames) {
- nscoord childMinWidth =
+ nscoord childMinISize =
nsLayoutUtils::IntrinsicForContainer(aRenderingContext, childFrame,
nsLayoutUtils::MIN_ISIZE);
- // For a horizontal single-line flex container, the intrinsic min width is
- // the sum of its items' min widths.
- // For a vertical flex container, or for a multi-line horizontal flex
- // container, the intrinsic min width is the max of its items' min widths.
- if (axisTracker.IsMainAxisHorizontal() &&
+ // For a horizontal single-line flex container, the intrinsic min
+ // isize is the sum of its items' min isizes.
+ // For a column-oriented flex container, or for a multi-line row-
+ // oriented flex container, the intrinsic min isize is the max of
+ // its items' min isizes.
+ if (axisTracker.IsRowOriented() &&
NS_STYLE_FLEX_WRAP_NOWRAP == stylePos->mFlexWrap) {
- minWidth += childMinWidth;
+ minISize += childMinISize;
} else {
- minWidth = std::max(minWidth, childMinWidth);
+ minISize = std::max(minISize, childMinISize);
}
}
- return minWidth;
+ return minISize;
}
/* virtual */ nscoord
nsFlexContainerFrame::GetPrefISize(nsRenderingContext* aRenderingContext)
{
- nscoord prefWidth = 0;
- DISPLAY_PREF_WIDTH(this, prefWidth);
+ nscoord prefISize = 0;
+ DISPLAY_PREF_WIDTH(this, prefISize);
RenumberList();
// XXXdholbert Optimization: We could cache our intrinsic widths like
// nsBlockFrame does (and return it early from this function if it's set).
// Whenever anything happens that might change it, set it to
// NS_INTRINSIC_WIDTH_UNKNOWN (like nsBlockFrame::MarkIntrinsicISizesDirty
// does)
const FlexboxAxisTracker axisTracker(this, GetWritingMode());
for (nsIFrame* childFrame : mFrames) {
- nscoord childPrefWidth =
+ nscoord childPrefISize =
nsLayoutUtils::IntrinsicForContainer(aRenderingContext, childFrame,
nsLayoutUtils::PREF_ISIZE);
- if (axisTracker.IsMainAxisHorizontal()) {
- prefWidth += childPrefWidth;
+ if (axisTracker.IsRowOriented()) {
+ prefISize += childPrefISize;
} else {
- prefWidth = std::max(prefWidth, childPrefWidth);
+ prefISize = std::max(prefISize, childPrefISize);
}
}
- return prefWidth;
+ return prefISize;
}