Diff
Modified: trunk/Source/WebCore/ChangeLog (263937 => 263938)
--- trunk/Source/WebCore/ChangeLog 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/ChangeLog 2020-07-04 18:37:44 UTC (rev 263938)
@@ -1,3 +1,57 @@
+2020-07-04 Zalan Bujtas <[email protected]>
+
+ [LFC] Do not cache computed horizontal margin values
+ https://bugs.webkit.org/show_bug.cgi?id=213956
+
+ Reviewed by Antti Koivisto.
+
+ Outside of the width + margin computation, computed horizontal margin values are only required by
+ float positioning. Let's just re-computed them on demand (which is basically just a style.marginStart/end resolve).
+
+ * layout/FormattingContext.cpp:
+ (WebCore::Layout::FormattingContext::computeOutOfFlowHorizontalGeometry):
+ * layout/FormattingContextGeometry.cpp:
+ (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
+ (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
+ (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
+ (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin):
+ * layout/LayoutContext.cpp:
+ (WebCore::Layout::LayoutContext::layout):
+ * layout/LayoutUnits.h:
+ * layout/Verification.cpp:
+ (WebCore::Layout::outputMismatchingBlockBoxInformationIfNeeded):
+ * layout/blockformatting/BlockFormattingContext.cpp:
+ (WebCore::Layout::BlockFormattingContext::computePositionToAvoidFloats):
+ (WebCore::Layout::BlockFormattingContext::computeWidthAndMargin):
+ * layout/blockformatting/BlockFormattingContextGeometry.cpp:
+ (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
+ (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin):
+ * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp:
+ (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox):
+ * layout/displaytree/DisplayBox.cpp:
+ (WebCore::Display::Box::Box):
+ * layout/displaytree/DisplayBox.h:
+ (WebCore::Display::Box::setHasValidVerticalNonCollapsedMargin):
+ (WebCore::Display::Box::setHasValidHorizontalComputedMargin): Deleted.
+ (WebCore::Display::Box::ComputedHorizontalMargin::ComputedHorizontalMargin): Deleted.
+ (WebCore::Display::Box::setHorizontalComputedMargin): Deleted.
+ (WebCore::Display::Box::computedMarginStart const): Deleted.
+ (WebCore::Display::Box::computedMarginEnd const): Deleted.
+ * layout/floats/FloatingContext.cpp:
+ (WebCore::Layout::computedHorizontalMargin):
+ (WebCore::Layout::FloatingContext::positionForFloat const):
+ (WebCore::Layout::FloatingContext::positionForNonFloatingFloatAvoider const):
+ * layout/floats/FloatingContext.h:
+ * layout/inlineformatting/InlineFormattingContext.cpp:
+ (WebCore::Layout::InlineFormattingContext::computeHorizontalMargin):
+ (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
+ * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
+ (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):
+ * layout/tableformatting/TableFormattingContext.cpp:
+ (WebCore::Layout::TableFormattingContext::setUsedGeometryForRows):
+ (WebCore::Layout::TableFormattingContext::setUsedGeometryForSections):
+ (WebCore::Layout::TableFormattingContext::layoutCell):
+
2020-07-04 Darin Adler <[email protected]>
Make generate-unified-sources.sh not depend on features being listed in FEATURE_DEFINES environment variable
Modified: trunk/Source/WebCore/layout/FormattingContext.cpp (263937 => 263938)
--- trunk/Source/WebCore/layout/FormattingContext.cpp 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/FormattingContext.cpp 2020-07-04 18:37:44 UTC (rev 263938)
@@ -94,7 +94,6 @@
displayBox.setLeft(horizontalGeometry.left + horizontalGeometry.contentWidthAndMargin.usedMargin.start);
displayBox.setContentBoxWidth(horizontalGeometry.contentWidthAndMargin.contentWidth);
displayBox.setHorizontalMargin({ horizontalGeometry.contentWidthAndMargin.usedMargin });
- displayBox.setHorizontalComputedMargin({ horizontalGeometry.contentWidthAndMargin.computedMargin });
}
void FormattingContext::computeOutOfFlowVerticalGeometry(const Box& layoutBox, const ConstraintsForOutOfFlowContent& constraints)
Modified: trunk/Source/WebCore/layout/FormattingContextGeometry.cpp (263937 => 263938)
--- trunk/Source/WebCore/layout/FormattingContextGeometry.cpp 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/FormattingContextGeometry.cpp 2020-07-04 18:37:44 UTC (rev 263938)
@@ -605,7 +605,7 @@
*right += containingBlockPaddingVerticalEdge;
LOG_WITH_STREAM(FormattingContextLayout, stream << "[Position][Width][Margin] -> out-of-flow non-replaced -> left(" << *left << "px) right(" << *right << "px) width(" << *width << "px) margin(" << usedHorizontalMargin.start << "px, " << usedHorizontalMargin.end << "px) layoutBox(" << &layoutBox << ")");
- return { *left, *right, { *width, usedHorizontalMargin, computedHorizontalMargin } };
+ return { *left, *right, { *width, usedHorizontalMargin } };
}
VerticalGeometry FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const OverrideVerticalValues& overrideVerticalValues) const
@@ -791,7 +791,7 @@
*right += containingBlockPaddingVerticalEdge;
LOG_WITH_STREAM(FormattingContextLayout, stream << "[Position][Width][Margin] -> out-of-flow replaced -> left(" << *left << "px) right(" << *right << "px) width(" << width << "px) margin(" << *usedMarginStart << "px, " << *usedMarginEnd << "px) layoutBox(" << &replacedBox << ")");
- return { *left, *right, { width, { *usedMarginStart, *usedMarginEnd }, computedHorizontalMargin } };
+ return { *left, *right, { width, { *usedMarginStart, *usedMarginEnd } } };
}
ContentHeightAndMargin FormattingContext::Geometry::complicatedCases(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideVerticalValues& overrideVerticalValues) const
@@ -844,7 +844,7 @@
width = shrinkToFitWidth(layoutBox, horizontalConstraints.logicalWidth);
LOG_WITH_STREAM(FormattingContextLayout, stream << "[Width][Margin] -> floating non-replaced -> width(" << *width << "px) margin(" << usedHorizontallMargin.start << "px, " << usedHorizontallMargin.end << "px) -> layoutBox(" << &layoutBox << ")");
- return ContentWidthAndMargin { *width, usedHorizontallMargin, computedHorizontalMargin };
+ return ContentWidthAndMargin { *width, usedHorizontallMargin };
}
ContentHeightAndMargin FormattingContext::Geometry::floatingReplacedHeightAndMargin(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, const OverrideVerticalValues& overrideVerticalValues) const
@@ -1012,7 +1012,7 @@
ASSERT(width);
LOG_WITH_STREAM(FormattingContextLayout, stream << "[Width][Margin] -> inflow replaced -> width(" << *width << "px) margin(" << usedMarginStart() << "px, " << usedMarginEnd() << "px) -> layoutBox(" << &replacedBox << ")");
- return { *width, { usedMarginStart(), usedMarginEnd() }, computedHorizontalMargin };
+ return { *width, { usedMarginStart(), usedMarginEnd() } };
}
LayoutSize FormattingContext::Geometry::inFlowPositionedPositionOffset(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints) const
Modified: trunk/Source/WebCore/layout/LayoutContext.cpp (263937 => 263938)
--- trunk/Source/WebCore/layout/LayoutContext.cpp 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/LayoutContext.cpp 2020-07-04 18:37:44 UTC (rev 263938)
@@ -66,7 +66,6 @@
// we could not lay it out even if we wanted to since it's outside of this LayoutContext.
auto& displayBox = layoutState().displayBoxForRootLayoutBox();
displayBox.setHorizontalMargin({ });
- displayBox.setHorizontalComputedMargin({ });
displayBox.setVerticalMargin({ });
displayBox.setBorder({ });
displayBox.setPadding({ });
Modified: trunk/Source/WebCore/layout/LayoutUnits.h (263937 => 263938)
--- trunk/Source/WebCore/layout/LayoutUnits.h 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/LayoutUnits.h 2020-07-04 18:37:44 UTC (rev 263938)
@@ -138,7 +138,6 @@
struct ContentWidthAndMargin {
LayoutUnit contentWidth;
UsedHorizontalMargin usedMargin;
- ComputedHorizontalMargin computedMargin;
};
struct ContentHeightAndMargin {
Modified: trunk/Source/WebCore/layout/Verification.cpp (263937 => 263938)
--- trunk/Source/WebCore/layout/Verification.cpp 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/Verification.cpp 2020-07-04 18:37:44 UTC (rev 263938)
@@ -232,14 +232,27 @@
stream.nextLine();
};
- auto renderBoxLikeMarginBox = [](auto& displayBox) {
+ auto renderBoxLikeMarginBox = [&] (auto& displayBox) {
+ if (layoutBox.isInitialContainingBlock())
+ return displayBox.rect();
+
// Produce a RenderBox matching margin box.
+ auto containingBlockWidth = context.displayBoxForLayoutBox(layoutBox.containingBlock()).contentBoxWidth();
+ auto marginStart = LayoutUnit { };
+ auto& marginStartStyle = layoutBox.style().marginStart();
+ if (marginStartStyle.isFixed() || marginStartStyle.isPercent() || marginStartStyle.isCalculated())
+ marginStart = valueForLength(marginStartStyle, containingBlockWidth);
+
+ auto marginEnd = LayoutUnit { };
+ auto& marginEndStyle = layoutBox.style().marginEnd();
+ if (marginEndStyle.isFixed() || marginEndStyle.isPercent() || marginEndStyle.isCalculated())
+ marginEnd = valueForLength(marginEndStyle, containingBlockWidth);
+
auto borderBox = displayBox.borderBox();
-
return Display::Rect {
borderBox.top() - displayBox.nonCollapsedMarginBefore(),
- borderBox.left() - displayBox.computedMarginStart().valueOr(0),
- displayBox.computedMarginStart().valueOr(0) + borderBox.width() + displayBox.computedMarginEnd().valueOr(0),
+ borderBox.left() - marginStart,
+ marginStart + borderBox.width() + marginEnd,
displayBox.nonCollapsedMarginBefore() + borderBox.height() + displayBox.nonCollapsedMarginAfter()
};
};
Modified: trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp (263937 => 263938)
--- trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp 2020-07-04 18:37:44 UTC (rev 263938)
@@ -294,7 +294,7 @@
return computeVerticalPositionForFloatClear(floatingContext, layoutBox);
ASSERT(layoutBox.establishesFormattingContext());
- formattingState().displayBox(layoutBox).setTopLeft(floatingContext.positionForNonFloatingFloatAvoider(layoutBox));
+ formattingState().displayBox(layoutBox).setTopLeft(floatingContext.positionForNonFloatingFloatAvoider(layoutBox, constraintsPair.containingBlock.horizontal));
}
void BlockFormattingContext::computeVerticalPositionForFloatClear(const FloatingContext& floatingContext, const Box& layoutBox)
@@ -327,7 +327,6 @@
auto& displayBox = formattingState().displayBox(layoutBox);
displayBox.setContentBoxWidth(contentWidthAndMargin.contentWidth);
displayBox.setHorizontalMargin({ contentWidthAndMargin.usedMargin });
- displayBox.setHorizontalComputedMargin(contentWidthAndMargin.computedMargin);
}
void BlockFormattingContext::computeHeightAndMargin(const Box& layoutBox, const ConstraintsForInFlowContent& constraints)
Modified: trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp (263937 => 263938)
--- trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp 2020-07-04 18:37:44 UTC (rev 263938)
@@ -204,7 +204,7 @@
}
ASSERT(width);
- return ContentWidthAndMargin { *width, usedHorizontalMargin, computedHorizontalMargin };
+ return ContentWidthAndMargin { *width, usedHorizontalMargin };
};
auto contentWidthAndMargin = compute();
@@ -227,7 +227,7 @@
auto nonReplacedWidthAndMargin = inFlowNonReplacedWidthAndMargin(replacedBox, horizontalConstraints, OverrideHorizontalValues { usedWidth, overrideHorizontalValues.margin });
LOG_WITH_STREAM(FormattingContextLayout, stream << "[Width][Margin] -> inflow replaced -> width(" << usedWidth << "px) margin(" << nonReplacedWidthAndMargin.usedMargin.start << "px, " << nonReplacedWidthAndMargin.usedMargin.end << "px) -> layoutBox(" << &replacedBox << ")");
- return { usedWidth, nonReplacedWidthAndMargin.usedMargin, nonReplacedWidthAndMargin.computedMargin };
+ return { usedWidth, nonReplacedWidthAndMargin.usedMargin };
}
LayoutUnit BlockFormattingContext::Geometry::staticVerticalPosition(const Box& layoutBox, const VerticalConstraints& verticalConstraints) const
Modified: trunk/Source/WebCore/layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp (263937 => 263938)
--- trunk/Source/WebCore/layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp 2020-07-04 18:37:44 UTC (rev 263938)
@@ -210,7 +210,6 @@
auto& displayBox = formattingState().displayBox(tableBox);
displayBox.setContentBoxWidth(contentWidthAndMargin.contentWidth);
displayBox.setHorizontalMargin(contentWidthAndMargin.usedMargin);
- displayBox.setHorizontalComputedMargin(contentWidthAndMargin.computedMargin);
}
void TableWrapperBlockFormattingContext::computeHeightAndMarginForTableBox(const ContainerBox& tableBox, const ConstraintsForInFlowContent& constraints)
Modified: trunk/Source/WebCore/layout/displaytree/DisplayBox.cpp (263937 => 263938)
--- trunk/Source/WebCore/layout/displaytree/DisplayBox.cpp 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/displaytree/DisplayBox.cpp 2020-07-04 18:37:44 UTC (rev 263938)
@@ -41,7 +41,6 @@
, m_contentHeight(other.m_contentHeight)
, m_horizontalMargin(other.m_horizontalMargin)
, m_verticalMargin(other.m_verticalMargin)
- , m_horizontalComputedMargin(other.m_horizontalComputedMargin)
, m_hasClearance(other.m_hasClearance)
, m_border(other.m_border)
, m_padding(other.m_padding)
@@ -51,7 +50,6 @@
, m_hasValidHorizontalMargin(other.m_hasValidHorizontalMargin)
, m_hasValidVerticalMargin(other.m_hasValidVerticalMargin)
, m_hasValidVerticalNonCollapsedMargin(other.m_hasValidVerticalNonCollapsedMargin)
- , m_hasValidHorizontalComputedMargin(other.m_hasValidHorizontalComputedMargin)
, m_hasValidBorder(other.m_hasValidBorder)
, m_hasValidPadding(other.m_hasValidPadding)
, m_hasValidContentHeight(other.m_hasValidContentHeight)
Modified: trunk/Source/WebCore/layout/displaytree/DisplayBox.h (263937 => 263938)
--- trunk/Source/WebCore/layout/displaytree/DisplayBox.h 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/displaytree/DisplayBox.h 2020-07-04 18:37:44 UTC (rev 263938)
@@ -92,14 +92,6 @@
CollapsedValues m_collapsedValues;
};
- struct ComputedHorizontalMargin {
- ComputedHorizontalMargin() = default;
- ComputedHorizontalMargin(Layout::ComputedHorizontalMargin);
-
- Optional<LayoutUnit> start;
- Optional<LayoutUnit> end;
- };
-
struct HorizontalMargin {
HorizontalMargin() = default;
HorizontalMargin(Layout::UsedHorizontalMargin);
@@ -119,8 +111,6 @@
LayoutUnit nonCollapsedMarginBefore() const;
LayoutUnit nonCollapsedMarginAfter() const;
- Optional<LayoutUnit> computedMarginStart() const;
- Optional<LayoutUnit> computedMarginEnd() const;
LayoutUnit borderTop() const;
LayoutUnit borderLeft() const;
@@ -182,7 +172,6 @@
void setHorizontalMargin(HorizontalMargin);
void setVerticalMargin(VerticalMargin);
- void setHorizontalComputedMargin(ComputedHorizontalMargin);
void setHasClearance() { m_hasClearance = true; }
void setBorder(Layout::Edges);
@@ -201,7 +190,6 @@
void setHasValidLeft() { m_hasValidLeft = true; }
void setHasValidVerticalMargin() { m_hasValidVerticalMargin = true; }
void setHasValidVerticalNonCollapsedMargin() { m_hasValidVerticalNonCollapsedMargin = true; }
- void setHasValidHorizontalComputedMargin() { m_hasValidHorizontalComputedMargin = true; }
void setHasValidHorizontalMargin() { m_hasValidHorizontalMargin = true; }
void setHasValidBorder() { m_hasValidBorder = true; }
@@ -217,7 +205,6 @@
HorizontalMargin m_horizontalMargin;
VerticalMargin m_verticalMargin;
- ComputedHorizontalMargin m_horizontalComputedMargin;
bool m_hasClearance { false };
Layout::Edges m_border;
@@ -229,7 +216,6 @@
bool m_hasValidHorizontalMargin { false };
bool m_hasValidVerticalMargin { false };
bool m_hasValidVerticalNonCollapsedMargin { false };
- bool m_hasValidHorizontalComputedMargin { false };
bool m_hasValidBorder { false };
bool m_hasValidPadding { false };
bool m_hasValidContentHeight { false };
@@ -268,12 +254,6 @@
{
}
-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)
@@ -384,14 +364,6 @@
m_verticalMargin = margin;
}
-inline void Box::setHorizontalComputedMargin(ComputedHorizontalMargin margin)
-{
-#if ASSERT_ENABLED
- setHasValidHorizontalComputedMargin();
-#endif
- m_horizontalComputedMargin = margin;
-}
-
inline void Box::setBorder(Layout::Edges border)
{
#if ASSERT_ENABLED
@@ -472,18 +444,6 @@
return m_verticalMargin.nonCollapsedValues().after;
}
-inline Optional<LayoutUnit> Box::computedMarginStart() const
-{
- ASSERT(m_hasValidHorizontalComputedMargin);
- return m_horizontalComputedMargin.start;
-}
-
-inline Optional<LayoutUnit> Box::computedMarginEnd() const
-{
- ASSERT(m_hasValidHorizontalComputedMargin);
- return m_horizontalComputedMargin.end;
-}
-
inline Optional<LayoutUnit> Box::paddingTop() const
{
ASSERT(m_hasValidPadding);
Modified: trunk/Source/WebCore/layout/floats/FloatingContext.cpp (263937 => 263938)
--- trunk/Source/WebCore/layout/floats/FloatingContext.cpp 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/floats/FloatingContext.cpp 2020-07-04 18:37:44 UTC (rev 263938)
@@ -153,6 +153,17 @@
}
#endif
+static ComputedHorizontalMargin computedHorizontalMargin(const Box& layoutBox, LayoutUnit horizontalConstraint)
+{
+ auto& style = layoutBox.style();
+ auto computedValue = [&] (const auto& margin) {
+ if (margin.isFixed() || margin.isPercent() || margin.isCalculated())
+ return valueForLength(margin, horizontalConstraint);
+ return 0_lu;
+ };
+ return { computedValue(style.marginStart()), computedValue(style.marginEnd()) };
+}
+
static FloatPair::LeftRightIndex findAvailablePosition(FloatAvoider& floatAvoider, const FloatingState::FloatList& floats)
{
Optional<PositionInContextRoot> bottomMost;
@@ -238,7 +249,8 @@
auto& displayBox = formattingContext().geometryForBox(layoutBox);
if (absoluteTopLeft.y() - displayBox.marginBefore() < previousFloatAbsoluteTop)
absoluteTopLeft.setY(previousFloatAbsoluteTop + displayBox.marginBefore());
- auto margins = Edges { { displayBox.computedMarginStart().valueOr(0), displayBox.computedMarginEnd().valueOr(0) }, { displayBox.marginBefore(), displayBox.marginAfter() } };
+ auto horizontalMargin = computedHorizontalMargin(layoutBox, horizontalConstraints.logicalWidth);
+ auto margins = Edges { { *horizontalMargin.start, *horizontalMargin.end }, { displayBox.marginBefore(), displayBox.marginAfter() } };
auto floatBox = FloatAvoider { layoutBox, absoluteTopLeft, displayBox.width(), margins, absoluteDisplayBoxCoordinates.containingBlockContentBox };
findAvailablePosition(floatBox, m_floatingState.floats());
// From formatting root coordinate system back to containing block's.
@@ -246,7 +258,7 @@
return { floatBox.left() + margins.horizontal.left - containingBlockTopLeft.x(), floatBox.top() + margins.vertical.top - containingBlockTopLeft.y() };
}
-LayoutPoint FloatingContext::positionForNonFloatingFloatAvoider(const Box& layoutBox) const
+LayoutPoint FloatingContext::positionForNonFloatingFloatAvoider(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints) const
{
ASSERT(layoutBox.establishesBlockFormattingContext());
ASSERT(!layoutBox.isFloatingPositioned());
@@ -258,7 +270,8 @@
auto absoluteDisplayBoxCoordinates = this->absoluteDisplayBoxCoordinates(layoutBox);
auto& displayBox = formattingContext().geometryForBox(layoutBox);
- auto margins = Edges { { displayBox.computedMarginStart().valueOr(0), displayBox.computedMarginEnd().valueOr(0) }, { displayBox.marginBefore(), displayBox.marginAfter() } };
+ auto horizontalMargin = computedHorizontalMargin(layoutBox, horizontalConstraints.logicalWidth);
+ auto margins = Edges { { *horizontalMargin.start, *horizontalMargin.end }, { displayBox.marginBefore(), displayBox.marginAfter() } };
auto floatAvoider = FloatAvoider { layoutBox, absoluteDisplayBoxCoordinates.topLeft, displayBox.width(), margins, absoluteDisplayBoxCoordinates.containingBlockContentBox };
findPositionForFormattingContextRoot(floatAvoider);
auto containingBlockTopLeft = absoluteDisplayBoxCoordinates.containingBlockTopLeft;
Modified: trunk/Source/WebCore/layout/floats/FloatingContext.h (263937 => 263938)
--- trunk/Source/WebCore/layout/floats/FloatingContext.h 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/floats/FloatingContext.h 2020-07-04 18:37:44 UTC (rev 263938)
@@ -49,7 +49,7 @@
FloatingState& floatingState() const { return m_floatingState; }
LayoutPoint positionForFloat(const Box&, const HorizontalConstraints&) const;
- LayoutPoint positionForNonFloatingFloatAvoider(const Box&) const;
+ LayoutPoint positionForNonFloatingFloatAvoider(const Box&, const HorizontalConstraints&) const;
struct ClearancePosition {
Optional<Position> position;
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp (263937 => 263938)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp 2020-07-04 18:37:44 UTC (rev 263938)
@@ -281,9 +281,7 @@
void InlineFormattingContext::computeHorizontalMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints)
{
auto computedHorizontalMargin = geometry().computedHorizontalMargin(layoutBox, horizontalConstraints);
- auto& displayBox = formattingState().displayBox(layoutBox);
- displayBox.setHorizontalComputedMargin(computedHorizontalMargin);
- displayBox.setHorizontalMargin({ computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) });
+ formattingState().displayBox(layoutBox).setHorizontalMargin({ computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) });
}
void InlineFormattingContext::computeWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints)
@@ -316,7 +314,6 @@
auto& displayBox = formattingState().displayBox(layoutBox);
displayBox.setContentBoxWidth(contentWidthAndMargin.contentWidth);
displayBox.setHorizontalMargin({ contentWidthAndMargin.usedMargin });
- displayBox.setHorizontalComputedMargin(contentWidthAndMargin.computedMargin);
}
void InlineFormattingContext::computeHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints)
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp (263937 => 263938)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp 2020-07-04 18:37:44 UTC (rev 263938)
@@ -59,7 +59,7 @@
// #2
auto computedHorizontalMargin = Geometry::computedHorizontalMargin(formattingContextRoot, horizontalConstraints);
- return ContentWidthAndMargin { *width, { computedHorizontalMargin.start.valueOr(0_lu), computedHorizontalMargin.end.valueOr(0_lu) }, computedHorizontalMargin };
+ return ContentWidthAndMargin { *width, { computedHorizontalMargin.start.valueOr(0_lu), computedHorizontalMargin.end.valueOr(0_lu) } };
}
ContentHeightAndMargin InlineFormattingContext::Geometry::inlineBlockHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideVerticalValues& overrideVerticalValues) const
Modified: trunk/Source/WebCore/layout/tableformatting/TableFormattingContext.cpp (263937 => 263938)
--- trunk/Source/WebCore/layout/tableformatting/TableFormattingContext.cpp 2020-07-04 17:18:45 UTC (rev 263937)
+++ trunk/Source/WebCore/layout/tableformatting/TableFormattingContext.cpp 2020-07-04 18:37:44 UTC (rev 263938)
@@ -156,7 +156,6 @@
rowDisplayBox.setPadding(geometry().computedPadding(rowBox, availableHorizontalSpace));
// Internal table elements do not have margins.
rowDisplayBox.setHorizontalMargin({ });
- rowDisplayBox.setHorizontalComputedMargin({ });
rowDisplayBox.setVerticalMargin({ { }, { } });
auto computedRowBorder = [&] {
@@ -239,7 +238,6 @@
paddingBefore = WTF::nullopt;
// Internal table elements do not have margins.
sectionDisplayBox.setHorizontalMargin({ });
- sectionDisplayBox.setHorizontalComputedMargin({ });
sectionDisplayBox.setVerticalMargin({ { }, { } });
sectionDisplayBox.setContentBoxWidth(sectionWidth);
@@ -270,7 +268,6 @@
cellDisplayBox.setPadding(geometry().computedPadding(cellBox, availableHorizontalSpace));
// Internal table elements do not have margins.
cellDisplayBox.setHorizontalMargin({ });
- cellDisplayBox.setHorizontalComputedMargin({ });
cellDisplayBox.setVerticalMargin({ { }, { } });
auto availableSpaceForContent = [&] {