[LFC] Adjust static position with containing block's content box top/left
[WebKit-https.git] / Source / WebCore / layout / displaytree / DisplayBox.cpp
index d0c8b9e40f161f62a97ae17f0a55e3ce2aa57abd..2bcc6f4aece7712b9a54ea94ede50a3f3fa61019 100644 (file)
@@ -52,62 +52,43 @@ Box::Style::Style(const RenderStyle& style)
 
 Box::Rect Box::marginBox() const
 {
-    ASSERT(m_hasValidMargin);
-    auto marginBox = borderBox();
-
-    marginBox.shiftLeftTo(marginBox.left() + m_margin.left);
-    marginBox.shiftTopTo(marginBox.top() + m_margin.top);
-    marginBox.shiftRightTo(marginBox.right() - m_margin.right);
-    marginBox.shiftBottomTo(marginBox.bottom() - m_margin.bottom);
+    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;
 }
 
 Box::Rect Box::borderBox() const
 {
-    auto rect = m_rect.clone();
-    rect.setTopLeft({ });
-
-    if (m_style.boxSizing == BoxSizing::BorderBox)
-        return rect;
-
-    // Width is content box.
-    ASSERT(m_hasValidBorder);
-    ASSERT(m_hasValidPadding);
-    rect.expand(borderLeft() + paddingLeft() + paddingRight() + borderRight(), borderTop() + paddingTop() + paddingBottom() + borderBottom());
-    return rect;
+    Rect borderBox;
+    borderBox.setTopLeft({ });
+    borderBox.setSize({ width(), height() });
+    return borderBox;
 }
 
 Box::Rect Box::paddingBox() const
 {
-    ASSERT(m_hasValidBorder);
-    auto paddingBox = borderBox();
-
-    paddingBox.shiftLeftTo(paddingBox.left() + m_border.left);
-    paddingBox.shiftTopTo(paddingBox.top() + m_border.top);
-    paddingBox.shiftRightTo(paddingBox.right() - m_border.right);
-    paddingBox.shiftBottomTo(paddingBox.bottom() - m_border.bottom);
+    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;
 }
 
 Box::Rect Box::contentBox() const
 {
-    if (m_style.boxSizing == BoxSizing::ContentBox) {
-        auto rect = m_rect.clone();
-        rect.setTopLeft({ });
-        return rect;
-    }
-
-    // Width is border box.
-    ASSERT(m_hasValidPadding);
-    auto contentBox = paddingBox();
-
-    contentBox.shiftLeftTo(contentBox.left() + m_padding.left);
-    contentBox.shiftTopTo(contentBox.top() + m_padding.top);
-    contentBox.shiftRightTo(contentBox.right() - m_padding.right);
-    contentBox.shiftBottomTo(contentBox.bottom() - m_padding.bottom);
-
+    Rect contentBox;
+    contentBox.setTop(contentBoxTop());
+    contentBox.setLeft(contentBoxLeft());
+    contentBox.setWidth(contentBoxWidth());
+    contentBox.setHeight(contentBoxHeight());
     return contentBox;
 }