Skip to content

Commit

Permalink
Bug 1643173 Part 1 - Convert enum nsIFrame::DISPLAY_CHILD_* to enum c…
Browse files Browse the repository at this point in the history
…lass. r=dholbert

The modifications are all straightforward conversion except the one in
nsMathMLContainerFrame, where it is simplified by calling the equivalent
BuildDisplayListForInline() helper.

Differential Revision: https://phabricator.services.mozilla.com/D78166
  • Loading branch information
aethanyc committed Jun 5, 2020
1 parent 5a7f652 commit 7c1220a
Show file tree
Hide file tree
Showing 13 changed files with 38 additions and 33 deletions.
2 changes: 1 addition & 1 deletion layout/forms/nsHTMLButtonControlFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ void nsHTMLButtonControlFrame::BuildDisplayList(
}

BuildDisplayListForChild(aBuilder, mFrames.FirstChild(), set,
DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT);
DisplayChildFlag::ForcePseudoStackingContext);
}

// Put the foreground outline and focus rects on top of the children
Expand Down
2 changes: 1 addition & 1 deletion layout/forms/nsRangeFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ void nsRangeFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
nsIFrame* thumb = mThumbDiv->GetPrimaryFrame();
if (thumb) {
nsDisplayListSet set(aLists, aLists.Content());
BuildDisplayListForChild(aBuilder, thumb, set, DISPLAY_CHILD_INLINE);
BuildDisplayListForChild(aBuilder, thumb, set, DisplayChildFlag::Inline);
}
} else {
BuildDisplayListForInline(aBuilder, aLists);
Expand Down
4 changes: 2 additions & 2 deletions layout/forms/nsTextControlFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1314,7 +1314,7 @@ void nsTextControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
clipToRoot(overlayTextClip);
auto* kid = mPlaceholderDiv->GetPrimaryFrame();
MOZ_ASSERT(kid->GetParent() == this);
BuildDisplayListForChild(aBuilder, kid, set, 0);
BuildDisplayListForChild(aBuilder, kid, set);
}

for (auto* kid : mFrames) {
Expand All @@ -1329,7 +1329,7 @@ void nsTextControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
if (kidContent == mPreviewDiv) {
clipToRoot(overlayTextClip);
}
BuildDisplayListForChild(aBuilder, kid, set, 0);
BuildDisplayListForChild(aBuilder, kid, set);
}
}

Expand Down
5 changes: 4 additions & 1 deletion layout/generic/nsBlockFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6834,7 +6834,10 @@ static void DisplayLine(nsDisplayListBuilder* aBuilder,
collection,
aLineInLine ? collection.Content() : collection.BlockBorderBackgrounds());

uint32_t flags = aLineInLine ? nsIFrame::DISPLAY_CHILD_INLINE : 0;
auto flags =
aLineInLine
? nsIFrame::DisplayChildFlags(nsIFrame::DisplayChildFlag::Inline)
: nsIFrame::DisplayChildFlags();

nsIFrame* kid = aLine->mFirstChild;
int32_t n = aLine->GetChildCount();
Expand Down
2 changes: 1 addition & 1 deletion layout/generic/nsContainerFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ void nsContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,

