- 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()