[LFC] Implement LayoutContext::createDisplayBox
[WebKit-https.git] / Source / WebCore / layout / LayoutContext.h
index 15c84158c5e735922a57d2af1edc9dbf30d1dd93..77efa06a5d308d84f91bc56b5a42a99129eaedb8 100644 (file)
@@ -27,6 +27,9 @@
 
 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
 
+#include "FormattingContext.h"
+#include "FormattingState.h"
+#include "LayoutBox.h"
 #include <wtf/IsoMalloc.h>
 
 namespace WebCore {
@@ -37,10 +40,6 @@ class Box;
 
 namespace Layout {
 
-class Box;
-class Container;
-class FormattingContext;
-class FormattingState;
 class StyleDiff;
 
 // LayoutContext is the entry point for layout. It takes a (formatting root)container which acts as the root of the layout context.
@@ -51,20 +50,24 @@ class StyleDiff;
 class LayoutContext {
     WTF_MAKE_ISO_ALLOCATED(LayoutContext);
 public:
-    LayoutContext(const Container& rootContainer);
-
-    void layout();
+    LayoutContext(const Box& root);
 
-    Container& rootContainer() const;
-    FormattingContext& formattingContext(const Container& formattingRoot) const;
-    FormattingState& establishedFormattingState(const Container& formattingRoot);
-    FormattingState& formattingState(const Box&);
+    void updateLayout();
 
-    void addDisplayBox(const Box&, Display::Box&);
-    Display::Box* displayBox(const Box&) const;
+    Display::Box& createDisplayBox(const Box&);
+    Display::Box* displayBoxForLayoutBox(const Box& layoutBox) const { return m_layoutToDisplayBox.get(&layoutBox); }
 
     void markNeedsLayout(const Box&, StyleDiff);
     bool needsLayout(const Box&) const;
+
+    FormattingState& formattingStateForBox(const Box&) const;
+    FormattingState& establishedFormattingState(const Box& formattingContextRoot, const FormattingContext&);
+    std::unique_ptr<FormattingContext> formattingContext(const Box& formattingContextRoot);
+
+private:
+    WeakPtr<Box> m_root;
+    HashMap<const Box*, std::unique_ptr<FormattingState>> m_formattingStates;
+    HashMap<const Box*, std::unique_ptr<Display::Box>> m_layoutToDisplayBox;
 };
 
 }