Chromium Code Reviews| Index: Source/core/rendering/RenderFlexibleBox.cpp |
| diff --git a/Source/core/rendering/RenderFlexibleBox.cpp b/Source/core/rendering/RenderFlexibleBox.cpp |
| index 8e0730e60799e36f1102860555d8a7070e7d0047..1dc0f995cdaae30667c665a7c9b6b45759be99fc 100644 |
| --- a/Source/core/rendering/RenderFlexibleBox.cpp |
| +++ b/Source/core/rendering/RenderFlexibleBox.cpp |
| @@ -608,11 +608,49 @@ bool RenderFlexibleBox::childPreferredMainAxisContentExtentRequiresLayout(Render |
| return preferredMainAxisExtentDependsOnLayout(flexBasisForChild(child), hasInfiniteLineLength) && hasOrthogonalFlow(child); |
| } |
| +bool RenderFlexibleBox::childHasFiniteCrossSize(RenderBox* child) const |
| +{ |
| + if (child->style()->logicalHeight().isFixed()) |
| + return true; |
| + |
| + if (!style()->logicalHeight().isFixed()) |
| + return false; |
| + |
| + if (child->style()->logicalHeight().isPercent()) |
| + return true; |
| + |
| + if (!isMultiline() && needToStretchChildLogicalHeight(child)) |
| + return true; |
| + |
| + return false; |
| +} |
| + |
| +void RenderFlexibleBox::computeAspectRatioOfChild(RenderBox* child, double& aspectRatio, bool& hasAspectRatio) |
|
tony
2014/06/26 16:31:28
The bool seems unnecessary. Set the initial value
harpreet.sk
2014/06/30 09:26:07
Done.
|
| +{ |
| + if (child->style()->hasAspectRatio()) { |
| + hasAspectRatio = true; |
| + aspectRatio = child->style()->aspectRatio(); |
| + } else if (child->isRenderImage() && child->intrinsicLogicalHeight()) { |
|
tony
2014/06/26 16:31:28
Is checking for a RenderImage really the right thi
harpreet.sk
2014/06/30 09:26:07
Sorry only checking for RenderImage is not the rig
|
| + hasAspectRatio = true; |
| + aspectRatio = child->intrinsicLogicalWidth().rawValue() / child->intrinsicLogicalHeight().rawValue(); |
| + } |
| +} |
| + |
| LayoutUnit RenderFlexibleBox::preferredMainAxisContentExtentForChild(RenderBox* child, bool hasInfiniteLineLength, bool relayoutChildren) |
| { |
| child->clearOverrideSize(); |
| Length flexBasis = flexBasisForChild(child); |
| + double aspectRatio = 1.0f; |
| + bool hasAspectRatio = false; |
| + computeAspectRatioOfChild(child, aspectRatio, hasAspectRatio); |
| + |
| + if (hasAspectRatio && flexBasis.isAuto() && childHasFiniteCrossSize(child)) { |
| + if (!isMultiline() && needToStretchChildLogicalHeight(child)) |
| + return aspectRatio * style()->logicalHeight().value(); |
| + return aspectRatio * crossAxisIntrinsicExtentForChild(child); |
| + } |
| + |
| if (preferredMainAxisExtentDependsOnLayout(flexBasis, hasInfiniteLineLength)) { |
| LayoutUnit mainAxisExtent; |
| if (hasOrthogonalFlow(child)) { |