Diff
Modified: trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.cpp (295275 => 295276)
--- trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.cpp 2022-06-06 01:24:41 UTC (rev 295275)
+++ trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.cpp 2022-06-06 03:51:24 UTC (rev 295276)
@@ -287,13 +287,21 @@
}
}
-void FlexFormattingContext::layoutInFlowContentForIntegration(const ConstraintsForInFlowContent& constraints)
+void FlexFormattingContext::layoutInFlowContentForIntegration(const ConstraintsForFlexContent& constraints)
{
- auto flexConstraints = downcast<ConstraintsForFlexContent>(constraints);
- auto logicalFlexItems = convertFlexItemsToLogicalSpace(flexConstraints);
+ auto logicalFlexItems = convertFlexItemsToLogicalSpace(constraints);
auto flexLayout = FlexLayout { root().style() };
- flexLayout.layout(flexConstraints, logicalFlexItems);
- setFlexItemsGeometry(logicalFlexItems, flexConstraints);
+
+ auto logicalFlexConstraints = [&] {
+ auto flexDirection = root().style().flexDirection();
+ auto flexDirectionIsInlineAxis = flexDirection == FlexDirection::Row || flexDirection == FlexDirection::RowReverse;
+ auto logicalVerticalSapce = flexDirectionIsInlineAxis ? constraints.availableVerticalSpace() : std::make_optional(constraints.horizontal().logicalWidth);
+ auto logicalHorizontalSapce = flexDirectionIsInlineAxis ? std::make_optional(constraints.horizontal().logicalWidth) : constraints.availableVerticalSpace();
+ return FlexLayout::LogicalConstraints { logicalVerticalSapce, logicalHorizontalSapce };
+ };
+
+ flexLayout.layout(logicalFlexConstraints(), logicalFlexItems);
+ setFlexItemsGeometry(logicalFlexItems, constraints);
}
IntrinsicWidthConstraints FlexFormattingContext::computedIntrinsicWidthConstraintsForIntegration()
Modified: trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.h (295275 => 295276)
--- trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.h 2022-06-06 01:24:41 UTC (rev 295275)
+++ trunk/Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.h 2022-06-06 03:51:24 UTC (rev 295276)
@@ -51,7 +51,7 @@
const FlexFormattingGeometry& formattingGeometry() const final { return m_flexFormattingGeometry; }
const FormattingQuirks& formattingQuirks() const final { return m_flexFormattingQuirks; }
- void layoutInFlowContentForIntegration(const ConstraintsForInFlowContent&);
+ void layoutInFlowContentForIntegration(const ConstraintsForFlexContent&);
IntrinsicWidthConstraints computedIntrinsicWidthConstraintsForIntegration();
private:
Modified: trunk/Source/WebCore/layout/formattingContexts/flex/FlexLayout.cpp (295275 => 295276)
--- trunk/Source/WebCore/layout/formattingContexts/flex/FlexLayout.cpp 2022-06-06 01:24:41 UTC (rev 295275)
+++ trunk/Source/WebCore/layout/formattingContexts/flex/FlexLayout.cpp 2022-06-06 03:51:24 UTC (rev 295276)
@@ -39,7 +39,7 @@
{
}
-FlexLayout::LineHeightList FlexLayout::computeAvailableLogicalVerticalSpace(const LogicalFlexItems& flexItems, const WrappingPositions& wrappingIndexList, const ConstraintsForFlexContent& flexConstraints) const
+FlexLayout::LineHeightList FlexLayout::computeAvailableLogicalVerticalSpace(const LogicalFlexItems& flexItems, const WrappingPositions& wrappingIndexList, const LogicalConstraints& flexConstraints) const
{
auto lineHeightList = LineHeightList(wrappingIndexList.size());
auto lineRange = Range<size_t> { };
@@ -56,15 +56,8 @@
accumulatedContentHeight += lineHeightList[index];
}
- auto availableLogicalVerticalSpaceFromConstraint = [&] {
- auto flexDirection = flexBoxStyle().flexDirection();
- auto flexDirectionIsInlineAxis = flexDirection == FlexDirection::Row || flexDirection == FlexDirection::RowReverse;
- if (flexDirectionIsInlineAxis)
- return flexConstraints.availableVerticalSpace();
- return std::optional<LayoutUnit> { flexConstraints.horizontal().logicalWidth };
- };
- if (auto availableSpace = availableLogicalVerticalSpaceFromConstraint(); availableSpace && accumulatedContentHeight < *availableSpace) {
- auto extraSpacePerLine = (*availableSpace - accumulatedContentHeight) / lineHeightList.size();
+ if (flexConstraints.verticalSpace && accumulatedContentHeight < *flexConstraints.verticalSpace) {
+ auto extraSpacePerLine = (*flexConstraints.verticalSpace - accumulatedContentHeight) / lineHeightList.size();
for (size_t index = 0; index < lineHeightList.size(); ++index)
lineHeightList[index] += extraSpacePerLine;
}
@@ -71,19 +64,11 @@
return lineHeightList;
}
-LayoutUnit FlexLayout::computeAvailableLogicalHorizontalSpace(const LogicalFlexItems& flexItems, const ConstraintsForFlexContent& flexConstraints) const
+LayoutUnit FlexLayout::computeAvailableLogicalHorizontalSpace(const LogicalFlexItems& flexItems, const LogicalConstraints& flexConstraints) const
{
- auto availableLogicalHorizontalSpaceFromConstraint = [&] {
- auto flexDirection = flexBoxStyle().flexDirection();
- auto flexDirectionIsInlineAxis = flexDirection == FlexDirection::Row || flexDirection == FlexDirection::RowReverse;
- if (flexDirectionIsInlineAxis)
- return std::optional<LayoutUnit> { flexConstraints.horizontal().logicalWidth };
- return flexConstraints.availableVerticalSpace();
- };
+ if (flexConstraints.horizontalSpace)
+ return *flexConstraints.horizontalSpace;
- if (auto availableSpace = availableLogicalHorizontalSpaceFromConstraint())
- return *availableSpace;
-
auto availableSpace = LayoutUnit { };
for (auto& flexItem : flexItems)
availableSpace += flexItem.width();
@@ -412,7 +397,7 @@
}
}
-void FlexLayout::layout(const ConstraintsForFlexContent& constraints, LogicalFlexItems& flexItems)
+void FlexLayout::layout(const LogicalConstraints& constraints, LogicalFlexItems& flexItems)
{
auto availableLogicalHorizontalSpace = computeAvailableLogicalHorizontalSpace(flexItems, constraints);
auto wrappingIndexList = computeWrappingPositions(flexItems, availableLogicalHorizontalSpace);
@@ -419,7 +404,7 @@
auto lineHeightList = computeAvailableLogicalVerticalSpace(flexItems, wrappingIndexList, constraints);
auto lineRange = Range<size_t> { };
- auto lineTop = constraints.logicalTop();
+ auto lineTop = LayoutUnit { };
for (size_t index = 0; index < wrappingIndexList.size(); ++index) {
lineRange = { lineRange.end(), wrappingIndexList[index] };
Modified: trunk/Source/WebCore/layout/formattingContexts/flex/FlexLayout.h (295275 => 295276)
--- trunk/Source/WebCore/layout/formattingContexts/flex/FlexLayout.h 2022-06-06 01:24:41 UTC (rev 295275)
+++ trunk/Source/WebCore/layout/formattingContexts/flex/FlexLayout.h 2022-06-06 03:51:24 UTC (rev 295276)
@@ -77,8 +77,12 @@
IntrinsicWidthConstraints m_intrinsicWidthConstraints { };
CheckedPtr<const ContainerBox> m_layoutBox;
};
- using LogicalFlexItems = Vector<LogicalFlexItem>;
- void layout(const ConstraintsForFlexContent&, LogicalFlexItems&);
+ using LogicalFlexItems = Vector<LogicalFlexItem>;
+ struct LogicalConstraints {
+ std::optional<LayoutUnit> verticalSpace;
+ std::optional<LayoutUnit> horizontalSpace;
+ };
+ void layout(const LogicalConstraints&, LogicalFlexItems&);
private:
using LineRange = WTF::Range<size_t>;
@@ -91,10 +95,10 @@
using WrappingPositions = Vector<size_t>;
WrappingPositions computeWrappingPositions(const LogicalFlexItems&, LayoutUnit availableSpace) const;
- LayoutUnit computeAvailableLogicalHorizontalSpace(const LogicalFlexItems&, const ConstraintsForFlexContent&) const;
+ LayoutUnit computeAvailableLogicalHorizontalSpace(const LogicalFlexItems&, const LogicalConstraints&) const;
using LineHeightList = Vector<LayoutUnit>;
- LineHeightList computeAvailableLogicalVerticalSpace(const LogicalFlexItems&, const WrappingPositions&, const ConstraintsForFlexContent&) const;
+ LineHeightList computeAvailableLogicalVerticalSpace(const LogicalFlexItems&, const WrappingPositions&, const LogicalConstraints&) const;
const RenderStyle& flexBoxStyle() const { return m_flexBoxStyle; }