Diff
Modified: trunk/Source/WebCore/ChangeLog (254276 => 254277)
--- trunk/Source/WebCore/ChangeLog 2020-01-09 18:36:48 UTC (rev 254276)
+++ trunk/Source/WebCore/ChangeLog 2020-01-09 18:39:57 UTC (rev 254277)
@@ -1,5 +1,54 @@
2020-01-09 Zalan Bujtas <[email protected]>
+ [LFC] Rename UsedHorizontal(Vertical)Values to OverrideHorizontal(Vertical)values
+ https://bugs.webkit.org/show_bug.cgi?id=206008
+ <rdar://problem/58443375>
+
+ Reviewed by Antti Koivisto.
+
+ These structure are a mixture of specified and used values.
+ What these specified/used values mean in this context is that they override the default input
+ values for the "compute geometry" functions (e.g. computing the width of a floating box follows
+ the same set of steps as computing the width of an inline replaced box. So whenever we need to
+ compute the width of a floating box, we could just call the computeInlineReplacedWidth() function.
+ However their horizontal margin computations are different and since width and horizontal margins are being computed together,
+ we need to make sure that inlineReplacedWidthAndMargin() takes a set of pre-computed margin values
+ and uses them while computing the width value. Same applies to min/max-width/heigh computations.)
+
+ * layout/FormattingContext.h:
+ * layout/FormattingContextGeometry.cpp:
+ (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):
+ * layout/LayoutUnits.h:
+ * 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::inFlowHeightAndMargin):
+ (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin):
+ * layout/inlineformatting/InlineFormattingContext.cpp:
+ (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin):
+ (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin):
+ * layout/inlineformatting/InlineFormattingContext.h:
+ * layout/inlineformatting/InlineFormattingContextGeometry.cpp:
+ (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin):
+ (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin const):
+
+2020-01-09 Zalan Bujtas <[email protected]>
+
[LFC] Add missing HorizontalConstraints/VerticalConstraints
https://bugs.webkit.org/show_bug.cgi?id=205987
<rdar://problem/58432728>
Modified: trunk/Source/WebCore/layout/FormattingContext.h (254276 => 254277)
--- trunk/Source/WebCore/layout/FormattingContext.h 2020-01-09 18:36:48 UTC (rev 254276)
+++ trunk/Source/WebCore/layout/FormattingContext.h 2020-01-09 18:39:57 UTC (rev 254277)
@@ -54,8 +54,8 @@
struct HorizontalGeometry;
class InvalidationState;
class LayoutState;
-struct UsedHorizontalValues;
-struct UsedVerticalValues;
+struct OverrideHorizontalValues;
+struct OverrideVerticalValues;
struct VerticalGeometry;
class FormattingContext {
@@ -109,18 +109,18 @@
// This class implements generic positioning and sizing.
class Geometry {
public:
- VerticalGeometry outOfFlowVerticalGeometry(const Box&, const HorizontalConstraints&, const VerticalConstraints&, const UsedVerticalValues&) const;
- HorizontalGeometry outOfFlowHorizontalGeometry(const Box&, const HorizontalConstraints&, const UsedHorizontalValues&);
+ VerticalGeometry outOfFlowVerticalGeometry(const Box&, const HorizontalConstraints&, const VerticalConstraints&, const OverrideVerticalValues&) const;
+ HorizontalGeometry outOfFlowHorizontalGeometry(const Box&, const HorizontalConstraints&, const OverrideHorizontalValues&);
- ContentHeightAndMargin floatingHeightAndMargin(const Box&, const HorizontalConstraints&, const UsedVerticalValues&) const;
- ContentWidthAndMargin floatingWidthAndMargin(const Box&, const HorizontalConstraints&, const UsedHorizontalValues&);
+ ContentHeightAndMargin floatingHeightAndMargin(const Box&, const HorizontalConstraints&, const OverrideVerticalValues&) const;
+ ContentWidthAndMargin floatingWidthAndMargin(const Box&, const HorizontalConstraints&, const OverrideHorizontalValues&);
- ContentHeightAndMargin inlineReplacedHeightAndMargin(const Box&, const HorizontalConstraints&, Optional<VerticalConstraints>, const UsedVerticalValues&) const;
- ContentWidthAndMargin inlineReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const UsedHorizontalValues&) const;
+ ContentHeightAndMargin inlineReplacedHeightAndMargin(const Box&, const HorizontalConstraints&, Optional<VerticalConstraints>, const OverrideVerticalValues&) const;
+ ContentWidthAndMargin inlineReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const OverrideHorizontalValues&) const;
LayoutSize inFlowPositionedPositionOffset(const Box&, const HorizontalConstraints&) const;
- ContentHeightAndMargin complicatedCases(const Box&, const HorizontalConstraints&, const UsedVerticalValues&) const;
+ ContentHeightAndMargin complicatedCases(const Box&, const HorizontalConstraints&, const OverrideVerticalValues&) const;
LayoutUnit shrinkToFitWidth(const Box&, LayoutUnit availableWidth);
Edges computedBorder(const Box&) const;
@@ -161,16 +161,16 @@
const FormattingContext& formattingContext() const { return m_formattingContext; }
private:
- VerticalGeometry outOfFlowReplacedVerticalGeometry(const Box&, const HorizontalConstraints&, const VerticalConstraints&, const UsedVerticalValues&) const;
- HorizontalGeometry outOfFlowReplacedHorizontalGeometry(const Box&, const HorizontalConstraints&, const UsedHorizontalValues&) const;
+ VerticalGeometry outOfFlowReplacedVerticalGeometry(const Box&, const HorizontalConstraints&, const VerticalConstraints&, const OverrideVerticalValues&) const;
+ HorizontalGeometry outOfFlowReplacedHorizontalGeometry(const Box&, const HorizontalConstraints&, const OverrideHorizontalValues&) const;
- VerticalGeometry outOfFlowNonReplacedVerticalGeometry(const Box&, const HorizontalConstraints&, const VerticalConstraints&, const UsedVerticalValues&) const;
- HorizontalGeometry outOfFlowNonReplacedHorizontalGeometry(const Box&, const HorizontalConstraints&, const UsedHorizontalValues&);
+ VerticalGeometry outOfFlowNonReplacedVerticalGeometry(const Box&, const HorizontalConstraints&, const VerticalConstraints&, const OverrideVerticalValues&) const;
+ HorizontalGeometry outOfFlowNonReplacedHorizontalGeometry(const Box&, const HorizontalConstraints&, const OverrideHorizontalValues&);
- ContentHeightAndMargin floatingReplacedHeightAndMargin(const Box&, const HorizontalConstraints&, const UsedVerticalValues&) const;
- ContentWidthAndMargin floatingReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const UsedHorizontalValues&) const;
+ ContentHeightAndMargin floatingReplacedHeightAndMargin(const Box&, const HorizontalConstraints&, const OverrideVerticalValues&) const;
+ ContentWidthAndMargin floatingReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const OverrideHorizontalValues&) const;
- ContentWidthAndMargin floatingNonReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const UsedHorizontalValues&);
+ ContentWidthAndMargin floatingNonReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const OverrideHorizontalValues&);
LayoutUnit staticVerticalPositionForOutOfFlowPositioned(const Box&, const VerticalConstraints&) const;
LayoutUnit staticHorizontalPositionForOutOfFlowPositioned(const Box&, const HorizontalConstraints&) const;
Modified: trunk/Source/WebCore/layout/FormattingContextGeometry.cpp (254276 => 254277)
--- trunk/Source/WebCore/layout/FormattingContextGeometry.cpp 2020-01-09 18:36:48 UTC (rev 254276)
+++ trunk/Source/WebCore/layout/FormattingContextGeometry.cpp 2020-01-09 18:39:57 UTC (rev 254277)
@@ -295,7 +295,7 @@
return std::min(std::max(intrinsicWidthConstraints.minimum, availableWidth), intrinsicWidthConstraints.maximum);
}
-VerticalGeometry FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const UsedVerticalValues& usedVerticalValues) const
+VerticalGeometry FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const OverrideVerticalValues& overrideVerticalValues) const
{
ASSERT(layoutBox.isOutOfFlowPositioned() && !layoutBox.replaced());
ASSERT(verticalConstraints.logicalHeight);
@@ -332,7 +332,7 @@
auto top = computedValueIfNotAuto(style.logicalTop(), containingBlockWidth);
auto bottom = computedValueIfNotAuto(style.logicalBottom(), containingBlockWidth);
- auto height = usedVerticalValues.height ? usedVerticalValues.height.value() : computedContentHeight(layoutBox, containingBlockHeight);
+ auto height = overrideVerticalValues.height ? overrideVerticalValues.height.value() : computedContentHeight(layoutBox, containingBlockHeight);
auto computedVerticalMargin = Geometry::computedVerticalMargin(layoutBox, horizontalConstraints);
UsedVerticalMargin::NonCollapsedValues usedVerticalMargin;
auto paddingTop = boxGeometry.paddingTop().valueOr(0);
@@ -414,7 +414,7 @@
return { *top, *bottom, { *height, usedVerticalMargin } };
}
-HorizontalGeometry FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedHorizontalValues& usedHorizontalValues)
+HorizontalGeometry FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideHorizontalValues& overrideHorizontalValues)
{
ASSERT(layoutBox.isOutOfFlowPositioned() && !layoutBox.replaced());
@@ -452,7 +452,7 @@
auto left = computedValueIfNotAuto(style.logicalLeft(), containingBlockWidth);
auto right = computedValueIfNotAuto(style.logicalRight(), containingBlockWidth);
- auto width = usedHorizontalValues.width ? usedHorizontalValues.width : computedContentWidth(layoutBox, containingBlockWidth);
+ auto width = overrideHorizontalValues.width ? overrideHorizontalValues.width : computedContentWidth(layoutBox, containingBlockWidth);
auto computedHorizontalMargin = Geometry::computedHorizontalMargin(layoutBox, horizontalConstraints);
UsedHorizontalMargin usedHorizontalMargin;
auto paddingLeft = boxGeometry.paddingLeft().valueOr(0);
@@ -557,7 +557,7 @@
return { *left, *right, { *width, usedHorizontalMargin, computedHorizontalMargin } };
}
-VerticalGeometry FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const UsedVerticalValues& usedVerticalValues) const
+VerticalGeometry FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const OverrideVerticalValues& overrideVerticalValues) const
{
ASSERT(layoutBox.isOutOfFlowPositioned() && layoutBox.replaced());
ASSERT(verticalConstraints.logicalHeight);
@@ -580,7 +580,7 @@
auto top = computedValueIfNotAuto(style.logicalTop(), containingBlockWidth);
auto bottom = computedValueIfNotAuto(style.logicalBottom(), containingBlockWidth);
- auto height = inlineReplacedHeightAndMargin(layoutBox, horizontalConstraints, verticalConstraints, usedVerticalValues).contentHeight;
+ auto height = inlineReplacedHeightAndMargin(layoutBox, horizontalConstraints, verticalConstraints, overrideVerticalValues).contentHeight;
auto computedVerticalMargin = Geometry::computedVerticalMargin(layoutBox, horizontalConstraints);
Optional<LayoutUnit> usedMarginBefore = computedVerticalMargin.before;
Optional<LayoutUnit> usedMarginAfter = computedVerticalMargin.after;
@@ -639,7 +639,7 @@
return { *top, *bottom, { height, { *usedMarginBefore, *usedMarginAfter } } };
}
-HorizontalGeometry FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedHorizontalValues& usedHorizontalValues) const
+HorizontalGeometry FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideHorizontalValues& overrideHorizontalValues) const
{
ASSERT(layoutBox.isOutOfFlowPositioned() && layoutBox.replaced());
@@ -668,7 +668,7 @@
auto computedHorizontalMargin = Geometry::computedHorizontalMargin(layoutBox, horizontalConstraints);
Optional<LayoutUnit> usedMarginStart = computedHorizontalMargin.start;
Optional<LayoutUnit> usedMarginEnd = computedHorizontalMargin.end;
- auto width = inlineReplacedWidthAndMargin(layoutBox, horizontalConstraints, usedHorizontalValues).contentWidth;
+ auto width = inlineReplacedWidthAndMargin(layoutBox, horizontalConstraints, overrideHorizontalValues).contentWidth;
auto paddingLeft = boxGeometry.paddingLeft().valueOr(0);
auto paddingRight = boxGeometry.paddingRight().valueOr(0);
auto borderLeft = boxGeometry.borderLeft();
@@ -743,7 +743,7 @@
return { *left, *right, { width, { *usedMarginStart, *usedMarginEnd }, computedHorizontalMargin } };
}
-ContentHeightAndMargin FormattingContext::Geometry::complicatedCases(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedVerticalValues& usedVerticalValues) const
+ContentHeightAndMargin FormattingContext::Geometry::complicatedCases(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideVerticalValues& overrideVerticalValues) const
{
ASSERT(!layoutBox.replaced());
// TODO: Use complicated-case for document renderer for now (see BlockFormattingContext::Geometry::inFlowHeightAndMargin).
@@ -758,7 +758,7 @@
// 1. If 'margin-top', or 'margin-bottom' are 'auto', their used value is 0.
// 2. If 'height' is 'auto', the height depends on the element's descendants per 10.6.7.
- auto height = usedVerticalValues.height ? usedVerticalValues.height.value() : computedContentHeight(layoutBox);
+ auto height = overrideVerticalValues.height ? overrideVerticalValues.height.value() : computedContentHeight(layoutBox);
auto computedVerticalMargin = Geometry::computedVerticalMargin(layoutBox, horizontalConstraints);
// #1
auto usedVerticalMargin = UsedVerticalMargin::NonCollapsedValues { computedVerticalMargin.before.valueOr(0), computedVerticalMargin.after.valueOr(0) };
@@ -774,7 +774,7 @@
return ContentHeightAndMargin { *height, usedVerticalMargin };
}
-ContentWidthAndMargin FormattingContext::Geometry::floatingNonReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedHorizontalValues& usedHorizontalValues)
+ContentWidthAndMargin FormattingContext::Geometry::floatingNonReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideHorizontalValues& overrideHorizontalValues)
{
ASSERT(layoutBox.isFloatingPositioned() && !layoutBox.replaced());
@@ -788,7 +788,7 @@
// #1
auto usedHorizontallMargin = UsedHorizontalMargin { computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) };
// #2
- auto width = usedHorizontalValues.width ? usedHorizontalValues.width : computedContentWidth(layoutBox, horizontalConstraints.logicalWidth);
+ auto width = overrideHorizontalValues.width ? overrideHorizontalValues.width : computedContentWidth(layoutBox, horizontalConstraints.logicalWidth);
if (!width)
width = shrinkToFitWidth(layoutBox, horizontalConstraints.logicalWidth);
@@ -796,7 +796,7 @@
return ContentWidthAndMargin { *width, usedHorizontallMargin, computedHorizontalMargin };
}
-ContentHeightAndMargin FormattingContext::Geometry::floatingReplacedHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedVerticalValues& usedVerticalValues) const
+ContentHeightAndMargin FormattingContext::Geometry::floatingReplacedHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideVerticalValues& overrideVerticalValues) const
{
ASSERT(layoutBox.isFloatingPositioned() && layoutBox.replaced());
@@ -803,10 +803,10 @@
// 10.6.2 Inline replaced elements, block-level replaced elements in normal flow, 'inline-block'
// replaced elements in normal flow and floating replaced elements
LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> floating replaced -> redirected to inline replaced");
- return inlineReplacedHeightAndMargin(layoutBox, horizontalConstraints, { }, usedVerticalValues);
+ return inlineReplacedHeightAndMargin(layoutBox, horizontalConstraints, { }, overrideVerticalValues);
}
-ContentWidthAndMargin FormattingContext::Geometry::floatingReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedHorizontalValues& usedHorizontalValues) const
+ContentWidthAndMargin FormattingContext::Geometry::floatingReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideHorizontalValues& overrideHorizontalValues) const
{
ASSERT(layoutBox.isFloatingPositioned() && layoutBox.replaced());
@@ -818,46 +818,46 @@
LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> floating replaced -> redirected to inline replaced");
auto usedMargin = UsedHorizontalMargin { computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) };
- return inlineReplacedWidthAndMargin(layoutBox, horizontalConstraints, { usedHorizontalValues.width, usedMargin });
+ return inlineReplacedWidthAndMargin(layoutBox, horizontalConstraints, { overrideHorizontalValues.width, usedMargin });
}
-VerticalGeometry FormattingContext::Geometry::outOfFlowVerticalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const UsedVerticalValues& usedVerticalValues) const
+VerticalGeometry FormattingContext::Geometry::outOfFlowVerticalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const OverrideVerticalValues& overrideVerticalValues) const
{
ASSERT(layoutBox.isOutOfFlowPositioned());
if (!layoutBox.replaced())
- return outOfFlowNonReplacedVerticalGeometry(layoutBox, horizontalConstraints, verticalConstraints, usedVerticalValues);
- return outOfFlowReplacedVerticalGeometry(layoutBox, horizontalConstraints, verticalConstraints, usedVerticalValues);
+ return outOfFlowNonReplacedVerticalGeometry(layoutBox, horizontalConstraints, verticalConstraints, overrideVerticalValues);
+ return outOfFlowReplacedVerticalGeometry(layoutBox, horizontalConstraints, verticalConstraints, overrideVerticalValues);
}
-HorizontalGeometry FormattingContext::Geometry::outOfFlowHorizontalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedHorizontalValues& usedHorizontalValues)
+HorizontalGeometry FormattingContext::Geometry::outOfFlowHorizontalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideHorizontalValues& overrideHorizontalValues)
{
ASSERT(layoutBox.isOutOfFlowPositioned());
if (!layoutBox.replaced())
- return outOfFlowNonReplacedHorizontalGeometry(layoutBox, horizontalConstraints, usedHorizontalValues);
- return outOfFlowReplacedHorizontalGeometry(layoutBox, horizontalConstraints, usedHorizontalValues);
+ return outOfFlowNonReplacedHorizontalGeometry(layoutBox, horizontalConstraints, overrideHorizontalValues);
+ return outOfFlowReplacedHorizontalGeometry(layoutBox, horizontalConstraints, overrideHorizontalValues);
}
-ContentHeightAndMargin FormattingContext::Geometry::floatingHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedVerticalValues& usedVerticalValues) const
+ContentHeightAndMargin FormattingContext::Geometry::floatingHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideVerticalValues& overrideVerticalValues) const
{
ASSERT(layoutBox.isFloatingPositioned());
if (!layoutBox.replaced())
- return complicatedCases(layoutBox, horizontalConstraints, usedVerticalValues);
- return floatingReplacedHeightAndMargin(layoutBox, horizontalConstraints, usedVerticalValues);
+ return complicatedCases(layoutBox, horizontalConstraints, overrideVerticalValues);
+ return floatingReplacedHeightAndMargin(layoutBox, horizontalConstraints, overrideVerticalValues);
}
-ContentWidthAndMargin FormattingContext::Geometry::floatingWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedHorizontalValues& usedHorizontalValues)
+ContentWidthAndMargin FormattingContext::Geometry::floatingWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideHorizontalValues& overrideHorizontalValues)
{
ASSERT(layoutBox.isFloatingPositioned());
if (!layoutBox.replaced())
- return floatingNonReplacedWidthAndMargin(layoutBox, horizontalConstraints, usedHorizontalValues);
- return floatingReplacedWidthAndMargin(layoutBox, horizontalConstraints, usedHorizontalValues);
+ return floatingNonReplacedWidthAndMargin(layoutBox, horizontalConstraints, overrideHorizontalValues);
+ return floatingReplacedWidthAndMargin(layoutBox, horizontalConstraints, overrideHorizontalValues);
}
-ContentHeightAndMargin FormattingContext::Geometry::inlineReplacedHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, Optional<VerticalConstraints> verticalConstraints, const UsedVerticalValues& usedVerticalValues) const
+ContentHeightAndMargin FormattingContext::Geometry::inlineReplacedHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, Optional<VerticalConstraints> verticalConstraints, const OverrideVerticalValues& overrideVerticalValues) const
{
ASSERT((layoutBox.isOutOfFlowPositioned() || layoutBox.isFloatingPositioned() || layoutBox.isInFlow()) && layoutBox.replaced());
@@ -878,8 +878,8 @@
auto& style = layoutBox.style();
auto replaced = layoutBox.replaced();
- auto height = usedVerticalValues.height ? usedVerticalValues.height.value() : computedContentHeight(layoutBox, verticalConstraints ? verticalConstraints->logicalHeight : WTF::nullopt);
- auto heightIsAuto = !usedVerticalValues.height && isHeightAuto(layoutBox);
+ auto height = overrideVerticalValues.height ? overrideVerticalValues.height.value() : computedContentHeight(layoutBox, verticalConstraints ? verticalConstraints->logicalHeight : WTF::nullopt);
+ auto heightIsAuto = !overrideVerticalValues.height && isHeightAuto(layoutBox);
auto widthIsAuto = style.logicalWidth().isAuto();
if (heightIsAuto && widthIsAuto && replaced->hasIntrinsicHeight()) {
@@ -903,7 +903,7 @@
return { *height, usedVerticalMargin };
}
-ContentWidthAndMargin FormattingContext::Geometry::inlineReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedHorizontalValues& usedHorizontalValues) const
+ContentWidthAndMargin FormattingContext::Geometry::inlineReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideHorizontalValues& overrideHorizontalValues) const
{
ASSERT((layoutBox.isOutOfFlowPositioned() || layoutBox.isFloatingPositioned() || layoutBox.isInFlow()) && layoutBox.replaced());
@@ -929,14 +929,14 @@
auto computedHorizontalMargin = Geometry::computedHorizontalMargin(layoutBox, horizontalConstraints);
auto usedMarginStart = [&] {
- if (usedHorizontalValues.margin)
- return usedHorizontalValues.margin->start;
+ if (overrideHorizontalValues.margin)
+ return overrideHorizontalValues.margin->start;
return computedHorizontalMargin.start.valueOr(0_lu);
};
auto usedMarginEnd = [&] {
- if (usedHorizontalValues.margin)
- return usedHorizontalValues.margin->end;
+ if (overrideHorizontalValues.margin)
+ return overrideHorizontalValues.margin->end;
return computedHorizontalMargin.end.valueOr(0_lu);
};
@@ -943,7 +943,7 @@
auto replaced = layoutBox.replaced();
ASSERT(replaced);
- auto width = usedHorizontalValues.width ? usedHorizontalValues.width : computedContentWidth(layoutBox, horizontalConstraints.logicalWidth);
+ auto width = overrideHorizontalValues.width ? overrideHorizontalValues.width : computedContentWidth(layoutBox, horizontalConstraints.logicalWidth);
auto heightIsAuto = isHeightAuto(layoutBox);
auto height = computedContentHeight(layoutBox);
Modified: trunk/Source/WebCore/layout/LayoutUnits.h (254276 => 254277)
--- trunk/Source/WebCore/layout/LayoutUnits.h 2020-01-09 18:36:48 UTC (rev 254276)
+++ trunk/Source/WebCore/layout/LayoutUnits.h 2020-01-09 18:39:57 UTC (rev 254277)
@@ -161,12 +161,12 @@
Optional<LayoutUnit> logicalHeight;
};
-struct UsedHorizontalValues {
+struct OverrideHorizontalValues {
Optional<LayoutUnit> width;
Optional<UsedHorizontalMargin> margin;
};
-struct UsedVerticalValues {
+struct OverrideVerticalValues {
// Consider collapsing it.
Optional<LayoutUnit> height;
};
Modified: trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.h (254276 => 254277)
--- trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.h 2020-01-09 18:36:48 UTC (rev 254276)
+++ trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.h 2020-01-09 18:39:57 UTC (rev 254277)
@@ -74,8 +74,8 @@
// This class implements positioning and sizing for boxes participating in a block formatting context.
class Geometry : public FormattingContext::Geometry {
public:
- ContentHeightAndMargin inFlowHeightAndMargin(const Box&, const HorizontalConstraints&, const UsedVerticalValues&);
- ContentWidthAndMargin inFlowWidthAndMargin(const Box&, const HorizontalConstraints&, const UsedHorizontalValues&);
+ ContentHeightAndMargin inFlowHeightAndMargin(const Box&, const HorizontalConstraints&, const OverrideVerticalValues&);
+ ContentWidthAndMargin inFlowWidthAndMargin(const Box&, const HorizontalConstraints&, const OverrideHorizontalValues&);
Point staticPosition(const Box&, const HorizontalConstraints&, const VerticalConstraints&) const;
LayoutUnit staticVerticalPosition(const Box&, const VerticalConstraints&) const;
@@ -87,9 +87,9 @@
friend class BlockFormattingContext;
Geometry(const BlockFormattingContext&);
- ContentHeightAndMargin inFlowNonReplacedHeightAndMargin(const Box&, const HorizontalConstraints&, const UsedVerticalValues&);
- ContentWidthAndMargin inFlowNonReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const UsedHorizontalValues&) const;
- ContentWidthAndMargin inFlowReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const UsedHorizontalValues&) const;
+ ContentHeightAndMargin inFlowNonReplacedHeightAndMargin(const Box&, const HorizontalConstraints&, const OverrideVerticalValues&);
+ ContentWidthAndMargin inFlowNonReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const OverrideHorizontalValues&) const;
+ ContentWidthAndMargin inFlowReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const OverrideHorizontalValues&) const;
Point staticPositionForOutOfFlowPositioned(const Box&) const;
const BlockFormattingContext& formattingContext() const { return downcast<BlockFormattingContext>(FormattingContext::Geometry::formattingContext()); }
Modified: trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp (254276 => 254277)
--- trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp 2020-01-09 18:36:48 UTC (rev 254276)
+++ trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp 2020-01-09 18:39:57 UTC (rev 254277)
@@ -37,12 +37,12 @@
namespace WebCore {
namespace Layout {
-ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedVerticalValues& usedVerticalValues)
+ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideVerticalValues& overrideVerticalValues)
{
ASSERT(layoutBox.isInFlow() && !layoutBox.replaced());
ASSERT(layoutBox.isOverflowVisible());
- auto compute = [&](const auto& usedVerticalValues) -> ContentHeightAndMargin {
+ auto compute = [&](const auto& overrideVerticalValues) -> 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, horizontalConstraints);
auto nonCollapsedMargin = UsedVerticalMargin::NonCollapsedValues { computedVerticalMargin.before.valueOr(0), computedVerticalMargin.after.valueOr(0) };
auto borderAndPaddingTop = boxGeometry.borderTop() + boxGeometry.paddingTop().valueOr(0);
- auto height = usedVerticalValues.height ? usedVerticalValues.height.value() : computedContentHeight(layoutBox);
+ auto height = overrideVerticalValues.height ? overrideVerticalValues.height.value() : computedContentHeight(layoutBox);
if (height)
return { *height, nonCollapsedMargin };
@@ -101,13 +101,13 @@
};
// 10.6.7 'Auto' heights for block formatting context roots
- auto isAutoHeight = !usedVerticalValues.height && !computedContentHeight(layoutBox);
+ auto isAutoHeight = !overrideVerticalValues.height && !computedContentHeight(layoutBox);
if (isAutoHeight && layoutBox.establishesBlockFormattingContext())
- return compute( UsedVerticalValues { contentHeightForFormattingContextRoot(layoutBox) });
- return compute(usedVerticalValues);
+ return compute( OverrideVerticalValues { contentHeightForFormattingContextRoot(layoutBox) });
+ return compute(overrideVerticalValues);
}
-ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedHorizontalValues& usedHorizontalValues) const
+ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideHorizontalValues& overrideHorizontalValues) const
{
ASSERT(layoutBox.isInFlow());
@@ -137,7 +137,7 @@
auto containingBlockWidth = horizontalConstraints.logicalWidth;
auto& boxGeometry = formattingContext().geometryForBox(layoutBox);
- auto width = usedHorizontalValues.width ? usedHorizontalValues.width : computedContentWidth(layoutBox, containingBlockWidth);
+ auto width = overrideHorizontalValues.width ? overrideHorizontalValues.width : computedContentWidth(layoutBox, containingBlockWidth);
auto computedHorizontalMargin = Geometry::computedHorizontalMargin(layoutBox, horizontalConstraints);
UsedHorizontalMargin usedHorizontalMargin;
auto borderLeft = boxGeometry.borderLeft();
@@ -197,7 +197,7 @@
return contentWidthAndMargin;
}
-ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedHorizontalValues& usedHorizontalValues) const
+ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideHorizontalValues& overrideHorizontalValues) const
{
ASSERT(layoutBox.isInFlow() && layoutBox.replaced());
@@ -207,9 +207,9 @@
// 2. Then the rules for non-replaced block-level elements are applied to determine the margins.
// #1
- auto usedWidth = inlineReplacedWidthAndMargin(layoutBox, horizontalConstraints, usedHorizontalValues).contentWidth;
+ auto usedWidth = inlineReplacedWidthAndMargin(layoutBox, horizontalConstraints, overrideHorizontalValues).contentWidth;
// #2
- auto nonReplacedWidthAndMargin = inFlowNonReplacedWidthAndMargin(layoutBox, horizontalConstraints, UsedHorizontalValues { usedWidth, usedHorizontalValues.margin });
+ auto nonReplacedWidthAndMargin = inFlowNonReplacedWidthAndMargin(layoutBox, 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(" << &layoutBox << ")");
return { usedWidth, nonReplacedWidthAndMargin.usedMargin, nonReplacedWidthAndMargin.computedMargin };
@@ -240,7 +240,7 @@
return { staticHorizontalPosition(layoutBox, horizontalConstraints), staticVerticalPosition(layoutBox, verticalConstraints) };
}
-ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedVerticalValues& usedVerticalValues)
+ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideVerticalValues& overrideVerticalValues)
{
ASSERT(layoutBox.isInFlow());
@@ -247,19 +247,19 @@
// 10.6.2 Inline replaced elements, block-level replaced elements in normal flow, 'inline-block'
// replaced elements in normal flow and floating replaced elements
if (layoutBox.replaced())
- return inlineReplacedHeightAndMargin(layoutBox, horizontalConstraints, { }, usedVerticalValues);
+ return inlineReplacedHeightAndMargin(layoutBox, horizontalConstraints, { }, overrideVerticalValues);
ContentHeightAndMargin contentHeightAndMargin;
// FIXME: Let's special case the table height computation for now -> figure out whether tables fall into the "inFlowNonReplacedHeightAndMargin" category.
if (layoutBox.establishesTableFormattingContext())
- contentHeightAndMargin = complicatedCases(layoutBox, horizontalConstraints, usedVerticalValues);
+ contentHeightAndMargin = complicatedCases(layoutBox, horizontalConstraints, overrideVerticalValues);
else if (layoutBox.isOverflowVisible() && !layoutBox.isDocumentBox()) {
// TODO: Figure out the case for the document element. Let's just complicated-case it for now.
- contentHeightAndMargin = inFlowNonReplacedHeightAndMargin(layoutBox, horizontalConstraints, usedVerticalValues);
+ contentHeightAndMargin = inFlowNonReplacedHeightAndMargin(layoutBox, horizontalConstraints, overrideVerticalValues);
} else {
// 10.6.6 Complicated cases
// Block-level, non-replaced elements in normal flow when 'overflow' does not compute to 'visible' (except if the 'overflow' property's value has been propagated to the viewport).
- contentHeightAndMargin = complicatedCases(layoutBox, horizontalConstraints, usedVerticalValues);
+ contentHeightAndMargin = complicatedCases(layoutBox, horizontalConstraints, overrideVerticalValues);
}
auto quirks = formattingContext().quirks();
@@ -272,19 +272,19 @@
return contentHeightAndMargin;
}
-ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedHorizontalValues& usedHorizontalValues)
+ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideHorizontalValues& overrideHorizontalValues)
{
ASSERT(layoutBox.isInFlow());
if (!layoutBox.replaced()) {
if (!layoutBox.establishesTableFormattingContext())
- return inFlowNonReplacedWidthAndMargin(layoutBox, horizontalConstraints, usedHorizontalValues);
+ return inFlowNonReplacedWidthAndMargin(layoutBox, horizontalConstraints, overrideHorizontalValues);
// 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, horizontalConstraints.logicalWidth);
- return inFlowNonReplacedWidthAndMargin(layoutBox, horizontalConstraints, UsedHorizontalValues { usedWidth, usedHorizontalValues.margin });
+ auto usedWidth = overrideHorizontalValues.width ? overrideHorizontalValues.width : shrinkToFitWidth(layoutBox, horizontalConstraints.logicalWidth);
+ return inFlowNonReplacedWidthAndMargin(layoutBox, horizontalConstraints, OverrideHorizontalValues { usedWidth, overrideHorizontalValues.margin });
}
- return inFlowReplacedWidthAndMargin(layoutBox, horizontalConstraints, usedHorizontalValues);
+ return inFlowReplacedWidthAndMargin(layoutBox, horizontalConstraints, overrideHorizontalValues);
}
FormattingContext::IntrinsicWidthConstraints BlockFormattingContext::Geometry::intrinsicWidthConstraints(const Box& layoutBox)
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp (254276 => 254277)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp 2020-01-09 18:36:48 UTC (rev 254276)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp 2020-01-09 18:39:57 UTC (rev 254277)
@@ -278,7 +278,7 @@
{
ContentWidthAndMargin contentWidthAndMargin;
// FIXME: Add support for min/max-width.
- auto usedWidth = UsedHorizontalValues { };
+ auto usedWidth = OverrideHorizontalValues { };
if (layoutBox.isFloatingPositioned())
contentWidthAndMargin = geometry().floatingWidthAndMargin(layoutBox, horizontalConstraints, usedWidth);
else if (layoutBox.isInlineBlockBox())
@@ -298,7 +298,7 @@
{
ContentHeightAndMargin contentHeightAndMargin;
// FIXME: Add min/max-height support.
- auto usedHeight = UsedVerticalValues { };
+ auto usedHeight = OverrideVerticalValues { };
if (layoutBox.isFloatingPositioned())
contentHeightAndMargin = geometry().floatingHeightAndMargin(layoutBox, horizontalConstraints, usedHeight);
else if (layoutBox.isInlineBlockBox())
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h (254276 => 254277)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h 2020-01-09 18:36:48 UTC (rev 254276)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h 2020-01-09 18:39:57 UTC (rev 254277)
@@ -64,8 +64,8 @@
class Geometry : public FormattingContext::Geometry {
public:
- ContentHeightAndMargin inlineBlockHeightAndMargin(const Box&, const HorizontalConstraints&, const UsedVerticalValues&) const;
- ContentWidthAndMargin inlineBlockWidthAndMargin(const Box&, const HorizontalConstraints&, const UsedHorizontalValues&);
+ ContentHeightAndMargin inlineBlockHeightAndMargin(const Box&, const HorizontalConstraints&, const OverrideVerticalValues&) const;
+ ContentWidthAndMargin inlineBlockWidthAndMargin(const Box&, const HorizontalConstraints&, const OverrideHorizontalValues&);
Optional<InlineLayoutUnit> computedTextIndent(const Container& formattingContextRoot, const HorizontalConstraints&) const;
private:
Modified: trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp (254276 => 254277)
--- trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp 2020-01-09 18:36:48 UTC (rev 254276)
+++ trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp 2020-01-09 18:39:57 UTC (rev 254277)
@@ -36,7 +36,7 @@
namespace WebCore {
namespace Layout {
-ContentWidthAndMargin InlineFormattingContext::Geometry::inlineBlockWidthAndMargin(const Box& formattingContextRoot, const HorizontalConstraints& horizontalConstraints, const UsedHorizontalValues& usedHorizontalValues)
+ContentWidthAndMargin InlineFormattingContext::Geometry::inlineBlockWidthAndMargin(const Box& formattingContextRoot, const HorizontalConstraints& horizontalConstraints, const OverrideHorizontalValues& overrideHorizontalValues)
{
ASSERT(formattingContextRoot.isInFlow());
@@ -44,7 +44,7 @@
// Exactly as inline replaced elements.
if (formattingContextRoot.replaced())
- return inlineReplacedWidthAndMargin(formattingContextRoot, horizontalConstraints, usedHorizontalValues);
+ return inlineReplacedWidthAndMargin(formattingContextRoot, horizontalConstraints, overrideHorizontalValues);
// 10.3.9 'Inline-block', non-replaced elements in normal flow
@@ -61,17 +61,17 @@
return ContentWidthAndMargin { *width, { computedHorizontalMargin.start.valueOr(0_lu), computedHorizontalMargin.end.valueOr(0_lu) }, computedHorizontalMargin };
}
-ContentHeightAndMargin InlineFormattingContext::Geometry::inlineBlockHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const UsedVerticalValues& usedVerticalValues) const
+ContentHeightAndMargin InlineFormattingContext::Geometry::inlineBlockHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverrideVerticalValues& overrideVerticalValues) const
{
ASSERT(layoutBox.isInFlow());
// 10.6.2 Inline replaced elements, block-level replaced elements in normal flow, 'inline-block' replaced elements in normal flow and floating replaced elements
if (layoutBox.replaced())
- return inlineReplacedHeightAndMargin(layoutBox, horizontalConstraints, { }, usedVerticalValues);
+ return inlineReplacedHeightAndMargin(layoutBox, horizontalConstraints, { }, overrideVerticalValues);
// 10.6.6 Complicated cases
// - 'Inline-block', non-replaced elements.
- return complicatedCases(layoutBox, horizontalConstraints, usedVerticalValues);
+ return complicatedCases(layoutBox, horizontalConstraints, overrideVerticalValues);
}
Optional<InlineLayoutUnit> InlineFormattingContext::Geometry::computedTextIndent(const Container& formattingContextRoot, const HorizontalConstraints& horizontalConstraints) const