diff --git a/layout/generic/nsGridContainerFrame.cpp b/layout/generic/nsGridContainerFrame.cpp index 7fd6d73f9948..2c899422f77b 100644 --- a/layout/generic/nsGridContainerFrame.cpp +++ b/layout/generic/nsGridContainerFrame.cpp @@ -228,7 +228,7 @@ struct MOZ_STACK_CLASS nsGridContainerFrame::TrackSizingFunctions */ struct MOZ_STACK_CLASS nsGridContainerFrame::Tracks { - explicit Tracks(Dimension aDimension) : mDimension(aDimension) {} + explicit Tracks(LogicalAxis aAxis) : mAxis(aAxis) {} void Initialize(const TrackSizingFunctions& aFunctions, uint32_t aNumTracks, @@ -599,7 +599,7 @@ struct MOZ_STACK_CLASS nsGridContainerFrame::Tracks #endif nsAutoTArray mSizes; - Dimension mDimension; + LogicalAxis mAxis; }; struct MOZ_STACK_CLASS nsGridContainerFrame::GridReflowState @@ -638,8 +638,8 @@ private: const WritingMode& aWM) : mIter(aFrame, kPrincipalList) , mGridStyle(aGridStyle) - , mCols(eColDimension) - , mRows(eRowDimension) + , mCols(eLogicalAxisInline) + , mRows(eLogicalAxisBlock) , mColFunctions({ mGridStyle->mGridTemplateColumns.mMinTrackSizingFunctions, mGridStyle->mGridTemplateColumns.mMaxTrackSizingFunctions, @@ -1650,29 +1650,26 @@ nsGridContainerFrame::Tracks::Initialize( static nscoord MinSize(nsIFrame* aChild, nsRenderingContext* aRC, WritingMode aCBWM, - nsGridContainerFrame::Dimension aDimension, - nsLayoutUtils::IntrinsicISizeType aConstraint) + LogicalAxis aAxis, nsLayoutUtils::IntrinsicISizeType aConstraint) { - PhysicalAxis axis(((aDimension == nsGridContainerFrame::eColDimension) == - aCBWM.IsVertical()) ? eAxisVertical : eAxisHorizontal); + PhysicalAxis axis(aCBWM.PhysicalAxis(aAxis)); return nsLayoutUtils::MinSizeContributionForAxis(axis, aRC, aChild, aConstraint); } /** * Return the [min|max]-content contribution of aChild to its parent (i.e. - * the child's margin-box) in aDimension. + * the child's margin-box) in aAxis. */ static nscoord ContentContribution(nsIFrame* aChild, const nsHTMLReflowState* aReflowState, nsRenderingContext* aRC, WritingMode aCBWM, - nsGridContainerFrame::Dimension aDimension, + LogicalAxis aAxis, nsLayoutUtils::IntrinsicISizeType aConstraint) { - PhysicalAxis axis(((aDimension == nsGridContainerFrame::eColDimension) == - aCBWM.IsVertical()) ? eAxisVertical : eAxisHorizontal); + PhysicalAxis axis(aCBWM.PhysicalAxis(aAxis)); nscoord size = nsLayoutUtils::IntrinsicForAxis(axis, aRC, aChild, aConstraint, nsLayoutUtils::BAIL_IF_REFLOW_NEEDED); if (size == NS_INTRINSIC_WIDTH_UNKNOWN) { @@ -1717,24 +1714,24 @@ ContentContribution(nsIFrame* aChild, } static nscoord -MinContentContribution(nsIFrame* aChild, - const nsHTMLReflowState* aRS, - nsRenderingContext* aRC, - WritingMode aCBWM, - nsGridContainerFrame::Dimension aDimension) +MinContentContribution(nsIFrame* aChild, + const nsHTMLReflowState* aRS, + nsRenderingContext* aRC, + WritingMode aCBWM, + LogicalAxis aAxis) { - return ContentContribution(aChild, aRS, aRC, aCBWM, aDimension, + return ContentContribution(aChild, aRS, aRC, aCBWM, aAxis, nsLayoutUtils::MIN_ISIZE); } static nscoord -MaxContentContribution(nsIFrame* aChild, - const nsHTMLReflowState* aRS, - nsRenderingContext* aRC, - WritingMode aCBWM, - nsGridContainerFrame::Dimension aDimension) +MaxContentContribution(nsIFrame* aChild, + const nsHTMLReflowState* aRS, + nsRenderingContext* aRC, + WritingMode aCBWM, + LogicalAxis aAxis) { - return ContentContribution(aChild, aRS, aRC, aCBWM, aDimension, + return ContentContribution(aChild, aRS, aRC, aCBWM, aAxis, nsLayoutUtils::PREF_ISIZE); } @@ -1825,23 +1822,23 @@ nsGridContainerFrame::Tracks::ResolveIntrinsicSizeStep1( const nsHTMLReflowState* rs = aState.mReflowState; nsRenderingContext* rc = &aState.mRenderingContext; if (sz.mState & TrackSize::eAutoMinSizing) { - nscoord s = MinSize(aGridItem, rc, wm, mDimension, aConstraint); + nscoord s = MinSize(aGridItem, rc, wm, mAxis, aConstraint); sz.mBase = std::max(sz.mBase, s); } else if ((sz.mState & TrackSize::eMinContentMinSizing) || (aConstraint == nsLayoutUtils::MIN_ISIZE && (sz.mState & TrackSize::eFlexMinSizing))) { - nscoord s = MinContentContribution(aGridItem, rs, rc, wm, mDimension); + nscoord s = MinContentContribution(aGridItem, rs, rc, wm, mAxis); minContentContribution.emplace(s); sz.mBase = std::max(sz.mBase, minContentContribution.value()); } else if (sz.mState & TrackSize::eMaxContentMinSizing) { - nscoord s = MaxContentContribution(aGridItem, rs, rc, wm, mDimension); + nscoord s = MaxContentContribution(aGridItem, rs, rc, wm, mAxis); maxContentContribution.emplace(s); sz.mBase = std::max(sz.mBase, maxContentContribution.value()); } // max sizing if (sz.mState & TrackSize::eMinContentMaxSizing) { if (minContentContribution.isNothing()) { - nscoord s = MinContentContribution(aGridItem, rs, rc, wm, mDimension); + nscoord s = MinContentContribution(aGridItem, rs, rc, wm, mAxis); minContentContribution.emplace(s); } if (sz.mLimit == NS_UNCONSTRAINEDSIZE) { @@ -1852,7 +1849,7 @@ nsGridContainerFrame::Tracks::ResolveIntrinsicSizeStep1( } else if (sz.mState & (TrackSize::eAutoMaxSizing | TrackSize::eMaxContentMaxSizing)) { if (maxContentContribution.isNothing()) { - nscoord s = MaxContentContribution(aGridItem, rs, rc, wm, mDimension); + nscoord s = MaxContentContribution(aGridItem, rs, rc, wm, mAxis); maxContentContribution.emplace(s); } if (sz.mLimit == NS_UNCONSTRAINEDSIZE) { @@ -1912,7 +1909,7 @@ nsGridContainerFrame::Tracks::ResolveIntrinsicSize( uint32_t span = lineRange.Extent(); if (span == 1) { // Step 1. Size tracks to fit non-spanning items. - aGridItems[iter.GridItemIndex()].mIsFlexing[mDimension] = + aGridItems[iter.GridItemIndex()].mIsFlexing[mAxis] = ResolveIntrinsicSizeStep1(aState, aFunctions, aPercentageBasis, aConstraint, lineRange, child); } else { @@ -1930,25 +1927,25 @@ nsGridContainerFrame::Tracks::ResolveIntrinsicSize( stateBitsPerSpan[span] |= state; nscoord minSize = 0; if (state & (flexMin | TrackSize::eIntrinsicMinSizing)) { // for 2.1 - minSize = MinSize(child, rc, wm, mDimension, aConstraint); + minSize = MinSize(child, rc, wm, mAxis, aConstraint); } nscoord minContent = 0; if (state & (flexMin | TrackSize::eMinOrMaxContentMinSizing | // for 2.2 TrackSize::eIntrinsicMaxSizing)) { // for 2.5 minContent = MinContentContribution(child, aState.mReflowState, - rc, wm, mDimension); + rc, wm, mAxis); } nscoord maxContent = 0; if (state & (TrackSize::eMaxContentMinSizing | // for 2.3 TrackSize::eAutoOrMaxContentMaxSizing)) { // for 2.6 maxContent = MaxContentContribution(child, aState.mReflowState, - rc, wm, mDimension); + rc, wm, mAxis); } step2Items.AppendElement( Step2ItemData({span, state, lineRange, minSize, minContent, maxContent, child})); } else { - aGridItems[iter.GridItemIndex()].mIsFlexing[mDimension] = + aGridItems[iter.GridItemIndex()].mIsFlexing[mAxis] = !!(state & TrackSize::eFlexMaxSizing); } } @@ -2203,15 +2200,14 @@ nsGridContainerFrame::Tracks::FindUsedFlexFraction( // a flex track with its max-content contribution as 'space to fill' for (; !iter.AtEnd(); iter.Next()) { const GridItemInfo& item = aGridItems[iter.GridItemIndex()]; - if (item.mIsFlexing[mDimension]) { - nscoord spaceToFill = MaxContentContribution(*iter, rs, rc, wm, - mDimension); + if (item.mIsFlexing[mAxis]) { + nscoord spaceToFill = MaxContentContribution(*iter, rs, rc, wm, mAxis); if (spaceToFill <= 0) { continue; } // ... and all its spanned tracks as input. const LineRange& range = - mDimension == eColDimension ? item.mArea.mCols : item.mArea.mRows; + mAxis == eLogicalAxisInline ? item.mArea.mCols : item.mArea.mRows; nsTArray itemFlexTracks; for (uint32_t i = range.mStart, end = range.mEnd; i < end; ++i) { if (mSizes[i].mState & TrackSize::eFlexMaxSizing) { diff --git a/layout/generic/nsGridContainerFrame.h b/layout/generic/nsGridContainerFrame.h index 9c3c403fe2cf..2edc29a265f0 100644 --- a/layout/generic/nsGridContainerFrame.h +++ b/layout/generic/nsGridContainerFrame.h @@ -85,11 +85,6 @@ public: StateBits mState; }; - // @note when used in a function that measures a child's size, eColDimension - // means we're calculating the child's contribution to the column sizing. - // (i.e. the child's inline size if its 'writing-mode' is horizontal) - enum Dimension { eColDimension, eRowDimension }; - // @see nsAbsoluteContainingBlock::Reflow about this magic number static const nscoord VERY_LIKELY_A_GRID_CONTAINER = -123456789; @@ -294,7 +289,9 @@ protected: } GridArea mArea; - bool mIsFlexing[2]; // does the item span a flex track? (index by Dimension) + bool mIsFlexing[2]; // does the item span a flex track? (LogicalAxis index) + static_assert(mozilla::eLogicalAxisBlock == 0, "unexpected index value"); + static_assert(mozilla::eLogicalAxisInline == 1, "unexpected index value"); #ifdef DEBUG nsIFrame* mFrame; #endif