[LFC] Implement LayoutContext::createDisplayBox
[WebKit-https.git] / Source / WebCore / layout / LayoutContext.h
index 15007d60a621aa64a0aa9ab4b3d3885f6945a5de..77efa06a5d308d84f91bc56b5a42a99129eaedb8 100644 (file)
@@ -27,6 +27,8 @@
 
 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
 
+#include "FormattingContext.h"
+#include "FormattingState.h"
 #include "LayoutBox.h"
 #include <wtf/IsoMalloc.h>
 
@@ -38,8 +40,6 @@ class Box;
 
 namespace Layout {
 
-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.
@@ -50,22 +50,24 @@ class StyleDiff;
 class LayoutContext {
     WTF_MAKE_ISO_ALLOCATED(LayoutContext);
 public:
-    LayoutContext(Box& root);
+    LayoutContext(const Box& root);
 
     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;
 
-private:
-    FormattingState& formattingState(const FormattingContext&);
-    std::unique_ptr<FormattingContext> formattingContext(Box& formattingContextRoot);
+    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;
 };
 
 }