| Index: Source/core/rendering/RenderBlockFlow.cpp
|
| diff --git a/Source/core/rendering/RenderBlockFlow.cpp b/Source/core/rendering/RenderBlockFlow.cpp
|
| index e3e61fcdb0f39483b049fe6ace08700380067207..f48483587087eaba1346a71486b935834811ed48 100644
|
| --- a/Source/core/rendering/RenderBlockFlow.cpp
|
| +++ b/Source/core/rendering/RenderBlockFlow.cpp
|
| @@ -190,9 +190,9 @@ RenderObject* RenderBlockFlow::layoutSpecialExcludedChild(bool relayoutChildren,
|
| RenderMultiColumnFlowThread* flowThread = multiColumnFlowThread();
|
| if (!flowThread)
|
| return 0;
|
| - setLogicalTopForChild(flowThread, borderBefore() + paddingBefore());
|
| + setLogicalTopForChild(*flowThread, borderBefore() + paddingBefore());
|
| flowThread->layoutColumns(relayoutChildren, layoutScope);
|
| - determineLogicalLeftPositionForChild(flowThread);
|
| + determineLogicalLeftPositionForChild(*flowThread);
|
| return flowThread;
|
| }
|
|
|
| @@ -501,7 +501,7 @@ inline bool RenderBlockFlow::layoutBlockFlow(bool relayoutChildren, LayoutUnit &
|
| return true;
|
| }
|
|
|
| -void RenderBlockFlow::determineLogicalLeftPositionForChild(RenderBox* child)
|
| +void RenderBlockFlow::determineLogicalLeftPositionForChild(RenderBox& child)
|
| {
|
| LayoutUnit startPosition = borderStart() + paddingStart();
|
| LayoutUnit initialStartPosition = startPosition;
|
| @@ -513,14 +513,14 @@ void RenderBlockFlow::determineLogicalLeftPositionForChild(RenderBox* child)
|
| LayoutUnit newPosition = startPosition + childMarginStart;
|
|
|
| LayoutUnit positionToAvoidFloats;
|
| - if (child->avoidsFloats() && containsFloats() && !flowThreadContainingBlock())
|
| + if (child.avoidsFloats() && containsFloats() && !flowThreadContainingBlock())
|
| positionToAvoidFloats = startOffsetForLine(logicalTopForChild(child), false, logicalHeightForChild(child));
|
|
|
| // If the child has an offset from the content edge to avoid floats then use that, otherwise let any negative
|
| // margin pull it back over the content edge or any positive margin push it out.
|
| // If the child is being centred then the margin calculated to do that has factored in any offset required to
|
| // avoid floats, so use it if necessary.
|
| - if (style()->textAlign() == WEBKIT_CENTER || child->style()->marginStartUsing(style()).isAuto())
|
| + if (style()->textAlign() == WEBKIT_CENTER || child.style()->marginStartUsing(style()).isAuto())
|
| newPosition = std::max(newPosition, positionToAvoidFloats + childMarginStart);
|
| else if (positionToAvoidFloats > initialStartPosition)
|
| newPosition = std::max(newPosition, positionToAvoidFloats);
|
| @@ -528,31 +528,31 @@ void RenderBlockFlow::determineLogicalLeftPositionForChild(RenderBox* child)
|
| setLogicalLeftForChild(child, style()->isLeftToRightDirection() ? newPosition : totalAvailableLogicalWidth - newPosition - logicalWidthForChild(child));
|
| }
|
|
|
| -void RenderBlockFlow::setLogicalLeftForChild(RenderBox* child, LayoutUnit logicalLeft)
|
| +void RenderBlockFlow::setLogicalLeftForChild(RenderBox& child, LayoutUnit logicalLeft)
|
| {
|
| if (isHorizontalWritingMode()) {
|
| - child->setX(logicalLeft);
|
| + child.setX(logicalLeft);
|
| } else {
|
| - child->setY(logicalLeft);
|
| + child.setY(logicalLeft);
|
| }
|
| }
|
|
|
| -void RenderBlockFlow::setLogicalTopForChild(RenderBox* child, LayoutUnit logicalTop)
|
| +void RenderBlockFlow::setLogicalTopForChild(RenderBox& child, LayoutUnit logicalTop)
|
| {
|
| if (isHorizontalWritingMode()) {
|
| - child->setY(logicalTop);
|
| + child.setY(logicalTop);
|
| } else {
|
| - child->setX(logicalTop);
|
| + child.setX(logicalTop);
|
| }
|
| }
|
|
|
| -void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo, LayoutUnit& previousFloatLogicalBottom)
|
| +void RenderBlockFlow::layoutBlockChild(RenderBox& child, MarginInfo& marginInfo, LayoutUnit& previousFloatLogicalBottom)
|
| {
|
| LayoutUnit oldPosMarginBefore = maxPositiveMarginBefore();
|
| LayoutUnit oldNegMarginBefore = maxNegativeMarginBefore();
|
|
|
| // The child is a normal flow object. Compute the margins we will use for collapsing now.
|
| - child->computeAndSetBlockDirectionMargins(this);
|
| + child.computeAndSetBlockDirectionMargins(this);
|
|
|
| // Try to guess our correct logical top position. In most cases this guess will
|
| // be correct. Only if we're wrong (when we compute the real logical top position)
|
| @@ -561,13 +561,13 @@ void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo,
|
| LayoutUnit logicalTopEstimate = estimateLogicalTopPosition(child, marginInfo, estimateWithoutPagination);
|
|
|
| // Cache our old rect so that we can dirty the proper paint invalidation rects if the child moves.
|
| - LayoutRect oldRect = child->frameRect();
|
| + LayoutRect oldRect = child.frameRect();
|
| LayoutUnit oldLogicalTop = logicalTopForChild(child);
|
|
|
| // Go ahead and position the child as though it didn't collapse with the top.
|
| setLogicalTopForChild(child, logicalTopEstimate);
|
|
|
| - RenderBlockFlow* childRenderBlockFlow = child->isRenderBlockFlow() ? toRenderBlockFlow(child) : 0;
|
| + RenderBlockFlow* childRenderBlockFlow = child.isRenderBlockFlow() ? toRenderBlockFlow(&child) : 0;
|
| bool markDescendantsWithFloats = false;
|
| if (logicalTopEstimate != oldLogicalTop && childRenderBlockFlow && !childRenderBlockFlow->avoidsFloats() && childRenderBlockFlow->containsFloats()) {
|
| markDescendantsWithFloats = true;
|
| @@ -577,7 +577,7 @@ void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo,
|
| // false negative as adding and removing margins, borders etc from a saturated number
|
| // might yield incorrect results. If this is the case always mark for layout.
|
| markDescendantsWithFloats = true;
|
| - } else if (!child->avoidsFloats() || child->shrinkToAvoidFloats()) {
|
| + } else if (!child.avoidsFloats() || child.shrinkToAvoidFloats()) {
|
| // If an element might be affected by the presence of floats, then always mark it for
|
| // layout.
|
| LayoutUnit fb = std::max(previousFloatLogicalBottom, lowestFloatLogicalBottom());
|
| @@ -588,21 +588,21 @@ void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo,
|
| if (childRenderBlockFlow) {
|
| if (markDescendantsWithFloats)
|
| childRenderBlockFlow->markAllDescendantsWithFloatsForLayout();
|
| - if (!child->isWritingModeRoot())
|
| + if (!child.isWritingModeRoot())
|
| previousFloatLogicalBottom = std::max(previousFloatLogicalBottom, oldLogicalTop + childRenderBlockFlow->lowestFloatLogicalBottom());
|
| }
|
|
|
| - SubtreeLayoutScope layoutScope(*child);
|
| - if (!child->needsLayout())
|
| - child->markForPaginationRelayoutIfNeeded(layoutScope);
|
| + SubtreeLayoutScope layoutScope(child);
|
| + if (!child.needsLayout())
|
| + child.markForPaginationRelayoutIfNeeded(layoutScope);
|
|
|
| - bool childNeededLayout = child->needsLayout();
|
| + bool childNeededLayout = child.needsLayout();
|
| if (childNeededLayout)
|
| - child->layout();
|
| + child.layout();
|
|
|
| // Cache if we are at the top of the block right now.
|
| bool atBeforeSideOfBlock = marginInfo.atBeforeSideOfBlock();
|
| - bool childIsSelfCollapsing = child->isSelfCollapsingBlock();
|
| + bool childIsSelfCollapsing = child.isSelfCollapsingBlock();
|
|
|
| // Now determine the correct ypos based off examination of collapsing margin
|
| // values.
|
| @@ -622,24 +622,24 @@ void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo,
|
| // Now we have a final top position. See if it really does end up being different from our estimate.
|
| // clearFloatsIfNeeded can also mark the child as needing a layout even though we didn't move. This happens
|
| // when collapseMargins dynamically adds overhanging floats because of a child with negative margins.
|
| - if (logicalTopAfterClear != logicalTopEstimate || child->needsLayout() || (paginated && childRenderBlockFlow && childRenderBlockFlow->shouldBreakAtLineToAvoidWidow())) {
|
| - SubtreeLayoutScope layoutScope(*child);
|
| - if (child->shrinkToAvoidFloats()) {
|
| + if (logicalTopAfterClear != logicalTopEstimate || child.needsLayout() || (paginated && childRenderBlockFlow && childRenderBlockFlow->shouldBreakAtLineToAvoidWidow())) {
|
| + SubtreeLayoutScope layoutScope(child);
|
| + if (child.shrinkToAvoidFloats()) {
|
| // The child's width depends on the line width.
|
| // When the child shifts to clear an item, its width can
|
| // change (because it has more available line width).
|
| // So go ahead and mark the item as dirty.
|
| - layoutScope.setChildNeedsLayout(child);
|
| + layoutScope.setChildNeedsLayout(&child);
|
| }
|
|
|
| if (childRenderBlockFlow && !childRenderBlockFlow->avoidsFloats() && childRenderBlockFlow->containsFloats())
|
| childRenderBlockFlow->markAllDescendantsWithFloatsForLayout();
|
|
|
| - if (!child->needsLayout())
|
| - child->markForPaginationRelayoutIfNeeded(layoutScope);
|
| + if (!child.needsLayout())
|
| + child.markForPaginationRelayoutIfNeeded(layoutScope);
|
|
|
| // Our guess was wrong. Make the child lay itself out again.
|
| - child->layoutIfNeeded();
|
| + child.layoutIfNeeded();
|
| }
|
|
|
| // If we previously encountered a self-collapsing sibling of this child that had clearance then
|
| @@ -657,7 +657,7 @@ void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo,
|
| // Now place the child in the correct left position
|
| determineLogicalLeftPositionForChild(child);
|
|
|
| - LayoutSize childOffset = child->location() - oldRect.location();
|
| + LayoutSize childOffset = child.location() - oldRect.location();
|
|
|
| // Update our height now that the child has been placed in the correct position.
|
| setLogicalHeight(logicalHeight() + logicalHeightForChild(child));
|
| @@ -674,7 +674,7 @@ void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo,
|
| // descendants. An exception is if we need a layout. In this case, we know we're going to
|
| // invalidate our paint (and the child) anyway.
|
| if (!selfNeedsLayout() && (childOffset.width() || childOffset.height()))
|
| - child->invalidatePaintForOverhangingFloats(true);
|
| + child.invalidatePaintForOverhangingFloats(true);
|
|
|
| if (paginated) {
|
| // Check for an after page/column break.
|
| @@ -684,9 +684,9 @@ void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo,
|
| }
|
| }
|
|
|
| -LayoutUnit RenderBlockFlow::adjustBlockChildForPagination(LayoutUnit logicalTopAfterClear, LayoutUnit estimateWithoutPagination, RenderBox* child, bool atBeforeSideOfBlock)
|
| +LayoutUnit RenderBlockFlow::adjustBlockChildForPagination(LayoutUnit logicalTopAfterClear, LayoutUnit estimateWithoutPagination, RenderBox& child, bool atBeforeSideOfBlock)
|
| {
|
| - RenderBlockFlow* childBlockFlow = child->isRenderBlockFlow() ? toRenderBlockFlow(child) : 0;
|
| + RenderBlockFlow* childBlockFlow = child.isRenderBlockFlow() ? toRenderBlockFlow(&child) : 0;
|
|
|
| if (estimateWithoutPagination != logicalTopAfterClear) {
|
| // Our guess prior to pagination movement was wrong. Before we attempt to paginate, let's try again at the new
|
| @@ -694,25 +694,25 @@ LayoutUnit RenderBlockFlow::adjustBlockChildForPagination(LayoutUnit logicalTopA
|
| setLogicalHeight(logicalTopAfterClear);
|
| setLogicalTopForChild(child, logicalTopAfterClear);
|
|
|
| - if (child->shrinkToAvoidFloats()) {
|
| + if (child.shrinkToAvoidFloats()) {
|
| // The child's width depends on the line width.
|
| // When the child shifts to clear an item, its width can
|
| // change (because it has more available line width).
|
| // So go ahead and mark the item as dirty.
|
| - child->setChildNeedsLayout(MarkOnlyThis);
|
| + child.setChildNeedsLayout(MarkOnlyThis);
|
| }
|
|
|
| - SubtreeLayoutScope layoutScope(*child);
|
| + SubtreeLayoutScope layoutScope(child);
|
|
|
| if (childBlockFlow) {
|
| if (!childBlockFlow->avoidsFloats() && childBlockFlow->containsFloats())
|
| childBlockFlow->markAllDescendantsWithFloatsForLayout();
|
| - if (!child->needsLayout())
|
| - child->markForPaginationRelayoutIfNeeded(layoutScope);
|
| + if (!child.needsLayout())
|
| + child.markForPaginationRelayoutIfNeeded(layoutScope);
|
| }
|
|
|
| // Our guess was wrong. Make the child lay itself out again.
|
| - child->layoutIfNeeded();
|
| + child.layoutIfNeeded();
|
| }
|
|
|
| LayoutUnit oldTop = logicalTopAfterClear;
|
| @@ -726,7 +726,7 @@ LayoutUnit RenderBlockFlow::adjustBlockChildForPagination(LayoutUnit logicalTopA
|
|
|
| LayoutUnit paginationStrut = 0;
|
| LayoutUnit unsplittableAdjustmentDelta = logicalTopAfterUnsplittableAdjustment - logicalTopBeforeUnsplittableAdjustment;
|
| - LayoutUnit childLogicalHeight = child->logicalHeight();
|
| + LayoutUnit childLogicalHeight = child.logicalHeight();
|
| if (unsplittableAdjustmentDelta) {
|
| setPageBreak(result, childLogicalHeight - unsplittableAdjustmentDelta);
|
| paginationStrut = unsplittableAdjustmentDelta;
|
| @@ -761,7 +761,7 @@ LayoutUnit RenderBlockFlow::adjustBlockChildForPagination(LayoutUnit logicalTopA
|
| // boundary, in case it crosses more than one.
|
| LayoutUnit spaceShortageInLastColumn = intMod(spaceShortage, pageLogicalHeight);
|
| setPageBreak(result, spaceShortageInLastColumn ? spaceShortageInLastColumn : spaceShortage);
|
| - } else if (remainingLogicalHeight == pageLogicalHeight && offsetFromLogicalTopOfFirstPage() + child->logicalTop()) {
|
| + } else if (remainingLogicalHeight == pageLogicalHeight && offsetFromLogicalTopOfFirstPage() + child.logicalTop()) {
|
| // We're at the very top of a page or column, and it's not the first one. This child
|
| // may turn out to be the smallest piece of content that causes a page break, so we
|
| // need to report it.
|
| @@ -795,7 +795,7 @@ static inline LayoutUnit calculateMinimumPageHeight(RenderStyle* renderStyle, Ro
|
| return lineBottom - lineTop;
|
| }
|
|
|
| -void RenderBlockFlow::adjustLinePositionForPagination(RootInlineBox* lineBox, LayoutUnit& delta, RenderFlowThread* flowThread)
|
| +void RenderBlockFlow::adjustLinePositionForPagination(RootInlineBox& lineBox, LayoutUnit& delta, RenderFlowThread* flowThread)
|
| {
|
| // FIXME: For now we paginate using line overflow. This ensures that lines don't overlap at all when we
|
| // put a strut between them for pagination purposes. However, this really isn't the desired rendering, since
|
| @@ -816,14 +816,14 @@ void RenderBlockFlow::adjustLinePositionForPagination(RootInlineBox* lineBox, La
|
| // FIXME: Another problem with simply moving lines is that the available line width may change (because of floats).
|
| // Technically if the location we move the line to has a different line width than our old position, then we need to dirty the
|
| // line and all following lines.
|
| - LayoutRect logicalVisualOverflow = lineBox->logicalVisualOverflowRect(lineBox->lineTop(), lineBox->lineBottom());
|
| - LayoutUnit logicalOffset = std::min(lineBox->lineTopWithLeading(), logicalVisualOverflow.y());
|
| - LayoutUnit logicalBottom = std::max(lineBox->lineBottomWithLeading(), logicalVisualOverflow.maxY());
|
| + LayoutRect logicalVisualOverflow = lineBox.logicalVisualOverflowRect(lineBox.lineTop(), lineBox.lineBottom());
|
| + LayoutUnit logicalOffset = std::min(lineBox.lineTopWithLeading(), logicalVisualOverflow.y());
|
| + LayoutUnit logicalBottom = std::max(lineBox.lineBottomWithLeading(), logicalVisualOverflow.maxY());
|
| LayoutUnit lineHeight = logicalBottom - logicalOffset;
|
| - updateMinimumPageHeight(logicalOffset, calculateMinimumPageHeight(style(), lineBox, logicalOffset, logicalBottom));
|
| + updateMinimumPageHeight(logicalOffset, calculateMinimumPageHeight(style(), &lineBox, logicalOffset, logicalBottom));
|
| logicalOffset += delta;
|
| - lineBox->setPaginationStrut(0);
|
| - lineBox->setIsFirstAfterPageBreak(false);
|
| + lineBox.setPaginationStrut(0);
|
| + lineBox.setIsFirstAfterPageBreak(false);
|
| LayoutUnit pageLogicalHeight = pageLogicalHeightForOffset(logicalOffset);
|
| bool hasUniformPageLogicalHeight = !flowThread || flowThread->regionsHaveUniformLogicalHeight();
|
| // If lineHeight is greater than pageLogicalHeight, but logicalVisualOverflow.height() still fits, we are
|
| @@ -835,7 +835,7 @@ void RenderBlockFlow::adjustLinePositionForPagination(RootInlineBox* lineBox, La
|
| }
|
| LayoutUnit remainingLogicalHeight = pageRemainingLogicalHeightForOffset(logicalOffset, ExcludePageBoundary);
|
|
|
| - int lineIndex = lineCount(lineBox);
|
| + int lineIndex = lineCount(&lineBox);
|
| if (remainingLogicalHeight < lineHeight || (shouldBreakAtLineToAvoidWidow() && lineBreakToAvoidWidow() == lineIndex)) {
|
| if (shouldBreakAtLineToAvoidWidow() && lineBreakToAvoidWidow() == lineIndex) {
|
| clearShouldBreakAtLineToAvoidWidow();
|
| @@ -843,7 +843,7 @@ void RenderBlockFlow::adjustLinePositionForPagination(RootInlineBox* lineBox, La
|
| }
|
| if (lineHeight > pageLogicalHeight) {
|
| // Split the top margin in order to avoid splitting the visible part of the line.
|
| - remainingLogicalHeight -= std::min(lineHeight - pageLogicalHeight, std::max<LayoutUnit>(0, logicalVisualOverflow.y() - lineBox->lineTopWithLeading()));
|
| + remainingLogicalHeight -= std::min(lineHeight - pageLogicalHeight, std::max<LayoutUnit>(0, logicalVisualOverflow.y() - lineBox.lineTopWithLeading()));
|
| }
|
| LayoutUnit totalLogicalHeight = lineHeight + std::max<LayoutUnit>(0, logicalOffset);
|
| LayoutUnit pageLogicalHeightAtNewOffset = hasUniformPageLogicalHeight ? pageLogicalHeight : pageLogicalHeightForOffset(logicalOffset + remainingLogicalHeight);
|
| @@ -853,24 +853,24 @@ void RenderBlockFlow::adjustLinePositionForPagination(RootInlineBox* lineBox, La
|
| setPaginationStrut(remainingLogicalHeight + std::max<LayoutUnit>(0, logicalOffset));
|
| } else {
|
| delta += remainingLogicalHeight;
|
| - lineBox->setPaginationStrut(remainingLogicalHeight);
|
| - lineBox->setIsFirstAfterPageBreak(true);
|
| + lineBox.setPaginationStrut(remainingLogicalHeight);
|
| + lineBox.setIsFirstAfterPageBreak(true);
|
| }
|
| } else if (remainingLogicalHeight == pageLogicalHeight) {
|
| // We're at the very top of a page or column.
|
| if (lineBox != firstRootBox())
|
| - lineBox->setIsFirstAfterPageBreak(true);
|
| + lineBox.setIsFirstAfterPageBreak(true);
|
| if (lineBox != firstRootBox() || offsetFromLogicalTopOfFirstPage())
|
| setPageBreak(logicalOffset, lineHeight);
|
| }
|
| }
|
|
|
| -LayoutUnit RenderBlockFlow::adjustForUnsplittableChild(RenderBox* child, LayoutUnit logicalOffset, bool includeMargins)
|
| +LayoutUnit RenderBlockFlow::adjustForUnsplittableChild(RenderBox& child, LayoutUnit logicalOffset, bool includeMargins)
|
| {
|
| bool checkColumnBreaks = view()->layoutState()->isPaginatingColumns() || flowThreadContainingBlock();
|
| bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->pageLogicalHeight();
|
| - bool isUnsplittable = child->isUnsplittableForPagination() || (checkColumnBreaks && child->style()->columnBreakInside() == PBAVOID)
|
| - || (checkPageBreaks && child->style()->pageBreakInside() == PBAVOID);
|
| + bool isUnsplittable = child.isUnsplittableForPagination() || (checkColumnBreaks && child.style()->columnBreakInside() == PBAVOID)
|
| + || (checkPageBreaks && child.style()->pageBreakInside() == PBAVOID);
|
| if (!isUnsplittable)
|
| return logicalOffset;
|
| LayoutUnit childLogicalHeight = logicalHeightForChild(child) + (includeMargins ? marginBeforeForChild(child) + marginAfterForChild(child) : LayoutUnit());
|
| @@ -1045,21 +1045,21 @@ void RenderBlockFlow::layoutBlockChildren(bool relayoutChildren, SubtreeLayoutSc
|
| if (childToExclude == child)
|
| continue; // Skip this child, since it will be positioned by the specialized subclass (fieldsets and ruby runs).
|
|
|
| - updateBlockChildDirtyBitsBeforeLayout(relayoutChildren, child);
|
| + updateBlockChildDirtyBitsBeforeLayout(relayoutChildren, *child);
|
|
|
| if (child->isOutOfFlowPositioned()) {
|
| child->containingBlock()->insertPositionedObject(child);
|
| - adjustPositionedBlock(child, marginInfo);
|
| + adjustPositionedBlock(*child, marginInfo);
|
| continue;
|
| }
|
| if (child->isFloating()) {
|
| - insertFloatingObject(child);
|
| + insertFloatingObject(*child);
|
| adjustFloatingBlock(marginInfo);
|
| continue;
|
| }
|
|
|
| // Lay out the child.
|
| - layoutBlockChild(child, marginInfo, previousFloatLogicalBottom);
|
| + layoutBlockChild(*child, marginInfo, previousFloatLogicalBottom);
|
| lastNormalFlowChild = child;
|
| }
|
|
|
| @@ -1099,7 +1099,7 @@ MarginInfo::MarginInfo(RenderBlockFlow* blockFlow, LayoutUnit beforeBorderPaddin
|
| m_negativeMargin = (m_canCollapseMarginBeforeWithChildren && !blockFlow->mustDiscardMarginBefore()) ? blockFlow->maxNegativeMarginBefore() : LayoutUnit();
|
| }
|
|
|
| -RenderBlockFlow::MarginValues RenderBlockFlow::marginValuesForChild(RenderBox* child) const
|
| +RenderBlockFlow::MarginValues RenderBlockFlow::marginValuesForChild(RenderBox& child) const
|
| {
|
| LayoutUnit childBeforePositive = 0;
|
| LayoutUnit childBeforeNegative = 0;
|
| @@ -1109,21 +1109,21 @@ RenderBlockFlow::MarginValues RenderBlockFlow::marginValuesForChild(RenderBox* c
|
| LayoutUnit beforeMargin = 0;
|
| LayoutUnit afterMargin = 0;
|
|
|
| - RenderBlockFlow* childRenderBlockFlow = child->isRenderBlockFlow() ? toRenderBlockFlow(child) : 0;
|
| + RenderBlockFlow* childRenderBlockFlow = child.isRenderBlockFlow() ? toRenderBlockFlow(&child) : 0;
|
|
|
| // If the child has the same directionality as we do, then we can just return its
|
| // margins in the same direction.
|
| - if (!child->isWritingModeRoot()) {
|
| + if (!child.isWritingModeRoot()) {
|
| if (childRenderBlockFlow) {
|
| childBeforePositive = childRenderBlockFlow->maxPositiveMarginBefore();
|
| childBeforeNegative = childRenderBlockFlow->maxNegativeMarginBefore();
|
| childAfterPositive = childRenderBlockFlow->maxPositiveMarginAfter();
|
| childAfterNegative = childRenderBlockFlow->maxNegativeMarginAfter();
|
| } else {
|
| - beforeMargin = child->marginBefore();
|
| - afterMargin = child->marginAfter();
|
| + beforeMargin = child.marginBefore();
|
| + afterMargin = child.marginAfter();
|
| }
|
| - } else if (child->isHorizontalWritingMode() == isHorizontalWritingMode()) {
|
| + } else if (child.isHorizontalWritingMode() == isHorizontalWritingMode()) {
|
| // The child has a different directionality. If the child is parallel, then it's just
|
| // flipped relative to us. We can use the margins for the opposite edges.
|
| if (childRenderBlockFlow) {
|
| @@ -1132,8 +1132,8 @@ RenderBlockFlow::MarginValues RenderBlockFlow::marginValuesForChild(RenderBox* c
|
| childAfterPositive = childRenderBlockFlow->maxPositiveMarginBefore();
|
| childAfterNegative = childRenderBlockFlow->maxNegativeMarginBefore();
|
| } else {
|
| - beforeMargin = child->marginAfter();
|
| - afterMargin = child->marginBefore();
|
| + beforeMargin = child.marginAfter();
|
| + afterMargin = child.marginBefore();
|
| }
|
| } else {
|
| // The child is perpendicular to us, which means its margins don't collapse but are on the
|
| @@ -1159,7 +1159,7 @@ RenderBlockFlow::MarginValues RenderBlockFlow::marginValuesForChild(RenderBox* c
|
| return RenderBlockFlow::MarginValues(childBeforePositive, childBeforeNegative, childAfterPositive, childAfterNegative);
|
| }
|
|
|
| -LayoutUnit RenderBlockFlow::collapseMargins(RenderBox* child, MarginInfo& marginInfo, bool childIsSelfCollapsing)
|
| +LayoutUnit RenderBlockFlow::collapseMargins(RenderBox& child, MarginInfo& marginInfo, bool childIsSelfCollapsing)
|
| {
|
| bool childDiscardMarginBefore = mustDiscardMarginBeforeForChild(child);
|
| bool childDiscardMarginAfter = mustDiscardMarginAfterForChild(child);
|
| @@ -1183,7 +1183,7 @@ LayoutUnit RenderBlockFlow::collapseMargins(RenderBox* child, MarginInfo& margin
|
|
|
| // See if the top margin is quirky. We only care if this child has
|
| // margins that will collapse with us.
|
| - bool topQuirk = hasMarginBeforeQuirk(child);
|
| + bool topQuirk = hasMarginBeforeQuirk(&child);
|
|
|
| if (marginInfo.canCollapseWithMarginBefore()) {
|
| if (!childDiscardMarginBefore && !marginInfo.discardMargin()) {
|
| @@ -1229,7 +1229,7 @@ LayoutUnit RenderBlockFlow::collapseMargins(RenderBox* child, MarginInfo& margin
|
| LayoutUnit logicalTop = beforeCollapseLogicalTop;
|
|
|
| LayoutUnit clearanceForSelfCollapsingBlock;
|
| - RenderObject* prev = child->previousSibling();
|
| + RenderObject* prev = child.previousSibling();
|
| RenderBlockFlow* previousBlockFlow = prev && prev->isRenderBlockFlow() && !prev->isFloatingOrOutOfFlowPositioned() ? toRenderBlockFlow(prev) : 0;
|
| // If the child's previous sibling is a self-collapsing block that cleared a float then its top border edge has been set at the bottom border edge
|
| // of the float. Since we want to collapse the child's top margin with the self-collapsing block's top and bottom margins we need to adjust our parent's height to match the
|
| @@ -1291,7 +1291,7 @@ LayoutUnit RenderBlockFlow::collapseMargins(RenderBox* child, MarginInfo& margin
|
| }
|
|
|
| if (marginInfo.margin())
|
| - marginInfo.setHasMarginAfterQuirk(hasMarginAfterQuirk(child));
|
| + marginInfo.setHasMarginAfterQuirk(hasMarginAfterQuirk(&child));
|
| }
|
|
|
| // If margins would pull us past the top of the next page, then we need to pull back and pretend like the margins
|
| @@ -1316,17 +1316,17 @@ LayoutUnit RenderBlockFlow::collapseMargins(RenderBox* child, MarginInfo& margin
|
| // into the margin area of the self-collapsing block then the float it clears is now intruding into |child|. Layout again so that we can look for
|
| // floats in the parent that overhang |child|'s new logical top.
|
| bool logicalTopIntrudesIntoFloat = clearanceForSelfCollapsingBlock > 0 && logicalTop < beforeCollapseLogicalTop;
|
| - if (logicalTopIntrudesIntoFloat && containsFloats() && !child->avoidsFloats() && lowestFloatLogicalBottom() > logicalTop)
|
| - child->setNeedsLayoutAndFullPaintInvalidation();
|
| + if (logicalTopIntrudesIntoFloat && containsFloats() && !child.avoidsFloats() && lowestFloatLogicalBottom() > logicalTop)
|
| + child.setNeedsLayoutAndFullPaintInvalidation();
|
| }
|
|
|
| return logicalTop;
|
| }
|
|
|
| -void RenderBlockFlow::adjustPositionedBlock(RenderBox* child, const MarginInfo& marginInfo)
|
| +void RenderBlockFlow::adjustPositionedBlock(RenderBox& child, const MarginInfo& marginInfo)
|
| {
|
| bool isHorizontal = isHorizontalWritingMode();
|
| - bool hasStaticBlockPosition = child->style()->hasStaticBlockPosition(isHorizontal);
|
| + bool hasStaticBlockPosition = child.style()->hasStaticBlockPosition(isHorizontal);
|
|
|
| LayoutUnit logicalTop = logicalHeight();
|
| updateStaticInlinePositionForChild(child, logicalTop);
|
| @@ -1339,17 +1339,17 @@ void RenderBlockFlow::adjustPositionedBlock(RenderBox* child, const MarginInfo&
|
| logicalTop += collapsedBeforePos - collapsedBeforeNeg;
|
| }
|
|
|
| - RenderLayer* childLayer = child->layer();
|
| + RenderLayer* childLayer = child.layer();
|
| if (childLayer->staticBlockPosition() != logicalTop) {
|
| childLayer->setStaticBlockPosition(logicalTop);
|
| if (hasStaticBlockPosition)
|
| - child->setChildNeedsLayout(MarkOnlyThis);
|
| + child.setChildNeedsLayout(MarkOnlyThis);
|
| }
|
| }
|
|
|
| -LayoutUnit RenderBlockFlow::clearFloatsIfNeeded(RenderBox* child, MarginInfo& marginInfo, LayoutUnit oldTopPosMargin, LayoutUnit oldTopNegMargin, LayoutUnit yPos, bool childIsSelfCollapsing)
|
| +LayoutUnit RenderBlockFlow::clearFloatsIfNeeded(RenderBox& child, MarginInfo& marginInfo, LayoutUnit oldTopPosMargin, LayoutUnit oldTopNegMargin, LayoutUnit yPos, bool childIsSelfCollapsing)
|
| {
|
| - LayoutUnit heightIncrease = getClearDelta(child, yPos);
|
| + LayoutUnit heightIncrease = getClearDelta(&child, yPos);
|
| if (!heightIncrease)
|
| return yPos;
|
|
|
| @@ -1383,7 +1383,7 @@ LayoutUnit RenderBlockFlow::clearFloatsIfNeeded(RenderBox* child, MarginInfo& ma
|
| // Per CSS2.1 we need to ensure that any negative margin-top clears |child| beyond the bottom border-edge of the float so that the top border edge of the child
|
| // (i.e. its clearance) is at a position that satisfies the equation: "the amount of clearance is set so that clearance + margin-top = [height of float],
|
| // i.e., clearance = [height of float] - margin-top".
|
| - setLogicalHeight(child->logicalTop() + childMargins.negativeMarginBefore());
|
| + setLogicalHeight(child.logicalTop() + childMargins.negativeMarginBefore());
|
| } else {
|
| // Increase our height by the amount we had to clear.
|
| setLogicalHeight(logicalHeight() + heightIncrease);
|
| @@ -1428,17 +1428,17 @@ void RenderBlockFlow::setCollapsedBottomMargin(const MarginInfo& marginInfo)
|
| }
|
| }
|
|
|
| -void RenderBlockFlow::marginBeforeEstimateForChild(RenderBox* child, LayoutUnit& positiveMarginBefore, LayoutUnit& negativeMarginBefore, bool& discardMarginBefore) const
|
| +void RenderBlockFlow::marginBeforeEstimateForChild(RenderBox& child, LayoutUnit& positiveMarginBefore, LayoutUnit& negativeMarginBefore, bool& discardMarginBefore) const
|
| {
|
| // Give up if in quirks mode and we're a body/table cell and the top margin of the child box is quirky.
|
| // Give up if the child specified -webkit-margin-collapse: separate that prevents collapsing.
|
| // FIXME: Use writing mode independent accessor for marginBeforeCollapse.
|
| - if ((document().inQuirksMode() && hasMarginBeforeQuirk(child) && (isTableCell() || isBody())) || child->style()->marginBeforeCollapse() == MSEPARATE)
|
| + if ((document().inQuirksMode() && hasMarginBeforeQuirk(&child) && (isTableCell() || isBody())) || child.style()->marginBeforeCollapse() == MSEPARATE)
|
| return;
|
|
|
| // The margins are discarded by a child that specified -webkit-margin-collapse: discard.
|
| // FIXME: Use writing mode independent accessor for marginBeforeCollapse.
|
| - if (child->style()->marginBeforeCollapse() == MDISCARD) {
|
| + if (child.style()->marginBeforeCollapse() == MDISCARD) {
|
| positiveMarginBefore = 0;
|
| negativeMarginBefore = 0;
|
| discardMarginBefore = true;
|
| @@ -1449,10 +1449,10 @@ void RenderBlockFlow::marginBeforeEstimateForChild(RenderBox* child, LayoutUnit&
|
| positiveMarginBefore = std::max(positiveMarginBefore, beforeChildMargin);
|
| negativeMarginBefore = std::max(negativeMarginBefore, -beforeChildMargin);
|
|
|
| - if (!child->isRenderBlockFlow())
|
| + if (!child.isRenderBlockFlow())
|
| return;
|
|
|
| - RenderBlockFlow* childBlockFlow = toRenderBlockFlow(child);
|
| + RenderBlockFlow* childBlockFlow = toRenderBlockFlow(&child);
|
| if (childBlockFlow->childrenInline() || childBlockFlow->isWritingModeRoot())
|
| return;
|
|
|
| @@ -1482,14 +1482,14 @@ void RenderBlockFlow::marginBeforeEstimateForChild(RenderBox* child, LayoutUnit&
|
| // If we have a 'clear' value but also have a margin we may not actually require clearance to move past any floats.
|
| // If that's the case we want to be sure we estimate the correct position including margins after any floats rather
|
| // than use 'clearance' later which could give us the wrong position.
|
| - if (grandchildBox->style()->clear() != CNONE && childBlockFlow->marginBeforeForChild(grandchildBox) == 0)
|
| + if (grandchildBox->style()->clear() != CNONE && childBlockFlow->marginBeforeForChild(*grandchildBox) == 0)
|
| return;
|
|
|
| // Collapse the margin of the grandchild box with our own to produce an estimate.
|
| - childBlockFlow->marginBeforeEstimateForChild(grandchildBox, positiveMarginBefore, negativeMarginBefore, discardMarginBefore);
|
| + childBlockFlow->marginBeforeEstimateForChild(*grandchildBox, positiveMarginBefore, negativeMarginBefore, discardMarginBefore);
|
| }
|
|
|
| -LayoutUnit RenderBlockFlow::estimateLogicalTopPosition(RenderBox* child, const MarginInfo& marginInfo, LayoutUnit& estimateWithoutPagination)
|
| +LayoutUnit RenderBlockFlow::estimateLogicalTopPosition(RenderBox& child, const MarginInfo& marginInfo, LayoutUnit& estimateWithoutPagination)
|
| {
|
| // FIXME: We need to eliminate the estimation of vertical position, because when it's wrong we sometimes trigger a pathological
|
| // relayout if there are intruding floats.
|
| @@ -1498,7 +1498,7 @@ LayoutUnit RenderBlockFlow::estimateLogicalTopPosition(RenderBox* child, const M
|
| LayoutUnit positiveMarginBefore = 0;
|
| LayoutUnit negativeMarginBefore = 0;
|
| bool discardMarginBefore = false;
|
| - if (child->selfNeedsLayout()) {
|
| + if (child.selfNeedsLayout()) {
|
| // Try to do a basic estimation of how the collapse is going to go.
|
| marginBeforeEstimateForChild(child, positiveMarginBefore, negativeMarginBefore, discardMarginBefore);
|
| } else {
|
| @@ -1521,7 +1521,7 @@ LayoutUnit RenderBlockFlow::estimateLogicalTopPosition(RenderBox* child, const M
|
| if (layoutState->isPaginated() && layoutState->pageLogicalHeight() && logicalTopEstimate > logicalHeight())
|
| logicalTopEstimate = std::min(logicalTopEstimate, nextPageLogicalTop(logicalHeight()));
|
|
|
| - logicalTopEstimate += getClearDelta(child, logicalTopEstimate);
|
| + logicalTopEstimate += getClearDelta(&child, logicalTopEstimate);
|
|
|
| estimateWithoutPagination = logicalTopEstimate;
|
|
|
| @@ -1532,8 +1532,8 @@ LayoutUnit RenderBlockFlow::estimateLogicalTopPosition(RenderBox* child, const M
|
| // For replaced elements and scrolled elements, we want to shift them to the next page if they don't fit on the current one.
|
| logicalTopEstimate = adjustForUnsplittableChild(child, logicalTopEstimate);
|
|
|
| - if (!child->selfNeedsLayout() && child->isRenderBlockFlow())
|
| - logicalTopEstimate += toRenderBlockFlow(child)->paginationStrut();
|
| + if (!child.selfNeedsLayout() && child.isRenderBlockFlow())
|
| + logicalTopEstimate += toRenderBlockFlow(&child)->paginationStrut();
|
| }
|
|
|
| return logicalTopEstimate;
|
| @@ -1544,7 +1544,7 @@ LayoutUnit RenderBlockFlow::marginOffsetForSelfCollapsingBlock()
|
| ASSERT(isSelfCollapsingBlock());
|
| RenderBlockFlow* parentBlock = toRenderBlockFlow(parent());
|
| if (parentBlock && style()->clear() && parentBlock->getClearDelta(this, logicalHeight()))
|
| - return marginValuesForChild(this).positiveMarginBefore();
|
| + return marginValuesForChild(*this).positiveMarginBefore();
|
| return LayoutUnit();
|
| }
|
|
|
| @@ -1640,26 +1640,26 @@ bool RenderBlockFlow::mustDiscardMarginAfter() const
|
| return style()->marginAfterCollapse() == MDISCARD || (m_rareData && m_rareData->m_discardMarginAfter);
|
| }
|
|
|
| -bool RenderBlockFlow::mustDiscardMarginBeforeForChild(const RenderBox* child) const
|
| +bool RenderBlockFlow::mustDiscardMarginBeforeForChild(const RenderBox& child) const
|
| {
|
| - ASSERT(!child->selfNeedsLayout());
|
| - if (!child->isWritingModeRoot())
|
| - return child->isRenderBlockFlow() ? toRenderBlockFlow(child)->mustDiscardMarginBefore() : (child->style()->marginBeforeCollapse() == MDISCARD);
|
| - if (child->isHorizontalWritingMode() == isHorizontalWritingMode())
|
| - return child->isRenderBlockFlow() ? toRenderBlockFlow(child)->mustDiscardMarginAfter() : (child->style()->marginAfterCollapse() == MDISCARD);
|
| + ASSERT(!child.selfNeedsLayout());
|
| + if (!child.isWritingModeRoot())
|
| + return child.isRenderBlockFlow() ? toRenderBlockFlow(&child)->mustDiscardMarginBefore() : (child.style()->marginBeforeCollapse() == MDISCARD);
|
| + if (child.isHorizontalWritingMode() == isHorizontalWritingMode())
|
| + return child.isRenderBlockFlow() ? toRenderBlockFlow(&child)->mustDiscardMarginAfter() : (child.style()->marginAfterCollapse() == MDISCARD);
|
|
|
| // FIXME: We return false here because the implementation is not geometrically complete. We have values only for before/after, not start/end.
|
| // In case the boxes are perpendicular we assume the property is not specified.
|
| return false;
|
| }
|
|
|
| -bool RenderBlockFlow::mustDiscardMarginAfterForChild(const RenderBox* child) const
|
| +bool RenderBlockFlow::mustDiscardMarginAfterForChild(const RenderBox& child) const
|
| {
|
| - ASSERT(!child->selfNeedsLayout());
|
| - if (!child->isWritingModeRoot())
|
| - return child->isRenderBlockFlow() ? toRenderBlockFlow(child)->mustDiscardMarginAfter() : (child->style()->marginAfterCollapse() == MDISCARD);
|
| - if (child->isHorizontalWritingMode() == isHorizontalWritingMode())
|
| - return child->isRenderBlockFlow() ? toRenderBlockFlow(child)->mustDiscardMarginBefore() : (child->style()->marginBeforeCollapse() == MDISCARD);
|
| + ASSERT(!child.selfNeedsLayout());
|
| + if (!child.isWritingModeRoot())
|
| + return child.isRenderBlockFlow() ? toRenderBlockFlow(&child)->mustDiscardMarginAfter() : (child.style()->marginAfterCollapse() == MDISCARD);
|
| + if (child.isHorizontalWritingMode() == isHorizontalWritingMode())
|
| + return child.isRenderBlockFlow() ? toRenderBlockFlow(&child)->mustDiscardMarginBefore() : (child.style()->marginBeforeCollapse() == MDISCARD);
|
|
|
| // FIXME: See |mustDiscardMarginBeforeForChild| above.
|
| return false;
|
| @@ -1687,49 +1687,49 @@ void RenderBlockFlow::setMaxMarginAfterValues(LayoutUnit pos, LayoutUnit neg)
|
| m_rareData->m_margins.setNegativeMarginAfter(neg);
|
| }
|
|
|
| -bool RenderBlockFlow::mustSeparateMarginBeforeForChild(const RenderBox* child) const
|
| +bool RenderBlockFlow::mustSeparateMarginBeforeForChild(const RenderBox& child) const
|
| {
|
| - ASSERT(!child->selfNeedsLayout());
|
| - const RenderStyle* childStyle = child->style();
|
| - if (!child->isWritingModeRoot())
|
| + ASSERT(!child.selfNeedsLayout());
|
| + const RenderStyle* childStyle = child.style();
|
| + if (!child.isWritingModeRoot())
|
| return childStyle->marginBeforeCollapse() == MSEPARATE;
|
| - if (child->isHorizontalWritingMode() == isHorizontalWritingMode())
|
| + if (child.isHorizontalWritingMode() == isHorizontalWritingMode())
|
| return childStyle->marginAfterCollapse() == MSEPARATE;
|
|
|
| // FIXME: See |mustDiscardMarginBeforeForChild| above.
|
| return false;
|
| }
|
|
|
| -bool RenderBlockFlow::mustSeparateMarginAfterForChild(const RenderBox* child) const
|
| +bool RenderBlockFlow::mustSeparateMarginAfterForChild(const RenderBox& child) const
|
| {
|
| - ASSERT(!child->selfNeedsLayout());
|
| - const RenderStyle* childStyle = child->style();
|
| - if (!child->isWritingModeRoot())
|
| + ASSERT(!child.selfNeedsLayout());
|
| + const RenderStyle* childStyle = child.style();
|
| + if (!child.isWritingModeRoot())
|
| return childStyle->marginAfterCollapse() == MSEPARATE;
|
| - if (child->isHorizontalWritingMode() == isHorizontalWritingMode())
|
| + if (child.isHorizontalWritingMode() == isHorizontalWritingMode())
|
| return childStyle->marginBeforeCollapse() == MSEPARATE;
|
|
|
| // FIXME: See |mustDiscardMarginBeforeForChild| above.
|
| return false;
|
| }
|
|
|
| -LayoutUnit RenderBlockFlow::applyBeforeBreak(RenderBox* child, LayoutUnit logicalOffset)
|
| +LayoutUnit RenderBlockFlow::applyBeforeBreak(RenderBox& child, LayoutUnit logicalOffset)
|
| {
|
| // FIXME: Add page break checking here when we support printing.
|
| RenderFlowThread* flowThread = flowThreadContainingBlock();
|
| bool isInsideMulticolFlowThread = flowThread;
|
| bool checkColumnBreaks = isInsideMulticolFlowThread || view()->layoutState()->isPaginatingColumns();
|
| bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->pageLogicalHeight(); // FIXME: Once columns can print we have to check this.
|
| - bool checkBeforeAlways = (checkColumnBreaks && child->style()->columnBreakBefore() == PBALWAYS)
|
| - || (checkPageBreaks && child->style()->pageBreakBefore() == PBALWAYS);
|
| - if (checkBeforeAlways && inNormalFlow(child)) {
|
| + bool checkBeforeAlways = (checkColumnBreaks && child.style()->columnBreakBefore() == PBALWAYS)
|
| + || (checkPageBreaks && child.style()->pageBreakBefore() == PBALWAYS);
|
| + if (checkBeforeAlways && inNormalFlow(&child)) {
|
| if (checkColumnBreaks) {
|
| if (isInsideMulticolFlowThread) {
|
| LayoutUnit offsetBreakAdjustment = 0;
|
| - if (flowThread->addForcedRegionBreak(offsetFromLogicalTopOfFirstPage() + logicalOffset, child, true, &offsetBreakAdjustment))
|
| + if (flowThread->addForcedRegionBreak(offsetFromLogicalTopOfFirstPage() + logicalOffset, &child, true, &offsetBreakAdjustment))
|
| return logicalOffset + offsetBreakAdjustment;
|
| } else {
|
| - view()->layoutState()->addForcedColumnBreak(*child, logicalOffset);
|
| + view()->layoutState()->addForcedColumnBreak(child, logicalOffset);
|
| }
|
| }
|
| return nextPageLogicalTop(logicalOffset, IncludePageBoundary);
|
| @@ -1737,16 +1737,16 @@ LayoutUnit RenderBlockFlow::applyBeforeBreak(RenderBox* child, LayoutUnit logica
|
| return logicalOffset;
|
| }
|
|
|
| -LayoutUnit RenderBlockFlow::applyAfterBreak(RenderBox* child, LayoutUnit logicalOffset, MarginInfo& marginInfo)
|
| +LayoutUnit RenderBlockFlow::applyAfterBreak(RenderBox& child, LayoutUnit logicalOffset, MarginInfo& marginInfo)
|
| {
|
| // FIXME: Add page break checking here when we support printing.
|
| RenderFlowThread* flowThread = flowThreadContainingBlock();
|
| bool isInsideMulticolFlowThread = flowThread;
|
| bool checkColumnBreaks = isInsideMulticolFlowThread || view()->layoutState()->isPaginatingColumns();
|
| bool checkPageBreaks = !checkColumnBreaks && view()->layoutState()->pageLogicalHeight(); // FIXME: Once columns can print we have to check this.
|
| - bool checkAfterAlways = (checkColumnBreaks && child->style()->columnBreakAfter() == PBALWAYS)
|
| - || (checkPageBreaks && child->style()->pageBreakAfter() == PBALWAYS);
|
| - if (checkAfterAlways && inNormalFlow(child)) {
|
| + bool checkAfterAlways = (checkColumnBreaks && child.style()->columnBreakAfter() == PBALWAYS)
|
| + || (checkPageBreaks && child.style()->pageBreakAfter() == PBALWAYS);
|
| + if (checkAfterAlways && inNormalFlow(&child)) {
|
| LayoutUnit marginOffset = marginInfo.canCollapseWithMarginBefore() ? LayoutUnit() : marginInfo.margin();
|
|
|
| // So our margin doesn't participate in the next collapsing steps.
|
| @@ -1755,10 +1755,10 @@ LayoutUnit RenderBlockFlow::applyAfterBreak(RenderBox* child, LayoutUnit logical
|
| if (checkColumnBreaks) {
|
| if (isInsideMulticolFlowThread) {
|
| LayoutUnit offsetBreakAdjustment = 0;
|
| - if (flowThread->addForcedRegionBreak(offsetFromLogicalTopOfFirstPage() + logicalOffset + marginOffset, child, false, &offsetBreakAdjustment))
|
| + if (flowThread->addForcedRegionBreak(offsetFromLogicalTopOfFirstPage() + logicalOffset + marginOffset, &child, false, &offsetBreakAdjustment))
|
| return logicalOffset + marginOffset + offsetBreakAdjustment;
|
| } else {
|
| - view()->layoutState()->addForcedColumnBreak(*child, logicalOffset);
|
| + view()->layoutState()->addForcedColumnBreak(child, logicalOffset);
|
| }
|
| }
|
| return nextPageLogicalTop(logicalOffset, IncludePageBoundary);
|
| @@ -1887,7 +1887,7 @@ LayoutUnit RenderBlockFlow::getClearDelta(RenderBox* child, LayoutUnit logicalTo
|
| if (!result && child->avoidsFloats()) {
|
| LayoutUnit newLogicalTop = logicalTop;
|
| while (true) {
|
| - LayoutUnit availableLogicalWidthAtNewLogicalTopOffset = availableLogicalWidthForLine(newLogicalTop, false, logicalHeightForChild(child));
|
| + LayoutUnit availableLogicalWidthAtNewLogicalTopOffset = availableLogicalWidthForLine(newLogicalTop, false, logicalHeightForChild(*child));
|
| if (availableLogicalWidthAtNewLogicalTopOffset == availableLogicalWidthForContent())
|
| return newLogicalTop - logicalTop;
|
|
|
| @@ -1970,17 +1970,17 @@ void RenderBlockFlow::styleDidChange(StyleDifference diff, const RenderStyle* ol
|
| createOrDestroyMultiColumnFlowThreadIfNeeded(oldStyle);
|
| }
|
|
|
| -void RenderBlockFlow::updateStaticInlinePositionForChild(RenderBox* child, LayoutUnit logicalTop)
|
| +void RenderBlockFlow::updateStaticInlinePositionForChild(RenderBox& child, LayoutUnit logicalTop)
|
| {
|
| - if (child->style()->isOriginalDisplayInlineType())
|
| + if (child.style()->isOriginalDisplayInlineType())
|
| setStaticInlinePositionForChild(child, startAlignedOffsetForLine(logicalTop, false));
|
| else
|
| setStaticInlinePositionForChild(child, startOffsetForContent());
|
| }
|
|
|
| -void RenderBlockFlow::setStaticInlinePositionForChild(RenderBox* child, LayoutUnit inlinePosition)
|
| +void RenderBlockFlow::setStaticInlinePositionForChild(RenderBox& child, LayoutUnit inlinePosition)
|
| {
|
| - child->layer()->setStaticInlinePosition(inlinePosition);
|
| + child.layer()->setStaticInlinePosition(inlinePosition);
|
| }
|
|
|
| void RenderBlockFlow::addChild(RenderObject* newChild, RenderObject* beforeChild)
|
| @@ -2270,9 +2270,9 @@ LayoutPoint RenderBlockFlow::computeLogicalLocationForFloat(const FloatingObject
|
| return LayoutPoint(floatLogicalLeft, logicalTopOffset);
|
| }
|
|
|
| -FloatingObject* RenderBlockFlow::insertFloatingObject(RenderBox* floatBox)
|
| +FloatingObject* RenderBlockFlow::insertFloatingObject(RenderBox& floatBox)
|
| {
|
| - ASSERT(floatBox->isFloating());
|
| + ASSERT(floatBox.isFloating());
|
|
|
| // Create the list of special objects if we don't aleady have one
|
| if (!m_floatingObjects) {
|
| @@ -2280,27 +2280,27 @@ FloatingObject* RenderBlockFlow::insertFloatingObject(RenderBox* floatBox)
|
| } else {
|
| // Don't insert the object again if it's already in the list
|
| const FloatingObjectSet& floatingObjectSet = m_floatingObjects->set();
|
| - FloatingObjectSetIterator it = floatingObjectSet.find<FloatingObjectHashTranslator>(floatBox);
|
| + FloatingObjectSetIterator it = floatingObjectSet.find<FloatingObjectHashTranslator>(&floatBox);
|
| if (it != floatingObjectSet.end())
|
| return it->get();
|
| }
|
|
|
| // Create the special object entry & append it to the list
|
|
|
| - OwnPtr<FloatingObject> newObj = FloatingObject::create(floatBox);
|
| + OwnPtr<FloatingObject> newObj = FloatingObject::create(&floatBox);
|
|
|
| // Our location is irrelevant if we're unsplittable or no pagination is in effect.
|
| // Just go ahead and lay out the float.
|
| - bool isChildRenderBlock = floatBox->isRenderBlock();
|
| - if (isChildRenderBlock && !floatBox->needsLayout() && view()->layoutState()->pageLogicalHeightChanged())
|
| - floatBox->setChildNeedsLayout(MarkOnlyThis);
|
| + bool isChildRenderBlock = floatBox.isRenderBlock();
|
| + if (isChildRenderBlock && !floatBox.needsLayout() && view()->layoutState()->pageLogicalHeightChanged())
|
| + floatBox.setChildNeedsLayout(MarkOnlyThis);
|
|
|
| bool needsBlockDirectionLocationSetBeforeLayout = isChildRenderBlock && view()->layoutState()->needsBlockDirectionLocationSetBeforeLayout();
|
| if (!needsBlockDirectionLocationSetBeforeLayout || isWritingModeRoot()) { // We are unsplittable if we're a block flow root.
|
| - floatBox->layoutIfNeeded();
|
| + floatBox.layoutIfNeeded();
|
| } else {
|
| - floatBox->updateLogicalWidth();
|
| - floatBox->computeAndSetBlockDirectionMargins(this);
|
| + floatBox.updateLogicalWidth();
|
| + floatBox.computeAndSetBlockDirectionMargins(this);
|
| }
|
|
|
| setLogicalWidthForFloat(newObj.get(), logicalWidthForChild(floatBox) + marginStartForChild(floatBox) + marginEndForChild(floatBox));
|
| @@ -2408,7 +2408,7 @@ bool RenderBlockFlow::positionNewFloats()
|
| // FIXME Investigate if this can be removed. crbug.com/370006
|
| childBox->setMayNeedPaintInvalidation(true);
|
|
|
| - LayoutUnit childLogicalLeftMargin = style()->isLeftToRightDirection() ? marginStartForChild(childBox) : marginEndForChild(childBox);
|
| + LayoutUnit childLogicalLeftMargin = style()->isLeftToRightDirection() ? marginStartForChild(*childBox) : marginEndForChild(*childBox);
|
| if (childBox->style()->clear() & CLEFT)
|
| logicalTop = std::max(lowestFloatLogicalBottom(FloatingObject::FloatLeft), logicalTop);
|
| if (childBox->style()->clear() & CRIGHT)
|
| @@ -2418,8 +2418,8 @@ bool RenderBlockFlow::positionNewFloats()
|
|
|
| setLogicalLeftForFloat(floatingObject, floatLogicalLocation.x());
|
|
|
| - setLogicalLeftForChild(childBox, floatLogicalLocation.x() + childLogicalLeftMargin);
|
| - setLogicalTopForChild(childBox, floatLogicalLocation.y() + marginBeforeForChild(childBox));
|
| + setLogicalLeftForChild(*childBox, floatLogicalLocation.x() + childLogicalLeftMargin);
|
| + setLogicalTopForChild(*childBox, floatLogicalLocation.y() + marginBeforeForChild(*childBox));
|
|
|
| SubtreeLayoutScope layoutScope(*childBox);
|
| LayoutState* layoutState = view()->layoutState();
|
| @@ -2432,7 +2432,7 @@ bool RenderBlockFlow::positionNewFloats()
|
| if (isPaginated) {
|
| // If we are unsplittable and don't fit, then we need to move down.
|
| // We include our margins as part of the unsplittable area.
|
| - LayoutUnit newLogicalTop = adjustForUnsplittableChild(childBox, floatLogicalLocation.y(), true);
|
| + LayoutUnit newLogicalTop = adjustForUnsplittableChild(*childBox, floatLogicalLocation.y(), true);
|
|
|
| // See if we have a pagination strut that is making us move down further.
|
| // Note that an unsplittable child can't also have a pagination strut, so this is
|
| @@ -2449,8 +2449,8 @@ bool RenderBlockFlow::positionNewFloats()
|
| floatLogicalLocation = computeLogicalLocationForFloat(floatingObject, newLogicalTop);
|
| setLogicalLeftForFloat(floatingObject, floatLogicalLocation.x());
|
|
|
| - setLogicalLeftForChild(childBox, floatLogicalLocation.x() + childLogicalLeftMargin);
|
| - setLogicalTopForChild(childBox, floatLogicalLocation.y() + marginBeforeForChild(childBox));
|
| + setLogicalLeftForChild(*childBox, floatLogicalLocation.x() + childLogicalLeftMargin);
|
| + setLogicalTopForChild(*childBox, floatLogicalLocation.y() + marginBeforeForChild(*childBox));
|
|
|
| if (childBox->isRenderBlock())
|
| childBox->setChildNeedsLayout(MarkOnlyThis);
|
| @@ -2460,12 +2460,12 @@ bool RenderBlockFlow::positionNewFloats()
|
|
|
| setLogicalTopForFloat(floatingObject, floatLogicalLocation.y());
|
|
|
| - setLogicalHeightForFloat(floatingObject, logicalHeightForChild(childBox) + marginBeforeForChild(childBox) + marginAfterForChild(childBox));
|
| + setLogicalHeightForFloat(floatingObject, logicalHeightForChild(*childBox) + marginBeforeForChild(*childBox) + marginAfterForChild(*childBox));
|
|
|
| m_floatingObjects->addPlacedObject(floatingObject);
|
|
|
| if (ShapeOutsideInfo* shapeOutside = childBox->shapeOutsideInfo())
|
| - shapeOutside->setReferenceBoxLogicalSize(logicalSizeForChild(childBox));
|
| + shapeOutside->setReferenceBoxLogicalSize(logicalSizeForChild(*childBox));
|
| }
|
| return true;
|
| }
|
| @@ -2599,7 +2599,7 @@ LayoutUnit RenderBlockFlow::nextFloatLogicalBottomBelow(LayoutUnit logicalHeight
|
| LayoutUnit floatLogicalBottom = logicalBottomForFloat(floatingObject);
|
| ShapeOutsideInfo* shapeOutside = floatingObject->renderer()->shapeOutsideInfo();
|
| if (shapeOutside && (offsetMode == ShapeOutsideFloatShapeOffset)) {
|
| - LayoutUnit shapeLogicalBottom = logicalTopForFloat(floatingObject) + marginBeforeForChild(floatingObject->renderer()) + shapeOutside->shapeLogicalBottom();
|
| + LayoutUnit shapeLogicalBottom = logicalTopForFloat(floatingObject) + marginBeforeForChild(*(floatingObject->renderer())) + shapeOutside->shapeLogicalBottom();
|
| // Use the shapeLogicalBottom unless it extends outside of the margin box, in which case it is clipped.
|
| if (shapeLogicalBottom < floatLogicalBottom)
|
| floatLogicalBottom = shapeLogicalBottom;
|
|
|