void nsContainerFrame::BuildDisplayListForNonBlockChildren(
nsDisplayListBuilder* aBuilder, const nsDisplayListSet& aLists,
uint32_t aFlags) {
DisplayChildFlags aFlags) {
nsIFrame* kid = mFrames.FirstChild();
// Put each child's background directly onto the content list
nsDisplayListSet set(aLists, aLists.Content());
Expand Down
7 changes: 4 additions & 3 deletions layout/generic/nsContainerFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -513,16 +513,17 @@ class nsContainerFrame : public nsSplittableFrame {
*/
void BuildDisplayListForNonBlockChildren(nsDisplayListBuilder* aBuilder,
const nsDisplayListSet& aLists,
uint32_t aFlags = 0);
DisplayChildFlags aFlags = {});

/**
* A version of BuildDisplayList that use DISPLAY_CHILD_INLINE.
* A version of BuildDisplayList that use DisplayChildFlag::Inline.
* Intended as a convenience for derived classes.
*/
void BuildDisplayListForInline(nsDisplayListBuilder* aBuilder,
const nsDisplayListSet& aLists) {
DisplayBorderBackgroundOutline(aBuilder, aLists);
BuildDisplayListForNonBlockChildren(aBuilder, aLists, DISPLAY_CHILD_INLINE);
BuildDisplayListForNonBlockChildren(aBuilder, aLists,
DisplayChildFlag::Inline);
}

// ==========================================================================
Expand Down
6 changes: 3 additions & 3 deletions layout/generic/nsFlexContainerFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2627,13 +2627,13 @@ nscoord nsFlexContainerFrame::GetLogicalBaseline(
// normal flow, except that 'z-index' values other than 'auto' create
// a stacking context even if 'position' is 'static'.
// http://www.w3.org/TR/2012/CR-css3-flexbox-20120918/#painting
static uint32_t GetDisplayFlagsForFlexItem(nsIFrame* aFrame) {
static nsIFrame::DisplayChildFlag GetDisplayFlagsForFlexItem(nsIFrame* aFrame) {
MOZ_ASSERT(aFrame->IsFlexItem(), "Should only be called on flex items");
const nsStylePosition* pos = aFrame->StylePosition();
if (pos->mZIndex.IsInteger()) {
return nsIFrame::DISPLAY_CHILD_FORCE_STACKING_CONTEXT;
return nsIFrame::DisplayChildFlag::ForceStackingContext;
}
return nsIFrame::DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT;
return nsIFrame::DisplayChildFlag::ForcePseudoStackingContext;
}

void nsFlexContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
Expand Down
11 changes: 6 additions & 5 deletions layout/generic/nsFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3977,7 +3977,7 @@ static bool ShouldSkipFrame(nsDisplayListBuilder* aBuilder,
void nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
nsIFrame* aChild,
const nsDisplayListSet& aLists,
uint32_t aFlags) {
DisplayChildFlags aFlags) {
AutoCheckBuilder check(aBuilder);

if (ShouldSkipFrame(aBuilder, aChild)) {
Expand Down Expand Up @@ -4093,9 +4093,10 @@ void nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,

// true if this is a real or pseudo stacking context
bool pseudoStackingContext =
(aFlags & DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT) != 0;
aFlags.contains(DisplayChildFlag::ForcePseudoStackingContext);

if (!pseudoStackingContext && !isSVG && (aFlags & DISPLAY_CHILD_INLINE) &&
if (!pseudoStackingContext && !isSVG &&
aFlags.contains(DisplayChildFlag::Inline) &&
!child->IsFrameOfType(eLineParticipant)) {
// child is a non-inline frame in an inline context, i.e.,
// it acts like inline-block or inline-table. Therefore it is a
Expand Down Expand Up @@ -4129,7 +4130,7 @@ void nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
const bool isPositioned = disp->IsAbsPosContainingBlock(child);

const bool isStackingContext =
(aFlags & DISPLAY_CHILD_FORCE_STACKING_CONTEXT) ||
aFlags.contains(DisplayChildFlag::ForceStackingContext) ||
child->IsStackingContext(disp, pos, effects, isPositioned);

if (pseudoStackingContext || isStackingContext || isPositioned ||
Expand Down Expand Up @@ -4296,7 +4297,7 @@ void nsIFrame::BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
buildingForChild.RestoreBuildingInvisibleItemsValue();

if (isPositioned || isStackingContext ||
(aFlags & DISPLAY_CHILD_FORCE_STACKING_CONTEXT)) {
aFlags.contains(DisplayChildFlag::ForceStackingContext)) {
// Genuine stacking contexts, and positioned pseudo-stacking-contexts,
// go in this level.
if (!list.IsEmpty()) {
Expand Down
4 changes: 2 additions & 2 deletions layout/generic/nsGfxScrollFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3216,10 +3216,10 @@ void ScrollFrameHelper::AppendScrollPartsTo(nsDisplayListBuilder* aBuilder,
aBuilder, scrollTargetId, scrollDirection, createLayer);
mOuter->BuildDisplayListForChild(
aBuilder, scrollParts[i], partList,
nsIFrame::DISPLAY_CHILD_FORCE_STACKING_CONTEXT);
nsIFrame::DisplayChildFlag::ForceStackingContext);
}

// DISPLAY_CHILD_FORCE_STACKING_CONTEXT put everything into
// DisplayChildFlag::ForceStackingContext put everything into
// partList.PositionedDescendants().
if (partList.PositionedDescendants()->IsEmpty()) {
continue;
Expand Down
6 changes: 3 additions & 3 deletions layout/generic/nsGridContainerFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3661,12 +3661,12 @@ void nsGridContainerFrame::GridReflowInput::CalculateTrackSizes(
* context even if 'position' is 'static'.
* http://dev.w3.org/csswg/css-grid/#z-order
*/
static uint32_t GetDisplayFlagsForGridItem(nsIFrame* aFrame) {
static nsIFrame::DisplayChildFlag GetDisplayFlagsForGridItem(nsIFrame* aFrame) {
const nsStylePosition* pos = aFrame->StylePosition();
if (pos->mZIndex.IsInteger()) {
return nsIFrame::DISPLAY_CHILD_FORCE_STACKING_CONTEXT;
return nsIFrame::DisplayChildFlag::ForceStackingContext;
}
return nsIFrame::DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT;
return nsIFrame::DisplayChildFlag::ForcePseudoStackingContext;
}

// Align an item's margin box in its aAxis inside aCBSize.
Expand Down
16 changes: 9 additions & 7 deletions layout/generic/nsIFrame.h
Original file line number Diff line number Diff line change
Expand Up @@ -1764,24 +1764,26 @@ class nsIFrame : public nsQueryFrame {
nsDisplayListBuilder* aBuilder, nsDisplayList* aList,
bool* aCreatedContainerItem = nullptr);

enum {
DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT = 0x01,
DISPLAY_CHILD_FORCE_STACKING_CONTEXT = 0x02,
DISPLAY_CHILD_INLINE = 0x04
enum class DisplayChildFlag {
ForcePseudoStackingContext,
ForceStackingContext,
Inline,
};
using DisplayChildFlags = mozilla::EnumSet<DisplayChildFlag>;

/**
* Adjusts aDirtyRect for the child's offset, checks that the dirty rect
* actually intersects the child (or its descendants), calls BuildDisplayList
* on the child if necessary, and puts things in the right lists if the child
* is positioned.
*
* @param aFlags combination of DISPLAY_CHILD_FORCE_PSEUDO_STACKING_CONTEXT,
* DISPLAY_CHILD_FORCE_STACKING_CONTEXT and DISPLAY_CHILD_INLINE
* @param aFlags a set of of DisplayChildFlag values that are applicable for
* this operation.
*/
void BuildDisplayListForChild(nsDisplayListBuilder* aBuilder,
nsIFrame* aChild,
const nsDisplayListSet& aLists,
uint32_t aFlags = 0);
DisplayChildFlags aFlags = {});

void BuildDisplayListForSimpleChild(nsDisplayListBuilder* aBuilder,
nsIFrame* aChild,
Expand Down
4 changes: 1 addition & 3 deletions layout/mathml/nsMathMLContainerFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -603,9 +603,7 @@ void nsMathMLContainerFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
return;
}

DisplayBorderBackgroundOutline(aBuilder, aLists);

BuildDisplayListForNonBlockChildren(aBuilder, aLists, DISPLAY_CHILD_INLINE);
BuildDisplayListForInline(aBuilder, aLists);

#if defined(DEBUG) && defined(SHOW_BOUNDING_BOX)
// for visual debug
Expand Down
2 changes: 1 addition & 1 deletion layout/xul/nsStackFrame.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ void nsStackFrame::BuildDisplayListForChildren(nsDisplayListBuilder* aBuilder,
while (kid) {
// Force each child into its own true stacking context.
BuildDisplayListForChild(aBuilder, kid, kidLists,
DISPLAY_CHILD_FORCE_STACKING_CONTEXT);
DisplayChildFlag::ForceStackingContext);
kid = kid->GetNextSibling();
}
}

0 comments on commit 7c1220a

Please sign in to comment.