[LFC] Adjust static position with containing block's content box top/left
[WebKit-https.git] / Source / WebCore / layout / displaytree / DisplayBox.cpp
index eb97a0b31b6a9a2a34c6863a75d971c369b1d313..2bcc6f4aece7712b9a54ea94ede50a3f3fa61019 100644 (file)
@@ -48,62 +48,47 @@ Box::~Box()
 Box::Style::Style(const RenderStyle& style)
     : boxSizing(style.boxSizing())
 {
-
 }
 
-LayoutRect Box::marginBox() const
+Box::Rect Box::marginBox() const
 {
-    ASSERT(m_hasValidMargin);
-    auto marginBox = borderBox();
-
-    marginBox.shiftXEdgeTo(marginBox.x() + m_marginLeft);
-    marginBox.shiftYEdgeTo(marginBox.y() + m_marginTop);
-    marginBox.shiftMaxXEdgeTo(marginBox.maxX() - m_marginRight);
-    marginBox.shiftMaxYEdgeTo(marginBox.maxY() - m_marginBottom);
+    auto borderBox = this->borderBox();
 
+    Rect marginBox;
+    marginBox.setTop(borderBox.top() - marginTop());
+    marginBox.setLeft(borderBox.left() - marginLeft());
+    marginBox.setHeight(borderBox.height() + marginTop() + marginBottom());
+    marginBox.setWidth(borderBox.width() + marginLeft() + marginRight());
     return marginBox;
 }
 
-LayoutRect Box::borderBox() const
+Box::Rect Box::borderBox() const
 {
-    if (m_style.boxSizing == BORDER_BOX)
-        return LayoutRect( { }, 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);
+    Rect borderBox;
+    borderBox.setTopLeft({ });
+    borderBox.setSize({ width(), height() });
+    return borderBox;
 }
 
-LayoutRect Box::paddingBox() const
+Box::Rect Box::paddingBox() const
 {
-    ASSERT(m_hasValidBorder);
-    auto paddingBox = borderBox();
-
-    paddingBox.shiftXEdgeTo(paddingBox.x() + m_borderLeft);
-    paddingBox.shiftYEdgeTo(paddingBox.y() + m_borderTop);
-    paddingBox.shiftMaxXEdgeTo(paddingBox.maxX() - m_borderRight);
-    paddingBox.shiftMaxYEdgeTo(paddingBox.maxY() - m_borderBottom);
+    auto borderBox = this->borderBox();
 
+    Rect paddingBox;
+    paddingBox.setTop(borderBox.top() + borderTop());
+    paddingBox.setLeft(borderBox.left() + borderLeft());
+    paddingBox.setHeight(borderBox.bottom() - borderTop() - borderBottom());
+    paddingBox.setWidth(borderBox.width() - borderLeft() - borderRight());
     return paddingBox;
 }
 
-LayoutRect Box::contentBox() const
+Box::Rect Box::contentBox() const
 {
-    if (m_style.boxSizing == CONTENT_BOX)
-        return LayoutRect(LayoutPoint(0, 0), size());
-
-    // Width is border box.
-    ASSERT(m_hasValidPadding);
-    auto contentBox = paddingBox();
-
-    contentBox.shiftXEdgeTo(contentBox.x() + m_paddingLeft);
-    contentBox.shiftYEdgeTo(contentBox.y() + m_paddingTop);
-    contentBox.shiftMaxXEdgeTo(contentBox.maxX() - m_paddingRight);
-    contentBox.shiftMaxYEdgeTo(contentBox.maxY() - m_paddingBottom);
-
+    Rect contentBox;
+    contentBox.setTop(contentBoxTop());
+    contentBox.setLeft(contentBoxLeft());
+    contentBox.setWidth(contentBoxWidth());
+    contentBox.setHeight(contentBoxHeight());
     return contentBox;
 }