Loading layout/generic/CSSOrderAwareFrameIterator.h +17 −17 Original line number Diff line number Diff line Loading @@ -53,21 +53,21 @@ namespace mozilla { template <typename Iterator> class CSSOrderAwareFrameIteratorT { public: enum OrderState { eUnknownOrder, eKnownOrdered, eKnownUnordered }; enum ChildFilter { eSkipPlaceholders, eIncludeAll }; enum OrderingProperty { eUseOrder, // Default behavior: use "order". eUseBoxOrdinalGroup // Legacy behavior: use prefixed "box-ordinal-group". enum class OrderState { Unknown, Ordered, Unordered }; enum class ChildFilter { SkipPlaceholders, IncludeAll }; enum class OrderingProperty { Order, // Default behavior: use "order". BoxOrdinalGroup // Legacy behavior: use prefixed "box-ordinal-group". }; CSSOrderAwareFrameIteratorT(nsIFrame* aContainer, nsIFrame::ChildListID aListID, ChildFilter aFilter = eSkipPlaceholders, OrderState aState = eUnknownOrder, OrderingProperty aOrderProp = eUseOrder) CSSOrderAwareFrameIteratorT( nsIFrame* aContainer, nsIFrame::ChildListID aListID, ChildFilter aFilter = ChildFilter::SkipPlaceholders, OrderState aState = OrderState::Unknown, OrderingProperty aOrderProp = OrderingProperty::Order) : mChildren(aContainer->GetChildList(aListID)), mArrayIndex(0), mItemIndex(0), mSkipPlaceholders(aFilter == eSkipPlaceholders) mSkipPlaceholders(aFilter == ChildFilter::SkipPlaceholders) #ifdef DEBUG , mContainer(aContainer), Loading @@ -78,13 +78,13 @@ class CSSOrderAwareFrameIteratorT { "Only use this iterator in a container that honors 'order'"); size_t count = 0; bool isOrdered = aState != eKnownUnordered; if (aState == eUnknownOrder) { bool isOrdered = aState != OrderState::Unordered; if (aState == OrderState::Unknown) { auto maxOrder = std::numeric_limits<int32_t>::min(); for (auto* child : mChildren) { ++count; int32_t order = aOrderProp == eUseBoxOrdinalGroup int32_t order = aOrderProp == OrderingProperty::BoxOrdinalGroup ? child->StyleXUL()->mBoxOrdinal : child->StylePosition()->mOrder; Loading @@ -104,7 +104,7 @@ class CSSOrderAwareFrameIteratorT { for (Iterator i(begin(mChildren)), iEnd(end(mChildren)); i != iEnd; ++i) { mArray->AppendElement(*i); } auto comparator = (aOrderProp == eUseBoxOrdinalGroup) auto comparator = aOrderProp == OrderingProperty::BoxOrdinalGroup ? CSSBoxOrdinalGroupComparator : CSSOrderComparator; mArray->StableSort(comparator); Loading Loading @@ -197,7 +197,7 @@ class CSSOrderAwareFrameIteratorT { } } void Reset(ChildFilter aFilter = eSkipPlaceholders) { void Reset(ChildFilter aFilter = ChildFilter::SkipPlaceholders) { if (mIter.isSome()) { mIter.reset(); mIter.emplace(begin(mChildren)); Loading @@ -207,7 +207,7 @@ class CSSOrderAwareFrameIteratorT { mArrayIndex = 0; } mItemIndex = IsForward() ? 0 : *mItemCount - 1; mSkipPlaceholders = aFilter == eSkipPlaceholders; mSkipPlaceholders = aFilter == ChildFilter::SkipPlaceholders; if (mSkipPlaceholders) { SkipPlaceholders(); } Loading layout/generic/nsFlexContainerFrame.cpp +10 −8 Original line number Diff line number Diff line Loading @@ -76,8 +76,8 @@ static CSSOrderAwareFrameIterator::OrderState OrderStateForIter( const nsFlexContainerFrame* aFlexContainer) { return aFlexContainer->HasAnyStateBits( NS_STATE_FLEX_NORMAL_FLOW_CHILDREN_IN_CSS_ORDER) ? CSSOrderAwareFrameIterator::OrderState::eKnownOrdered : CSSOrderAwareFrameIterator::OrderState::eKnownUnordered; ? CSSOrderAwareFrameIterator::OrderState::Ordered : CSSOrderAwareFrameIterator::OrderState::Unordered; } // Returns the OrderingProperty enum that we should pass to Loading @@ -85,8 +85,8 @@ static CSSOrderAwareFrameIterator::OrderState OrderStateForIter( static CSSOrderAwareFrameIterator::OrderingProperty OrderingPropertyForIter( const nsFlexContainerFrame* aFlexContainer) { return IsLegacyBox(aFlexContainer) ? CSSOrderAwareFrameIterator::OrderingProperty::eUseBoxOrdinalGroup : CSSOrderAwareFrameIterator::OrderingProperty::eUseOrder; ? CSSOrderAwareFrameIterator::OrderingProperty::BoxOrdinalGroup : CSSOrderAwareFrameIterator::OrderingProperty::Order; } // Returns the "align-items" value that's equivalent to the legacy "box-align" Loading Loading @@ -2746,7 +2746,7 @@ void nsFlexContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, nsDisplayListSet childLists(tempLists, tempLists.BlockBorderBackgrounds()); CSSOrderAwareFrameIterator iter( this, kPrincipalList, CSSOrderAwareFrameIterator::eIncludeAll, this, kPrincipalList, CSSOrderAwareFrameIterator::ChildFilter::IncludeAll, OrderStateForIter(this), OrderingPropertyForIter(this)); for (; !iter.AtEnd(); iter.Next()) { Loading Loading @@ -3952,8 +3952,9 @@ void nsFlexContainerFrame::GenerateFlexLines( uint32_t itemIdxInContainer = 0; CSSOrderAwareFrameIterator iter( this, kPrincipalList, CSSOrderAwareFrameIterator::eIncludeAll, CSSOrderAwareFrameIterator::eUnknownOrder, OrderingPropertyForIter(this)); this, kPrincipalList, CSSOrderAwareFrameIterator::ChildFilter::IncludeAll, CSSOrderAwareFrameIterator::OrderState::Unknown, OrderingPropertyForIter(this)); AddOrRemoveStateBits(NS_STATE_FLEX_NORMAL_FLOW_CHILDREN_IN_CSS_ORDER, iter.ItemsAreAlreadyInOrder()); Loading Loading @@ -4060,7 +4061,8 @@ void nsFlexContainerFrame::GenerateFlexLines(const SharedFlexData& aData, // Construct flex items for this flex container fragment from existing flex // items in SharedFlexData. CSSOrderAwareFrameIterator iter( this, kPrincipalList, CSSOrderAwareFrameIterator::eSkipPlaceholders, this, kPrincipalList, CSSOrderAwareFrameIterator::ChildFilter::SkipPlaceholders, OrderStateForIter(this), OrderingPropertyForIter(this)); FlexItemIterator itemIter(aData.mLines); Loading layout/generic/nsGridContainerFrame.cpp +12 −11 Original line number Diff line number Diff line Loading @@ -7360,7 +7360,7 @@ nscoord nsGridContainerFrame::ReflowInFragmentainer( // and put them in a separate array. nsTArray<const GridItemInfo*> sortedItems(aState.mGridItems.Length()); nsTArray<nsIFrame*> placeholders(aState.mAbsPosItems.Length()); aState.mIter.Reset(CSSOrderAwareFrameIterator::eIncludeAll); aState.mIter.Reset(CSSOrderAwareFrameIterator::ChildFilter::IncludeAll); for (; !aState.mIter.AtEnd(); aState.mIter.Next()) { nsIFrame* child = *aState.mIter; if (!child->IsPlaceholderFrame()) { Loading Loading @@ -7860,7 +7860,7 @@ nscoord nsGridContainerFrame::MasonryLayout(GridReflowInput& aState, // Collect our grid items and sort them in grid order. nsTArray<GridItemInfo*> sortedItems(aState.mGridItems.Length()); aState.mIter.Reset(CSSOrderAwareFrameIterator::eIncludeAll); aState.mIter.Reset(CSSOrderAwareFrameIterator::ChildFilter::IncludeAll); size_t absposIndex = 0; const LogicalAxis masonryAxis = IsMasonry(eLogicalAxisBlock) ? eLogicalAxisBlock : eLogicalAxisInline; Loading Loading @@ -8376,7 +8376,7 @@ nscoord nsGridContainerFrame::ReflowChildren(GridReflowInput& aState, bSize = ReflowInFragmentainer(aState, aContentArea, aDesiredSize, aStatus, *fragmentainer, aContainerSize); } else { aState.mIter.Reset(CSSOrderAwareFrameIterator::eIncludeAll); aState.mIter.Reset(CSSOrderAwareFrameIterator::ChildFilter::IncludeAll); for (; !aState.mIter.AtEnd(); aState.mIter.Next()) { nsIFrame* child = *aState.mIter; const GridItemInfo* info = nullptr; Loading Loading @@ -8686,8 +8686,8 @@ void nsGridContainerFrame::Reflow(nsPresContext* aPresContext, using Filter = CSSOrderAwareFrameIterator::ChildFilter; using Order = CSSOrderAwareFrameIterator::OrderState; bool ordered = gridReflowInput.mIter.ItemsAreAlreadyInOrder(); auto orderState = ordered ? Order::eKnownOrdered : Order::eKnownUnordered; iter.emplace(this, kPrincipalList, Filter::eSkipPlaceholders, orderState); auto orderState = ordered ? Order::Ordered : Order::Unordered; iter.emplace(this, kPrincipalList, Filter::SkipPlaceholders, orderState); gridItems.emplace(); for (; !iter->AtEnd(); iter->Next()) { auto child = **iter; Loading Loading @@ -9265,10 +9265,11 @@ void nsGridContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, typedef CSSOrderAwareFrameIterator::OrderState OrderState; OrderState order = HasAnyStateBits(NS_STATE_GRID_NORMAL_FLOW_CHILDREN_IN_CSS_ORDER) ? OrderState::eKnownOrdered : OrderState::eKnownUnordered; ? OrderState::Ordered : OrderState::Unordered; CSSOrderAwareFrameIterator iter( this, kPrincipalList, CSSOrderAwareFrameIterator::eIncludeAll, order); this, kPrincipalList, CSSOrderAwareFrameIterator::ChildFilter::IncludeAll, order); for (; !iter.AtEnd(); iter.Next()) { nsIFrame* child = *iter; BuildDisplayListForChild(aBuilder, child, aLists, Loading Loading @@ -9448,9 +9449,9 @@ void nsGridContainerFrame::CalculateBaselines( // iterator ('aIter' is the forward iterator from the GridReflowInput). using Iter = ReverseCSSOrderAwareFrameIterator; auto orderState = aIter->ItemsAreAlreadyInOrder() ? Iter::OrderState::eKnownOrdered : Iter::OrderState::eKnownUnordered; Iter iter(this, kPrincipalList, Iter::ChildFilter::eSkipPlaceholders, ? Iter::OrderState::Ordered : Iter::OrderState::Unordered; Iter iter(this, kPrincipalList, Iter::ChildFilter::SkipPlaceholders, orderState); iter.SetItemCount(aGridItems->Length()); FindItemInGridOrderResult gridOrderLastItem = FindLastItemInGridOrder( Loading Loading
layout/generic/CSSOrderAwareFrameIterator.h +17 −17 Original line number Diff line number Diff line Loading @@ -53,21 +53,21 @@ namespace mozilla { template <typename Iterator> class CSSOrderAwareFrameIteratorT { public: enum OrderState { eUnknownOrder, eKnownOrdered, eKnownUnordered }; enum ChildFilter { eSkipPlaceholders, eIncludeAll }; enum OrderingProperty { eUseOrder, // Default behavior: use "order". eUseBoxOrdinalGroup // Legacy behavior: use prefixed "box-ordinal-group". enum class OrderState { Unknown, Ordered, Unordered }; enum class ChildFilter { SkipPlaceholders, IncludeAll }; enum class OrderingProperty { Order, // Default behavior: use "order". BoxOrdinalGroup // Legacy behavior: use prefixed "box-ordinal-group". }; CSSOrderAwareFrameIteratorT(nsIFrame* aContainer, nsIFrame::ChildListID aListID, ChildFilter aFilter = eSkipPlaceholders, OrderState aState = eUnknownOrder, OrderingProperty aOrderProp = eUseOrder) CSSOrderAwareFrameIteratorT( nsIFrame* aContainer, nsIFrame::ChildListID aListID, ChildFilter aFilter = ChildFilter::SkipPlaceholders, OrderState aState = OrderState::Unknown, OrderingProperty aOrderProp = OrderingProperty::Order) : mChildren(aContainer->GetChildList(aListID)), mArrayIndex(0), mItemIndex(0), mSkipPlaceholders(aFilter == eSkipPlaceholders) mSkipPlaceholders(aFilter == ChildFilter::SkipPlaceholders) #ifdef DEBUG , mContainer(aContainer), Loading @@ -78,13 +78,13 @@ class CSSOrderAwareFrameIteratorT { "Only use this iterator in a container that honors 'order'"); size_t count = 0; bool isOrdered = aState != eKnownUnordered; if (aState == eUnknownOrder) { bool isOrdered = aState != OrderState::Unordered; if (aState == OrderState::Unknown) { auto maxOrder = std::numeric_limits<int32_t>::min(); for (auto* child : mChildren) { ++count; int32_t order = aOrderProp == eUseBoxOrdinalGroup int32_t order = aOrderProp == OrderingProperty::BoxOrdinalGroup ? child->StyleXUL()->mBoxOrdinal : child->StylePosition()->mOrder; Loading @@ -104,7 +104,7 @@ class CSSOrderAwareFrameIteratorT { for (Iterator i(begin(mChildren)), iEnd(end(mChildren)); i != iEnd; ++i) { mArray->AppendElement(*i); } auto comparator = (aOrderProp == eUseBoxOrdinalGroup) auto comparator = aOrderProp == OrderingProperty::BoxOrdinalGroup ? CSSBoxOrdinalGroupComparator : CSSOrderComparator; mArray->StableSort(comparator); Loading Loading @@ -197,7 +197,7 @@ class CSSOrderAwareFrameIteratorT { } } void Reset(ChildFilter aFilter = eSkipPlaceholders) { void Reset(ChildFilter aFilter = ChildFilter::SkipPlaceholders) { if (mIter.isSome()) { mIter.reset(); mIter.emplace(begin(mChildren)); Loading @@ -207,7 +207,7 @@ class CSSOrderAwareFrameIteratorT { mArrayIndex = 0; } mItemIndex = IsForward() ? 0 : *mItemCount - 1; mSkipPlaceholders = aFilter == eSkipPlaceholders; mSkipPlaceholders = aFilter == ChildFilter::SkipPlaceholders; if (mSkipPlaceholders) { SkipPlaceholders(); } Loading
layout/generic/nsFlexContainerFrame.cpp +10 −8 Original line number Diff line number Diff line Loading @@ -76,8 +76,8 @@ static CSSOrderAwareFrameIterator::OrderState OrderStateForIter( const nsFlexContainerFrame* aFlexContainer) { return aFlexContainer->HasAnyStateBits( NS_STATE_FLEX_NORMAL_FLOW_CHILDREN_IN_CSS_ORDER) ? CSSOrderAwareFrameIterator::OrderState::eKnownOrdered : CSSOrderAwareFrameIterator::OrderState::eKnownUnordered; ? CSSOrderAwareFrameIterator::OrderState::Ordered : CSSOrderAwareFrameIterator::OrderState::Unordered; } // Returns the OrderingProperty enum that we should pass to Loading @@ -85,8 +85,8 @@ static CSSOrderAwareFrameIterator::OrderState OrderStateForIter( static CSSOrderAwareFrameIterator::OrderingProperty OrderingPropertyForIter( const nsFlexContainerFrame* aFlexContainer) { return IsLegacyBox(aFlexContainer) ? CSSOrderAwareFrameIterator::OrderingProperty::eUseBoxOrdinalGroup : CSSOrderAwareFrameIterator::OrderingProperty::eUseOrder; ? CSSOrderAwareFrameIterator::OrderingProperty::BoxOrdinalGroup : CSSOrderAwareFrameIterator::OrderingProperty::Order; } // Returns the "align-items" value that's equivalent to the legacy "box-align" Loading Loading @@ -2746,7 +2746,7 @@ void nsFlexContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, nsDisplayListSet childLists(tempLists, tempLists.BlockBorderBackgrounds()); CSSOrderAwareFrameIterator iter( this, kPrincipalList, CSSOrderAwareFrameIterator::eIncludeAll, this, kPrincipalList, CSSOrderAwareFrameIterator::ChildFilter::IncludeAll, OrderStateForIter(this), OrderingPropertyForIter(this)); for (; !iter.AtEnd(); iter.Next()) { Loading Loading @@ -3952,8 +3952,9 @@ void nsFlexContainerFrame::GenerateFlexLines( uint32_t itemIdxInContainer = 0; CSSOrderAwareFrameIterator iter( this, kPrincipalList, CSSOrderAwareFrameIterator::eIncludeAll, CSSOrderAwareFrameIterator::eUnknownOrder, OrderingPropertyForIter(this)); this, kPrincipalList, CSSOrderAwareFrameIterator::ChildFilter::IncludeAll, CSSOrderAwareFrameIterator::OrderState::Unknown, OrderingPropertyForIter(this)); AddOrRemoveStateBits(NS_STATE_FLEX_NORMAL_FLOW_CHILDREN_IN_CSS_ORDER, iter.ItemsAreAlreadyInOrder()); Loading Loading @@ -4060,7 +4061,8 @@ void nsFlexContainerFrame::GenerateFlexLines(const SharedFlexData& aData, // Construct flex items for this flex container fragment from existing flex // items in SharedFlexData. CSSOrderAwareFrameIterator iter( this, kPrincipalList, CSSOrderAwareFrameIterator::eSkipPlaceholders, this, kPrincipalList, CSSOrderAwareFrameIterator::ChildFilter::SkipPlaceholders, OrderStateForIter(this), OrderingPropertyForIter(this)); FlexItemIterator itemIter(aData.mLines); Loading
layout/generic/nsGridContainerFrame.cpp +12 −11 Original line number Diff line number Diff line Loading @@ -7360,7 +7360,7 @@ nscoord nsGridContainerFrame::ReflowInFragmentainer( // and put them in a separate array. nsTArray<const GridItemInfo*> sortedItems(aState.mGridItems.Length()); nsTArray<nsIFrame*> placeholders(aState.mAbsPosItems.Length()); aState.mIter.Reset(CSSOrderAwareFrameIterator::eIncludeAll); aState.mIter.Reset(CSSOrderAwareFrameIterator::ChildFilter::IncludeAll); for (; !aState.mIter.AtEnd(); aState.mIter.Next()) { nsIFrame* child = *aState.mIter; if (!child->IsPlaceholderFrame()) { Loading Loading @@ -7860,7 +7860,7 @@ nscoord nsGridContainerFrame::MasonryLayout(GridReflowInput& aState, // Collect our grid items and sort them in grid order. nsTArray<GridItemInfo*> sortedItems(aState.mGridItems.Length()); aState.mIter.Reset(CSSOrderAwareFrameIterator::eIncludeAll); aState.mIter.Reset(CSSOrderAwareFrameIterator::ChildFilter::IncludeAll); size_t absposIndex = 0; const LogicalAxis masonryAxis = IsMasonry(eLogicalAxisBlock) ? eLogicalAxisBlock : eLogicalAxisInline; Loading Loading @@ -8376,7 +8376,7 @@ nscoord nsGridContainerFrame::ReflowChildren(GridReflowInput& aState, bSize = ReflowInFragmentainer(aState, aContentArea, aDesiredSize, aStatus, *fragmentainer, aContainerSize); } else { aState.mIter.Reset(CSSOrderAwareFrameIterator::eIncludeAll); aState.mIter.Reset(CSSOrderAwareFrameIterator::ChildFilter::IncludeAll); for (; !aState.mIter.AtEnd(); aState.mIter.Next()) { nsIFrame* child = *aState.mIter; const GridItemInfo* info = nullptr; Loading Loading @@ -8686,8 +8686,8 @@ void nsGridContainerFrame::Reflow(nsPresContext* aPresContext, using Filter = CSSOrderAwareFrameIterator::ChildFilter; using Order = CSSOrderAwareFrameIterator::OrderState; bool ordered = gridReflowInput.mIter.ItemsAreAlreadyInOrder(); auto orderState = ordered ? Order::eKnownOrdered : Order::eKnownUnordered; iter.emplace(this, kPrincipalList, Filter::eSkipPlaceholders, orderState); auto orderState = ordered ? Order::Ordered : Order::Unordered; iter.emplace(this, kPrincipalList, Filter::SkipPlaceholders, orderState); gridItems.emplace(); for (; !iter->AtEnd(); iter->Next()) { auto child = **iter; Loading Loading @@ -9265,10 +9265,11 @@ void nsGridContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder, typedef CSSOrderAwareFrameIterator::OrderState OrderState; OrderState order = HasAnyStateBits(NS_STATE_GRID_NORMAL_FLOW_CHILDREN_IN_CSS_ORDER) ? OrderState::eKnownOrdered : OrderState::eKnownUnordered; ? OrderState::Ordered : OrderState::Unordered; CSSOrderAwareFrameIterator iter( this, kPrincipalList, CSSOrderAwareFrameIterator::eIncludeAll, order); this, kPrincipalList, CSSOrderAwareFrameIterator::ChildFilter::IncludeAll, order); for (; !iter.AtEnd(); iter.Next()) { nsIFrame* child = *iter; BuildDisplayListForChild(aBuilder, child, aLists, Loading Loading @@ -9448,9 +9449,9 @@ void nsGridContainerFrame::CalculateBaselines( // iterator ('aIter' is the forward iterator from the GridReflowInput). using Iter = ReverseCSSOrderAwareFrameIterator; auto orderState = aIter->ItemsAreAlreadyInOrder() ? Iter::OrderState::eKnownOrdered : Iter::OrderState::eKnownUnordered; Iter iter(this, kPrincipalList, Iter::ChildFilter::eSkipPlaceholders, ? Iter::OrderState::Ordered : Iter::OrderState::Unordered; Iter iter(this, kPrincipalList, Iter::ChildFilter::SkipPlaceholders, orderState); iter.SetItemCount(aGridItems->Length()); FindItemInGridOrderResult gridOrderLastItem = FindLastItemInGridOrder( Loading