Index: Source/core/rendering/RenderBlockLineLayout.cpp |
diff --git a/Source/core/rendering/RenderBlockLineLayout.cpp b/Source/core/rendering/RenderBlockLineLayout.cpp |
index f2b9bed38c58a47b8d2f2f54c48d1012b9e967fa..134ed4e9ab302ad100bd893d27367922b9096a6d 100644 |
--- a/Source/core/rendering/RenderBlockLineLayout.cpp |
+++ b/Source/core/rendering/RenderBlockLineLayout.cpp |
@@ -25,10 +25,8 @@ |
#include "core/rendering/FastTextAutosizer.h" |
#include "core/rendering/LayoutRectRecorder.h" |
#include "core/rendering/RenderCounter.h" |
-#include "core/rendering/RenderFlowThread.h" |
#include "core/rendering/RenderLayer.h" |
#include "core/rendering/RenderListMarker.h" |
-#include "core/rendering/RenderRegion.h" |
#include "core/rendering/RenderRubyRun.h" |
#include "core/rendering/RenderView.h" |
#include "core/rendering/TrailingFloatsRootInlineBox.h" |
@@ -1104,9 +1102,6 @@ static inline void pushShapeContentOverflowBelowTheContentBox(RenderBlockFlow* b |
void RenderBlockFlow::updateShapeAndSegmentsForCurrentLine(ShapeInsideInfo*& shapeInsideInfo, const LayoutSize& logicalOffsetFromShapeContainer, LineLayoutState& layoutState) |
{ |
- if (layoutState.flowThread()) |
- return updateShapeAndSegmentsForCurrentLineInFlowThread(shapeInsideInfo, layoutState); |
- |
if (!shapeInsideInfo) |
return; |
@@ -1120,87 +1115,6 @@ void RenderBlockFlow::updateShapeAndSegmentsForCurrentLine(ShapeInsideInfo*& sha |
pushShapeContentOverflowBelowTheContentBox(this, shapeInsideInfo, lineTop, lineHeight); |
} |
-void RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread(ShapeInsideInfo*& shapeInsideInfo, LineLayoutState& layoutState) |
-{ |
- ASSERT(layoutState.flowThread()); |
- |
- RenderRegion* currentRegion = regionAtBlockOffset(logicalHeight()); |
- if (!currentRegion || !currentRegion->logicalHeight()) |
- return; |
- |
- shapeInsideInfo = currentRegion->shapeInsideInfo(); |
- |
- RenderRegion* nextRegion = 0; |
- if (!currentRegion->isLastRegion()) { |
- RenderRegionList regionList = layoutState.flowThread()->renderRegionList(); |
- RenderRegionList::const_iterator it = regionList.find(currentRegion); |
- nextRegion = *(++it); |
- } |
- |
- // We only want to deal regions with shapes, so we check if the next region has a shape |
- if (!shapeInsideInfo && nextRegion && !nextRegion->shapeInsideInfo()) |
- return; |
- |
- LayoutUnit lineHeight = this->lineHeight(layoutState.lineInfo().isFirstLine(), isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes); |
- LayoutUnit logicalLineTopInFlowThread = logicalHeight() + offsetFromLogicalTopOfFirstPage(); |
- LayoutUnit logicalLineBottomInFlowThread = logicalLineTopInFlowThread + lineHeight; |
- LayoutUnit logicalRegionTopInFlowThread = currentRegion->logicalTopForFlowThreadContent(); |
- LayoutUnit logicalRegionBottomInFlowThread = logicalRegionTopInFlowThread + currentRegion->logicalHeight() - currentRegion->borderAndPaddingBefore() - currentRegion->borderAndPaddingAfter(); |
- |
- LayoutUnit shapeBottomInFlowThread = LayoutUnit::max(); |
- if (shapeInsideInfo) |
- shapeBottomInFlowThread = shapeInsideInfo->shapeLogicalBottom() + currentRegion->logicalTopForFlowThreadContent(); |
- |
- bool lineOverLapsWithShapeBottom = shapeBottomInFlowThread < logicalLineBottomInFlowThread; |
- bool lineTopAdjustedIntoNextRegion = layoutState.adjustedLogicalLineTop() >= currentRegion->logicalHeight(); |
- bool lineOverLapsWithRegionBottom = logicalLineBottomInFlowThread > logicalRegionBottomInFlowThread || lineTopAdjustedIntoNextRegion; |
- bool overFlowsToNextRegion = nextRegion && (lineOverLapsWithShapeBottom || lineOverLapsWithRegionBottom); |
- |
- // If the line is between two shapes/regions we position the line to the top of the next shape/region |
- if (overFlowsToNextRegion) { |
- ASSERT(currentRegion != nextRegion); |
- LayoutUnit deltaToNextRegion = logicalRegionBottomInFlowThread - logicalLineTopInFlowThread; |
- setLogicalHeight(logicalHeight() + deltaToNextRegion); |
- |
- currentRegion = nextRegion; |
- shapeInsideInfo = currentRegion->shapeInsideInfo(); |
- |
- logicalLineTopInFlowThread = logicalHeight() + offsetFromLogicalTopOfFirstPage(); |
- logicalLineBottomInFlowThread = logicalLineTopInFlowThread + lineHeight; |
- logicalRegionTopInFlowThread = currentRegion->logicalTopForFlowThreadContent(); |
- logicalRegionBottomInFlowThread = logicalRegionTopInFlowThread + currentRegion->logicalHeight() - currentRegion->borderAndPaddingBefore() - currentRegion->borderAndPaddingAfter(); |
- |
- if (lineTopAdjustedIntoNextRegion) |
- layoutState.setAdjustedLogicalLineTop(0); |
- } |
- |
- if (!shapeInsideInfo) |
- return; |
- |
- bool isFirstLineInRegion = logicalLineBottomInFlowThread <= (logicalRegionTopInFlowThread + lineHeight); |
- bool isFirstLineAdjusted = (logicalLineTopInFlowThread - logicalRegionTopInFlowThread) < (layoutState.adjustedLogicalLineTop() - currentRegion->borderAndPaddingBefore()); |
- // We position the first line to the top of the shape in the region or to the previously adjusted position in the shape |
- if (isFirstLineInRegion || isFirstLineAdjusted) { |
- LayoutUnit shapeTopOffset = layoutState.adjustedLogicalLineTop(); |
- if (!shapeTopOffset && (shapeInsideInfo->shapeLogicalTop() > 0)) |
- shapeTopOffset = shapeInsideInfo->shapeLogicalTop(); |
- |
- LayoutUnit shapePositionInFlowThread = currentRegion->logicalTopForFlowThreadContent() + shapeTopOffset; |
- LayoutUnit shapeTopLineTopDelta = shapePositionInFlowThread - logicalLineTopInFlowThread - currentRegion->borderAndPaddingBefore(); |
- |
- setLogicalHeight(logicalHeight() + shapeTopLineTopDelta); |
- logicalLineTopInFlowThread += shapeTopLineTopDelta; |
- layoutState.setAdjustedLogicalLineTop(0); |
- } |
- |
- LayoutUnit lineTop = logicalLineTopInFlowThread - currentRegion->logicalTopForFlowThreadContent() + currentRegion->borderAndPaddingBefore(); |
- // FIXME: Shape inside on a region does not yet take into account its padding for nested flow blocks |
- shapeInsideInfo->updateSegmentsForLine(LayoutSize(0, lineTop), lineHeight); |
- |
- if (currentRegion->isLastRegion()) |
- pushShapeContentOverflowBelowTheContentBox(this, shapeInsideInfo, lineTop, lineHeight); |
-} |
- |
bool RenderBlockFlow::adjustLogicalLineTopAndLogicalHeightIfNeeded(ShapeInsideInfo* shapeInsideInfo, LayoutUnit absoluteLogicalTop, LineLayoutState& layoutState, InlineBidiResolver& resolver, FloatingObject* lastFloatFromPreviousLine, InlineIterator& end, WordMeasurements& wordMeasurements) |
{ |
LayoutUnit adjustedLogicalLineTop = adjustLogicalLineTop(shapeInsideInfo, resolver.position(), end, wordMeasurements); |
@@ -1219,11 +1133,6 @@ bool RenderBlockFlow::adjustLogicalLineTopAndLogicalHeightIfNeeded(ShapeInsideIn |
LayoutUnit newLogicalHeight = adjustedLogicalLineTop - absoluteLogicalTop; |
- if (layoutState.flowThread()) { |
- layoutState.setAdjustedLogicalLineTop(adjustedLogicalLineTop); |
- newLogicalHeight = logicalHeight(); |
- } |
- |
end = restartLayoutRunsAndFloatsInRange(logicalHeight(), newLogicalHeight, lastFloatFromPreviousLine, resolver, end); |
return true; |
} |
@@ -1252,8 +1161,6 @@ void RenderBlockFlow::layoutRunsAndFloatsInRange(LineLayoutState& layoutState, I |
// Begin layout at the logical top of our shape inside. |
if (logicalHeight() + logicalOffsetFromShapeContainer.height() < shapeInsideInfo->shapeLogicalTop()) { |
LayoutUnit logicalHeight = shapeInsideInfo->shapeLogicalTop() - logicalOffsetFromShapeContainer.height(); |
- if (layoutState.flowThread()) |
- logicalHeight -= shapeInsideInfo->owner()->borderAndPaddingBefore(); |
setLogicalHeight(logicalHeight); |
} |
} |
@@ -1337,7 +1244,7 @@ void RenderBlockFlow::layoutRunsAndFloatsInRange(LineLayoutState& layoutState, I |
if (paginated) { |
LayoutUnit adjustment = 0; |
- adjustLinePositionForPagination(lineBox, adjustment, layoutState.flowThread()); |
+ adjustLinePositionForPagination(lineBox, adjustment); |
if (adjustment) { |
LayoutUnit oldLineWidth = availableLogicalWidthForLine(oldLogicalHeight, layoutState.lineInfo().isFirstLine()); |
lineBox->adjustBlockDirectionPosition(adjustment); |
@@ -1353,9 +1260,6 @@ void RenderBlockFlow::layoutRunsAndFloatsInRange(LineLayoutState& layoutState, I |
setLogicalHeight(lineBox->lineBottomWithLeading()); |
} |
- |
- if (layoutState.flowThread()) |
- updateRegionForLine(lineBox); |
} |
} |
} |
@@ -1468,14 +1372,12 @@ void RenderBlockFlow::linkToEndLineIfNeeded(LineLayoutState& layoutState) |
line->attachLine(); |
if (paginated) { |
delta -= line->paginationStrut(); |
- adjustLinePositionForPagination(line, delta, layoutState.flowThread()); |
+ adjustLinePositionForPagination(line, delta); |
} |
if (delta) { |
layoutState.updateRepaintRangeFromBox(line, delta); |
line->adjustBlockDirectionPosition(delta); |
} |
- if (layoutState.flowThread()) |
- updateRegionForLine(line); |
if (Vector<RenderBox*>* cleanLineFloats = line->floatsPtr()) { |
Vector<RenderBox*>::iterator end = cleanLineFloats->end(); |
for (Vector<RenderBox*>::iterator f = cleanLineFloats->begin(); f != end; ++f) { |
@@ -1509,12 +1411,10 @@ void RenderBlockFlow::linkToEndLineIfNeeded(LineLayoutState& layoutState) |
LayoutUnit blockLogicalHeight = logicalHeight(); |
trailingFloatsLineBox->alignBoxesInBlockDirection(blockLogicalHeight, textBoxDataMap, verticalPositionCache); |
trailingFloatsLineBox->setLineTopBottomPositions(blockLogicalHeight, blockLogicalHeight, blockLogicalHeight, blockLogicalHeight); |
- trailingFloatsLineBox->setPaginatedLineWidth(availableLogicalWidthForContent(blockLogicalHeight)); |
+ trailingFloatsLineBox->setPaginatedLineWidth(availableLogicalWidthForContent()); |
LayoutRect logicalLayoutOverflow(0, blockLogicalHeight, 1, bottomLayoutOverflow - blockLogicalHeight); |
LayoutRect logicalVisualOverflow(0, blockLogicalHeight, 1, bottomVisualOverflow - blockLogicalHeight); |
trailingFloatsLineBox->setOverflowFromLogicalRects(logicalLayoutOverflow, logicalVisualOverflow, trailingFloatsLineBox->lineTop(), trailingFloatsLineBox->lineBottom()); |
- if (layoutState.flowThread()) |
- updateRegionForLine(trailingFloatsLineBox); |
} |
const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set(); |
@@ -1557,13 +1457,10 @@ void RenderBlockFlow::layoutInlineChildren(bool relayoutChildren, LayoutUnit& re |
if (view()->layoutState() && view()->layoutState()->lineGrid() == this) |
layoutLineGridBox(); |
- RenderFlowThread* flowThread = flowThreadContainingBlock(); |
- bool clearLinesForPagination = firstLineBox() && flowThread && !flowThread->hasRegions(); |
- |
// Figure out if we should clear out our line boxes. |
// FIXME: Handle resize eventually! |
- bool isFullLayout = !firstLineBox() || selfNeedsLayout() || relayoutChildren || clearLinesForPagination; |
- LineLayoutState layoutState(isFullLayout, repaintLogicalTop, repaintLogicalBottom, flowThread); |
+ bool isFullLayout = !firstLineBox() || selfNeedsLayout() || relayoutChildren; |
+ LineLayoutState layoutState(isFullLayout, repaintLogicalTop, repaintLogicalBottom); |
if (isFullLayout) |
lineBoxes()->deleteLineBoxes(); |
@@ -1698,12 +1595,12 @@ RootInlineBox* RenderBlockFlow::determineStartPosition(LineLayoutState& layoutSt |
size_t floatIndex = 0; |
for (curr = firstRootBox(); curr && !curr->isDirty(); curr = curr->nextRootBox()) { |
if (paginated) { |
- if (lineWidthForPaginatedLineChanged(curr, 0, layoutState.flowThread())) { |
+ if (lineWidthForPaginatedLineChanged(curr, 0)) { |
curr->markDirty(); |
break; |
} |
paginationDelta -= curr->paginationStrut(); |
- adjustLinePositionForPagination(curr, paginationDelta, layoutState.flowThread()); |
+ adjustLinePositionForPagination(curr, paginationDelta); |
if (paginationDelta) { |
if (containsFloats() || !layoutState.floats().isEmpty()) { |
// FIXME: Do better eventually. For now if we ever shift because of pagination and floats are present just go to a full layout. |
@@ -1714,8 +1611,6 @@ RootInlineBox* RenderBlockFlow::determineStartPosition(LineLayoutState& layoutSt |
layoutState.updateRepaintRangeFromBox(curr, paginationDelta); |
curr->adjustBlockDirectionPosition(paginationDelta); |
} |
- if (layoutState.flowThread()) |
- updateRegionForLine(curr); |
} |
// If a new float has been inserted before this line or before its last known float, just do a full layout. |
@@ -1848,24 +1743,6 @@ bool RenderBlockFlow::checkPaginationAndFloatsAtEndLine(LineLayoutState& layoutS |
{ |
LayoutUnit lineDelta = logicalHeight() - layoutState.endLineLogicalTop(); |
- bool paginated = view()->layoutState() && view()->layoutState()->isPaginated(); |
- if (paginated && layoutState.flowThread()) { |
- // Check all lines from here to the end, and see if the hypothetical new position for the lines will result |
- // in a different available line width. |
- for (RootInlineBox* lineBox = layoutState.endLine(); lineBox; lineBox = lineBox->nextRootBox()) { |
- if (paginated) { |
- // This isn't the real move we're going to do, so don't update the line box's pagination |
- // strut yet. |
- LayoutUnit oldPaginationStrut = lineBox->paginationStrut(); |
- lineDelta -= oldPaginationStrut; |
- adjustLinePositionForPagination(lineBox, lineDelta, layoutState.flowThread()); |
- lineBox->setPaginationStrut(oldPaginationStrut); |
- } |
- if (lineWidthForPaginatedLineChanged(lineBox, lineDelta, layoutState.flowThread())) |
- return false; |
- } |
- } |
- |
if (!lineDelta || !m_floatingObjects) |
return true; |