LayoutIntegrationBoxTree.h [plain text]
#pragma once
#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
#include "LayoutInitialContainingBlock.h"
#include <wtf/HashMap.h>
#include <wtf/Vector.h>
namespace WebCore {
class RenderBlockFlow;
class RenderBoxModelObject;
namespace LayoutIntegration {
class BoxTree {
public:
BoxTree(RenderBlockFlow&);
void updateStyle(const RenderBoxModelObject&);
const RenderBlockFlow& flow() const { return m_flow; }
RenderBlockFlow& flow() { return m_flow; }
const Layout::InitialContainingBlock& rootLayoutBox() const { return m_root; }
Layout::InitialContainingBlock& rootLayoutBox() { return m_root; }
const Layout::Box& layoutBoxForRenderer(const RenderObject&) const;
Layout::Box& layoutBoxForRenderer(const RenderObject&);
const RenderObject& rendererForLayoutBox(const Layout::Box&) const;
RenderObject& rendererForLayoutBox(const Layout::Box&);
private:
void buildTree();
void appendChild(std::unique_ptr<Layout::Box>, RenderObject&);
RenderBlockFlow& m_flow;
Layout::InitialContainingBlock m_root;
struct BoxAndRenderer {
std::unique_ptr<Layout::Box> box;
RenderObject* renderer { nullptr };
};
Vector<BoxAndRenderer, 1> m_boxes;
HashMap<const RenderObject*, Layout::Box*> m_rendererToBoxMap;
HashMap<const Layout::Box*, RenderObject*> m_boxToRendererMap;
};
}
}
#endif