[LFC] Implement LayoutContext::createDisplayBox
[WebKit-https.git] / Source / WebCore / layout / FormattingContext.h
index e86cff92d2775a3057774837b294f04ee7f81d51..5379ebdb3baddf805b6f3ac221b71c5afa6850e3 100644 (file)
 
 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
 
+#include "FloatingState.h"
 #include "LayoutUnit.h"
 #include <wtf/IsoMalloc.h>
 #include <wtf/WeakPtr.h>
 
 namespace WebCore {
 
+namespace Display {
+class Box;
+}
+
 namespace Layout {
 
-class FormattingState;
 class Box;
+class Container;
+class FormattingState;
+class LayoutContext;
 
 class FormattingContext {
     WTF_MAKE_ISO_ALLOCATED(FormattingContext);
 public:
-    FormattingContext(Box& formattingContextRoot);
+    FormattingContext(const Box& formattingContextRoot, LayoutContext&);
     virtual ~FormattingContext();
 
-    virtual void layout(FormattingState&) = 0;
-    virtual std::unique_ptr<FormattingState> formattingState() const = 0;
+    virtual void layout(LayoutContext&, FormattingState&) const = 0;
+    virtual std::unique_ptr<FormattingState> createFormattingState(Ref<FloatingState>&&) const = 0;
+    virtual Ref<FloatingState> createOrFindFloatingState() const = 0;
+
+protected:
+    struct LayoutPair {
+        const Box& layoutBox;
+        Display::Box& displayBox;
+    };
+    using LayoutQueue = Vector<std::unique_ptr<LayoutPair>>;
 
     const Box& root() const { return *m_root; }
+    const LayoutContext& layoutContext() const { return m_layoutContext; }
 
-protected:
-    virtual void computeStaticPosition(const Box&) const;
-    virtual void computeInFlowPositionedPosition(const Box&) const;
-    virtual void computeOutOfFlowPosition(const Box&) const;
+    virtual void computeStaticPosition(const Box&, Display::Box&) const;
+    virtual void computeInFlowPositionedPosition(const Box&, Display::Box&) const;
+    virtual void computeOutOfFlowPosition(const Box&, Display::Box&) const;
+
+    virtual void computeWidth(const Box&, Display::Box&) const;
+    virtual void computeHeight(const Box&, Display::Box&) const;
 
-    virtual void computeWidth(const Box&) const;
-    virtual void computeHeight(const Box&) const;
+    virtual void computeOutOfFlowWidth(const Box&, Display::Box&) const;
+    virtual void computeFloatingWidth(const Box&, Display::Box&) const;
+    virtual void computeInFlowWidth(const Box&, Display::Box&) const = 0;
+
+    virtual void computeOutOfFlowHeight(const Box&, Display::Box&) const;
+    virtual void computeFloatingHeight(const Box&, Display::Box&) const;
+    virtual void computeInFlowHeight(const Box&, Display::Box&) const = 0;
 
     virtual LayoutUnit marginTop(const Box&) const;
     virtual LayoutUnit marginLeft(const Box&) const;
     virtual LayoutUnit marginBottom(const Box&) const;
     virtual LayoutUnit marginRight(const Box&) const;
 
+    void placeInFlowPositionedChildren(const Container&) const;
+    void layoutOutOfFlowDescendants() const;
+
 private:
     WeakPtr<Box> m_root;
+    LayoutContext& m_layoutContext;
 };
 
 }