| Index: Source/core/rendering/RenderBox.cpp
|
| diff --git a/Source/core/rendering/RenderBox.cpp b/Source/core/rendering/RenderBox.cpp
|
| index 760eab0aad7d7832b5fed5c1e2a2aff48cfc7088..55bf74fa309f447994c956136a3344daaacce34e 100644
|
| --- a/Source/core/rendering/RenderBox.cpp
|
| +++ b/Source/core/rendering/RenderBox.cpp
|
| @@ -2244,11 +2244,8 @@ void RenderBox::computeLogicalWidth(LogicalExtentComputedValues& computedValues)
|
| computedValues.m_margins.m_start = minimumValueForLength(styleToUse->marginStart(), containerLogicalWidth);
|
| computedValues.m_margins.m_end = minimumValueForLength(styleToUse->marginEnd(), containerLogicalWidth);
|
| } else {
|
| - LayoutUnit containerLogicalWidthForAutoMargins = containerLogicalWidth;
|
| - if (avoidsFloats() && cb->containsFloats())
|
| - containerLogicalWidthForAutoMargins = containingBlockAvailableLineWidth();
|
| bool hasInvertedDirection = cb->style()->isLeftToRightDirection() != style()->isLeftToRightDirection();
|
| - computeInlineDirectionMargins(cb, containerLogicalWidthForAutoMargins, computedValues.m_extent,
|
| + computeInlineDirectionMargins(cb, containerLogicalWidth, computedValues.m_extent,
|
| hasInvertedDirection ? computedValues.m_margins.m_end : computedValues.m_margins.m_start,
|
| hasInvertedDirection ? computedValues.m_margins.m_start : computedValues.m_margins.m_end);
|
| }
|
| @@ -2445,31 +2442,35 @@ void RenderBox::computeInlineDirectionMargins(RenderBlock* containingBlock, Layo
|
| marginEndLength.setValue(0);
|
| }
|
|
|
| + LayoutUnit availableWidth = containerWidth;
|
| + if (avoidsFloats() && containingBlock->containsFloats())
|
| + availableWidth = containingBlockAvailableLineWidth();
|
| +
|
| // Case One: The object is being centered in the containing block's available logical width.
|
| - if ((marginStartLength.isAuto() && marginEndLength.isAuto() && childWidth < containerWidth)
|
| + if ((marginStartLength.isAuto() && marginEndLength.isAuto() && childWidth < availableWidth)
|
| || (!marginStartLength.isAuto() && !marginEndLength.isAuto() && containingBlock->style()->textAlign() == WEBKIT_CENTER)) {
|
| // Other browsers center the margin box for align=center elements so we match them here.
|
| LayoutUnit marginStartWidth = minimumValueForLength(marginStartLength, containerWidth);
|
| LayoutUnit marginEndWidth = minimumValueForLength(marginEndLength, containerWidth);
|
| - LayoutUnit centeredMarginBoxStart = max<LayoutUnit>(0, (containerWidth - childWidth - marginStartWidth - marginEndWidth) / 2);
|
| + LayoutUnit centeredMarginBoxStart = max<LayoutUnit>(0, (availableWidth - childWidth - marginStartWidth - marginEndWidth) / 2);
|
| marginStart = centeredMarginBoxStart + marginStartWidth;
|
| - marginEnd = containerWidth - childWidth - marginStart + marginEndWidth;
|
| + marginEnd = availableWidth - childWidth - marginStart + marginEndWidth;
|
| return;
|
| }
|
|
|
| // Case Two: The object is being pushed to the start of the containing block's available logical width.
|
| - if (marginEndLength.isAuto() && childWidth < containerWidth) {
|
| + if (marginEndLength.isAuto() && childWidth < availableWidth) {
|
| marginStart = valueForLength(marginStartLength, containerWidth);
|
| - marginEnd = containerWidth - childWidth - marginStart;
|
| + marginEnd = availableWidth - childWidth - marginStart;
|
| return;
|
| }
|
|
|
| // Case Three: The object is being pushed to the end of the containing block's available logical width.
|
| bool pushToEndFromTextAlign = !marginEndLength.isAuto() && ((!containingBlockStyle->isLeftToRightDirection() && containingBlockStyle->textAlign() == WEBKIT_LEFT)
|
| || (containingBlockStyle->isLeftToRightDirection() && containingBlockStyle->textAlign() == WEBKIT_RIGHT));
|
| - if ((marginStartLength.isAuto() && childWidth < containerWidth) || pushToEndFromTextAlign) {
|
| + if ((marginStartLength.isAuto() && childWidth < availableWidth) || pushToEndFromTextAlign) {
|
| marginEnd = valueForLength(marginEndLength, containerWidth);
|
| - marginStart = containerWidth - childWidth - marginEnd;
|
| + marginStart = availableWidth - childWidth - marginEnd;
|
| return;
|
| }
|
|
|
|
|