commit b20d226403a4944c0cad662600ebf57e741ffeda
parent 78c447dc7e7606616f8bc6957b0afe14cab8b460
Author: Serban Stanca <sstanca@mozilla.com>
Date: Wed, 10 Dec 2025 03:23:59 +0200
Revert "Bug 1991929 p2. Move MapCSSAlignment() to CSSAlignUtils. r=emilio,layout-reviewers,layout-anchor-positioning-reviewers" for causing linux non-unified build bustages in nsIFrame.h.
This reverts commit 54d25f5169e652ac6fa46fe988b5749a1c60d8f0.
Diffstat:
3 files changed, 41 insertions(+), 54 deletions(-)
diff --git a/layout/generic/CSSAlignUtils.cpp b/layout/generic/CSSAlignUtils.cpp
@@ -9,50 +9,9 @@
#include "CSSAlignUtils.h"
#include "ReflowInput.h"
-#include "nsIFrame.h"
namespace mozilla {
-StyleAlignFlags CSSAlignUtils::UsedAlignmentForAbsPos(nsIFrame* aFrame,
- StyleAlignFlags aFlags,
- LogicalAxis aLogicalAxis,
- WritingMode aCBWM) {
- MOZ_ASSERT(aFrame->IsAbsolutelyPositioned());
-
- // Extract and strip the flag bits
- StyleAlignFlags alignmentFlags = aFlags & StyleAlignFlags::FLAG_BITS;
- aFlags &= ~StyleAlignFlags::FLAG_BITS;
-
- if (aFlags == StyleAlignFlags::NORMAL) {
- // "the 'normal' keyword behaves as 'start' on replaced
- // absolutely-positioned boxes, and behaves as 'stretch' on all other
- // absolutely-positioned boxes."
- // https://drafts.csswg.org/css-align/#align-abspos
- // https://drafts.csswg.org/css-align/#justify-abspos
- aFlags = aFrame->IsReplaced() ? StyleAlignFlags::START
- : StyleAlignFlags::STRETCH;
- } else if (aFlags == StyleAlignFlags::FLEX_START) {
- aFlags = StyleAlignFlags::START;
- } else if (aFlags == StyleAlignFlags::FLEX_END) {
- aFlags = StyleAlignFlags::END;
- } else if (aFlags == StyleAlignFlags::LEFT ||
- aFlags == StyleAlignFlags::RIGHT) {
- if (aLogicalAxis == LogicalAxis::Inline) {
- const bool isLeft = (aFlags == StyleAlignFlags::LEFT);
- aFlags = (isLeft == aCBWM.IsBidiLTR()) ? StyleAlignFlags::START
- : StyleAlignFlags::END;
- } else {
- aFlags = StyleAlignFlags::START;
- }
- } else if (aFlags == StyleAlignFlags::BASELINE) {
- aFlags = StyleAlignFlags::START;
- } else if (aFlags == StyleAlignFlags::LAST_BASELINE) {
- aFlags = StyleAlignFlags::END;
- }
-
- return (aFlags | alignmentFlags);
-}
-
static nscoord SpaceToFill(WritingMode aWM, const LogicalSize& aSize,
nscoord aMargin, LogicalAxis aAxis,
nscoord aCBSize) {
diff --git a/layout/generic/CSSAlignUtils.h b/layout/generic/CSSAlignUtils.h
@@ -20,14 +20,6 @@ struct StyleAlignFlags;
class CSSAlignUtils {
public:
/**
- * Map a raw StyleAlignFlags value to the used one.
- */
- static StyleAlignFlags UsedAlignmentForAbsPos(nsIFrame* aFrame,
- StyleAlignFlags aFlags,
- LogicalAxis aLogicalAxis,
- WritingMode aCBWM);
-
- /**
* Flags to customize the behavior of AlignJustifySelf:
*/
enum class AlignJustifyFlag {
diff --git a/layout/generic/nsContainerFrame.cpp b/layout/generic/nsContainerFrame.cpp
@@ -11,7 +11,6 @@
#include <algorithm>
#include "AnchorPositioningUtils.h"
-#include "CSSAlignUtils.h"
#include "mozilla/AbsoluteContainingBlock.h"
#include "mozilla/AutoRestore.h"
#include "mozilla/ComputedStyle.h"
@@ -2458,6 +2457,45 @@ void nsContainerFrame::ConsiderChildOverflow(OverflowAreas& aOverflowAreas,
}
}
+// Map a raw StyleAlignFlags value to the used one.
+static StyleAlignFlags MapCSSAlignment(StyleAlignFlags aFlags,
+ const ReflowInput& aChildRI,
+ LogicalAxis aLogicalAxis,
+ WritingMode aWM) {
+ // Extract and strip the flag bits
+ StyleAlignFlags alignmentFlags = aFlags & StyleAlignFlags::FLAG_BITS;
+ aFlags &= ~StyleAlignFlags::FLAG_BITS;
+
+ if (aFlags == StyleAlignFlags::NORMAL) {
+ // "the 'normal' keyword behaves as 'start' on replaced
+ // absolutely-positioned boxes, and behaves as 'stretch' on all other
+ // absolutely-positioned boxes."
+ // https://drafts.csswg.org/css-align/#align-abspos
+ // https://drafts.csswg.org/css-align/#justify-abspos
+ aFlags = aChildRI.mFrame->IsReplaced() ? StyleAlignFlags::START
+ : StyleAlignFlags::STRETCH;
+ } else if (aFlags == StyleAlignFlags::FLEX_START) {
+ aFlags = StyleAlignFlags::START;
+ } else if (aFlags == StyleAlignFlags::FLEX_END) {
+ aFlags = StyleAlignFlags::END;
+ } else if (aFlags == StyleAlignFlags::LEFT ||
+ aFlags == StyleAlignFlags::RIGHT) {
+ if (aLogicalAxis == LogicalAxis::Inline) {
+ const bool isLeft = (aFlags == StyleAlignFlags::LEFT);
+ aFlags = (isLeft == aWM.IsBidiLTR()) ? StyleAlignFlags::START
+ : StyleAlignFlags::END;
+ } else {
+ aFlags = StyleAlignFlags::START;
+ }
+ } else if (aFlags == StyleAlignFlags::BASELINE) {
+ aFlags = StyleAlignFlags::START;
+ } else if (aFlags == StyleAlignFlags::LAST_BASELINE) {
+ aFlags = StyleAlignFlags::END;
+ }
+
+ return (aFlags | alignmentFlags);
+}
+
StyleAlignFlags nsContainerFrame::CSSAlignmentForAbsPosChild(
const ReflowInput& aChildRI, LogicalAxis aLogicalAxis) const {
MOZ_ASSERT(aChildRI.mFrame->IsAbsolutelyPositioned(),
@@ -2466,8 +2504,7 @@ StyleAlignFlags nsContainerFrame::CSSAlignmentForAbsPosChild(
// `auto` takes from parent's `align-items`.
StyleAlignFlags alignment =
aChildRI.mStylePosition->UsedSelfAlignment(aLogicalAxis, Style());
- return CSSAlignUtils::UsedAlignmentForAbsPos(aChildRI.mFrame, alignment,
- aLogicalAxis, GetWritingMode());
+ return MapCSSAlignment(alignment, aChildRI, aLogicalAxis, GetWritingMode());
}
StyleAlignFlags
@@ -2524,8 +2561,7 @@ nsContainerFrame::CSSAlignmentForAbsPosChildWithinContainingBlock(
}
}
- return CSSAlignUtils::UsedAlignmentForAbsPos(aChildRI.mFrame, alignment,
- aLogicalAxis, GetWritingMode());
+ return MapCSSAlignment(alignment, aChildRI, aLogicalAxis, GetWritingMode());
}
nsOverflowContinuationTracker::nsOverflowContinuationTracker(