LayoutIntegrationLineLayout.h [plain text]
#pragma once
#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
#include "LayoutIntegrationBoxTree.h"
#include "LayoutPoint.h"
#include "LayoutState.h"
#include "LineLayoutTraversal.h"
#include "RenderObjectEnums.h"
namespace WebCore {
class GraphicsContext;
class HitTestLocation;
class HitTestRequest;
class HitTestResult;
class RenderBlockFlow;
class RenderLineBreak;
struct PaintInfo;
namespace Display {
struct InlineContent;
}
namespace Layout {
class LayoutTreeContent;
}
namespace LayoutIntegration {
class LineLayout {
WTF_MAKE_FAST_ALLOCATED;
public:
LineLayout(const RenderBlockFlow&);
~LineLayout();
static bool canUseFor(const RenderBlockFlow&, Optional<bool> couldUseSimpleLineLayout = { });
void updateStyle();
void layout();
LayoutUnit contentLogicalHeight() const;
size_t lineCount() const;
LayoutUnit firstLineBaseline() const;
LayoutUnit lastLineBaseline() const;
void collectOverflow(RenderBlockFlow&);
const Display::InlineContent* displayInlineContent() const;
void paint(PaintInfo&, const LayoutPoint& paintOffset);
bool hitTest(const HitTestRequest&, HitTestResult&, const HitTestLocation&, const LayoutPoint& accumulatedOffset, HitTestAction);
LineLayoutTraversal::TextBoxIterator textBoxesFor(const RenderText&) const;
LineLayoutTraversal::ElementBoxIterator elementBoxFor(const RenderLineBreak&) const;
static void releaseCaches(RenderView&);
private:
void prepareLayoutState();
void prepareFloatingState();
const Layout::ContainerBox& rootLayoutBox() const;
Layout::ContainerBox& rootLayoutBox();
ShadowData* debugTextShadow();
void releaseInlineItemCache();
const RenderBlockFlow& m_flow;
BoxTree m_boxTree;
Layout::LayoutState m_layoutState;
Layout::InlineFormattingState& m_inlineFormattingState;
};
}
}
#endif