tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mlayout/generic/CSSAlignUtils.cpp | 41-----------------------------------------
Mlayout/generic/CSSAlignUtils.h | 8--------
Mlayout/generic/nsContainerFrame.cpp | 46+++++++++++++++++++++++++++++++++++++++++-----
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(