Diff
Modified: trunk/Source/WebCore/ChangeLog (235667 => 235668)
--- trunk/Source/WebCore/ChangeLog 2018-09-05 14:36:43 UTC (rev 235667)
+++ trunk/Source/WebCore/ChangeLog 2018-09-05 14:42:45 UTC (rev 235668)
@@ -1,3 +1,40 @@
+2018-09-05 Zalan Bujtas <[email protected]>
+
+ [LFC][BFC] Move MarginCollapse class under BlockFormattingContext::Geometry
+ https://bugs.webkit.org/show_bug.cgi?id=189296
+
+ Reviewed by Antti Koivisto.
+
+ Margin collapsing is part of geometry after all.
+
+ * layout/blockformatting/BlockFormattingContext.cpp:
+ (WebCore::Layout::BlockFormattingContext::computeEstimatedMarginTop const):
+ * layout/blockformatting/BlockFormattingContext.h:
+ * layout/blockformatting/BlockFormattingContextGeometry.cpp:
+ (WebCore::Layout::BlockFormattingContext::Geometry::estimatedMarginTop):
+ * layout/blockformatting/BlockMarginCollapse.cpp:
+ (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginTopFromFirstChild):
+ (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginTop):
+ (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginTop):
+ (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginBottom):
+ (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginTop):
+ (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::marginBottom):
+ (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginBottomCollapsedWithParent):
+ (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::isMarginTopCollapsedWithParentMarginBottom):
+ (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginBottomFromLastChild):
+ (WebCore::Layout::BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginBottom):
+ (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginTopFromFirstChild): Deleted.
+ (WebCore::Layout::BlockFormattingContext::MarginCollapse::nonCollapsedMarginTop): Deleted.
+ (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginTop): Deleted.
+ (WebCore::Layout::BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginBottom): Deleted.
+ (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginTop): Deleted.
+ (WebCore::Layout::BlockFormattingContext::MarginCollapse::marginBottom): Deleted.
+ (WebCore::Layout::BlockFormattingContext::MarginCollapse::isMarginBottomCollapsedWithParent): Deleted.
+ (WebCore::Layout::BlockFormattingContext::MarginCollapse::isMarginTopCollapsedWithParentMarginBottom): Deleted.
+ (WebCore::Layout::BlockFormattingContext::MarginCollapse::collapsedMarginBottomFromLastChild): Deleted.
+ (WebCore::Layout::BlockFormattingContext::MarginCollapse::nonCollapsedMarginBottom): Deleted.
+ (WebCore::Layout::BlockFormattingContext::MarginCollapse::estimatedMarginTop): Deleted.
+
2018-09-04 Zalan Bujtas <[email protected]>
[LFC] Make BlockFormattingContext::Geometry a subclass of FormattingContext::Geometry
Modified: trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp (235667 => 235668)
--- trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp 2018-09-05 14:36:43 UTC (rev 235667)
+++ trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp 2018-09-05 14:42:45 UTC (rev 235668)
@@ -165,7 +165,7 @@
void BlockFormattingContext::computeEstimatedMarginTop(LayoutContext& layoutContext, const Box& layoutBox, Display::Box& displayBox) const
{
- auto estimatedMarginTop = MarginCollapse::estimatedMarginTop(layoutContext, layoutBox);
+ auto estimatedMarginTop = Geometry::estimatedMarginTop(layoutContext, layoutBox);
displayBox.setEstimatedMarginTop(estimatedMarginTop);
displayBox.moveVertically(estimatedMarginTop);
}
Modified: trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.h (235667 => 235668)
--- trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.h 2018-09-05 14:36:43 UTC (rev 235667)
+++ trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.h 2018-09-05 14:42:45 UTC (rev 235668)
@@ -78,33 +78,34 @@
static bool instrinsicWidthConstraintsNeedChildrenWidth(const Box&);
static InstrinsicWidthConstraints instrinsicWidthConstraints(LayoutContext&, const Box&);
+ static LayoutUnit estimatedMarginTop(const LayoutContext&, const Box&);
+
private:
+ // This class implements margin collapsing for block formatting context.
+ class MarginCollapse {
+ public:
+ static LayoutUnit marginTop(const LayoutContext&, const Box&);
+ static LayoutUnit marginBottom(const LayoutContext&, const Box&);
+
+ static bool isMarginBottomCollapsedWithParent(const LayoutContext&, const Box&);
+ static bool isMarginTopCollapsedWithParentMarginBottom(const Box&);
+
+ private:
+ static LayoutUnit collapsedMarginBottomFromLastChild(const LayoutContext&, const Box&);
+ static LayoutUnit nonCollapsedMarginBottom(const LayoutContext&, const Box&);
+
+ static LayoutUnit computedNonCollapsedMarginTop(const LayoutContext&, const Box&);
+ static LayoutUnit computedNonCollapsedMarginBottom(const LayoutContext&, const Box&);
+
+ static LayoutUnit collapsedMarginTopFromFirstChild(const LayoutContext&, const Box&);
+ static LayoutUnit nonCollapsedMarginTop(const LayoutContext&, const Box&);
+ };
+
static HeightAndMargin inFlowNonReplacedHeightAndMargin(LayoutContext&, const Box&);
static WidthAndMargin inFlowNonReplacedWidthAndMargin(LayoutContext&, const Box&, std::optional<LayoutUnit> precomputedWidth = std::nullopt);
static WidthAndMargin inFlowReplacedWidthAndMargin(LayoutContext&, const Box&);
static Position staticPositionForOutOfFlowPositioned(const LayoutContext&, const Box&);
};
-
- // This class implements margin collapsing for block formatting context.
- class MarginCollapse {
- public:
- static LayoutUnit marginTop(const LayoutContext&, const Box&);
- static LayoutUnit estimatedMarginTop(const LayoutContext&, const Box&);
- static LayoutUnit marginBottom(const LayoutContext&, const Box&);
-
- static bool isMarginBottomCollapsedWithParent(const LayoutContext&, const Box&);
- static bool isMarginTopCollapsedWithParentMarginBottom(const Box&);
-
- private:
- static LayoutUnit collapsedMarginBottomFromLastChild(const LayoutContext&, const Box&);
- static LayoutUnit nonCollapsedMarginBottom(const LayoutContext&, const Box&);
-
- static LayoutUnit computedNonCollapsedMarginTop(const LayoutContext&, const Box&);
- static LayoutUnit computedNonCollapsedMarginBottom(const LayoutContext&, const Box&);
-
- static LayoutUnit collapsedMarginTopFromFirstChild(const LayoutContext&, const Box&);
- static LayoutUnit nonCollapsedMarginTop(const LayoutContext&, const Box&);
- };
};
}
Modified: trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp (235667 => 235668)
--- trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp 2018-09-05 14:36:43 UTC (rev 235667)
+++ trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp 2018-09-05 14:42:45 UTC (rev 235668)
@@ -454,7 +454,20 @@
return { minimumIntrinsicWidth, maximumIntrinsicWidth };
}
+LayoutUnit BlockFormattingContext::Geometry::estimatedMarginTop(const LayoutContext& layoutContext, const Box& layoutBox)
+{
+ ASSERT(layoutBox.isBlockLevelBox());
+ // Can't estimate vertical margins for out of flow boxes (and we shouldn't need to do it for float boxes).
+ ASSERT(layoutBox.isInFlow());
+ // Can't cross block formatting context boundary.
+ ASSERT(!layoutBox.establishesBlockFormattingContext());
+
+ // Let's just use the normal path for now.
+ return MarginCollapse::marginTop(layoutContext, layoutBox);
}
+
+
}
+}
#endif
Modified: trunk/Source/WebCore/layout/blockformatting/BlockMarginCollapse.cpp (235667 => 235668)
--- trunk/Source/WebCore/layout/blockformatting/BlockMarginCollapse.cpp 2018-09-05 14:36:43 UTC (rev 235667)
+++ trunk/Source/WebCore/layout/blockformatting/BlockMarginCollapse.cpp 2018-09-05 14:42:45 UTC (rev 235668)
@@ -144,7 +144,7 @@
return true;
}
-LayoutUnit BlockFormattingContext::MarginCollapse::collapsedMarginTopFromFirstChild(const LayoutContext& layoutContext, const Box& layoutBox)
+LayoutUnit BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginTopFromFirstChild(const LayoutContext& layoutContext, const Box& layoutBox)
{
ASSERT(layoutBox.isBlockLevelBox());
@@ -164,7 +164,7 @@
return marginValue(computedNonCollapsedMarginTop(layoutContext, firstInFlowChild), collapsedMarginTopFromFirstChild(layoutContext, firstInFlowChild));
}
-LayoutUnit BlockFormattingContext::MarginCollapse::nonCollapsedMarginTop(const LayoutContext& layoutContext, const Box& layoutBox)
+LayoutUnit BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginTop(const LayoutContext& layoutContext, const Box& layoutBox)
{
ASSERT(layoutBox.isBlockLevelBox());
@@ -186,21 +186,21 @@
// A collapsed margin is considered adjoining to another margin if any of its component margins is adjoining to that margin.
return false;
}*/
-LayoutUnit BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginTop(const LayoutContext& layoutContext, const Box& layoutBox)
+LayoutUnit BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginTop(const LayoutContext& layoutContext, const Box& layoutBox)
{
ASSERT(layoutBox.isBlockLevelBox());
- return FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue(layoutContext, layoutBox).top;
+ return computedNonCollapsedVerticalMarginValue(layoutContext, layoutBox).top;
}
-LayoutUnit BlockFormattingContext::MarginCollapse::computedNonCollapsedMarginBottom(const LayoutContext& layoutContext, const Box& layoutBox)
+LayoutUnit BlockFormattingContext::Geometry::MarginCollapse::computedNonCollapsedMarginBottom(const LayoutContext& layoutContext, const Box& layoutBox)
{
ASSERT(layoutBox.isBlockLevelBox());
- return FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue(layoutContext, layoutBox).bottom;
+ return computedNonCollapsedVerticalMarginValue(layoutContext, layoutBox).bottom;
}
-LayoutUnit BlockFormattingContext::MarginCollapse::marginTop(const LayoutContext& layoutContext, const Box& layoutBox)
+LayoutUnit BlockFormattingContext::Geometry::MarginCollapse::marginTop(const LayoutContext& layoutContext, const Box& layoutBox)
{
if (layoutBox.isAnonymous())
return 0;
@@ -231,7 +231,7 @@
return marginValue(marginTop, previousSiblingMarginBottom);
}
-LayoutUnit BlockFormattingContext::MarginCollapse::marginBottom(const LayoutContext& layoutContext, const Box& layoutBox)
+LayoutUnit BlockFormattingContext::Geometry::MarginCollapse::marginBottom(const LayoutContext& layoutContext, const Box& layoutBox)
{
if (layoutBox.isAnonymous())
return 0;
@@ -256,7 +256,7 @@
return nonCollapsedMarginBottom(layoutContext, layoutBox);
}
-bool BlockFormattingContext::MarginCollapse::isMarginBottomCollapsedWithParent(const LayoutContext& layoutContext, const Box& layoutBox)
+bool BlockFormattingContext::Geometry::MarginCollapse::isMarginBottomCollapsedWithParent(const LayoutContext& layoutContext, const Box& layoutBox)
{
// last inflow box to parent.
// https://www.w3.org/TR/CSS21/box.html#collapsing-margins
@@ -298,12 +298,12 @@
return true;
}
-bool BlockFormattingContext::MarginCollapse::isMarginTopCollapsedWithParentMarginBottom(const Box&)
+bool BlockFormattingContext::Geometry::MarginCollapse::isMarginTopCollapsedWithParentMarginBottom(const Box&)
{
return false;
}
-LayoutUnit BlockFormattingContext::MarginCollapse::collapsedMarginBottomFromLastChild(const LayoutContext& layoutContext, const Box& layoutBox)
+LayoutUnit BlockFormattingContext::Geometry::MarginCollapse::collapsedMarginBottomFromLastChild(const LayoutContext& layoutContext, const Box& layoutBox)
{
ASSERT(layoutBox.isBlockLevelBox());
@@ -324,7 +324,7 @@
return marginValue(computedNonCollapsedMarginBottom(layoutContext, lastInFlowChild), collapsedMarginBottomFromLastChild(layoutContext, lastInFlowChild));
}
-LayoutUnit BlockFormattingContext::MarginCollapse::nonCollapsedMarginBottom(const LayoutContext& layoutContext, const Box& layoutBox)
+LayoutUnit BlockFormattingContext::Geometry::MarginCollapse::nonCollapsedMarginBottom(const LayoutContext& layoutContext, const Box& layoutBox)
{
ASSERT(layoutBox.isBlockLevelBox());
@@ -332,18 +332,6 @@
return marginValue(computedNonCollapsedMarginBottom(layoutContext, layoutBox), collapsedMarginBottomFromLastChild(layoutContext, layoutBox));
}
-LayoutUnit BlockFormattingContext::MarginCollapse::estimatedMarginTop(const LayoutContext& layoutContext, const Box& layoutBox)
-{
- ASSERT(layoutBox.isBlockLevelBox());
- // Can't estimate vertical margins for out of flow boxes (and we shouldn't need to do it for float boxes).
- ASSERT(layoutBox.isInFlow());
- // Can't cross block formatting context boundary.
- ASSERT(!layoutBox.establishesBlockFormattingContext());
-
- // Let's just use the normal path for now.
- return marginTop(layoutContext, layoutBox);
}
-
}
-}
#endif