- Revision
- 232250
- Author
- [email protected]
- Date
- 2018-05-28 13:39:14 -0700 (Mon, 28 May 2018)
Log Message
[LFC] Add Rect interface to Display::Box
https://bugs.webkit.org/show_bug.cgi?id=186019
Reviewed by Antti Koivisto.
Having a dedicated Rect class and moving the geometry invalidation to it enables us to call
displayBox.contentBox().left() even when the widht/height are not computed yet.
Also having Rect with top/left/bottom/right interface is more aligned with the rest of the layout code than x/y/maxX/maxY.
* layout/FormattingContextGeometry.cpp:
(WebCore::Layout::contentHeightForFormattingContextRoot):
* layout/blockformatting/BlockFormattingContextGeometry.cpp:
(WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
* layout/displaytree/DisplayBox.cpp:
(WebCore::Display::Box::marginBox const):
(WebCore::Display::Box::borderBox const):
(WebCore::Display::Box::paddingBox const):
(WebCore::Display::Box::contentBox const):
* layout/displaytree/DisplayBox.h:
(WebCore::Display::Box::Rect::invalidateTop):
(WebCore::Display::Box::Rect::invalidateLeft):
(WebCore::Display::Box::Rect::invalidateWidth):
(WebCore::Display::Box::Rect::invalidateHeight):
(WebCore::Display::Box::Rect::hasValidPosition const):
(WebCore::Display::Box::Rect::hasValidSize const):
(WebCore::Display::Box::Rect::hasValidGeometry const):
(WebCore::Display::Box::rect const):
(WebCore::Display::Box::top const):
(WebCore::Display::Box::left const):
(WebCore::Display::Box::bottom const):
(WebCore::Display::Box::right const):
(WebCore::Display::Box::topLeft const):
(WebCore::Display::Box::bottomRight const):
(WebCore::Display::Box::size const):
(WebCore::Display::Box::width const):
(WebCore::Display::Box::height const):
(WebCore::Display::Box::setTopLeft):
(WebCore::Display::Box::setTop):
(WebCore::Display::Box::setLeft):
(WebCore::Display::Box::setWidth):
(WebCore::Display::Box::setHeight):
(WebCore::Display::Box::Rect::invalidatePosition):
(WebCore::Display::Box::Rect::setHasValidPosition):
(WebCore::Display::Box::Rect::Rect):
(WebCore::Display::Box::Rect::top const):
(WebCore::Display::Box::Rect::left const):
(WebCore::Display::Box::Rect::bottom const):
(WebCore::Display::Box::Rect::right const):
(WebCore::Display::Box::Rect::topLeft const):
(WebCore::Display::Box::Rect::bottomRight const):
(WebCore::Display::Box::Rect::size const):
(WebCore::Display::Box::Rect::width const):
(WebCore::Display::Box::Rect::height const):
(WebCore::Display::Box::Rect::setTopLeft):
(WebCore::Display::Box::Rect::setTop):
(WebCore::Display::Box::Rect::setLeft):
(WebCore::Display::Box::Rect::setWidth):
(WebCore::Display::Box::Rect::setHeight):
(WebCore::Display::Box::Rect::shiftLeftTo):
(WebCore::Display::Box::Rect::shiftRightTo):
(WebCore::Display::Box::Rect::shiftTopTo):
(WebCore::Display::Box::Rect::shiftBottomTo):
(WebCore::Display::Box::Rect::expand):
(WebCore::Display::Box::invalidateTop): Deleted.
(WebCore::Display::Box::invalidateLeft): Deleted.
(WebCore::Display::Box::invalidateWidth): Deleted.
(WebCore::Display::Box::invalidateHeight): Deleted.
(WebCore::Display::Box::hasValidPosition const): Deleted.
(WebCore::Display::Box::hasValidSize const): Deleted.
(WebCore::Display::Box::hasValidGeometry const): Deleted.
(WebCore::Display::Box::invalidatePosition): Deleted.
(WebCore::Display::Box::setHasValidPosition): Deleted.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (232249 => 232250)
--- trunk/Source/WebCore/ChangeLog 2018-05-28 18:56:34 UTC (rev 232249)
+++ trunk/Source/WebCore/ChangeLog 2018-05-28 20:39:14 UTC (rev 232250)
@@ -1,5 +1,80 @@
2018-05-28 Zalan Bujtas <[email protected]>
+ [LFC] Add Rect interface to Display::Box
+ https://bugs.webkit.org/show_bug.cgi?id=186019
+
+ Reviewed by Antti Koivisto.
+
+ Having a dedicated Rect class and moving the geometry invalidation to it enables us to call
+ displayBox.contentBox().left() even when the widht/height are not computed yet.
+ Also having Rect with top/left/bottom/right interface is more aligned with the rest of the layout code than x/y/maxX/maxY.
+
+ * layout/FormattingContextGeometry.cpp:
+ (WebCore::Layout::contentHeightForFormattingContextRoot):
+ * layout/blockformatting/BlockFormattingContextGeometry.cpp:
+ (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition):
+ * layout/displaytree/DisplayBox.cpp:
+ (WebCore::Display::Box::marginBox const):
+ (WebCore::Display::Box::borderBox const):
+ (WebCore::Display::Box::paddingBox const):
+ (WebCore::Display::Box::contentBox const):
+ * layout/displaytree/DisplayBox.h:
+ (WebCore::Display::Box::Rect::invalidateTop):
+ (WebCore::Display::Box::Rect::invalidateLeft):
+ (WebCore::Display::Box::Rect::invalidateWidth):
+ (WebCore::Display::Box::Rect::invalidateHeight):
+ (WebCore::Display::Box::Rect::hasValidPosition const):
+ (WebCore::Display::Box::Rect::hasValidSize const):
+ (WebCore::Display::Box::Rect::hasValidGeometry const):
+ (WebCore::Display::Box::rect const):
+ (WebCore::Display::Box::top const):
+ (WebCore::Display::Box::left const):
+ (WebCore::Display::Box::bottom const):
+ (WebCore::Display::Box::right const):
+ (WebCore::Display::Box::topLeft const):
+ (WebCore::Display::Box::bottomRight const):
+ (WebCore::Display::Box::size const):
+ (WebCore::Display::Box::width const):
+ (WebCore::Display::Box::height const):
+ (WebCore::Display::Box::setTopLeft):
+ (WebCore::Display::Box::setTop):
+ (WebCore::Display::Box::setLeft):
+ (WebCore::Display::Box::setWidth):
+ (WebCore::Display::Box::setHeight):
+ (WebCore::Display::Box::Rect::invalidatePosition):
+ (WebCore::Display::Box::Rect::setHasValidPosition):
+ (WebCore::Display::Box::Rect::Rect):
+ (WebCore::Display::Box::Rect::top const):
+ (WebCore::Display::Box::Rect::left const):
+ (WebCore::Display::Box::Rect::bottom const):
+ (WebCore::Display::Box::Rect::right const):
+ (WebCore::Display::Box::Rect::topLeft const):
+ (WebCore::Display::Box::Rect::bottomRight const):
+ (WebCore::Display::Box::Rect::size const):
+ (WebCore::Display::Box::Rect::width const):
+ (WebCore::Display::Box::Rect::height const):
+ (WebCore::Display::Box::Rect::setTopLeft):
+ (WebCore::Display::Box::Rect::setTop):
+ (WebCore::Display::Box::Rect::setLeft):
+ (WebCore::Display::Box::Rect::setWidth):
+ (WebCore::Display::Box::Rect::setHeight):
+ (WebCore::Display::Box::Rect::shiftLeftTo):
+ (WebCore::Display::Box::Rect::shiftRightTo):
+ (WebCore::Display::Box::Rect::shiftTopTo):
+ (WebCore::Display::Box::Rect::shiftBottomTo):
+ (WebCore::Display::Box::Rect::expand):
+ (WebCore::Display::Box::invalidateTop): Deleted.
+ (WebCore::Display::Box::invalidateLeft): Deleted.
+ (WebCore::Display::Box::invalidateWidth): Deleted.
+ (WebCore::Display::Box::invalidateHeight): Deleted.
+ (WebCore::Display::Box::hasValidPosition const): Deleted.
+ (WebCore::Display::Box::hasValidSize const): Deleted.
+ (WebCore::Display::Box::hasValidGeometry const): Deleted.
+ (WebCore::Display::Box::invalidatePosition): Deleted.
+ (WebCore::Display::Box::setHasValidPosition): Deleted.
+
+2018-05-28 Zalan Bujtas <[email protected]>
+
[LFC] Add formatting context testing codepath in FrameViewLayoutContext
https://bugs.webkit.org/show_bug.cgi?id=186036
Modified: trunk/Source/WebCore/layout/FormattingContextGeometry.cpp (232249 => 232250)
--- trunk/Source/WebCore/layout/FormattingContextGeometry.cpp 2018-05-28 18:56:34 UTC (rev 232249)
+++ trunk/Source/WebCore/layout/FormattingContextGeometry.cpp 2018-05-28 20:39:14 UTC (rev 232250)
@@ -53,8 +53,8 @@
auto* firstDisplayBox = layoutContext.displayBoxForLayoutBox(*formattingRootContainer.firstInFlowChild());
auto* lastDisplayBox = layoutContext.displayBoxForLayoutBox(*formattingRootContainer.lastInFlowChild());
- auto top = firstDisplayBox->marginBox().y();
- auto bottom = lastDisplayBox->marginBox().maxY();
+ auto top = firstDisplayBox->marginBox().top();
+ auto bottom = lastDisplayBox->marginBox().bottom();
// FIXME: add floating support.
return bottom - top;
}
Modified: trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp (232249 => 232250)
--- trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp 2018-05-28 18:56:34 UTC (rev 232249)
+++ trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp 2018-05-28 20:39:14 UTC (rev 232250)
@@ -125,8 +125,8 @@
// 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).
auto containingBlockContentBox = layoutContext.displayBoxForLayoutBox(*layoutBox.containingBlock())->contentBox();
// Start from the top of the container's content box.
- auto top = containingBlockContentBox.y();
- auto left = containingBlockContentBox.x();
+ auto top = containingBlockContentBox.top();
+ auto left = containingBlockContentBox.left();
if (auto* previousInFlowSibling = layoutBox.previousInFlowSibling()) {
auto& previousInFlowDisplayBox = *layoutContext.displayBoxForLayoutBox(*previousInFlowSibling);
top = previousInFlowDisplayBox.bottom() + previousInFlowDisplayBox.marginBottom();
Modified: trunk/Source/WebCore/layout/displaytree/DisplayBox.cpp (232249 => 232250)
--- trunk/Source/WebCore/layout/displaytree/DisplayBox.cpp 2018-05-28 18:56:34 UTC (rev 232249)
+++ trunk/Source/WebCore/layout/displaytree/DisplayBox.cpp 2018-05-28 20:39:14 UTC (rev 232250)
@@ -51,58 +51,58 @@
}
-LayoutRect Box::marginBox() const
+Box::Rect Box::marginBox() const
{
ASSERT(m_hasValidMargin);
auto marginBox = borderBox();
- marginBox.shiftXEdgeTo(marginBox.x() + m_margin.left);
- marginBox.shiftYEdgeTo(marginBox.y() + m_margin.top);
- marginBox.shiftMaxXEdgeTo(marginBox.maxX() - m_margin.right);
- marginBox.shiftMaxYEdgeTo(marginBox.maxY() - m_margin.bottom);
+ marginBox.shiftLeftTo(marginBox.left() + m_margin.left);
+ marginBox.shiftBottomTo(marginBox.top() + m_margin.top);
+ marginBox.shiftRightTo(marginBox.right() - m_margin.right);
+ marginBox.shiftBottomTo(marginBox.bottom() - m_margin.bottom);
return marginBox;
}
-LayoutRect Box::borderBox() const
+Box::Rect Box::borderBox() const
{
if (m_style.boxSizing == BoxSizing::BorderBox)
- return LayoutRect( { }, size());
+ return Box::Rect( { }, size());
// Width is content box.
ASSERT(m_hasValidBorder);
ASSERT(m_hasValidPadding);
auto borderBoxSize = size();
- borderBoxSize.expand(borderLeft() + paddingLeft() + paddingRight() + borderRight() , borderTop() + paddingTop() + paddingBottom() + borderBottom());
- return LayoutRect( { }, borderBoxSize);
+ borderBoxSize.expand(borderLeft() + paddingLeft() + paddingRight() + borderRight(), borderTop() + paddingTop() + paddingBottom() + borderBottom());
+ return Box::Rect( { }, borderBoxSize);
}
-LayoutRect Box::paddingBox() const
+Box::Rect Box::paddingBox() const
{
ASSERT(m_hasValidBorder);
auto paddingBox = borderBox();
- paddingBox.shiftXEdgeTo(paddingBox.x() + m_border.left);
- paddingBox.shiftYEdgeTo(paddingBox.y() + m_border.top);
- paddingBox.shiftMaxXEdgeTo(paddingBox.maxX() - m_border.right);
- paddingBox.shiftMaxYEdgeTo(paddingBox.maxY() - m_border.bottom);
+ paddingBox.shiftLeftTo(paddingBox.left() + m_border.left);
+ paddingBox.shiftTopTo(paddingBox.top() + m_border.top);
+ paddingBox.shiftRightTo(paddingBox.left() - m_border.right);
+ paddingBox.shiftBottomTo(paddingBox.bottom() - m_border.bottom);
return paddingBox;
}
-LayoutRect Box::contentBox() const
+Box::Rect Box::contentBox() const
{
if (m_style.boxSizing == BoxSizing::ContentBox)
- return LayoutRect(LayoutPoint(0, 0), size());
+ return Box::Rect(LayoutPoint(0, 0), size());
// Width is border box.
ASSERT(m_hasValidPadding);
auto contentBox = paddingBox();
- contentBox.shiftXEdgeTo(contentBox.x() + m_padding.left);
- contentBox.shiftYEdgeTo(contentBox.y() + m_padding.top);
- contentBox.shiftMaxXEdgeTo(contentBox.maxX() - m_padding.right);
- contentBox.shiftMaxYEdgeTo(contentBox.maxY() - m_padding.bottom);
+ contentBox.shiftLeftTo(contentBox.left() + m_padding.left);
+ contentBox.shiftTopTo(contentBox.top() + m_padding.top);
+ contentBox.shiftBottomTo(contentBox.bottom() - m_padding.bottom);
+ contentBox.shiftRightTo(contentBox.right() - m_padding.right);
return contentBox;
}
Modified: trunk/Source/WebCore/layout/displaytree/DisplayBox.h (232249 => 232250)
--- trunk/Source/WebCore/layout/displaytree/DisplayBox.h 2018-05-28 18:56:34 UTC (rev 232249)
+++ trunk/Source/WebCore/layout/displaytree/DisplayBox.h 2018-05-28 20:39:14 UTC (rev 232250)
@@ -52,21 +52,73 @@
friend class Layout::FormattingContext;
friend class Layout::LayoutContext;
+ class Rect {
+ public:
+ Rect() = default;
+ Rect(const LayoutPoint&, const LayoutSize&);
+
+ LayoutUnit top() const;
+ LayoutUnit left() const;
+ LayoutPoint topLeft() const;
+
+ LayoutUnit bottom() const;
+ LayoutUnit right() const;
+ LayoutPoint bottomRight() const;
+
+ LayoutUnit width() const;
+ LayoutUnit height() const;
+ LayoutSize size() const;
+
+ void setTop(LayoutUnit);
+ void setLeft(LayoutUnit);
+ void setTopLeft(const LayoutPoint&);
+ void setWidth(LayoutUnit);
+ void setHeight(LayoutUnit);
+
+ void shiftLeftTo(LayoutUnit);
+ void shiftRightTo(LayoutUnit);
+ void shiftTopTo(LayoutUnit);
+ void shiftBottomTo(LayoutUnit);
+
+ void expand(LayoutUnit, LayoutUnit);
+
+ private:
+#if !ASSERT_DISABLED
+ void invalidateTop() { m_hasValidTop = false; }
+ void invalidateLeft() { m_hasValidLeft = false; }
+ void invalidateWidth() { m_hasValidWidth = false; }
+ void invalidateHeight() { m_hasValidHeight = false; }
+ void invalidatePosition();
+
+ bool hasValidPosition() const { return m_hasValidTop && m_hasValidLeft; }
+ bool hasValidSize() const { return m_hasValidWidth && m_hasValidHeight; }
+ bool hasValidGeometry() const { return hasValidPosition() && hasValidSize(); }
+
+ void setHasValidPosition();
+
+ bool m_hasValidTop { false };
+ bool m_hasValidLeft { false };
+ bool m_hasValidWidth { false };
+ bool m_hasValidHeight { false };
+#endif
+ LayoutRect m_rect;
+ };
+
~Box();
- LayoutRect rect() const;
+ Rect rect() const { return m_rect; }
- LayoutUnit top() const;
- LayoutUnit left() const;
- LayoutUnit bottom() const;
- LayoutUnit right() const;
+ LayoutUnit top() const { return m_rect.top(); }
+ LayoutUnit left() const { return m_rect.left(); }
+ LayoutUnit bottom() const { return m_rect.bottom(); }
+ LayoutUnit right() const { return m_rect.right(); }
- LayoutPoint topLeft() const;
- LayoutPoint bottomRight() const;
+ LayoutPoint topLeft() const { return m_rect.topLeft(); }
+ LayoutPoint bottomRight() const { return m_rect.bottomRight(); }
- LayoutSize size() const;
- LayoutUnit width() const;
- LayoutUnit height() const;
+ LayoutSize size() const { return m_rect.size(); }
+ LayoutUnit width() const { return m_rect.width(); }
+ LayoutUnit height() const { return m_rect.height(); }
LayoutUnit marginTop() const;
LayoutUnit marginLeft() const;
@@ -83,10 +135,10 @@
LayoutUnit paddingBottom() const;
LayoutUnit paddingRight() const;
- LayoutRect marginBox() const;
- LayoutRect borderBox() const;
- LayoutRect paddingBox() const;
- LayoutRect contentBox() const;
+ Rect marginBox() const;
+ Rect borderBox() const;
+ Rect paddingBox() const;
+ Rect contentBox() const;
private:
Box(const RenderStyle&);
@@ -97,11 +149,11 @@
BoxSizing boxSizing { BoxSizing::ContentBox };
};
- void setTopLeft(const LayoutPoint&);
- void setTop(LayoutUnit);
- void setLeft(LayoutUnit);
- void setWidth(LayoutUnit);
- void setHeight(LayoutUnit);
+ void setTopLeft(const LayoutPoint& topLeft) { m_rect.setTopLeft(topLeft); }
+ void setTop(LayoutUnit top) { m_rect.setTop(top); }
+ void setLeft(LayoutUnit left) { m_rect.setLeft(left); }
+ void setWidth(LayoutUnit width) { m_rect.setWidth(width); }
+ void setHeight(LayoutUnit height) { m_rect.setHeight(height); }
struct Edges {
Edges() = default;
@@ -122,21 +174,10 @@
void setPadding(Edges);
#if !ASSERT_DISABLED
- void invalidateTop() { m_hasValidTop = false; }
- void invalidateLeft() { m_hasValidLeft = false; }
- void invalidateWidth() { m_hasValidWidth = false; }
- void invalidateHeight() { m_hasValidHeight = false; }
- void invalidatePosition();
void invalidateMargin() { m_hasValidMargin = false; }
void invalidateBorder() { m_hasValidBorder = false; }
void invalidatePadding() { m_hasValidPadding = false; }
- bool hasValidPosition() const { return m_hasValidTop && m_hasValidLeft; }
- bool hasValidSize() const { return m_hasValidWidth && m_hasValidHeight; }
- bool hasValidGeometry() const { return hasValidPosition() && hasValidSize(); }
-
- void setHasValidPosition();
-
void setHasValidMargin();
void setHasValidBorder();
void setHasValidPadding();
@@ -144,7 +185,7 @@
const Style m_style;
- LayoutRect m_rect;
+ Rect m_rect;
Edges m_margin;
Edges m_border;
@@ -151,10 +192,6 @@
Edges m_padding;
#if !ASSERT_DISABLED
- bool m_hasValidTop { false };
- bool m_hasValidLeft { false };
- bool m_hasValidWidth { false };
- bool m_hasValidHeight { false };
bool m_hasValidMargin { false };
bool m_hasValidBorder { false };
bool m_hasValidPadding { false };
@@ -162,13 +199,13 @@
};
#if !ASSERT_DISABLED
-inline void Box::invalidatePosition()
+inline void Box::Rect::invalidatePosition()
{
invalidateTop();
invalidateLeft();
}
-inline void Box::setHasValidPosition()
+inline void Box::Rect::setHasValidPosition()
{
m_hasValidTop = true;
m_hasValidLeft = true;
@@ -175,67 +212,67 @@
}
#endif
-inline LayoutRect Box::rect() const
+inline Box::Rect::Rect(const LayoutPoint& topLeft, const LayoutSize& size)
+ : m_rect(topLeft, size)
{
- ASSERT(hasValidGeometry());
- return m_rect;
+
}
-inline LayoutUnit Box::top() const
+inline LayoutUnit Box::Rect::top() const
{
ASSERT(m_hasValidTop);
return m_rect.y();
}
-inline LayoutUnit Box::left() const
+inline LayoutUnit Box::Rect::left() const
{
ASSERT(m_hasValidLeft);
return m_rect.x();
}
-inline LayoutUnit Box::bottom() const
+inline LayoutUnit Box::Rect::bottom() const
{
ASSERT(m_hasValidTop && m_hasValidHeight);
return m_rect.maxY();
}
-inline LayoutUnit Box::right() const
+inline LayoutUnit Box::Rect::right() const
{
ASSERT(m_hasValidLeft && m_hasValidWidth);
return m_rect.maxX();
}
-inline LayoutPoint Box::topLeft() const
+inline LayoutPoint Box::Rect::topLeft() const
{
ASSERT(hasValidPosition());
- return m_rect.location();
+ return m_rect.minXMinYCorner();
}
-inline LayoutPoint Box::bottomRight() const
+inline LayoutPoint Box::Rect::bottomRight() const
{
ASSERT(hasValidGeometry());
return m_rect.maxXMaxYCorner();
}
-inline LayoutSize Box::size() const
+inline LayoutSize Box::Rect::size() const
{
ASSERT(hasValidSize());
return m_rect.size();
}
-inline LayoutUnit Box::width() const
+inline LayoutUnit Box::Rect::width() const
{
ASSERT(m_hasValidWidth);
return m_rect.width();
}
-inline LayoutUnit Box::height() const
+inline LayoutUnit Box::Rect::height() const
{
ASSERT(m_hasValidHeight);
return m_rect.height();
}
-inline void Box::setTopLeft(const LayoutPoint& topLeft)
+inline void Box::Rect::setTopLeft(const LayoutPoint& topLeft)
{
#if !ASSERT_DISABLED
setHasValidPosition();
@@ -243,7 +280,7 @@
m_rect.setLocation(topLeft);
}
-inline void Box::setTop(LayoutUnit top)
+inline void Box::Rect::setTop(LayoutUnit top)
{
#if !ASSERT_DISABLED
m_hasValidTop = true;
@@ -251,7 +288,7 @@
m_rect.setY(top);
}
-inline void Box::setLeft(LayoutUnit left)
+inline void Box::Rect::setLeft(LayoutUnit left)
{
#if !ASSERT_DISABLED
m_hasValidLeft = true;
@@ -259,7 +296,7 @@
m_rect.setX(left);
}
-inline void Box::setWidth(LayoutUnit width)
+inline void Box::Rect::setWidth(LayoutUnit width)
{
#if !ASSERT_DISABLED
m_hasValidWidth = true;
@@ -268,7 +305,7 @@
m_rect.setWidth(width);
}
-inline void Box::setHeight(LayoutUnit height)
+inline void Box::Rect::setHeight(LayoutUnit height)
{
#if !ASSERT_DISABLED
m_hasValidHeight = true;
@@ -277,6 +314,36 @@
m_rect.setHeight(height);
}
+inline void Box::Rect::shiftLeftTo(LayoutUnit left)
+{
+ ASSERT(m_hasValidLeft);
+ m_rect.shiftXEdgeTo(left);
+}
+
+inline void Box::Rect::shiftRightTo(LayoutUnit right)
+{
+ ASSERT(m_hasValidLeft && m_hasValidWidth);
+ m_rect.shiftMaxXEdgeTo(right);
+}
+
+inline void Box::Rect::shiftTopTo(LayoutUnit top)
+{
+ ASSERT(m_hasValidTop);
+ m_rect.shiftYEdgeTo(top);
+}
+
+inline void Box::Rect::shiftBottomTo(LayoutUnit bottom)
+{
+ ASSERT(m_hasValidTop && m_hasValidHeight);
+ m_rect.shiftMaxYEdgeTo(bottom);
+}
+
+inline void Box::Rect::expand(LayoutUnit width, LayoutUnit height)
+{
+ ASSERT(hasValidGeometry());
+ m_rect.expand(width, height);
+}
+
inline void Box::setMargin(Edges margin)
{
#if !ASSERT_DISABLED