Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 771900ea31d0c678704adfbc03b5e895ebe22e29
https://github.com/WebKit/WebKit/commit/771900ea31d0c678704adfbc03b5e895ebe22e29
Author: Alan Baradlay <[email protected]>
Date: 2026-07-12 (Sun, 12 Jul 2026)
Changed paths:
M Source/WebCore/Headers.cmake
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
A Source/WebCore/rendering/FlexLayoutUtils.cpp
A Source/WebCore/rendering/FlexLayoutUtils.h
M Source/WebCore/rendering/RenderBlock.cpp
M Source/WebCore/rendering/RenderBlockFlow.cpp
M Source/WebCore/rendering/RenderBox.cpp
M Source/WebCore/rendering/RenderFlexibleBox.cpp
M Source/WebCore/rendering/RenderFlexibleBox.h
Log Message:
-----------
[cleanup] Move RenderFlexibleBox's stateless flex queries and geometry
helpers into a new FlexLayoutUtils class
https://bugs.webkit.org/show_bug.cgi?id=318581
Reviewed by Antti Koivisto.
RenderFlexibleBox had grown to mix the core flex layout algorithm with a large
set of stateless query and geometry helpers -- flow-aware border/padding/margin,
axis extents, main/cross size-length accessors,
overflow/aspect-ratio/definiteness
queries, cross-size computations, and the alignment-offset math. LFC's
FlexLayout keeps that kind of thing in a FlexFormattingUtils helper. Mirror
that: add rendering/FlexLayoutUtils, holding a const RenderFlexibleBox& (which
befriends it), and move the stateless helpers into it. The alignment-offset math
that took no container state moves as static methods.
RenderFlexibleBox exposes a public flexLayoutUtils() accessor (mirroring
FlexFormattingContext::formattingUtils()), and its callers -- internal and the
handful in RenderBlock, RenderBlockFlow, and RenderBox -- now go through it.
What stays on RenderFlexibleBox: the performFlexLayout pipeline and its phases,
the layout-state and relayout helpers (canUseFlexItemForPercentageResolution,
the flex-base and min/max sizing that drive child layout, crossAxisIntrinsic*),
willStretchItem (a RenderBlock virtual override), and the positioned-layout
apply setStaticPositionForPositionedLayout (it mutates the layer). computeGap
and
the FlexLayoutItem-typed margin-trim helpers stay because their parameter types
are nested in RenderFlexibleBox and are not nameable from the utility header.
No change in behavior: this is pure code motion. The moved bodies are unchanged
apart from reading the flex container and its items through the FlexLayoutUtils
reference instead of directly.
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/rendering/FlexLayoutUtils.h: Added.
* Source/WebCore/rendering/FlexLayoutUtils.cpp: Added.
(WebCore::isSVGRootWithIntrinsicAspectRatio):
(WebCore::FlexLayoutUtils::FlexLayoutUtils):
(WebCore::FlexLayoutUtils::flowAwareBorderStart const):
(WebCore::FlexLayoutUtils::flowAwareBorderEnd const):
(WebCore::FlexLayoutUtils::flowAwareBorderBefore const):
(WebCore::FlexLayoutUtils::flowAwareBorderAfter const):
(WebCore::FlexLayoutUtils::flowAwarePaddingStart const):
(WebCore::FlexLayoutUtils::flowAwarePaddingEnd const):
(WebCore::FlexLayoutUtils::flowAwarePaddingBefore const):
(WebCore::FlexLayoutUtils::flowAwarePaddingAfter const):
(WebCore::FlexLayoutUtils::flowAwareMarginStartForFlexItem const):
(WebCore::FlexLayoutUtils::flowAwareMarginEndForFlexItem const):
(WebCore::FlexLayoutUtils::flowAwareMarginBeforeForFlexItem const):
(WebCore::FlexLayoutUtils::crossAxisExtentForFlexItem const):
(WebCore::FlexLayoutUtils::mainAxisExtentForFlexItem const):
(WebCore::FlexLayoutUtils::mainAxisContentExtentForFlexItemIncludingScrollbar
const):
(WebCore::FlexLayoutUtils::crossAxisExtent const):
(WebCore::FlexLayoutUtils::mainAxisExtent const):
(WebCore::FlexLayoutUtils::crossAxisContentExtent const):
(WebCore::FlexLayoutUtils::mainAxisMarginExtentForFlexItem const):
(WebCore::FlexLayoutUtils::crossAxisMarginExtentForFlexItem const):
(WebCore::FlexLayoutUtils::crossAxisScrollbarExtent const):
(WebCore::FlexLayoutUtils::mainAxisScrollbarExtent const):
(WebCore::FlexLayoutUtils::preferredMainSizeLengthForFlexItem const):
(WebCore::FlexLayoutUtils::minMainSizeLengthForFlexItem const):
(WebCore::FlexLayoutUtils::maxMainSizeLengthForFlexItem const):
(WebCore::FlexLayoutUtils::preferredCrossSizeLengthForFlexItem const):
(WebCore::FlexLayoutUtils::minCrossSizeLengthForFlexItem const):
(WebCore::FlexLayoutUtils::maxCrossSizeLengthForFlexItem const):
(WebCore::FlexLayoutUtils::mainAxisOverflowForFlexItem const):
(WebCore::FlexLayoutUtils::crossAxisOverflowForFlexItem const):
(WebCore::FlexLayoutUtils::overflowAlignmentForFlexItem const):
(WebCore::FlexLayoutUtils::hasAutoMarginsInCrossAxis const):
(WebCore::FlexLayoutUtils::useContentBasedMinimumSize const):
(WebCore::FlexLayoutUtils::preferredAspectRatioForFlexItem const):
(WebCore::FlexLayoutUtils::flexItemHasAspectRatio):
(WebCore::FlexLayoutUtils::canResolveFullyConstrainedLogicalHeight):
(WebCore::FlexLayoutUtils::flexItemHasComputableAspectRatio const):
(WebCore::FlexLayoutUtils::needToStretchFlexItemLogicalHeight const):
(WebCore::FlexLayoutUtils::innerCrossSizeForFlexItem const):
(WebCore::FlexLayoutUtils::columnInnerMainSize const):
(WebCore::FlexLayoutUtils::crossAxisDirection const):
(WebCore::FlexLayoutUtils::isColumnOrRowReverse const):
(WebCore::FlexLayoutUtils::isWrapReverse const):
(WebCore::FlexLayoutUtils::hasDefiniteLogicalWidthForAspectRatioCrossSize
const):
(WebCore::FlexLayoutUtils::leftRightAxisDirectionFromStyle):
(WebCore::FlexLayoutUtils::computeFlexItemMarginValue const):
(WebCore::FlexLayoutUtils::shouldTrimMainAxisMarginStart const):
(WebCore::FlexLayoutUtils::shouldTrimMainAxisMarginEnd const):
(WebCore::FlexLayoutUtils::shouldTrimCrossAxisMarginStart const):
(WebCore::FlexLayoutUtils::shouldTrimCrossAxisMarginEnd const):
(WebCore::FlexLayoutUtils::transformedBlockFlowDirection const):
(WebCore::FlexLayoutUtils::isLeftToRightFlow const):
(WebCore::FlexLayoutUtils::isColumnFlow const):
(WebCore::FlexLayoutUtils::availableAlignmentSpaceForFlexItem const):
(WebCore::FlexLayoutUtils::marginBoxAscentForFlexItem const):
(WebCore::FlexLayoutUtils::isHorizontalFlow const):
(WebCore::FlexLayoutUtils::mainAxisIsFlexItemInlineAxis const):
(WebCore::FlexLayoutUtils::isMultiline const):
(WebCore::FlexLayoutUtils::useContentBasedMinimumBlockSize const):
(WebCore::FlexLayoutUtils::flexBasisForFlexItem const):
(WebCore::FlexLayoutUtils::alignmentForFlexItem const):
(WebCore::FlexLayoutUtils::hasStretchedFlexItemWithAspectRatio const):
(WebCore::FlexLayoutUtils::hasDefiniteCrossSizeForFlexItem const):
(WebCore::FlexLayoutUtils::contentAlignmentNormalBehavior):
(WebCore::FlexLayoutUtils::resolveLeftRightAlignment):
(WebCore::FlexLayoutUtils::initialJustifyContentOffset):
(WebCore::FlexLayoutUtils::justifyContentSpaceBetweenFlexItems):
(WebCore::FlexLayoutUtils::alignmentOffset):
(WebCore::FlexLayoutUtils::contentAlignmentStartOverflow):
(WebCore::FlexLayoutUtils::initialAlignContentOffset):
(WebCore::FlexLayoutUtils::alignContentSpaceBetweenFlexItems):
* Source/WebCore/rendering/RenderFlexibleBox.h:
* Source/WebCore/rendering/RenderFlexibleBox.cpp:
(WebCore::flexContainerIsHorizontalFlow):
(WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths const):
(WebCore::RenderFlexibleBox::ScopedCrossAxisOverrideForFlexItem::ScopedCrossAxisOverrideForFlexItem):
(WebCore::RenderFlexibleBox::firstLineBaseline const):
(WebCore::RenderFlexibleBox::lastLineBaseline const):
(WebCore::RenderFlexibleBox::distributeMainAxisFreeSpaceForMultilineColumnIfNeeded):
(WebCore::RenderFlexibleBox::flexItemIntrinsicLogicalHeight const):
(WebCore::RenderFlexibleBox::flexItemIntrinsicLogicalWidth):
(WebCore::RenderFlexibleBox::crossAxisIntrinsicExtentForFlexItem):
(WebCore::RenderFlexibleBox::mainAxisAvailableSpace):
(WebCore::RenderFlexibleBox::computeMainAxisExtentForFlexItem):
(WebCore::RenderFlexibleBox::initializeMarginTrimState):
(WebCore::RenderFlexibleBox::canFitItemWithTrimmedMarginEnd const):
(WebCore::RenderFlexibleBox::removeMarginEndFromFlexSizes const):
(WebCore::RenderFlexibleBox::isChildEligibleForMarginTrim const):
(WebCore::RenderFlexibleBox::trimMainAxisMarginStart):
(WebCore::RenderFlexibleBox::trimMainAxisMarginEnd):
(WebCore::RenderFlexibleBox::trimCrossAxisMarginStart):
(WebCore::RenderFlexibleBox::trimCrossAxisMarginEnd):
(WebCore::RenderFlexibleBox::computeMainSizeFromAspectRatioUsing const):
(WebCore::RenderFlexibleBox::setFlowAwareLocationForFlexItem):
(WebCore::RenderFlexibleBox::canComputePercentageFlexBasis):
(WebCore::RenderFlexibleBox::flexItemMainSizeIsDefinite):
(WebCore::RenderFlexibleBox::flexItemHasComputableAspectRatioAndCrossSizeIsConsideredDefinite):
(WebCore::RenderFlexibleBox::flexItemCrossSizeIsDefinite):
(WebCore::RenderFlexibleBox::flexBaseSizeForFlexItem):
(WebCore::RenderFlexibleBox::performFlexLayout):
(WebCore::RenderFlexibleBox::computeMainSizeForFlexItems):
(WebCore::RenderFlexibleBox::trimCrossAxisMarginsForFlexItems):
(WebCore::RenderFlexibleBox::handleMainAxisAlignment):
(WebCore::RenderFlexibleBox::setFlexItemCountsForFirstAndLastLine):
(WebCore::RenderFlexibleBox::computeNextFlexLine):
(WebCore::RenderFlexibleBox::autoMarginOffsetInMainAxis):
(WebCore::RenderFlexibleBox::updateAutoMarginsInMainAxis):
(WebCore::RenderFlexibleBox::updateAutoMarginsInCrossAxis):
(WebCore::RenderFlexibleBox::prepareOrderIteratorAndMargins):
(WebCore::RenderFlexibleBox::computeUsedMaxMainSize):
(WebCore::RenderFlexibleBox::computeUsedNonAutoMinMainSize):
(WebCore::RenderFlexibleBox::computeContentBasedMinMainSize):
(WebCore::RenderFlexibleBox::computeFlexItemMinMaxMainSizes):
(WebCore::RenderFlexibleBox::canUseFlexItemForPercentageResolution):
(WebCore::RenderFlexibleBox::adjustFlexItemSizeForAspectRatioCrossAxisMinAndMax):
(WebCore::RenderFlexibleBox::ensureBlockAxisContentSizeForFlexItemIfNeeded):
(WebCore::RenderFlexibleBox::setOverridingMainSizeForFlexItem):
(WebCore::RenderFlexibleBox::staticMainAxisPositionForPositionedFlexItem):
(WebCore::RenderFlexibleBox::staticCrossAxisPositionForPositionedFlexItem):
(WebCore::RenderFlexibleBox::staticInlinePositionForPositionedFlexItem):
(WebCore::RenderFlexibleBox::staticBlockPositionForPositionedFlexItem):
(WebCore::RenderFlexibleBox::prepareFlexItemForPositionedLayout):
(WebCore::RenderFlexibleBox::resetAutoMarginsAndLogicalTopInCrossAxis):
(WebCore::RenderFlexibleBox::willStretchItem const):
(WebCore::RenderFlexibleBox::flexBaseSizeNeedsBlockAxisContentSize):
(WebCore::RenderFlexibleBox::crossSizeForFlexLines):
(WebCore::RenderFlexibleBox::placeFlexItems):
(WebCore::RenderFlexibleBox::layoutFlexItemAfterMainSizing):
(WebCore::RenderFlexibleBox::layoutColumnReverse):
(WebCore::RenderFlexibleBox::handleCrossAxisAlignmentForFlexLines):
(WebCore::RenderFlexibleBox::computeCrossSizeForFlexItems):
(WebCore::RenderFlexibleBox::handleCrossAxisAlignmentForFlexItems):
(WebCore::RenderFlexibleBox::performBaselineAlignment):
(WebCore::RenderFlexibleBox::applyStretchMinMaxCrossSize):
(WebCore::RenderFlexibleBox::applyStretchAlignmentToFlexItem):
(WebCore::RenderFlexibleBox::computeGap const):
(WebCore::RenderFlexibleBox::firstBaselineCandidateOnLine const):
(WebCore::RenderFlexibleBox::lastBaselineCandidateOnLine const):
(WebCore::RenderFlexibleBox::flexItemForFirstBaseline const):
(WebCore::RenderFlexibleBox::flexItemForLastBaseline const):
(WebCore::contentAlignmentNormalBehavior): Deleted.
(WebCore::RenderFlexibleBox::mainAxisIsFlexItemInlineAxis const): Deleted.
(WebCore::RenderFlexibleBox::isColumnFlow const): Deleted.
(WebCore::RenderFlexibleBox::isColumnOrRowReverse const): Deleted.
(WebCore::RenderFlexibleBox::isWrapReverse const): Deleted.
(WebCore::RenderFlexibleBox::isHorizontalFlow const): Deleted.
(WebCore::RenderFlexibleBox::isLeftToRightFlow const): Deleted.
(WebCore::RenderFlexibleBox::crossAxisDirection const): Deleted.
(WebCore::RenderFlexibleBox::isMultiline const): Deleted.
(WebCore::RenderFlexibleBox::useContentBasedMinimumSize const): Deleted.
(WebCore::RenderFlexibleBox::useContentBasedMinimumBlockSize const): Deleted.
(WebCore::RenderFlexibleBox::flexBasisForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::crossAxisExtentForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::mainAxisExtentForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::mainAxisContentExtentForFlexItemIncludingScrollbar
const): Deleted.
(WebCore::RenderFlexibleBox::crossAxisExtent const): Deleted.
(WebCore::RenderFlexibleBox::mainAxisExtent const): Deleted.
(WebCore::RenderFlexibleBox::crossAxisContentExtent const): Deleted.
(WebCore::RenderFlexibleBox::columnInnerMainSize): Deleted.
(WebCore::isSVGRootWithIntrinsicAspectRatio): Deleted.
(WebCore::flexItemHasAspectRatio): Deleted.
(WebCore::RenderFlexibleBox::hasStretchedFlexItemWithAspectRatio const):
Deleted.
(WebCore::RenderFlexibleBox::transformedBlockFlowDirection const): Deleted.
(WebCore::RenderFlexibleBox::flowAwareBorderStart const): Deleted.
(WebCore::RenderFlexibleBox::flowAwareBorderEnd const): Deleted.
(WebCore::RenderFlexibleBox::flowAwareBorderBefore const): Deleted.
(WebCore::RenderFlexibleBox::flowAwareBorderAfter const): Deleted.
(WebCore::RenderFlexibleBox::flowAwarePaddingStart const): Deleted.
(WebCore::RenderFlexibleBox::flowAwarePaddingEnd const): Deleted.
(WebCore::RenderFlexibleBox::flowAwarePaddingBefore const): Deleted.
(WebCore::RenderFlexibleBox::flowAwarePaddingAfter const): Deleted.
(WebCore::RenderFlexibleBox::flowAwareMarginStartForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::flowAwareMarginEndForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::flowAwareMarginBeforeForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::mainAxisMarginExtentForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::crossAxisMarginExtentForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::shouldTrimMainAxisMarginStart const): Deleted.
(WebCore::RenderFlexibleBox::shouldTrimMainAxisMarginEnd const): Deleted.
(WebCore::RenderFlexibleBox::shouldTrimCrossAxisMarginStart const): Deleted.
(WebCore::RenderFlexibleBox::shouldTrimCrossAxisMarginEnd const): Deleted.
(WebCore::RenderFlexibleBox::crossAxisScrollbarExtent const): Deleted.
(WebCore::RenderFlexibleBox::mainAxisScrollbarExtent const): Deleted.
(WebCore::RenderFlexibleBox::preferredCrossSizeLengthForFlexItem const):
Deleted.
(WebCore::RenderFlexibleBox::minCrossSizeLengthForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::maxCrossSizeLengthForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::preferredMainSizeLengthForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::minMainSizeLengthForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::maxMainSizeLengthForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::preferredAspectRatioForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::flexItemHasComputableAspectRatio const): Deleted.
(WebCore::canResolveFullyConstrainedLogicalHeight): Deleted.
(WebCore::RenderFlexibleBox::hasDefiniteCrossSizeForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::hasDefiniteLogicalWidthForAspectRatioCrossSize
const): Deleted.
(WebCore::RenderFlexibleBox::hasAutoMarginsInCrossAxis const): Deleted.
(WebCore::RenderFlexibleBox::availableAlignmentSpaceForFlexItem): Deleted.
(WebCore::RenderFlexibleBox::marginBoxAscentForFlexItem): Deleted.
(WebCore::RenderFlexibleBox::computeFlexItemMarginValue): Deleted.
(WebCore::resolveLeftRightAlignment): Deleted.
(WebCore::initialJustifyContentOffset): Deleted.
(WebCore::justifyContentSpaceBetweenFlexItems): Deleted.
(WebCore::alignmentOffset): Deleted.
(WebCore::RenderFlexibleBox::innerCrossSizeForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::overflowAlignmentForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::alignmentForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::needToStretchFlexItemLogicalHeight const): Deleted.
(WebCore::RenderFlexibleBox::mainAxisOverflowForFlexItem const): Deleted.
(WebCore::RenderFlexibleBox::crossAxisOverflowForFlexItem const): Deleted.
(WebCore::contentAlignmentStartOverflow): Deleted.
(WebCore::initialAlignContentOffset): Deleted.
(WebCore::alignContentSpaceBetweenFlexItems): Deleted.
(WebCore::RenderFlexibleBox::leftRightAxisDirectionFromStyle): Deleted.
* Source/WebCore/rendering/RenderBlock.cpp:
(WebCore::RenderBlock::computeContentLogicalHeightForFlexItem):
(WebCore::RenderBlock::hasDefiniteLogicalHeightForPercentageResolutionFromStyle
const):
(WebCore::RenderBlock::availableLogicalHeightForPercentageComputation const):
* Source/WebCore/rendering/RenderBlockFlow.cpp:
(WebCore::formattingContextRootIntrinsicLogicalWidthsDependOnOwnHeight):
* Source/WebCore/rendering/RenderBox.cpp:
(WebCore::RenderBox::computeSizingKeywordLogicalContentHeightUsingGeneric
const):
(WebCore::RenderBox::computeContentAndScrollbarLogicalHeightUsing const):
(WebCore::RenderBox::isBlockSizeResolvableForStretch const):
(WebCore::RenderBox::shouldIgnoreLogicalMinMaxWidthSizes const):
(WebCore::RenderBox::shouldIgnoreLogicalMinMaxHeightSizes const):
Canonical link: https://commits.webkit.org/317013@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications