Index: Source/core/rendering/RenderBlockLineLayout.cpp |
diff --git a/Source/core/rendering/RenderBlockLineLayout.cpp b/Source/core/rendering/RenderBlockLineLayout.cpp |
index 29d49ca4d5cf24b47b44dc20b0d241d0c173cebe..d1c5bb4bcd38e268f2fe33eddd11ac89203b6fa2 100644 |
--- a/Source/core/rendering/RenderBlockLineLayout.cpp |
+++ b/Source/core/rendering/RenderBlockLineLayout.cpp |
@@ -34,6 +34,7 @@ |
#include "core/rendering/TrailingFloatsRootInlineBox.h" |
#include "core/rendering/VerticalPositionCache.h" |
#include "core/rendering/line/BreakingContextInlineHeaders.h" |
+#include "core/rendering/line/LineLayoutState.h" |
#include "core/rendering/svg/SVGRootInlineBox.h" |
#include "platform/text/BidiResolver.h" |
#include "wtf/RefCountedLeakCounter.h" |
@@ -962,95 +963,6 @@ RootInlineBox* RenderBlockFlow::createLineBoxesFromBidiRuns(unsigned bidiLevel, |
return lineBox; |
} |
-// Like LayoutState for layout(), LineLayoutState keeps track of global information |
-// during an entire linebox tree layout pass (aka layoutInlineChildren). |
-class LineLayoutState { |
-public: |
- LineLayoutState(bool fullLayout, LayoutUnit& repaintLogicalTop, LayoutUnit& repaintLogicalBottom, RenderFlowThread* flowThread) |
- : m_lastFloat(0) |
- , m_endLine(0) |
- , m_floatIndex(0) |
- , m_endLineLogicalTop(0) |
- , m_endLineMatched(false) |
- , m_checkForFloatsFromLastLine(false) |
- , m_isFullLayout(fullLayout) |
- , m_repaintLogicalTop(repaintLogicalTop) |
- , m_repaintLogicalBottom(repaintLogicalBottom) |
- , m_adjustedLogicalLineTop(0) |
- , m_usesRepaintBounds(false) |
- , m_flowThread(flowThread) |
- { } |
- |
- void markForFullLayout() { m_isFullLayout = true; } |
- bool isFullLayout() const { return m_isFullLayout; } |
- |
- bool usesRepaintBounds() const { return m_usesRepaintBounds; } |
- |
- void setRepaintRange(LayoutUnit logicalHeight) |
- { |
- m_usesRepaintBounds = true; |
- m_repaintLogicalTop = m_repaintLogicalBottom = logicalHeight; |
- } |
- |
- void updateRepaintRangeFromBox(RootInlineBox* box, LayoutUnit paginationDelta = 0) |
- { |
- m_usesRepaintBounds = true; |
- m_repaintLogicalTop = min(m_repaintLogicalTop, box->logicalTopVisualOverflow() + min<LayoutUnit>(paginationDelta, 0)); |
- m_repaintLogicalBottom = max(m_repaintLogicalBottom, box->logicalBottomVisualOverflow() + max<LayoutUnit>(paginationDelta, 0)); |
- } |
- |
- bool endLineMatched() const { return m_endLineMatched; } |
- void setEndLineMatched(bool endLineMatched) { m_endLineMatched = endLineMatched; } |
- |
- bool checkForFloatsFromLastLine() const { return m_checkForFloatsFromLastLine; } |
- void setCheckForFloatsFromLastLine(bool check) { m_checkForFloatsFromLastLine = check; } |
- |
- LineInfo& lineInfo() { return m_lineInfo; } |
- const LineInfo& lineInfo() const { return m_lineInfo; } |
- |
- LayoutUnit endLineLogicalTop() const { return m_endLineLogicalTop; } |
- void setEndLineLogicalTop(LayoutUnit logicalTop) { m_endLineLogicalTop = logicalTop; } |
- |
- RootInlineBox* endLine() const { return m_endLine; } |
- void setEndLine(RootInlineBox* line) { m_endLine = line; } |
- |
- FloatingObject* lastFloat() const { return m_lastFloat; } |
- void setLastFloat(FloatingObject* lastFloat) { m_lastFloat = lastFloat; } |
- |
- Vector<RenderBlockFlow::FloatWithRect>& floats() { return m_floats; } |
- |
- unsigned floatIndex() const { return m_floatIndex; } |
- void setFloatIndex(unsigned floatIndex) { m_floatIndex = floatIndex; } |
- |
- LayoutUnit adjustedLogicalLineTop() const { return m_adjustedLogicalLineTop; } |
- void setAdjustedLogicalLineTop(LayoutUnit value) { m_adjustedLogicalLineTop = value; } |
- |
- RenderFlowThread* flowThread() const { return m_flowThread; } |
- void setFlowThread(RenderFlowThread* thread) { m_flowThread = thread; } |
- |
-private: |
- Vector<RenderBlockFlow::FloatWithRect> m_floats; |
- FloatingObject* m_lastFloat; |
- RootInlineBox* m_endLine; |
- LineInfo m_lineInfo; |
- unsigned m_floatIndex; |
- LayoutUnit m_endLineLogicalTop; |
- bool m_endLineMatched; |
- bool m_checkForFloatsFromLastLine; |
- |
- bool m_isFullLayout; |
- |
- // FIXME: Should this be a range object instead of two ints? |
- LayoutUnit& m_repaintLogicalTop; |
- LayoutUnit& m_repaintLogicalBottom; |
- |
- LayoutUnit m_adjustedLogicalLineTop; |
- |
- bool m_usesRepaintBounds; |
- |
- RenderFlowThread* m_flowThread; |
-}; |
- |
static void deleteLineRange(LineLayoutState& layoutState, RootInlineBox* startLine, RootInlineBox* stopLine = 0) |
{ |
RootInlineBox* boxToDelete = startLine; |