Title: [295276] trunk/Source/WebCore/layout/formattingContexts/flex
Revision
295276
Author
za...@apple.com
Date
2022-06-05 20:51:24 -0700 (Sun, 05 Jun 2022)

Log Message

FlexLayout should only take logical values
https://bugs.webkit.org/show_bug.cgi?id=241310

Reviewed by Antti Koivisto.

Turn ConstraintsForFlexContent into LogicalConstraints.

* Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.cpp:
(WebCore::Layout::FlexFormattingContext::layoutInFlowContentForIntegration):
* Source/WebCore/layout/formattingContexts/flex/FlexFormattingContext.h:
* Source/WebCore/layout/formattingContexts/flex/FlexLayout.cpp:
(WebCore::Layout::FlexLayout::computeAvailableLogicalVerticalSpace const):
(WebCore::Layout::FlexLayout::computeAvailableLogicalHorizontalSpace const):
(WebCore::Layout::FlexLayout::layout):
* Source/WebCore/layout/formattingContexts/flex/FlexLayout.h:

Canonical link: https://commits.webkit.org/251322@main

Modified Paths

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; }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to