Chromium Code Reviews| Index: Source/core/rendering/RenderBox.cpp |
| diff --git a/Source/core/rendering/RenderBox.cpp b/Source/core/rendering/RenderBox.cpp |
| index 15cd98ac30c21f3e2ecb887e0ce6c4913a814a9b..684ea44e8a82f993d6823fbf1b675b0eedb0e03f 100644 |
| --- a/Source/core/rendering/RenderBox.cpp |
| +++ b/Source/core/rendering/RenderBox.cpp |
| @@ -1930,6 +1930,9 @@ void RenderBox::positionLineBox(InlineBox* box) |
| setChildNeedsLayout(MarkOnlyThis); // Just go ahead and mark the positioned object as needing layout, so it will update its position properly. |
| } |
| + if (container()->isRenderInline()) |
| + moveWithEdgeOfInlineContainerIfNecessary(box->isHorizontal()); |
| + |
| // Nuke the box. |
| box->remove(DontMarkLineBoxes); |
| box->destroy(); |
| @@ -1939,6 +1942,17 @@ void RenderBox::positionLineBox(InlineBox* box) |
| } |
| } |
| +void RenderBox::moveWithEdgeOfInlineContainerIfNecessary(bool isHorizontal) |
| +{ |
| + ASSERT(isOutOfFlowPositioned() && container()->isRenderInline() && container()->isRelPositioned()); |
|
esprehn
2014/07/28 19:35:15
This assert doesn't make sense, the caller of this
|
| + // If this object is inside a relative positioned inline and its inline position is an explicit offset from the edge of its container |
| + // then it will need to move if its inline container has changed width. We do not track if the width has changed |
| + // but if we are here then we are laying out lines inside it, so it probably has - mark our object for layout so that it can |
| + // move to the new offset created by the new width. |
| + if (!normalChildNeedsLayout() && !style()->hasStaticInlinePosition(isHorizontal)) |
| + setChildNeedsLayout(MarkOnlyThis); |
| +} |
| + |
| void RenderBox::deleteLineBoxWrapper() |
| { |
| if (inlineBoxWrapper()) { |