Diff
Modified: trunk/Source/WebCore/ChangeLog (252861 => 252862)
--- trunk/Source/WebCore/ChangeLog 2019-11-25 16:13:18 UTC (rev 252861)
+++ trunk/Source/WebCore/ChangeLog 2019-11-25 16:19:42 UTC (rev 252862)
@@ -1,5 +1,64 @@
2019-11-25 Zalan Bujtas <[email protected]>
+ [LFC] Pass UsedHorizontal/VerticalValues in by const reference
+ https://bugs.webkit.org/show_bug.cgi?id=204563
+ <rdar://problem/57464129>
+
+ Reviewed by Antti Koivisto.
+
+ UsedHorizontal/VerticalValues have grown a bit so let's pass them in by reference.
+
+ * layout/FormattingContext.h:
+ * layout/FormattingContextGeometry.cpp:
+ (WebCore::Layout::FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned const):
+ (WebCore::Layout::FormattingContext::Geometry::staticHorizontalPositionForOutOfFlowPositioned const):
+ (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const):
+ (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
+ (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const):
+ (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry const):
+ (WebCore::Layout::FormattingContext::Geometry::complicatedCases const):
+ (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin):
+ (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin const):
+ (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin const):
+ (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry const):
+ (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry):
+ (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin const):
+ (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin):
+ (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const):
+ (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin const):
+ (WebCore::Layout::FormattingContext::Geometry::inFlowPositionedPositionOffset const):
+ (WebCore::Layout::FormattingContext::Geometry::computedPadding const):
+ (WebCore::Layout::FormattingContext::Geometry::computedHorizontalMargin const):
+ (WebCore::Layout::FormattingContext::Geometry::computedVerticalMargin const):
+ * layout/blockformatting/BlockFormattingContext.h:
+ * layout/blockformatting/BlockFormattingContextGeometry.cpp:
+ (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
+ (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const):
+ (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin const):
+ (WebCore::Layout::BlockFormattingContext::Geometry::staticVerticalPosition const):
+ (WebCore::Layout::BlockFormattingContext::Geometry::staticHorizontalPosition const):
+ (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition const):
+ (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin):
+ (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
+ * layout/inlineformatting/InlineFormattingContext.cpp:
+ (WebCore::Layout::InlineFormattingContext::lineLayout):
+ (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot):
+ (WebCore::Layout::InlineFormattingContext::computeHorizontalAndVerticalGeometry):
+ (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const):
+ (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot):
+ (WebCore::Layout::InlineFormattingContext::computeHorizontalMargin):
+ (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
+ (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
+ (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox):
+ (WebCore::Layout::InlineFormattingContext::constraintsForLine):
+ (WebCore::Layout::InlineFormattingContext::setDisplayBoxesForLine):
+ * layout/inlineformatting/InlineFormattingContext.h:
+ * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
+ (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):
+ (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin const):
+
+2019-11-25 Zalan Bujtas <[email protected]>
+
[LFC][IFC] Construct only one LineLayout object per inline formatting context
https://bugs.webkit.org/show_bug.cgi?id=204561
<rdar://problem/57463666>
Modified: trunk/Source/WebCore/layout/FormattingContext.h (252861 => 252862)
--- trunk/Source/WebCore/layout/FormattingContext.h 2019-11-25 16:13:18 UTC (rev 252861)
+++ trunk/Source/WebCore/layout/FormattingContext.h 2019-11-25 16:19:42 UTC (rev 252862)
@@ -109,25 +109,25 @@
// This class implements generic positioning and sizing.
class Geometry {
public:
- VerticalGeometry outOfFlowVerticalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues) const;
- HorizontalGeometry outOfFlowHorizontalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues);
+ VerticalGeometry outOfFlowVerticalGeometry(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const;
+ HorizontalGeometry outOfFlowHorizontalGeometry(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&);
- ContentHeightAndMargin floatingHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues) const;
- ContentWidthAndMargin floatingWidthAndMargin(const Box&, UsedHorizontalValues);
+ ContentHeightAndMargin floatingHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const;
+ ContentWidthAndMargin floatingWidthAndMargin(const Box&, const UsedHorizontalValues&);
- ContentHeightAndMargin inlineReplacedHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues) const;
- ContentWidthAndMargin inlineReplacedWidthAndMargin(const Box&, UsedHorizontalValues, Optional<UsedVerticalValues> = WTF::nullopt) const;
+ ContentHeightAndMargin inlineReplacedHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const;
+ ContentWidthAndMargin inlineReplacedWidthAndMargin(const Box&, const UsedHorizontalValues&, Optional<UsedVerticalValues> = WTF::nullopt) const;
- LayoutSize inFlowPositionedPositionOffset(const Box&, UsedHorizontalValues) const;
+ LayoutSize inFlowPositionedPositionOffset(const Box&, const UsedHorizontalValues&) const;
- ContentHeightAndMargin complicatedCases(const Box&, UsedHorizontalValues, UsedVerticalValues) const;
+ ContentHeightAndMargin complicatedCases(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const;
LayoutUnit shrinkToFitWidth(const Box&, LayoutUnit availableWidth);
Edges computedBorder(const Box&) const;
- Optional<Edges> computedPadding(const Box&, UsedHorizontalValues) const;
+ Optional<Edges> computedPadding(const Box&, const UsedHorizontalValues&) const;
- ComputedHorizontalMargin computedHorizontalMargin(const Box&, UsedHorizontalValues) const;
- ComputedVerticalMargin computedVerticalMargin(const Box&, UsedHorizontalValues) const;
+ ComputedHorizontalMargin computedHorizontalMargin(const Box&, const UsedHorizontalValues&) const;
+ ComputedVerticalMargin computedVerticalMargin(const Box&, const UsedHorizontalValues&) const;
Optional<LayoutUnit> computedValueIfNotAuto(const Length& geometryProperty, LayoutUnit containingBlockWidth) const;
Optional<LayoutUnit> fixedValue(const Length& geometryProperty) const;
@@ -156,19 +156,19 @@
const FormattingContext& formattingContext() const { return m_formattingContext; }
private:
- VerticalGeometry outOfFlowReplacedVerticalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues) const;
- HorizontalGeometry outOfFlowReplacedHorizontalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues) const;
+ VerticalGeometry outOfFlowReplacedVerticalGeometry(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const;
+ HorizontalGeometry outOfFlowReplacedHorizontalGeometry(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const;
- VerticalGeometry outOfFlowNonReplacedVerticalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues) const;
- HorizontalGeometry outOfFlowNonReplacedHorizontalGeometry(const Box&, UsedHorizontalValues);
+ VerticalGeometry outOfFlowNonReplacedVerticalGeometry(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const;
+ HorizontalGeometry outOfFlowNonReplacedHorizontalGeometry(const Box&, const UsedHorizontalValues&);
- ContentHeightAndMargin floatingReplacedHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues) const;
- ContentWidthAndMargin floatingReplacedWidthAndMargin(const Box&, UsedHorizontalValues) const;
+ ContentHeightAndMargin floatingReplacedHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const;
+ ContentWidthAndMargin floatingReplacedWidthAndMargin(const Box&, const UsedHorizontalValues&) const;
- ContentWidthAndMargin floatingNonReplacedWidthAndMargin(const Box&, UsedHorizontalValues);
+ ContentWidthAndMargin floatingNonReplacedWidthAndMargin(const Box&, const UsedHorizontalValues&);
- LayoutUnit staticVerticalPositionForOutOfFlowPositioned(const Box&, UsedVerticalValues) const;
- LayoutUnit staticHorizontalPositionForOutOfFlowPositioned(const Box&, UsedHorizontalValues) const;
+ LayoutUnit staticVerticalPositionForOutOfFlowPositioned(const Box&, const UsedVerticalValues&) const;
+ LayoutUnit staticHorizontalPositionForOutOfFlowPositioned(const Box&, const UsedHorizontalValues&) const;
const FormattingContext& m_formattingContext;
};
Modified: trunk/Source/WebCore/layout/FormattingContextGeometry.cpp (252861 => 252862)
--- trunk/Source/WebCore/layout/FormattingContextGeometry.cpp 2019-11-25 16:13:18 UTC (rev 252861)
+++ trunk/Source/WebCore/layout/FormattingContextGeometry.cpp 2019-11-25 16:19:42 UTC (rev 252862)
@@ -212,7 +212,7 @@
return computedValueIfNotAuto(layoutBox.style().logicalMaxWidth(), containingBlockWidth);
}
-LayoutUnit FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned(const Box& layoutBox, UsedVerticalValues usedVerticalValues) const
+LayoutUnit FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned(const Box& layoutBox, const UsedVerticalValues& usedVerticalValues) const
{
ASSERT(layoutBox.isOutOfFlowPositioned());
@@ -247,7 +247,7 @@
return top - usedVerticalValues.constraints.contentBoxTop;
}
-LayoutUnit FormattingContext::Geometry::staticHorizontalPositionForOutOfFlowPositioned(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues) const
+LayoutUnit FormattingContext::Geometry::staticHorizontalPositionForOutOfFlowPositioned(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const
{
ASSERT(layoutBox.isOutOfFlowPositioned());
// See staticVerticalPositionForOutOfFlowPositioned for the definition of the static position.
@@ -295,7 +295,7 @@
return std::min(std::max(intrinsicWidthConstraints.minimum, availableWidth), intrinsicWidthConstraints.maximum);
}
-VerticalGeometry FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues) const
+VerticalGeometry FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const
{
ASSERT(layoutBox.isOutOfFlowPositioned() && !layoutBox.replaced());
ASSERT(usedVerticalValues.constraints.height);
@@ -414,7 +414,7 @@
return { *top, *bottom, { *height, usedVerticalMargin } };
}
-HorizontalGeometry FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues)
+HorizontalGeometry FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues)
{
ASSERT(layoutBox.isOutOfFlowPositioned() && !layoutBox.replaced());
@@ -557,7 +557,7 @@
return { *left, *right, { *width, usedHorizontalMargin, computedHorizontalMargin } };
}
-VerticalGeometry FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues) const
+VerticalGeometry FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const
{
ASSERT(layoutBox.isOutOfFlowPositioned() && layoutBox.replaced());
ASSERT(usedVerticalValues.constraints.height);
@@ -639,7 +639,7 @@
return { *top, *bottom, { height, { *usedMarginBefore, *usedMarginAfter } } };
}
-HorizontalGeometry FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues) const
+HorizontalGeometry FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const
{
ASSERT(layoutBox.isOutOfFlowPositioned() && layoutBox.replaced());
@@ -743,7 +743,7 @@
return { *left, *right, { width, { *usedMarginStart, *usedMarginEnd }, computedHorizontalMargin } };
}
-ContentHeightAndMargin FormattingContext::Geometry::complicatedCases(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues) const
+ContentHeightAndMargin FormattingContext::Geometry::complicatedCases(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const
{
ASSERT(!layoutBox.replaced());
// TODO: Use complicated-case for document renderer for now (see BlockFormattingContext::Geometry::inFlowHeightAndMargin).
@@ -774,7 +774,7 @@
return ContentHeightAndMargin { *height, usedVerticalMargin };
}
-ContentWidthAndMargin FormattingContext::Geometry::floatingNonReplacedWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues)
+ContentWidthAndMargin FormattingContext::Geometry::floatingNonReplacedWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues)
{
ASSERT(layoutBox.isFloatingPositioned() && !layoutBox.replaced());
@@ -796,7 +796,7 @@
return ContentWidthAndMargin { *width, usedHorizontallMargin, computedHorizontalMargin };
}
-ContentHeightAndMargin FormattingContext::Geometry::floatingReplacedHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues) const
+ContentHeightAndMargin FormattingContext::Geometry::floatingReplacedHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const
{
ASSERT(layoutBox.isFloatingPositioned() && layoutBox.replaced());
@@ -806,7 +806,7 @@
return inlineReplacedHeightAndMargin(layoutBox, usedHorizontalValues, usedVerticalValues);
}
-ContentWidthAndMargin FormattingContext::Geometry::floatingReplacedWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues) const
+ContentWidthAndMargin FormattingContext::Geometry::floatingReplacedWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const
{
ASSERT(layoutBox.isFloatingPositioned() && layoutBox.replaced());
@@ -817,11 +817,11 @@
auto computedHorizontalMargin = Geometry::computedHorizontalMargin(layoutBox, usedHorizontalValues);
LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> floating replaced -> redirected to inline replaced");
- usedHorizontalValues.margin = UsedHorizontalMargin { computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) };
- return inlineReplacedWidthAndMargin(layoutBox, usedHorizontalValues);
+ auto usedMargin = UsedHorizontalMargin { computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) };
+ return inlineReplacedWidthAndMargin(layoutBox, UsedHorizontalValues { usedHorizontalValues.constraints, usedHorizontalValues.width, usedMargin });
}
-VerticalGeometry FormattingContext::Geometry::outOfFlowVerticalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues) const
+VerticalGeometry FormattingContext::Geometry::outOfFlowVerticalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const
{
ASSERT(layoutBox.isOutOfFlowPositioned());
@@ -830,7 +830,7 @@
return outOfFlowReplacedVerticalGeometry(layoutBox, usedHorizontalValues, usedVerticalValues);
}
-HorizontalGeometry FormattingContext::Geometry::outOfFlowHorizontalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues)
+HorizontalGeometry FormattingContext::Geometry::outOfFlowHorizontalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues)
{
ASSERT(layoutBox.isOutOfFlowPositioned());
@@ -839,7 +839,7 @@
return outOfFlowReplacedHorizontalGeometry(layoutBox, usedHorizontalValues, usedVerticalValues);
}
-ContentHeightAndMargin FormattingContext::Geometry::floatingHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues) const
+ContentHeightAndMargin FormattingContext::Geometry::floatingHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const
{
ASSERT(layoutBox.isFloatingPositioned());
@@ -848,16 +848,16 @@
return floatingReplacedHeightAndMargin(layoutBox, usedHorizontalValues, usedVerticalValues);
}
-ContentWidthAndMargin FormattingContext::Geometry::floatingWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedValues)
+ContentWidthAndMargin FormattingContext::Geometry::floatingWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues)
{
ASSERT(layoutBox.isFloatingPositioned());
if (!layoutBox.replaced())
- return floatingNonReplacedWidthAndMargin(layoutBox, usedValues);
- return floatingReplacedWidthAndMargin(layoutBox, usedValues);
+ return floatingNonReplacedWidthAndMargin(layoutBox, usedHorizontalValues);
+ return floatingReplacedWidthAndMargin(layoutBox, usedHorizontalValues);
}
-ContentHeightAndMargin FormattingContext::Geometry::inlineReplacedHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues) const
+ContentHeightAndMargin FormattingContext::Geometry::inlineReplacedHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const
{
ASSERT((layoutBox.isOutOfFlowPositioned() || layoutBox.isFloatingPositioned() || layoutBox.isInFlow()) && layoutBox.replaced());
@@ -903,7 +903,7 @@
return { *height, usedVerticalMargin };
}
-ContentWidthAndMargin FormattingContext::Geometry::inlineReplacedWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, Optional<UsedVerticalValues> usedVerticalValues) const
+ContentWidthAndMargin FormattingContext::Geometry::inlineReplacedWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, Optional<UsedVerticalValues> usedVerticalValues) const
{
ASSERT((layoutBox.isOutOfFlowPositioned() || layoutBox.isFloatingPositioned() || layoutBox.isInFlow()) && layoutBox.replaced());
@@ -972,7 +972,7 @@
return { *width, { usedMarginStart(), usedMarginEnd() }, computedHorizontalMargin };
}
-LayoutSize FormattingContext::Geometry::inFlowPositionedPositionOffset(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues) const
+LayoutSize FormattingContext::Geometry::inFlowPositionedPositionOffset(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const
{
ASSERT(layoutBox.isInFlowPositioned());
@@ -1057,7 +1057,7 @@
};
}
-Optional<Edges> FormattingContext::Geometry::computedPadding(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues) const
+Optional<Edges> FormattingContext::Geometry::computedPadding(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const
{
if (!layoutBox.isPaddingApplicable())
return WTF::nullopt;
@@ -1071,7 +1071,7 @@
};
}
-ComputedHorizontalMargin FormattingContext::Geometry::computedHorizontalMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues) const
+ComputedHorizontalMargin FormattingContext::Geometry::computedHorizontalMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const
{
auto& style = layoutBox.style();
auto containingBlockWidth = usedHorizontalValues.constraints.width;
@@ -1078,7 +1078,7 @@
return { computedValueIfNotAuto(style.marginStart(), containingBlockWidth), computedValueIfNotAuto(style.marginEnd(), containingBlockWidth) };
}
-ComputedVerticalMargin FormattingContext::Geometry::computedVerticalMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues) const
+ComputedVerticalMargin FormattingContext::Geometry::computedVerticalMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const
{
auto& style = layoutBox.style();
auto containingBlockWidth = usedHorizontalValues.constraints.width;
Modified: trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.h (252861 => 252862)
--- trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.h 2019-11-25 16:13:18 UTC (rev 252861)
+++ trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.h 2019-11-25 16:19:42 UTC (rev 252862)
@@ -74,12 +74,12 @@
// This class implements positioning and sizing for boxes participating in a block formatting context.
class Geometry : public FormattingContext::Geometry {
public:
- ContentHeightAndMargin inFlowHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues);
- ContentWidthAndMargin inFlowWidthAndMargin(const Box&, UsedHorizontalValues);
+ ContentHeightAndMargin inFlowHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&);
+ ContentWidthAndMargin inFlowWidthAndMargin(const Box&, const UsedHorizontalValues&);
- Point staticPosition(const Box&, UsedHorizontalValues, UsedVerticalValues) const;
- LayoutUnit staticVerticalPosition(const Box&, UsedVerticalValues) const;
- LayoutUnit staticHorizontalPosition(const Box&, UsedHorizontalValues) const;
+ Point staticPosition(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const;
+ LayoutUnit staticVerticalPosition(const Box&, const UsedVerticalValues&) const;
+ LayoutUnit staticHorizontalPosition(const Box&, const UsedHorizontalValues&) const;
IntrinsicWidthConstraints intrinsicWidthConstraints(const Box&);
@@ -87,9 +87,9 @@
friend class BlockFormattingContext;
Geometry(const BlockFormattingContext&);
- ContentHeightAndMargin inFlowNonReplacedHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues);
- ContentWidthAndMargin inFlowNonReplacedWidthAndMargin(const Box&, UsedHorizontalValues) const;
- ContentWidthAndMargin inFlowReplacedWidthAndMargin(const Box&, UsedHorizontalValues) const;
+ ContentHeightAndMargin inFlowNonReplacedHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&);
+ ContentWidthAndMargin inFlowNonReplacedWidthAndMargin(const Box&, const UsedHorizontalValues&) const;
+ ContentWidthAndMargin inFlowReplacedWidthAndMargin(const Box&, const UsedHorizontalValues&) const;
Point staticPositionForOutOfFlowPositioned(const Box&) const;
const BlockFormattingContext& formattingContext() const { return downcast<BlockFormattingContext>(FormattingContext::Geometry::formattingContext()); }
Modified: trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp (252861 => 252862)
--- trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp 2019-11-25 16:13:18 UTC (rev 252861)
+++ trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp 2019-11-25 16:19:42 UTC (rev 252862)
@@ -37,12 +37,12 @@
namespace WebCore {
namespace Layout {
-ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedValues)
+ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues)
{
ASSERT(layoutBox.isInFlow() && !layoutBox.replaced());
ASSERT(layoutBox.isOverflowVisible());
- auto compute = [&]() -> ContentHeightAndMargin {
+ auto compute = [&](const auto& usedVerticalValues) -> ContentHeightAndMargin {
// 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible'
//
@@ -61,7 +61,7 @@
auto computedVerticalMargin = Geometry::computedVerticalMargin(layoutBox, usedHorizontalValues);
auto nonCollapsedMargin = UsedVerticalMargin::NonCollapsedValues { computedVerticalMargin.before.valueOr(0), computedVerticalMargin.after.valueOr(0) };
auto borderAndPaddingTop = boxGeometry.borderTop() + boxGeometry.paddingTop().valueOr(0);
- auto height = usedValues.height ? usedValues.height.value() : computedContentHeight(layoutBox);
+ auto height = usedVerticalValues.height ? usedVerticalValues.height.value() : computedContentHeight(layoutBox);
if (height)
return { *height, nonCollapsedMargin };
@@ -101,15 +101,13 @@
};
// 10.6.7 'Auto' heights for block formatting context roots
- auto isAutoHeight = !usedValues.height && !computedContentHeight(layoutBox);
+ auto isAutoHeight = !usedVerticalValues.height && !computedContentHeight(layoutBox);
if (isAutoHeight && layoutBox.establishesBlockFormattingContext())
- usedValues.height = contentHeightForFormattingContextRoot(layoutBox);
- auto contentHeightAndMargin = compute();
- LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> inflow non-replaced -> height(" << contentHeightAndMargin.contentHeight << "px) margin(" << contentHeightAndMargin.nonCollapsedMargin.before << "px, " << contentHeightAndMargin.nonCollapsedMargin.after << "px) -> layoutBox(" << &layoutBox << ")");
- return contentHeightAndMargin;
+ return compute( UsedVerticalValues { usedVerticalValues.constraints, contentHeightForFormattingContextRoot(layoutBox) });
+ return compute(usedVerticalValues);
}
-ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues) const
+ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const
{
ASSERT(layoutBox.isInFlow());
@@ -199,7 +197,7 @@
return contentWidthAndMargin;
}
-ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedValues) const
+ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const
{
ASSERT(layoutBox.isInFlow() && layoutBox.replaced());
@@ -209,15 +207,15 @@
// 2. Then the rules for non-replaced block-level elements are applied to determine the margins.
// #1
- usedValues.width = inlineReplacedWidthAndMargin(layoutBox, usedValues).contentWidth;
+ auto usedWidth = inlineReplacedWidthAndMargin(layoutBox, usedHorizontalValues).contentWidth;
// #2
- auto nonReplacedWidthAndMargin = inFlowNonReplacedWidthAndMargin(layoutBox, usedValues);
+ auto nonReplacedWidthAndMargin = inFlowNonReplacedWidthAndMargin(layoutBox, UsedHorizontalValues { usedHorizontalValues.constraints, usedWidth, usedHorizontalValues.margin });
- LOG_WITH_STREAM(FormattingContextLayout, stream << "[Width][Margin] -> inflow replaced -> width(" << *usedValues.width << "px) margin(" << nonReplacedWidthAndMargin.usedMargin.start << "px, " << nonReplacedWidthAndMargin.usedMargin.end << "px) -> layoutBox(" << &layoutBox << ")");
- return { *usedValues.width, nonReplacedWidthAndMargin.usedMargin, nonReplacedWidthAndMargin.computedMargin };
+ LOG_WITH_STREAM(FormattingContextLayout, stream << "[Width][Margin] -> inflow replaced -> width(" << usedWidth << "px) margin(" << nonReplacedWidthAndMargin.usedMargin.start << "px, " << nonReplacedWidthAndMargin.usedMargin.end << "px) -> layoutBox(" << &layoutBox << ")");
+ return { usedWidth, nonReplacedWidthAndMargin.usedMargin, nonReplacedWidthAndMargin.computedMargin };
}
-LayoutUnit BlockFormattingContext::Geometry::staticVerticalPosition(const Box& layoutBox, UsedVerticalValues usedVerticalValues) const
+LayoutUnit BlockFormattingContext::Geometry::staticVerticalPosition(const Box& layoutBox, const UsedVerticalValues& usedVerticalValues) const
{
// https://www.w3.org/TR/CSS22/visuren.html#block-formatting
// In a block formatting context, boxes are laid out one after the other, vertically, beginning at the top of a containing block.
@@ -230,7 +228,7 @@
return usedVerticalValues.constraints.contentBoxTop;
}
-LayoutUnit BlockFormattingContext::Geometry::staticHorizontalPosition(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues) const
+LayoutUnit BlockFormattingContext::Geometry::staticHorizontalPosition(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const
{
// https://www.w3.org/TR/CSS22/visuren.html#block-formatting
// In a block formatting context, each box's left outer edge touches the left edge of the containing block (for right-to-left formatting, right edges touch).
@@ -237,12 +235,12 @@
return usedHorizontalValues.constraints.contentBoxLeft + formattingContext().geometryForBox(layoutBox).marginStart();
}
-Point BlockFormattingContext::Geometry::staticPosition(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues) const
+Point BlockFormattingContext::Geometry::staticPosition(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const
{
return { staticHorizontalPosition(layoutBox, usedHorizontalValues), staticVerticalPosition(layoutBox, usedVerticalValues) };
}
-ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues)
+ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues)
{
ASSERT(layoutBox.isInFlow());
@@ -274,17 +272,17 @@
return contentHeightAndMargin;
}
-ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues)
+ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues)
{
ASSERT(layoutBox.isInFlow());
if (!layoutBox.replaced()) {
- if (layoutBox.establishesTableFormattingContext()) {
- // This is a special table "fit-content size" behavior handling. Not in the spec though.
- // Table returns its final width as min/max. Use this final width value to computed horizontal margins etc.
- usedHorizontalValues.width = usedHorizontalValues.width ? usedHorizontalValues.width : shrinkToFitWidth(layoutBox, usedHorizontalValues.constraints.width);
- }
- return inFlowNonReplacedWidthAndMargin(layoutBox, usedHorizontalValues);
+ if (!layoutBox.establishesTableFormattingContext())
+ return inFlowNonReplacedWidthAndMargin(layoutBox, usedHorizontalValues);
+ // This is a special table "fit-content size" behavior handling. Not in the spec though.
+ // Table returns its final width as min/max. Use this final width value to computed horizontal margins etc.
+ auto usedWidth = usedHorizontalValues.width ? usedHorizontalValues.width : shrinkToFitWidth(layoutBox, usedHorizontalValues.constraints.width);
+ return inFlowNonReplacedWidthAndMargin(layoutBox, UsedHorizontalValues { usedHorizontalValues.constraints, usedWidth, usedHorizontalValues.margin });
}
return inFlowReplacedWidthAndMargin(layoutBox, usedHorizontalValues);
}
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp (252861 => 252862)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp 2019-11-25 16:13:18 UTC (rev 252861)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp 2019-11-25 16:19:42 UTC (rev 252862)
@@ -89,7 +89,7 @@
LOG_WITH_STREAM(FormattingContextLayout, stream << "[End] -> inline formatting context -> formatting root(" << &root() << ")");
}
-void InlineFormattingContext::lineLayout(UsedHorizontalValues usedHorizontalValues)
+void InlineFormattingContext::lineLayout(const UsedHorizontalValues& usedHorizontalValues)
{
auto& inlineItems = formattingState().inlineItems();
auto lineLogicalTop = geometryForBox(root()).contentBoxTop();
@@ -129,7 +129,7 @@
}
}
-void InlineFormattingContext::layoutFormattingContextRoot(const Box& formattingContextRoot, InvalidationState& invalidationState, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues)
+void InlineFormattingContext::layoutFormattingContextRoot(const Box& formattingContextRoot, InvalidationState& invalidationState, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues)
{
ASSERT(formattingContextRoot.isFloatingPositioned() || formattingContextRoot.isInlineBlockBox());
@@ -148,7 +148,7 @@
computeHeightAndMargin(formattingContextRoot, usedHorizontalValues, usedVerticalValues);
}
-void InlineFormattingContext::computeHorizontalAndVerticalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues)
+void InlineFormattingContext::computeHorizontalAndVerticalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues)
{
if (is<Container>(layoutBox)) {
// Inline containers (<span>) can't get sized/positioned yet. At this point we can only compute their margins, borders and paddings.
@@ -228,7 +228,7 @@
return constraints;
}
-LayoutUnit InlineFormattingContext::computedIntrinsicWidthForConstraint(UsedHorizontalValues usedHorizontalValues) const
+LayoutUnit InlineFormattingContext::computedIntrinsicWidthForConstraint(const UsedHorizontalValues& usedHorizontalValues) const
{
auto& inlineItems = formattingState().inlineItems();
LayoutUnit maximumLineWidth;
@@ -249,7 +249,7 @@
return maximumLineWidth;
}
-void InlineFormattingContext::computeIntrinsicWidthForFormattingRoot(const Box& formattingRoot, UsedHorizontalValues usedHorizontalValues)
+void InlineFormattingContext::computeIntrinsicWidthForFormattingRoot(const Box& formattingRoot, const UsedHorizontalValues& usedHorizontalValues)
{
ASSERT(formattingRoot.establishesFormattingContext());
@@ -266,7 +266,7 @@
formattingState().setIntrinsicWidthConstraintsForBox(formattingRoot, constraints);
}
-void InlineFormattingContext::computeHorizontalMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues)
+void InlineFormattingContext::computeHorizontalMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues)
{
auto computedHorizontalMargin = geometry().computedHorizontalMargin(layoutBox, usedHorizontalValues);
auto& displayBox = formattingState().displayBox(layoutBox);
@@ -274,7 +274,7 @@
displayBox.setHorizontalMargin({ computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) });
}
-void InlineFormattingContext::computeWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues)
+void InlineFormattingContext::computeWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues)
{
ContentWidthAndMargin contentWidthAndMargin;
if (layoutBox.isFloatingPositioned())
@@ -292,7 +292,7 @@
displayBox.setHorizontalComputedMargin(contentWidthAndMargin.computedMargin);
}
-void InlineFormattingContext::computeHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues)
+void InlineFormattingContext::computeHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues)
{
ContentHeightAndMargin contentHeightAndMargin;
if (layoutBox.isFloatingPositioned())
@@ -309,7 +309,7 @@
displayBox.setVerticalMargin({ contentHeightAndMargin.nonCollapsedMargin, { } });
}
-void InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues)
+void InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues)
{
ASSERT(!layoutBox.isContainer());
ASSERT(!layoutBox.establishesFormattingContext());
@@ -371,7 +371,7 @@
}
}
-Line::Constraints InlineFormattingContext::constraintsForLine(UsedHorizontalValues usedHorizontalValues, const LayoutUnit lineLogicalTop)
+Line::Constraints InlineFormattingContext::constraintsForLine(const UsedHorizontalValues& usedHorizontalValues, const LayoutUnit lineLogicalTop)
{
auto lineLogicalLeft = geometryForBox(root()).contentBoxLeft();
auto availableWidth = usedHorizontalValues.constraints.width;
@@ -407,7 +407,7 @@
return Line::Constraints { { lineLogicalLeft, lineLogicalTop }, availableWidth, lineIsConstrainedByFloat, quirks().lineHeightConstraints(root()) };
}
-void InlineFormattingContext::setDisplayBoxesForLine(const LineLayout::LineContent& lineContent, UsedHorizontalValues usedHorizontalValues)
+void InlineFormattingContext::setDisplayBoxesForLine(const LineLayout::LineContent& lineContent, const UsedHorizontalValues& usedHorizontalValues)
{
auto& formattingState = this->formattingState();
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h (252861 => 252862)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h 2019-11-25 16:13:18 UTC (rev 252861)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h 2019-11-25 16:19:42 UTC (rev 252862)
@@ -64,8 +64,8 @@
class Geometry : public FormattingContext::Geometry {
public:
- ContentHeightAndMargin inlineBlockHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues) const;
- ContentWidthAndMargin inlineBlockWidthAndMargin(const Box&, UsedHorizontalValues);
+ ContentHeightAndMargin inlineBlockHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const;
+ ContentWidthAndMargin inlineBlockWidthAndMargin(const Box&, const UsedHorizontalValues&);
private:
friend class InlineFormattingContext;
@@ -76,21 +76,21 @@
};
InlineFormattingContext::Geometry geometry() const { return Geometry(*this); }
- void lineLayout(UsedHorizontalValues);
- void layoutFormattingContextRoot(const Box&, InvalidationState&, UsedHorizontalValues, UsedVerticalValues);
- void computeHorizontalAndVerticalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues);
+ void lineLayout(const UsedHorizontalValues&);
+ void layoutFormattingContextRoot(const Box&, InvalidationState&, const UsedHorizontalValues&, const UsedVerticalValues&);
+ void computeHorizontalAndVerticalGeometry(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&);
- void computeIntrinsicWidthForFormattingRoot(const Box&, UsedHorizontalValues);
- void computeWidthAndHeightForReplacedInlineBox(const Box&, UsedHorizontalValues, UsedVerticalValues);
- LayoutUnit computedIntrinsicWidthForConstraint(UsedHorizontalValues) const;
+ void computeIntrinsicWidthForFormattingRoot(const Box&, const UsedHorizontalValues&);
+ void computeWidthAndHeightForReplacedInlineBox(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&);
+ LayoutUnit computedIntrinsicWidthForConstraint(const UsedHorizontalValues&) const;
- void computeHorizontalMargin(const Box&, UsedHorizontalValues);
- void computeHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues);
- void computeWidthAndMargin(const Box&, UsedHorizontalValues);
+ void computeHorizontalMargin(const Box&, const UsedHorizontalValues&);
+ void computeHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&);
+ void computeWidthAndMargin(const Box&, const UsedHorizontalValues&);
void collectInlineContentIfNeeded();
- Line::Constraints constraintsForLine(UsedHorizontalValues, const LayoutUnit lineLogicalTop);
- void setDisplayBoxesForLine(const LineLayout::LineContent&, UsedHorizontalValues);
+ Line::Constraints constraintsForLine(const UsedHorizontalValues&, const LayoutUnit lineLogicalTop);
+ void setDisplayBoxesForLine(const LineLayout::LineContent&, const UsedHorizontalValues&);
void invalidateFormattingState(const InvalidationState&);
const InlineFormattingState& formattingState() const { return downcast<InlineFormattingState>(FormattingContext::formattingState()); }
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp (252861 => 252862)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp 2019-11-25 16:13:18 UTC (rev 252861)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp 2019-11-25 16:19:42 UTC (rev 252862)
@@ -35,7 +35,7 @@
namespace WebCore {
namespace Layout {
-ContentWidthAndMargin InlineFormattingContext::Geometry::inlineBlockWidthAndMargin(const Box& formattingContextRoot, UsedHorizontalValues usedHorizontalValues)
+ContentWidthAndMargin InlineFormattingContext::Geometry::inlineBlockWidthAndMargin(const Box& formattingContextRoot, const UsedHorizontalValues& usedHorizontalValues)
{
ASSERT(formattingContextRoot.isInFlow());
@@ -60,7 +60,7 @@
return ContentWidthAndMargin { *width, { computedHorizontalMargin.start.valueOr(0_lu), computedHorizontalMargin.end.valueOr(0_lu) }, computedHorizontalMargin };
}
-ContentHeightAndMargin InlineFormattingContext::Geometry::inlineBlockHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedVerticalValues) const
+ContentHeightAndMargin InlineFormattingContext::Geometry::inlineBlockHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const
{
ASSERT(layoutBox.isInFlow());