tor-browser

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

commit 997c4612a97971d64bf5318e9c1e50df4007a387
parent eab71dafcd077fe161f0759e83d8badb04665ba1
Author: Ting-Yu Lin <tlin@mozilla.com>
Date:   Tue, 18 Nov 2025 18:53:06 +0000

Bug 2000759 - Add IsMasonry overload that take a WritingMode parameter. r=jfkthame,layout-reviewers

Differential Revision: https://phabricator.services.mozilla.com/D272986

Diffstat:
Mlayout/generic/nsContainerFrame.cpp | 6++----
Mlayout/generic/nsGridContainerFrame.cpp | 2+-
Mlayout/generic/nsIFrame.cpp | 6++----
Mlayout/generic/nsIFrame.h | 11++++++++++-
Mlayout/generic/nsIFrameInlines.h | 11+++++++++++
5 files changed, 26 insertions(+), 10 deletions(-)

diff --git a/layout/generic/nsContainerFrame.cpp b/layout/generic/nsContainerFrame.cpp @@ -2056,8 +2056,7 @@ LogicalSize nsContainerFrame::ComputeSizeWithIntrinsicDimensions( *styleBSize, aspectRatio, aFlags) .mISize; } else if (MOZ_UNLIKELY(isGridItem) && - !parentFrame->IsMasonry(isOrthogonal ? LogicalAxis::Block - : LogicalAxis::Inline)) { + !parentFrame->IsMasonry(aWM, LogicalAxis::Inline)) { MOZ_ASSERT(!IsTrueOverflowContainer()); // 'auto' inline-size for grid-level box - apply 'stretch' as needed: auto cbSize = aCBSize.ISize(aWM); @@ -2119,8 +2118,7 @@ LogicalSize nsContainerFrame::ComputeSizeWithIntrinsicDimensions( aCBSize.BSize(aWM), aMargin.BSize(aWM), aBorderPadding.BSize(aWM), boxSizingAdjust.BSize(aWM), *styleBSize); } else if (MOZ_UNLIKELY(isGridItem) && - !parentFrame->IsMasonry(isOrthogonal ? LogicalAxis::Inline - : LogicalAxis::Block)) { + !parentFrame->IsMasonry(aWM, LogicalAxis::Block)) { MOZ_ASSERT(!IsTrueOverflowContainer()); // 'auto' block-size for grid-level box - apply 'stretch' as needed: auto cbSize = aCBSize.BSize(aWM); diff --git a/layout/generic/nsGridContainerFrame.cpp b/layout/generic/nsGridContainerFrame.cpp @@ -10650,7 +10650,7 @@ bool nsGridContainerFrame::GridItemShouldStretch(const nsIFrame* aChild, const auto cbwm = GetWritingMode(); const bool isOrthogonal = wm.IsOrthogonalTo(cbwm); - if (IsMasonry(isOrthogonal ? GetOrthogonalAxis(aAxis) : aAxis)) { + if (IsMasonry(wm, aAxis)) { // The child is in the container's masonry-axis. // AlignJustifyTracksInMasonryAxis will stretch it, so we don't report that // here. diff --git a/layout/generic/nsIFrame.cpp b/layout/generic/nsIFrame.cpp @@ -6682,8 +6682,7 @@ nsIFrame::SizeComputationResult nsIFrame::ComputeSize( bool mayUseAspectRatio = aspectRatio && !isAutoBSize; if (!aFlags.contains(ComputeSizeFlag::ShrinkWrap) && !StyleMargin()->HasInlineAxisAuto(aWM, anchorResolutionParams) && - !alignCB->IsMasonry(isOrthogonal ? LogicalAxis::Block - : LogicalAxis::Inline)) { + !alignCB->IsMasonry(aWM, LogicalAxis::Inline)) { auto inlineAxisAlignment = isOrthogonal ? StylePosition()->UsedAlignSelf(alignCB->Style())._0 : StylePosition()->UsedJustifySelf(alignCB->Style())._0; @@ -6883,8 +6882,7 @@ nsIFrame::SizeComputationResult nsIFrame::ComputeSize( } else if (MOZ_UNLIKELY(isGridItem) && styleBSize->IsAuto() && !aFlags.contains(ComputeSizeFlag::IsGridMeasuringReflow) && !IsTrueOverflowContainer() && - !alignCB->IsMasonry(isOrthogonal ? LogicalAxis::Inline - : LogicalAxis::Block)) { + !alignCB->IsMasonry(aWM, LogicalAxis::Block)) { auto cbSize = aCBSize.BSize(aWM); if (cbSize != NS_UNCONSTRAINEDSIZE) { // 'auto' block-size for grid-level box - fill the CB for 'stretch' / diff --git a/layout/generic/nsIFrame.h b/layout/generic/nsIFrame.h @@ -4720,12 +4720,21 @@ class nsIFrame : public nsQueryFrame { inline bool IsLegacyWebkitBox() const; /** - * Return true if this frame has masonry layout in aAxis. + * Return true if this frame has masonry layout in aAxis (in this frame's own + * writing mode). * @note only valid to call on nsGridContainerFrames */ inline bool IsMasonry(mozilla::LogicalAxis aAxis) const; /** + * Return true if this frame has masonry layout in aAxis (in the writing + * mode aWM). + * @note only valid to call on nsGridContainerFrames + */ + inline bool IsMasonry(mozilla::WritingMode aWM, + mozilla::LogicalAxis aAxis) const; + + /** * @return true if this frame is used as a table caption. */ inline bool IsTableCaption() const; diff --git a/layout/generic/nsIFrameInlines.h b/layout/generic/nsIFrameInlines.h @@ -49,6 +49,17 @@ bool nsIFrame::IsMasonry(mozilla::LogicalAxis aAxis) const { : NS_STATE_GRID_IS_COL_MASONRY); } +bool nsIFrame::IsMasonry(mozilla::WritingMode aWM, + mozilla::LogicalAxis aAxis) const { + MOZ_DIAGNOSTIC_ASSERT(IsGridContainerFrame()); + const auto axisInOurWM = aWM.IsOrthogonalTo(GetWritingMode()) + ? mozilla::GetOrthogonalAxis(aAxis) + : aAxis; + return HasAnyStateBits(axisInOurWM == mozilla::LogicalAxis::Block + ? NS_STATE_GRID_IS_ROW_MASONRY + : NS_STATE_GRID_IS_COL_MASONRY); +} + bool nsIFrame::IsTableCaption() const { return StyleDisplay()->mDisplay == mozilla::StyleDisplay::TableCaption && GetParent()->Style()->GetPseudoType() ==