- Revision
- 235032
- Author
- carlo...@webkit.org
- Date
- 2018-08-20 02:31:00 -0700 (Mon, 20 Aug 2018)
Log Message
Merge r234925 - [LFC][BFC] Display::Box interface should reflect that padding is optional.
https://bugs.webkit.org/show_bug.cgi?id=188630
Reviewed by Antti Koivisto.
Certain type of boxes can't have paddings (see Layout::Box::isPaddingApplicable).
* layout/FormattingContext.cpp:
(WebCore::Layout::FormattingContext::computeBorderAndPadding const):
(WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
* layout/FormattingContextGeometry.cpp:
(WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
(WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
(WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
(WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
* layout/blockformatting/BlockFormattingContextGeometry.cpp:
(WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
(WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
* layout/displaytree/DisplayBox.h:
(WebCore::Display::Box::width const):
(WebCore::Display::Box::height const):
(WebCore::Display::Box::contentBoxTop const):
(WebCore::Display::Box::contentBoxLeft const):
(WebCore::Display::Box::setPadding):
(WebCore::Display::Box::paddingTop const):
(WebCore::Display::Box::paddingLeft const):
(WebCore::Display::Box::paddingBottom const):
(WebCore::Display::Box::paddingRight const):
Modified Paths
Diff
Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/ChangeLog (235031 => 235032)
--- releases/WebKitGTK/webkit-2.22/Source/WebCore/ChangeLog 2018-08-20 09:30:53 UTC (rev 235031)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/ChangeLog 2018-08-20 09:31:00 UTC (rev 235032)
@@ -1,5 +1,36 @@
2018-08-16 Zalan Bujtas <za...@apple.com>
+ [LFC][BFC] Display::Box interface should reflect that padding is optional.
+ https://bugs.webkit.org/show_bug.cgi?id=188630
+
+ Reviewed by Antti Koivisto.
+
+ Certain type of boxes can't have paddings (see Layout::Box::isPaddingApplicable).
+
+ * layout/FormattingContext.cpp:
+ (WebCore::Layout::FormattingContext::computeBorderAndPadding const):
+ (WebCore::Layout::FormattingContext::validateGeometryConstraintsAfterLayout const):
+ * layout/FormattingContextGeometry.cpp:
+ (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry):
+ (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry):
+ (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry):
+ (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry):
+ * layout/blockformatting/BlockFormattingContextGeometry.cpp:
+ (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin):
+ (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin):
+ * layout/displaytree/DisplayBox.h:
+ (WebCore::Display::Box::width const):
+ (WebCore::Display::Box::height const):
+ (WebCore::Display::Box::contentBoxTop const):
+ (WebCore::Display::Box::contentBoxLeft const):
+ (WebCore::Display::Box::setPadding):
+ (WebCore::Display::Box::paddingTop const):
+ (WebCore::Display::Box::paddingLeft const):
+ (WebCore::Display::Box::paddingBottom const):
+ (WebCore::Display::Box::paddingRight const):
+
+2018-08-16 Zalan Bujtas <za...@apple.com>
+
[LFC] Add showLayoutTree() that does not require LayoutContext.
https://bugs.webkit.org/show_bug.cgi?id=188631
Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/layout/FormattingContext.cpp (235031 => 235032)
--- releases/WebKitGTK/webkit-2.22/Source/WebCore/layout/FormattingContext.cpp 2018-08-20 09:30:53 UTC (rev 235031)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/layout/FormattingContext.cpp 2018-08-20 09:31:00 UTC (rev 235032)
@@ -90,8 +90,7 @@
void FormattingContext::computeBorderAndPadding(LayoutContext& layoutContext, const Box& layoutBox, Display::Box& displayBox) const
{
displayBox.setBorder(Geometry::computedBorder(layoutContext, layoutBox));
- if (auto padding = Geometry::computedPadding(layoutContext, layoutBox))
- displayBox.setPadding(*padding);
+ displayBox.setPadding(Geometry::computedPadding(layoutContext, layoutBox));
}
void FormattingContext::placeInFlowPositionedChildren(LayoutContext& layoutContext, const Container& container) const
@@ -204,8 +203,8 @@
if ((layoutBox.isBlockLevelBox() || layoutBox.isOutOfFlowPositioned()) && !layoutBox.replaced()) {
// margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right = width of containing block
auto containingBlockWidth = containingBlockDisplayBox.contentBoxWidth();
- ASSERT(displayBox->marginLeft() + displayBox->borderLeft() + displayBox->paddingLeft() + displayBox->contentBoxWidth()
- + displayBox->paddingRight() + displayBox->borderRight() + displayBox->marginRight() == containingBlockWidth);
+ ASSERT(displayBox->marginLeft() + displayBox->borderLeft() + displayBox->paddingLeft().value_or(0) + displayBox->contentBoxWidth()
+ + displayBox->paddingRight().value_or(0) + displayBox->borderRight() + displayBox->marginRight() == containingBlockWidth);
}
// 10.6.4 Absolutely positioned, non-replaced elements
@@ -212,8 +211,8 @@
if (layoutBox.isOutOfFlowPositioned() && !layoutBox.replaced()) {
// top + margin-top + border-top-width + padding-top + height + padding-bottom + border-bottom-width + margin-bottom + bottom = height of containing block
auto containingBlockHeight = containingBlockDisplayBox.contentBoxHeight();
- ASSERT(displayBox->top() + displayBox->marginTop() + displayBox->borderTop() + displayBox->paddingTop() + displayBox->contentBoxHeight()
- + displayBox->paddingBottom() + displayBox->borderBottom() + displayBox->marginBottom() == containingBlockHeight);
+ ASSERT(displayBox->top() + displayBox->marginTop() + displayBox->borderTop() + displayBox->paddingTop().value_or(0) + displayBox->contentBoxHeight()
+ + displayBox->paddingBottom().value_or(0) + displayBox->borderBottom() + displayBox->marginBottom() == containingBlockHeight);
}
}
}
Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/layout/FormattingContextGeometry.cpp (235031 => 235032)
--- releases/WebKitGTK/webkit-2.22/Source/WebCore/layout/FormattingContextGeometry.cpp 2018-08-20 09:30:53 UTC (rev 235031)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/layout/FormattingContextGeometry.cpp 2018-08-20 09:31:00 UTC (rev 235032)
@@ -196,8 +196,8 @@
auto height = computedValueIfNotAuto(style.logicalHeight(), containingBlockHeight);
auto marginTop = computedValueIfNotAuto(style.marginTop(), containingBlockWidth);
auto marginBottom = computedValueIfNotAuto(style.marginBottom(), containingBlockWidth);
- auto paddingTop = displayBox.paddingTop();
- auto paddingBottom = displayBox.paddingBottom();
+ auto paddingTop = displayBox.paddingTop().value_or(0);
+ auto paddingBottom = displayBox.paddingBottom().value_or(0);
auto borderTop = displayBox.borderTop();
auto borderBottom = displayBox.borderBottom();
@@ -314,8 +314,8 @@
auto width = computedValueIfNotAuto(style.logicalWidth(), containingBlockWidth);
auto marginLeft = computedValueIfNotAuto(style.marginLeft(), containingBlockWidth);
auto marginRight = computedValueIfNotAuto(style.marginRight(), containingBlockWidth);
- auto paddingLeft = displayBox.paddingLeft();
- auto paddingRight = displayBox.paddingRight();
+ auto paddingLeft = displayBox.paddingLeft().value_or(0);
+ auto paddingRight = displayBox.paddingRight().value_or(0);
auto borderLeft = displayBox.borderLeft();
auto borderRight = displayBox.borderRight();
@@ -442,8 +442,8 @@
auto height = inlineReplacedHeightAndMargin(layoutContext, layoutBox).height;
auto marginTop = computedValueIfNotAuto(style.marginTop(), containingBlockWidth);
auto marginBottom = computedValueIfNotAuto(style.marginBottom(), containingBlockWidth);
- auto paddingTop = displayBox.paddingTop();
- auto paddingBottom = displayBox.paddingBottom();
+ auto paddingTop = displayBox.paddingTop().value_or(0);
+ auto paddingBottom = displayBox.paddingBottom().value_or(0);
auto borderTop = displayBox.borderTop();
auto borderBottom = displayBox.borderBottom();
@@ -515,8 +515,8 @@
auto marginLeft = computedValueIfNotAuto(style.marginLeft(), containingBlockWidth);
auto marginRight = computedValueIfNotAuto(style.marginRight(), containingBlockWidth);
auto width = inlineReplacedWidthAndMargin(layoutContext, layoutBox).width;
- auto paddingLeft = displayBox.paddingLeft();
- auto paddingRight = displayBox.paddingRight();
+ auto paddingLeft = displayBox.paddingLeft().value_or(0);
+ auto paddingRight = displayBox.paddingRight().value_or(0);
auto borderLeft = displayBox.borderLeft();
auto borderRight = displayBox.borderRight();
Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp (235031 => 235032)
--- releases/WebKitGTK/webkit-2.22/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp 2018-08-20 09:30:53 UTC (rev 235031)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp 2018-08-20 09:31:00 UTC (rev 235032)
@@ -104,7 +104,7 @@
VerticalEdges nonCollapsedMargin = { FormattingContext::Geometry::computedValueIfNotAuto(style.marginTop(), containingBlockWidth).value_or(0),
FormattingContext::Geometry::computedValueIfNotAuto(style.marginBottom(), containingBlockWidth).value_or(0) };
VerticalEdges collapsedMargin = { MarginCollapse::marginTop(layoutContext, layoutBox), MarginCollapse::marginBottom(layoutContext, layoutBox) };
- auto borderAndPaddingTop = displayBox.borderTop() + displayBox.paddingTop();
+ auto borderAndPaddingTop = displayBox.borderTop() + displayBox.paddingTop().value_or(0);
auto height = style.logicalHeight();
if (!height.isAuto()) {
@@ -191,8 +191,8 @@
auto marginRight = FormattingContext::Geometry::computedValueIfNotAuto(style.marginRight(), containingBlockWidth);
auto borderLeft = displayBox.borderLeft();
auto borderRight = displayBox.borderRight();
- auto paddingLeft = displayBox.paddingLeft();
- auto paddingRight = displayBox.paddingRight();
+ auto paddingLeft = displayBox.paddingLeft().value_or(0);
+ auto paddingRight = displayBox.paddingRight().value_or(0);
// #1
if (width) {
Modified: releases/WebKitGTK/webkit-2.22/Source/WebCore/layout/displaytree/DisplayBox.h (235031 => 235032)
--- releases/WebKitGTK/webkit-2.22/Source/WebCore/layout/displaytree/DisplayBox.h 2018-08-20 09:30:53 UTC (rev 235031)
+++ releases/WebKitGTK/webkit-2.22/Source/WebCore/layout/displaytree/DisplayBox.h 2018-08-20 09:31:00 UTC (rev 235032)
@@ -126,8 +126,8 @@
LayoutPoint bottomRight() const { return { right(), bottom() }; }
LayoutSize size() const { return { width(), height() }; }
- LayoutUnit width() const { return borderLeft() + paddingLeft() + contentBoxWidth() + paddingRight() + borderRight(); }
- LayoutUnit height() const { return borderTop() + paddingTop() + contentBoxHeight() + paddingBottom() + borderBottom(); }
+ LayoutUnit width() const { return borderLeft() + paddingLeft().value_or(0) + contentBoxWidth() + paddingRight().value_or(0) + borderRight(); }
+ LayoutUnit height() const { return borderTop() + paddingTop().value_or(0) + contentBoxHeight() + paddingBottom().value_or(0) + borderBottom(); }
Rect rect() const { return { top(), left(), width(), height() }; }
Rect rectWithMargin() const { return { top() - marginTop(), left() - marginLeft(), marginLeft() + width() + marginRight(), marginTop() + height() + marginBottom() }; }
@@ -144,13 +144,13 @@
LayoutUnit borderBottom() const;
LayoutUnit borderRight() const;
- LayoutUnit paddingTop() const;
- LayoutUnit paddingLeft() const;
- LayoutUnit paddingBottom() const;
- LayoutUnit paddingRight() const;
+ std::optional<LayoutUnit> paddingTop() const;
+ std::optional<LayoutUnit> paddingLeft() const;
+ std::optional<LayoutUnit> paddingBottom() const;
+ std::optional<LayoutUnit> paddingRight() const;
- LayoutUnit contentBoxTop() const { return borderTop() + paddingTop(); }
- LayoutUnit contentBoxLeft() const { return borderLeft() + paddingLeft(); }
+ LayoutUnit contentBoxTop() const { return borderTop() + paddingTop().value_or(0); }
+ LayoutUnit contentBoxLeft() const { return borderLeft() + paddingLeft().value_or(0); }
LayoutUnit contentBoxBottom() const { return contentBoxTop() + contentBoxHeight(); }
LayoutUnit contentBoxRight() const { return contentBoxLeft() + contentBoxWidth(); }
LayoutUnit contentBoxHeight() const;
@@ -186,7 +186,7 @@
void setVerticalNonCollapsedMargin(Layout::VerticalEdges);
void setBorder(Layout::Edges);
- void setPadding(Layout::Edges);
+ void setPadding(std::optional<Layout::Edges>);
#if !ASSERT_DISABLED
void invalidateMargin();
@@ -214,7 +214,7 @@
Layout::VerticalEdges m_verticalNonCollapsedMargin;
Layout::Edges m_border;
- Layout::Edges m_padding;
+ std::optional<Layout::Edges> m_padding;
#if !ASSERT_DISABLED
bool m_hasValidHorizontalMargin { false };
@@ -476,7 +476,7 @@
m_border = border;
}
-inline void Box::setPadding(Layout::Edges padding)
+inline void Box::setPadding(std::optional<Layout::Edges> padding)
{
#if !ASSERT_DISABLED
setHasValidPadding();
@@ -520,28 +520,36 @@
return m_verticalNonCollapsedMargin.bottom;
}
-inline LayoutUnit Box::paddingTop() const
+inline std::optional<LayoutUnit> Box::paddingTop() const
{
ASSERT(m_hasValidPadding);
- return m_padding.vertical.top;
+ if (!m_padding)
+ return { };
+ return m_padding->vertical.top;
}
-inline LayoutUnit Box::paddingLeft() const
+inline std::optional<LayoutUnit> Box::paddingLeft() const
{
ASSERT(m_hasValidPadding);
- return m_padding.horizontal.left;
+ if (!m_padding)
+ return { };
+ return m_padding->horizontal.left;
}
-inline LayoutUnit Box::paddingBottom() const
+inline std::optional<LayoutUnit> Box::paddingBottom() const
{
ASSERT(m_hasValidPadding);
- return m_padding.vertical.bottom;
+ if (!m_padding)
+ return { };
+ return m_padding->vertical.bottom;
}
-inline LayoutUnit Box::paddingRight() const
+inline std::optional<LayoutUnit> Box::paddingRight() const
{
ASSERT(m_hasValidPadding);
- return m_padding.horizontal.right;
+ if (!m_padding)
+ return { };
+ return m_padding->horizontal.right;
}
inline LayoutUnit Box::borderTop() const