Title: [263934] trunk/Source/WebCore
Revision
263934
Author
[email protected]
Date
2020-07-04 09:33:36 -0700 (Sat, 04 Jul 2020)

Log Message

[LFC] Used dedicated paint margin structures
https://bugs.webkit.org/show_bug.cgi?id=213955

Reviewed by Antti Koivisto.

This is in preparation for having only final margin values in Display::Box.

* layout/FormattingContext.cpp:
(WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
(WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
* layout/blockformatting/BlockFormattingContext.cpp:
(WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
* layout/displaytree/DisplayBox.h:
(WebCore::Display::Box::VerticalMargin::before const):
(WebCore::Display::Box::VerticalMargin::after const):
(WebCore::Display::Box::VerticalMargin::isCollapsedThrough const):
(WebCore::Display::Box::VerticalMargin::nonCollapsedValues const):
(WebCore::Display::Box::VerticalMargin::collapsedValues const):
(WebCore::Display::Box::VerticalMargin::hasCollapsedValues const):
(WebCore::Display::Box::VerticalMargin::setCollapsedValues):
(WebCore::Display::Box::VerticalMargin::VerticalMargin):
(WebCore::Display::Box::VerticalMargin::NonCollapsedValues::NonCollapsedValues):
(WebCore::Display::Box::VerticalMargin::CollapsedValues::CollapsedValues):
(WebCore::Display::Box::ComputedHorizontalMargin::ComputedHorizontalMargin):
(WebCore::Display::Box::HorizontalMargin::HorizontalMargin):
(WebCore::Display::Box::setHorizontalMargin):
(WebCore::Display::Box::setVerticalMargin):
(WebCore::Display::Box::setHorizontalComputedMargin):
(WebCore::Display::Box::verticalMargin const):
(WebCore::Display::Box::horizontalMargin const):
* layout/floats/FloatingState.h:
(WebCore::Layout::FloatingState::FloatItem::horizontalMargin const):
* layout/inlineformatting/InlineFormattingContext.cpp:
(WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
(WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (263933 => 263934)


--- trunk/Source/WebCore/ChangeLog	2020-07-04 16:04:50 UTC (rev 263933)
+++ trunk/Source/WebCore/ChangeLog	2020-07-04 16:33:36 UTC (rev 263934)
@@ -1,3 +1,41 @@
+2020-07-04  Zalan Bujtas  <[email protected]>
+
+        [LFC] Used dedicated paint margin structures
+        https://bugs.webkit.org/show_bug.cgi?id=213955
+
+        Reviewed by Antti Koivisto.
+
+        This is in preparation for having only final margin values in Display::Box.
+
+        * layout/FormattingContext.cpp:
+        (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
+        (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry):
+        * layout/blockformatting/BlockFormattingContext.cpp:
+        (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
+        * layout/displaytree/DisplayBox.h:
+        (WebCore::Display::Box::VerticalMargin::before const):
+        (WebCore::Display::Box::VerticalMargin::after const):
+        (WebCore::Display::Box::VerticalMargin::isCollapsedThrough const):
+        (WebCore::Display::Box::VerticalMargin::nonCollapsedValues const):
+        (WebCore::Display::Box::VerticalMargin::collapsedValues const):
+        (WebCore::Display::Box::VerticalMargin::hasCollapsedValues const):
+        (WebCore::Display::Box::VerticalMargin::setCollapsedValues):
+        (WebCore::Display::Box::VerticalMargin::VerticalMargin):
+        (WebCore::Display::Box::VerticalMargin::NonCollapsedValues::NonCollapsedValues):
+        (WebCore::Display::Box::VerticalMargin::CollapsedValues::CollapsedValues):
+        (WebCore::Display::Box::ComputedHorizontalMargin::ComputedHorizontalMargin):
+        (WebCore::Display::Box::HorizontalMargin::HorizontalMargin):
+        (WebCore::Display::Box::setHorizontalMargin):
+        (WebCore::Display::Box::setVerticalMargin):
+        (WebCore::Display::Box::setHorizontalComputedMargin):
+        (WebCore::Display::Box::verticalMargin const):
+        (WebCore::Display::Box::horizontalMargin const):
+        * layout/floats/FloatingState.h:
+        (WebCore::Layout::FloatingState::FloatItem::horizontalMargin const):
+        * layout/inlineformatting/InlineFormattingContext.cpp:
+        (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
+        (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
+
 2020-07-04  Darin Adler  <[email protected]>
 
         Update comment in FeatureDefines.xcconfig since PlatformEnableCocoa.h should be used instead

Modified: trunk/Source/WebCore/layout/FormattingContext.cpp (263933 => 263934)


--- trunk/Source/WebCore/layout/FormattingContext.cpp	2020-07-04 16:04:50 UTC (rev 263933)
+++ trunk/Source/WebCore/layout/FormattingContext.cpp	2020-07-04 16:33:36 UTC (rev 263934)
@@ -93,8 +93,8 @@
     auto& displayBox = formattingState().displayBox(layoutBox);
     displayBox.setLeft(horizontalGeometry.left + horizontalGeometry.contentWidthAndMargin.usedMargin.start);
     displayBox.setContentBoxWidth(horizontalGeometry.contentWidthAndMargin.contentWidth);
-    displayBox.setHorizontalMargin(horizontalGeometry.contentWidthAndMargin.usedMargin);
-    displayBox.setHorizontalComputedMargin(horizontalGeometry.contentWidthAndMargin.computedMargin);
+    displayBox.setHorizontalMargin({ horizontalGeometry.contentWidthAndMargin.usedMargin });
+    displayBox.setHorizontalComputedMargin({ horizontalGeometry.contentWidthAndMargin.computedMargin });
 }
 
 void FormattingContext::computeOutOfFlowVerticalGeometry(const Box& layoutBox, const ConstraintsForOutOfFlowContent& constraints)
@@ -123,7 +123,7 @@
     displayBox.setTop(verticalGeometry.top + nonCollapsedVerticalMargin.before);
     displayBox.setContentBoxHeight(verticalGeometry.contentHeightAndMargin.contentHeight);
     // Margins of absolutely positioned boxes do not collapse
-    displayBox.setVerticalMargin({ nonCollapsedVerticalMargin, { } });
+    displayBox.setVerticalMargin(nonCollapsedVerticalMargin);
 }
 
 void FormattingContext::computeBorderAndPadding(const Box& layoutBox, const HorizontalConstraints& horizontalConstraint)

Modified: trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp (263933 => 263934)


--- trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp	2020-07-04 16:04:50 UTC (rev 263933)
+++ trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp	2020-07-04 16:33:36 UTC (rev 263934)
@@ -326,7 +326,7 @@
     auto contentWidthAndMargin = geometry().computedWidthAndMargin(layoutBox, constraintsPair.containingBlock.horizontal, availableWidthFloatAvoider);
     auto& displayBox = formattingState().displayBox(layoutBox);
     displayBox.setContentBoxWidth(contentWidthAndMargin.contentWidth);
-    displayBox.setHorizontalMargin(contentWidthAndMargin.usedMargin);
+    displayBox.setHorizontalMargin({ contentWidthAndMargin.usedMargin });
     displayBox.setHorizontalComputedMargin(contentWidthAndMargin.computedMargin);
 }
 

Modified: trunk/Source/WebCore/layout/displaytree/DisplayBox.h (263933 => 263934)


--- trunk/Source/WebCore/layout/displaytree/DisplayBox.h	2020-07-04 16:04:50 UTC (rev 263933)
+++ trunk/Source/WebCore/layout/displaytree/DisplayBox.h	2020-07-04 16:33:36 UTC (rev 263934)
@@ -56,8 +56,60 @@
     Rect rect() const { return { top(), left(), width(), height() }; }
     Rect rectWithMargin() const;
 
-    Layout::UsedVerticalMargin verticalMargin() const;
-    Layout::UsedHorizontalMargin horizontalMargin() const;
+    struct VerticalMargin {
+        LayoutUnit before() const { return m_collapsedValues.before.valueOr(m_nonCollapsedValues.before); }
+        LayoutUnit after() const { return m_collapsedValues.after.valueOr(m_nonCollapsedValues.after); }
+        bool isCollapsedThrough() const { return m_collapsedValues.isCollapsedThrough; }
+
+        struct NonCollapsedValues {
+            NonCollapsedValues(Layout::UsedVerticalMargin::NonCollapsedValues);
+            NonCollapsedValues() = default;
+
+            LayoutUnit before;
+            LayoutUnit after;
+        };
+        NonCollapsedValues nonCollapsedValues() const { return m_nonCollapsedValues; }
+
+        struct CollapsedValues {
+            CollapsedValues(Layout::UsedVerticalMargin::CollapsedValues);
+            CollapsedValues() = default;
+
+            Optional<LayoutUnit> before;
+            Optional<LayoutUnit> after;
+            bool isCollapsedThrough { false };
+        };
+        CollapsedValues collapsedValues() const { return m_collapsedValues; }
+        bool hasCollapsedValues() const { return m_collapsedValues.before || m_collapsedValues.after; }
+        void setCollapsedValues(CollapsedValues collapsedValues) { m_collapsedValues = collapsedValues; }
+
+        VerticalMargin(NonCollapsedValues, CollapsedValues);
+        VerticalMargin(Layout::UsedVerticalMargin);
+        VerticalMargin(Layout::UsedVerticalMargin::NonCollapsedValues);
+        VerticalMargin() = default;
+
+    private:
+        NonCollapsedValues m_nonCollapsedValues;
+        CollapsedValues m_collapsedValues;
+    };
+
+    struct ComputedHorizontalMargin {
+        ComputedHorizontalMargin() = default;
+        ComputedHorizontalMargin(Layout::ComputedHorizontalMargin);
+
+        Optional<LayoutUnit> start;
+        Optional<LayoutUnit> end;
+    };
+
+    struct HorizontalMargin {
+        HorizontalMargin() = default;
+        HorizontalMargin(Layout::UsedHorizontalMargin);
+        HorizontalMargin(LayoutUnit, LayoutUnit);
+
+        LayoutUnit start;
+        LayoutUnit end;
+    };
+    VerticalMargin verticalMargin() const;
+    HorizontalMargin horizontalMargin() const;
     LayoutUnit marginBefore() const;
     LayoutUnit marginStart() const;
     LayoutUnit marginAfter() const;
@@ -128,9 +180,9 @@
     void setContentBoxHeight(LayoutUnit);
     void setContentBoxWidth(LayoutUnit);
 
-    void setHorizontalMargin(Layout::UsedHorizontalMargin);
-    void setVerticalMargin(Layout::UsedVerticalMargin);
-    void setHorizontalComputedMargin(Layout::ComputedHorizontalMargin);
+    void setHorizontalMargin(HorizontalMargin);
+    void setVerticalMargin(VerticalMargin);
+    void setHorizontalComputedMargin(ComputedHorizontalMargin);
     void setHasClearance() { m_hasClearance = true; }
 
     void setBorder(Layout::Edges);
@@ -163,9 +215,9 @@
     LayoutUnit m_contentWidth;
     LayoutUnit m_contentHeight;
 
-    Layout::UsedHorizontalMargin m_horizontalMargin;
-    Layout::UsedVerticalMargin m_verticalMargin;
-    Layout::ComputedHorizontalMargin m_horizontalComputedMargin;
+    HorizontalMargin m_horizontalMargin;
+    VerticalMargin m_verticalMargin;
+    ComputedHorizontalMargin m_horizontalComputedMargin;
     bool m_hasClearance { false };
 
     Layout::Edges m_border;
@@ -186,6 +238,54 @@
 #endif // ASSERT_ENABLED
 };
 
+inline Box::VerticalMargin::VerticalMargin(Layout::UsedVerticalMargin usedVerticalMargin)
+    : m_nonCollapsedValues(usedVerticalMargin.nonCollapsedValues())
+    , m_collapsedValues(usedVerticalMargin.collapsedValues())
+{
+}
+
+inline Box::VerticalMargin::VerticalMargin(VerticalMargin::NonCollapsedValues nonCollapsedValues, VerticalMargin::CollapsedValues collapsedValues)
+    : m_nonCollapsedValues(nonCollapsedValues)
+    , m_collapsedValues(collapsedValues)
+{
+}
+
+inline Box::VerticalMargin::VerticalMargin(Layout::UsedVerticalMargin::NonCollapsedValues nonCollapsedValues)
+    : m_nonCollapsedValues(nonCollapsedValues)
+{
+}
+
+inline Box::VerticalMargin::NonCollapsedValues::NonCollapsedValues(Layout::UsedVerticalMargin::NonCollapsedValues nonCollapsedValues)
+    : before(nonCollapsedValues.before)
+    , after(nonCollapsedValues.after)
+{
+}
+
+inline Box::VerticalMargin::CollapsedValues::CollapsedValues(Layout::UsedVerticalMargin::CollapsedValues collapsedValues)
+    : before(collapsedValues.before)
+    , after(collapsedValues.after)
+    , isCollapsedThrough(collapsedValues.isCollapsedThrough)
+{
+}
+
+inline Box::ComputedHorizontalMargin::ComputedHorizontalMargin(Layout::ComputedHorizontalMargin computedHorizontalMargin)
+    : start(computedHorizontalMargin.start)
+    , end(computedHorizontalMargin.end)
+{
+}
+
+inline Box::HorizontalMargin::HorizontalMargin(Layout::UsedHorizontalMargin horizontalMargin)
+    : start(horizontalMargin.start)
+    , end(horizontalMargin.end)
+{
+}
+
+inline Box::HorizontalMargin::HorizontalMargin(LayoutUnit start, LayoutUnit end)
+    : start(start)
+    , end(end)
+{
+}
+
 #if ASSERT_ENABLED
 inline void Box::invalidateMargin()
 {
@@ -266,7 +366,7 @@
     return m_contentWidth;
 }
 
-inline void Box::setHorizontalMargin(Layout::UsedHorizontalMargin margin)
+inline void Box::setHorizontalMargin(HorizontalMargin margin)
 {
 #if ASSERT_ENABLED
     setHasValidHorizontalMargin();
@@ -274,7 +374,7 @@
     m_horizontalMargin = margin;
 }
 
-inline void Box::setVerticalMargin(Layout::UsedVerticalMargin margin)
+inline void Box::setVerticalMargin(VerticalMargin margin)
 {
 #if ASSERT_ENABLED
     setHasValidVerticalMargin();
@@ -284,7 +384,7 @@
     m_verticalMargin = margin;
 }
 
-inline void Box::setHorizontalComputedMargin(Layout::ComputedHorizontalMargin margin)
+inline void Box::setHorizontalComputedMargin(ComputedHorizontalMargin margin)
 {
 #if ASSERT_ENABLED
     setHasValidHorizontalComputedMargin();
@@ -324,13 +424,13 @@
     return { top() - marginBefore(), left() - marginStart(), marginStart() + width() + marginEnd(), marginBefore() + height() + marginAfter };
 }
 
-inline Layout::UsedVerticalMargin Box::verticalMargin() const
+inline Box::VerticalMargin Box::verticalMargin() const
 {
     ASSERT(m_hasValidVerticalMargin);
     return m_verticalMargin;
 }
 
-inline Layout::UsedHorizontalMargin Box::horizontalMargin() const
+inline Box::HorizontalMargin Box::horizontalMargin() const
 {
     ASSERT(m_hasValidHorizontalMargin);
     return m_horizontalMargin;

Modified: trunk/Source/WebCore/layout/floats/FloatingState.h (263933 => 263934)


--- trunk/Source/WebCore/layout/floats/FloatingState.h	2020-07-04 16:04:50 UTC (rev 263933)
+++ trunk/Source/WebCore/layout/floats/FloatingState.h	2020-07-04 16:33:36 UTC (rev 263934)
@@ -70,7 +70,7 @@
         bool isInFormattingContextOf(const ContainerBox& formattingContextRoot) const { return m_layoutBox->isInFormattingContextOf(formattingContextRoot); }
 
         Display::Rect rectWithMargin() const { return m_absoluteDisplayBox.rectWithMargin(); }
-        UsedHorizontalMargin horizontalMargin() const { return m_absoluteDisplayBox.horizontalMargin(); }
+        Display::Box::HorizontalMargin horizontalMargin() const { return m_absoluteDisplayBox.horizontalMargin(); }
         PositionInContextRoot bottom() const { return { m_absoluteDisplayBox.bottom() }; }
 
 #if ASSERT_ENABLED

Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp (263933 => 263934)


--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp	2020-07-04 16:04:50 UTC (rev 263933)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp	2020-07-04 16:33:36 UTC (rev 263934)
@@ -315,7 +315,7 @@
 
     auto& displayBox = formattingState().displayBox(layoutBox);
     displayBox.setContentBoxWidth(contentWidthAndMargin.contentWidth);
-    displayBox.setHorizontalMargin(contentWidthAndMargin.usedMargin);
+    displayBox.setHorizontalMargin({ contentWidthAndMargin.usedMargin });
     displayBox.setHorizontalComputedMargin(contentWidthAndMargin.computedMargin);
 }
 
@@ -346,7 +346,7 @@
     }
     auto& displayBox = formattingState().displayBox(layoutBox);
     displayBox.setContentBoxHeight(contentHeightAndMargin.contentHeight);
-    displayBox.setVerticalMargin({ contentHeightAndMargin.nonCollapsedMargin, { } });
+    displayBox.setVerticalMargin({ contentHeightAndMargin.nonCollapsedMargin });
 }
 
 void InlineFormattingContext::collectInlineContentIfNeeded()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to