Index: Source/core/rendering/RenderFlexibleBox.cpp |
diff --git a/Source/core/rendering/RenderFlexibleBox.cpp b/Source/core/rendering/RenderFlexibleBox.cpp |
index 644696facbe1bee7c8cbc791e9ad8c2f4bb10ed7..967da3d2c7c8a4d0fa9b5ab63cdd142d9d309e01 100644 |
--- a/Source/core/rendering/RenderFlexibleBox.cpp |
+++ b/Source/core/rendering/RenderFlexibleBox.cpp |
@@ -151,7 +151,7 @@ int RenderFlexibleBox::firstLineBoxBaseline() const |
for (RenderBox* child = m_orderIterator.first(); child; child = m_orderIterator.next()) { |
if (child->isOutOfFlowPositioned()) |
continue; |
- if (alignmentForChild(child) == ItemPositionBaseline && !hasAutoMarginsInCrossAxis(child)) { |
+ if (alignmentForChild(*child) == ItemPositionBaseline && !hasAutoMarginsInCrossAxis(child)) { |
baselineChild = child; |
break; |
} |
@@ -166,10 +166,10 @@ int RenderFlexibleBox::firstLineBoxBaseline() const |
if (!baselineChild) |
return -1; |
- if (!isColumnFlow() && hasOrthogonalFlow(baselineChild)) |
- return crossAxisExtentForChild(baselineChild) + baselineChild->logicalTop(); |
- if (isColumnFlow() && !hasOrthogonalFlow(baselineChild)) |
- return mainAxisExtentForChild(baselineChild) + baselineChild->logicalTop(); |
+ if (!isColumnFlow() && hasOrthogonalFlow(*baselineChild)) |
+ return crossAxisExtentForChild(*baselineChild) + baselineChild->logicalTop(); |
+ if (isColumnFlow() && !hasOrthogonalFlow(*baselineChild)) |
+ return mainAxisExtentForChild(*baselineChild) + baselineChild->logicalTop(); |
int baseline = baselineChild->firstLineBoxBaseline(); |
if (baseline == -1) { |
@@ -311,10 +311,10 @@ LayoutUnit RenderFlexibleBox::clientLogicalBottomAfterRepositioning() |
return std::max(clientLogicalBottom(), maxChildLogicalBottom + paddingAfter()); |
} |
-bool RenderFlexibleBox::hasOrthogonalFlow(RenderBox* child) const |
+bool RenderFlexibleBox::hasOrthogonalFlow(RenderBox& child) const |
{ |
// FIXME: If the child is a flexbox, then we need to check isHorizontalFlow. |
- return isHorizontalFlow() != child->isHorizontalWritingMode(); |
+ return isHorizontalFlow() != child.isHorizontalWritingMode(); |
} |
bool RenderFlexibleBox::isColumnFlow() const |
@@ -341,47 +341,47 @@ bool RenderFlexibleBox::isMultiline() const |
return style()->flexWrap() != FlexNoWrap; |
} |
-Length RenderFlexibleBox::flexBasisForChild(RenderBox* child) const |
+Length RenderFlexibleBox::flexBasisForChild(RenderBox& child) const |
{ |
- Length flexLength = child->style()->flexBasis(); |
+ Length flexLength = child.style()->flexBasis(); |
if (flexLength.isAuto()) |
- flexLength = isHorizontalFlow() ? child->style()->width() : child->style()->height(); |
+ flexLength = isHorizontalFlow() ? child.style()->width() : child.style()->height(); |
return flexLength; |
} |
-LayoutUnit RenderFlexibleBox::crossAxisExtentForChild(RenderBox* child) const |
+LayoutUnit RenderFlexibleBox::crossAxisExtentForChild(RenderBox& child) const |
{ |
- return isHorizontalFlow() ? child->height() : child->width(); |
+ return isHorizontalFlow() ? child.height() : child.width(); |
} |
-static inline LayoutUnit constrainedChildIntrinsicContentLogicalHeight(RenderBox* child) |
+static inline LayoutUnit constrainedChildIntrinsicContentLogicalHeight(RenderBox& child) |
{ |
- LayoutUnit childIntrinsicContentLogicalHeight = child->intrinsicContentLogicalHeight(); |
- return child->constrainLogicalHeightByMinMax(childIntrinsicContentLogicalHeight + child->borderAndPaddingLogicalHeight(), childIntrinsicContentLogicalHeight); |
+ LayoutUnit childIntrinsicContentLogicalHeight = child.intrinsicContentLogicalHeight(); |
+ return child.constrainLogicalHeightByMinMax(childIntrinsicContentLogicalHeight + child.borderAndPaddingLogicalHeight(), childIntrinsicContentLogicalHeight); |
} |
-LayoutUnit RenderFlexibleBox::childIntrinsicHeight(RenderBox* child) const |
+LayoutUnit RenderFlexibleBox::childIntrinsicHeight(RenderBox& child) const |
{ |
- if (child->isHorizontalWritingMode() && needToStretchChildLogicalHeight(child)) |
+ if (child.isHorizontalWritingMode() && needToStretchChildLogicalHeight(child)) |
return constrainedChildIntrinsicContentLogicalHeight(child); |
- return child->height(); |
+ return child.height(); |
} |
-LayoutUnit RenderFlexibleBox::childIntrinsicWidth(RenderBox* child) const |
+LayoutUnit RenderFlexibleBox::childIntrinsicWidth(RenderBox& child) const |
{ |
- if (!child->isHorizontalWritingMode() && needToStretchChildLogicalHeight(child)) |
+ if (!child.isHorizontalWritingMode() && needToStretchChildLogicalHeight(child)) |
return constrainedChildIntrinsicContentLogicalHeight(child); |
- return child->width(); |
+ return child.width(); |
} |
-LayoutUnit RenderFlexibleBox::crossAxisIntrinsicExtentForChild(RenderBox* child) const |
+LayoutUnit RenderFlexibleBox::crossAxisIntrinsicExtentForChild(RenderBox& child) const |
{ |
return isHorizontalFlow() ? childIntrinsicHeight(child) : childIntrinsicWidth(child); |
} |
-LayoutUnit RenderFlexibleBox::mainAxisExtentForChild(RenderBox* child) const |
+LayoutUnit RenderFlexibleBox::mainAxisExtentForChild(RenderBox& child) const |
{ |
- return isHorizontalFlow() ? child->width() : child->height(); |
+ return isHorizontalFlow() ? child.width() : child.height(); |
} |
LayoutUnit RenderFlexibleBox::crossAxisExtent() const |
@@ -413,17 +413,17 @@ LayoutUnit RenderFlexibleBox::mainAxisContentExtent(LayoutUnit contentLogicalHei |
return contentLogicalWidth(); |
} |
-LayoutUnit RenderFlexibleBox::computeMainAxisExtentForChild(RenderBox* child, SizeType sizeType, const Length& size) |
+LayoutUnit RenderFlexibleBox::computeMainAxisExtentForChild(RenderBox& child, SizeType sizeType, const Length& size) |
{ |
// FIXME: This is wrong for orthogonal flows. It should use the flexbox's writing-mode, not the child's in order |
// to figure out the logical height/width. |
if (isColumnFlow()) { |
// We don't have to check for "auto" here - computeContentLogicalHeight will just return -1 for that case anyway. |
if (size.isIntrinsic()) |
- child->layoutIfNeeded(); |
- return child->computeContentLogicalHeight(size, child->logicalHeight() - child->borderAndPaddingLogicalHeight()) + child->scrollbarLogicalHeight(); |
+ child.layoutIfNeeded(); |
+ return child.computeContentLogicalHeight(size, child.logicalHeight() - child.borderAndPaddingLogicalHeight()) + child.scrollbarLogicalHeight(); |
} |
- return child->computeLogicalWidthUsing(sizeType, size, contentLogicalWidth(), this) - child->borderAndPaddingLogicalWidth(); |
+ return child.computeLogicalWidthUsing(sizeType, size, contentLogicalWidth(), this) - child.borderAndPaddingLogicalWidth(); |
} |
WritingMode RenderFlexibleBox::transformedWritingMode() const |
@@ -604,7 +604,7 @@ static inline bool preferredMainAxisExtentDependsOnLayout(const Length& flexBasi |
return flexBasis.isAuto() || (flexBasis.isPercent() && hasInfiniteLineLength); |
} |
-bool RenderFlexibleBox::childPreferredMainAxisContentExtentRequiresLayout(RenderBox* child, bool hasInfiniteLineLength) const |
+bool RenderFlexibleBox::childPreferredMainAxisContentExtentRequiresLayout(RenderBox& child, bool hasInfiniteLineLength) const |
{ |
return preferredMainAxisExtentDependsOnLayout(flexBasisForChild(child), hasInfiniteLineLength) && hasOrthogonalFlow(child); |
} |
@@ -616,10 +616,10 @@ LayoutUnit RenderFlexibleBox::preferredMainAxisContentExtentForChild(RenderBox* |
if (child->style()->hasAspectRatio() || child->isImage() || child->isVideo() || child->isCanvas()) |
UseCounter::count(document(), UseCounter::AspectRatioFlexItem); |
- Length flexBasis = flexBasisForChild(child); |
+ Length flexBasis = flexBasisForChild(*child); |
if (preferredMainAxisExtentDependsOnLayout(flexBasis, hasInfiniteLineLength)) { |
LayoutUnit mainAxisExtent; |
- if (hasOrthogonalFlow(child)) { |
+ if (hasOrthogonalFlow(*child)) { |
if (child->needsLayout() || relayoutChildren) { |
m_intrinsicSizeAlongMainAxis.remove(child); |
child->forceChildLayout(); |
@@ -633,7 +633,7 @@ LayoutUnit RenderFlexibleBox::preferredMainAxisContentExtentForChild(RenderBox* |
ASSERT(mainAxisExtent - mainAxisBorderAndPaddingExtentForChild(child) >= 0); |
return mainAxisExtent - mainAxisBorderAndPaddingExtentForChild(child); |
} |
- return std::max(LayoutUnit(0), computeMainAxisExtentForChild(child, MainOrPreferredSize, flexBasis)); |
+ return std::max(LayoutUnit(0), computeMainAxisExtentForChild(*child, MainOrPreferredSize, flexBasis)); |
} |
void RenderFlexibleBox::layoutFlexItems(bool relayoutChildren) |
@@ -737,14 +737,14 @@ bool RenderFlexibleBox::hasAutoMarginsInCrossAxis(RenderBox* child) const |
LayoutUnit RenderFlexibleBox::availableAlignmentSpaceForChild(LayoutUnit lineCrossAxisExtent, RenderBox* child) |
{ |
ASSERT(!child->isOutOfFlowPositioned()); |
- LayoutUnit childCrossExtent = crossAxisMarginExtentForChild(child) + crossAxisExtentForChild(child); |
+ LayoutUnit childCrossExtent = crossAxisMarginExtentForChild(child) + crossAxisExtentForChild(*child); |
return lineCrossAxisExtent - childCrossExtent; |
} |
LayoutUnit RenderFlexibleBox::availableAlignmentSpaceForChildBeforeStretching(LayoutUnit lineCrossAxisExtent, RenderBox* child) |
{ |
ASSERT(!child->isOutOfFlowPositioned()); |
- LayoutUnit childCrossExtent = crossAxisMarginExtentForChild(child) + crossAxisIntrinsicExtentForChild(child); |
+ LayoutUnit childCrossExtent = crossAxisMarginExtentForChild(child) + crossAxisIntrinsicExtentForChild(*child); |
return lineCrossAxisExtent - childCrossExtent; |
} |
@@ -806,7 +806,7 @@ LayoutUnit RenderFlexibleBox::marginBoxAscentForChild(RenderBox* child) |
{ |
LayoutUnit ascent = child->firstLineBoxBaseline(); |
if (ascent == -1) |
- ascent = crossAxisExtentForChild(child); |
+ ascent = crossAxisExtentForChild(*child); |
return ascent + flowAwareMarginBeforeForChild(child); |
} |
@@ -844,7 +844,7 @@ LayoutUnit RenderFlexibleBox::adjustChildSizeForMinAndMax(RenderBox* child, Layo |
{ |
Length max = isHorizontalFlow() ? child->style()->maxWidth() : child->style()->maxHeight(); |
if (max.isSpecifiedOrIntrinsic()) { |
- LayoutUnit maxExtent = computeMainAxisExtentForChild(child, MaxSize, max); |
+ LayoutUnit maxExtent = computeMainAxisExtentForChild(*child, MaxSize, max); |
if (maxExtent != -1 && childSize > maxExtent) |
childSize = maxExtent; |
} |
@@ -852,7 +852,7 @@ LayoutUnit RenderFlexibleBox::adjustChildSizeForMinAndMax(RenderBox* child, Layo |
Length min = isHorizontalFlow() ? child->style()->minWidth() : child->style()->minHeight(); |
LayoutUnit minExtent = 0; |
if (min.isSpecifiedOrIntrinsic()) |
- minExtent = computeMainAxisExtentForChild(child, MinSize, min); |
+ minExtent = computeMainAxisExtentForChild(*child, MinSize, min); |
return std::max(childSize, minExtent); |
} |
@@ -985,12 +985,12 @@ static LayoutUnit justifyContentSpaceBetweenChildren(LayoutUnit availableFreeSpa |
return 0; |
} |
-void RenderFlexibleBox::setLogicalOverrideSize(RenderBox* child, LayoutUnit childPreferredSize) |
+void RenderFlexibleBox::setLogicalOverrideSize(RenderBox& child, LayoutUnit childPreferredSize) |
{ |
if (hasOrthogonalFlow(child)) |
- child->setOverrideLogicalContentHeight(childPreferredSize - child->borderAndPaddingLogicalHeight()); |
+ child.setOverrideLogicalContentHeight(childPreferredSize - child.borderAndPaddingLogicalHeight()); |
else |
- child->setOverrideLogicalContentWidth(childPreferredSize - child->borderAndPaddingLogicalWidth()); |
+ child.setOverrideLogicalContentWidth(childPreferredSize - child.borderAndPaddingLogicalWidth()); |
} |
void RenderFlexibleBox::prepareChildForPositionedLayout(RenderBox* child, LayoutUnit mainAxisOffset, LayoutUnit crossAxisOffset, PositionedLayoutMode layoutMode) |
@@ -1011,9 +1011,9 @@ void RenderFlexibleBox::prepareChildForPositionedLayout(RenderBox* child, Layout |
} |
} |
-ItemPosition RenderFlexibleBox::alignmentForChild(RenderBox* child) const |
+ItemPosition RenderFlexibleBox::alignmentForChild(RenderBox& child) const |
{ |
- ItemPosition align = resolveAlignment(style(), child->style()); |
+ ItemPosition align = resolveAlignment(style(), child.style()); |
if (align == ItemPositionBaseline && hasOrthogonalFlow(child)) |
align = ItemPositionFlexStart; |
@@ -1057,12 +1057,12 @@ void RenderFlexibleBox::resetAutoMarginsAndLogicalTopInCrossAxis(RenderBox* chil |
} |
} |
-bool RenderFlexibleBox::needToStretchChildLogicalHeight(RenderBox* child) const |
+bool RenderFlexibleBox::needToStretchChildLogicalHeight(RenderBox& child) const |
{ |
if (alignmentForChild(child) != ItemPositionStretch) |
return false; |
- return isHorizontalFlow() && child->style()->height().isAuto(); |
+ return isHorizontalFlow() && child.style()->height().isAuto(); |
} |
void RenderFlexibleBox::layoutAndPlaceChildren(LayoutUnit& crossAxisOffset, const OrderedFlexItemList& children, const Vector<LayoutUnit, 16>& childSizes, LayoutUnit availableFreeSpace, bool relayoutChildren, Vector<LineContext>& lineContexts, bool hasInfiniteLineLength) |
@@ -1093,31 +1093,31 @@ void RenderFlexibleBox::layoutAndPlaceChildren(LayoutUnit& crossAxisOffset, cons |
child->setMayNeedPaintInvalidation(true); |
LayoutUnit childPreferredSize = childSizes[i] + mainAxisBorderAndPaddingExtentForChild(child); |
- setLogicalOverrideSize(child, childPreferredSize); |
- if (childPreferredSize != mainAxisExtentForChild(child)) { |
+ setLogicalOverrideSize(*child, childPreferredSize); |
+ if (childPreferredSize != mainAxisExtentForChild(*child)) { |
child->setChildNeedsLayout(MarkOnlyThis); |
} else { |
// To avoid double applying margin changes in updateAutoMarginsInCrossAxis, we reset the margins here. |
resetAutoMarginsAndLogicalTopInCrossAxis(child); |
} |
// We may have already forced relayout for orthogonal flowing children in preferredMainAxisContentExtentForChild. |
- bool forceChildRelayout = relayoutChildren && !childPreferredMainAxisContentExtentRequiresLayout(child, hasInfiniteLineLength); |
+ bool forceChildRelayout = relayoutChildren && !childPreferredMainAxisContentExtentRequiresLayout(*child, hasInfiniteLineLength); |
updateBlockChildDirtyBitsBeforeLayout(forceChildRelayout, child); |
child->layoutIfNeeded(); |
updateAutoMarginsInMainAxis(child, autoMarginOffset); |
LayoutUnit childCrossAxisMarginBoxExtent; |
- if (alignmentForChild(child) == ItemPositionBaseline && !hasAutoMarginsInCrossAxis(child)) { |
+ if (alignmentForChild(*child) == ItemPositionBaseline && !hasAutoMarginsInCrossAxis(child)) { |
LayoutUnit ascent = marginBoxAscentForChild(child); |
- LayoutUnit descent = (crossAxisMarginExtentForChild(child) + crossAxisExtentForChild(child)) - ascent; |
+ LayoutUnit descent = (crossAxisMarginExtentForChild(child) + crossAxisExtentForChild(*child)) - ascent; |
maxAscent = std::max(maxAscent, ascent); |
maxDescent = std::max(maxDescent, descent); |
childCrossAxisMarginBoxExtent = maxAscent + maxDescent; |
} else { |
- childCrossAxisMarginBoxExtent = crossAxisIntrinsicExtentForChild(child) + crossAxisMarginExtentForChild(child) + crossAxisScrollbarExtentForChild(child); |
+ childCrossAxisMarginBoxExtent = crossAxisIntrinsicExtentForChild(*child) + crossAxisMarginExtentForChild(child) + crossAxisScrollbarExtentForChild(child); |
} |
if (!isColumnFlow()) |
setLogicalHeight(std::max(logicalHeight(), crossAxisOffset + flowAwareBorderAfter() + flowAwarePaddingAfter() + childCrossAxisMarginBoxExtent + crossAxisScrollbarExtent())); |
@@ -1125,7 +1125,7 @@ void RenderFlexibleBox::layoutAndPlaceChildren(LayoutUnit& crossAxisOffset, cons |
mainAxisOffset += flowAwareMarginStartForChild(child); |
- LayoutUnit childMainExtent = mainAxisExtentForChild(child); |
+ LayoutUnit childMainExtent = mainAxisExtentForChild(*child); |
// In an RTL column situation, this will apply the margin-right/margin-end on the left. |
// This will be fixed later in flipForRightToLeftColumn. |
LayoutPoint childLocation(shouldFlipMainAxis ? totalMainExtent - mainAxisOffset - childMainExtent : mainAxisOffset, |
@@ -1174,7 +1174,7 @@ void RenderFlexibleBox::layoutColumnReverse(const OrderedFlexItemList& children, |
child->layer()->setStaticBlockPosition(mainAxisOffset); |
continue; |
} |
- mainAxisOffset -= mainAxisExtentForChild(child) + flowAwareMarginEndForChild(child); |
+ mainAxisOffset -= mainAxisExtentForChild(*child) + flowAwareMarginEndForChild(child); |
setFlowAwareLocationForChild(child, LayoutPoint(mainAxisOffset, crossAxisOffset + flowAwareMarginBeforeForChild(child))); |
@@ -1282,7 +1282,7 @@ void RenderFlexibleBox::alignChildren(const Vector<LineContext>& lineContexts) |
if (updateAutoMarginsInCrossAxis(child, std::max(LayoutUnit(0), availableAlignmentSpaceForChild(lineCrossAxisExtent, child)))) |
continue; |
- switch (alignmentForChild(child)) { |
+ switch (alignmentForChild(*child)) { |
case ItemPositionAuto: |
ASSERT_NOT_REACHED(); |
break; |
@@ -1338,7 +1338,7 @@ void RenderFlexibleBox::alignChildren(const Vector<LineContext>& lineContexts) |
LayoutUnit minMarginAfterBaseline = minMarginAfterBaselines[lineNumber]; |
for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numberOfChildren; ++childNumber, child = m_orderIterator.next()) { |
ASSERT(child); |
- if (alignmentForChild(child) == ItemPositionBaseline && !hasAutoMarginsInCrossAxis(child) && minMarginAfterBaseline) |
+ if (alignmentForChild(*child) == ItemPositionBaseline && !hasAutoMarginsInCrossAxis(child) && minMarginAfterBaseline) |
adjustAlignmentForChild(child, minMarginAfterBaseline); |
} |
} |
@@ -1348,8 +1348,8 @@ void RenderFlexibleBox::applyStretchAlignmentToChild(RenderBox* child, LayoutUni |
{ |
if (!isColumnFlow() && child->style()->logicalHeight().isAuto()) { |
// FIXME: If the child has orthogonal flow, then it already has an override height set, so use it. |
- if (!hasOrthogonalFlow(child)) { |
- LayoutUnit heightBeforeStretching = needToStretchChildLogicalHeight(child) ? constrainedChildIntrinsicContentLogicalHeight(child) : child->logicalHeight(); |
+ if (!hasOrthogonalFlow(*child)) { |
+ LayoutUnit heightBeforeStretching = needToStretchChildLogicalHeight(*child) ? constrainedChildIntrinsicContentLogicalHeight(*child) : child->logicalHeight(); |
LayoutUnit stretchedLogicalHeight = heightBeforeStretching + availableAlignmentSpaceForChildBeforeStretching(lineCrossAxisExtent, child); |
ASSERT(!child->needsLayout()); |
LayoutUnit desiredLogicalHeight = child->constrainLogicalHeightByMinMax(stretchedLogicalHeight, heightBeforeStretching - child->borderAndPaddingLogicalHeight()); |
@@ -1363,7 +1363,7 @@ void RenderFlexibleBox::applyStretchAlignmentToChild(RenderBox* child, LayoutUni |
} |
} else if (isColumnFlow() && child->style()->logicalWidth().isAuto()) { |
// FIXME: If the child doesn't have orthogonal flow, then it already has an override width set, so use it. |
- if (hasOrthogonalFlow(child)) { |
+ if (hasOrthogonalFlow(*child)) { |
LayoutUnit childWidth = std::max<LayoutUnit>(0, lineCrossAxisExtent - crossAxisMarginExtentForChild(child)); |
childWidth = child->constrainLogicalWidthByMinMax(childWidth, childWidth, this); |
@@ -1387,7 +1387,7 @@ void RenderFlexibleBox::flipForRightToLeftColumn() |
LayoutPoint location = flowAwareLocationForChild(child); |
// For vertical flows, setFlowAwareLocationForChild will transpose x and y, |
// so using the y axis for a column cross axis extent is correct. |
- location.setY(crossExtent - crossAxisExtentForChild(child) - location.y()); |
+ location.setY(crossExtent - crossAxisExtentForChild(*child) - location.y()); |
setFlowAwareLocationForChild(child, location); |
} |
} |