[LFC] Adjust static position with containing block's content box top/left
[WebKit-https.git] / Source / WebCore / layout / displaytree / DisplayBox.cpp
index eac3baf183ef49ae2bf5100afb593606d0fe061b..2bcc6f4aece7712b9a54ea94ede50a3f3fa61019 100644 (file)
@@ -28,6 +28,7 @@
 
 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
 
+#include "RenderStyle.h"
 #include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
@@ -35,7 +36,8 @@ namespace Display {
 
 WTF_MAKE_ISO_ALLOCATED_IMPL(Box);
 
-Box::Box()
+Box::Box(const RenderStyle& style)
+    : m_style(style)
 {
 }
 
@@ -43,41 +45,50 @@ Box::~Box()
 {
 }
 
-LayoutRect Box::marginBox() const
+Box::Style::Style(const RenderStyle& style)
+    : boxSizing(style.boxSizing())
 {
-    auto marginBox = rect();
-    auto topLeftMargin = LayoutSize(m_marginLeft, m_marginTop);
-    marginBox.inflate(topLeftMargin);
+}
+
+Box::Rect Box::marginBox() const
+{
+    auto borderBox = this->borderBox();
 
-    auto bottomRightMargin = LayoutSize(m_marginRight, m_marginBottom);
-    marginBox.expand(bottomRightMargin);
+    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
 {
-    return LayoutRect(LayoutPoint(0, 0), size());
+    Rect borderBox;
+    borderBox.setTopLeft({ });
+    borderBox.setSize({ width(), height() });
+    return borderBox;
 }
 
-LayoutRect Box::paddingBox() const
+Box::Rect Box::paddingBox() const
 {
-    auto paddingBox = borderBox();
-    auto topLeftBorder = LayoutSize(m_borderLeft, m_borderTop);
-    paddingBox.inflate(-topLeftBorder);
+    auto borderBox = this->borderBox();
 
-    auto bottomRightBorder = LayoutSize(m_borderRight, m_borderBottom);
-    paddingBox.expand(-bottomRightBorder);
+    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
 {
-    auto contentBox = paddingBox();
-    auto topLeftPadding = LayoutSize(m_paddingLeft, m_paddingTop);
-    contentBox.inflate(-topLeftPadding);
-    
-    auto bottomRightPadding = LayoutSize(m_paddingRight, m_paddingBottom);
-    contentBox.expand(-bottomRightPadding);
+    Rect contentBox;
+    contentBox.setTop(contentBoxTop());
+    contentBox.setLeft(contentBoxLeft());
+    contentBox.setWidth(contentBoxWidth());
+    contentBox.setHeight(contentBoxHeight());
     return contentBox;
 }