[LFC] Implement LayoutContext::createDisplayBox
[WebKit-https.git] / Source / WebCore / layout / FormattingContext.h
index bde31e212262915681ca7046050a08b0e404e760..5379ebdb3baddf805b6f3ac221b71c5afa6850e3 100644 (file)
 
 namespace WebCore {
 
+namespace Display {
+class Box;
+}
+
 namespace Layout {
 
 class Box;
+class Container;
 class FormattingState;
 class LayoutContext;
 
@@ -46,26 +51,43 @@ public:
     FormattingContext(const Box& formattingContextRoot, LayoutContext&);
     virtual ~FormattingContext();
 
-    virtual void layout(FormattingState&) = 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; }
 
-    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&) const;
-    virtual void computeHeight(const Box&) const;
+    virtual void computeWidth(const Box&, Display::Box&) const;
+    virtual void computeHeight(const Box&, Display::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;