| Index: sky/engine/core/rendering/RenderBox.cpp
|
| diff --git a/sky/engine/core/rendering/RenderBox.cpp b/sky/engine/core/rendering/RenderBox.cpp
|
| index 3a3a817c3d37859fb3fce8449f03d279ad73d6e0..9251b0d9d8cc4c65a2a824253d3a01561e3123fb 100644
|
| --- a/sky/engine/core/rendering/RenderBox.cpp
|
| +++ b/sky/engine/core/rendering/RenderBox.cpp
|
| @@ -100,17 +100,8 @@ void RenderBox::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle
|
| {
|
| RenderBoxModelObject::styleDidChange(diff, oldStyle);
|
|
|
| - RenderStyle* newStyle = style();
|
| - if (needsLayout() && oldStyle) {
|
| + if (needsLayout() && oldStyle)
|
| RenderBlock::removePercentHeightDescendantIfNeeded(this);
|
| -
|
| - // Normally we can do optimized positioning layout for absolute/fixed positioned objects. There is one special case, however, which is
|
| - // when the positioned object's margin-before is changed. In this case the parent has to get a layout in order to run margin collapsing
|
| - // to determine the new static position.
|
| - if (isOutOfFlowPositioned() && newStyle->hasStaticBlockPosition() && oldStyle->marginBefore() != newStyle->marginBefore()
|
| - && parent() && !parent()->normalChildNeedsLayout())
|
| - parent()->setChildNeedsLayout();
|
| - }
|
| }
|
|
|
| void RenderBox::updateFromStyle()
|
| @@ -1126,27 +1117,6 @@ void RenderBox::dirtyLineBoxes(bool fullLayout)
|
| void RenderBox::positionLineBox(InlineBox* box)
|
| {
|
| if (isOutOfFlowPositioned()) {
|
| - // Cache the x position only if we were an INLINE type originally.
|
| - bool wasInline = style()->isOriginalDisplayInlineType();
|
| - if (wasInline) {
|
| - // The value is cached in the xPos of the box. We only need this value if
|
| - // our object was inline originally, since otherwise it would have ended up underneath
|
| - // the inlines.
|
| - RootInlineBox& root = box->root();
|
| - root.block().setStaticInlinePositionForChild(this, LayoutUnit::fromFloatRound(box->logicalLeft()));
|
| - if (style()->hasStaticInlinePosition())
|
| - setChildNeedsLayout(MarkOnlyThis); // Just go ahead and mark the positioned object as needing layout, so it will update its position properly.
|
| - } else {
|
| - // Our object was a block originally, so we make our normal flow position be
|
| - // just below the line box (as though all the inlines that came before us got
|
| - // wrapped in an anonymous block, which is what would have happened had we been
|
| - // in flow). This value was cached in the y() of the box.
|
| - layer()->setStaticBlockPosition(box->logicalTop());
|
| - if (style()->hasStaticBlockPosition())
|
| - setChildNeedsLayout(MarkOnlyThis); // Just go ahead and mark the positioned object as needing layout, so it will update its position properly.
|
| - }
|
| -
|
| - // Nuke the box.
|
| box->remove(DontMarkLineBoxes);
|
| box->destroy();
|
| } else if (isReplaced()) {
|
| @@ -1781,34 +1751,11 @@ LayoutUnit RenderBox::containingBlockLogicalHeightForPositioned(const RenderBoxM
|
| return cb->clientLogicalHeight();
|
| }
|
|
|
| -static void computeInlineStaticDistance(Length& logicalLeft, Length& logicalRight, const RenderBox* child, const RenderBoxModelObject* containerBlock, LayoutUnit containerLogicalWidth)
|
| +static void computePositionedStaticDistance(Length& leftOrTop, Length& rightOrBottom)
|
| {
|
| - if (!logicalLeft.isAuto() || !logicalRight.isAuto())
|
| + if (!leftOrTop.isAuto() || !rightOrBottom.isAuto())
|
| return;
|
| -
|
| - // FIXME: The static distance computation has not been patched for mixed writing modes yet.
|
| - if (child->parent()->style()->direction() == LTR) {
|
| - LayoutUnit staticPosition = child->layer()->staticInlinePosition() - containerBlock->borderLogicalLeft();
|
| - for (RenderObject* curr = child->parent(); curr && curr != containerBlock; curr = curr->container()) {
|
| - if (curr->isBox())
|
| - staticPosition += toRenderBox(curr)->logicalLeft();
|
| - }
|
| - logicalLeft.setValue(Fixed, staticPosition);
|
| - } else {
|
| - RenderBox* enclosingBox = child->parent()->enclosingBox();
|
| - LayoutUnit staticPosition = child->layer()->staticInlinePosition() + containerLogicalWidth + containerBlock->borderLogicalLeft();
|
| - for (RenderObject* curr = child->parent(); curr; curr = curr->container()) {
|
| - if (curr->isBox()) {
|
| - if (curr != containerBlock)
|
| - staticPosition -= toRenderBox(curr)->logicalLeft();
|
| - if (curr == enclosingBox)
|
| - staticPosition -= enclosingBox->logicalWidth();
|
| - }
|
| - if (curr == containerBlock)
|
| - break;
|
| - }
|
| - logicalRight.setValue(Fixed, staticPosition);
|
| - }
|
| + leftOrTop.setValue(Fixed, 0);
|
| }
|
|
|
| void RenderBox::computePositionedLogicalWidth(LogicalExtentComputedValues& computedValues) const
|
| @@ -1878,7 +1825,7 @@ void RenderBox::computePositionedLogicalWidth(LogicalExtentComputedValues& compu
|
|
|
| // see FIXME 1
|
| // Calculate the static distance if needed.
|
| - computeInlineStaticDistance(logicalLeftLength, logicalRightLength, this, containerBlock, containerLogicalWidth);
|
| + computePositionedStaticDistance(logicalLeftLength, logicalRightLength);
|
|
|
| // Calculate constraint equation values for 'width' case.
|
| computePositionedLogicalWidthUsing(style()->logicalWidth(), containerBlock, containerDirection,
|
| @@ -2115,20 +2062,6 @@ void RenderBox::computePositionedLogicalWidthUsing(Length logicalWidth, const Re
|
| computeLogicalLeftPositionedOffset(computedValues.m_position, this, computedValues.m_extent, containerBlock, containerLogicalWidth);
|
| }
|
|
|
| -static void computeBlockStaticDistance(Length& logicalTop, Length& logicalBottom, const RenderBox* child, const RenderBoxModelObject* containerBlock)
|
| -{
|
| - if (!logicalTop.isAuto() || !logicalBottom.isAuto())
|
| - return;
|
| -
|
| - // FIXME: The static distance computation has not been patched for mixed writing modes.
|
| - LayoutUnit staticLogicalTop = child->layer()->staticBlockPosition() - containerBlock->borderBefore();
|
| - for (RenderObject* curr = child->parent(); curr && curr != containerBlock; curr = curr->container()) {
|
| - if (curr->isBox())
|
| - staticLogicalTop += toRenderBox(curr)->logicalTop();
|
| - }
|
| - logicalTop.setValue(Fixed, staticLogicalTop);
|
| -}
|
| -
|
| void RenderBox::computePositionedLogicalHeight(LogicalExtentComputedValues& computedValues) const
|
| {
|
| if (isReplaced()) {
|
| @@ -2174,7 +2107,7 @@ void RenderBox::computePositionedLogicalHeight(LogicalExtentComputedValues& comp
|
|
|
| // see FIXME 1
|
| // Calculate the static distance if needed.
|
| - computeBlockStaticDistance(logicalTopLength, logicalBottomLength, this, containerBlock);
|
| + computePositionedStaticDistance(logicalTopLength, logicalBottomLength);
|
|
|
| // Calculate constraint equation values for 'height' case.
|
| LayoutUnit logicalHeight = computedValues.m_extent;
|
| @@ -2395,7 +2328,7 @@ void RenderBox::computePositionedLogicalWidthReplaced(LogicalExtentComputedValue
|
| * else if 'direction' is 'rtl', set 'right' to the static position.
|
| \*-----------------------------------------------------------------------*/
|
| // see FIXME 1
|
| - computeInlineStaticDistance(logicalLeft, logicalRight, this, containerBlock, containerLogicalWidth);
|
| + computePositionedStaticDistance(logicalLeft, logicalRight);
|
|
|
| /*-----------------------------------------------------------------------*\
|
| * 3. If 'left' or 'right' are 'auto', replace any 'auto' on 'margin-left'
|
| @@ -2557,7 +2490,7 @@ void RenderBox::computePositionedLogicalHeightReplaced(LogicalExtentComputedValu
|
| * with the element's static position.
|
| \*-----------------------------------------------------------------------*/
|
| // see FIXME 1
|
| - computeBlockStaticDistance(logicalTop, logicalBottom, this, containerBlock);
|
| + computePositionedStaticDistance(logicalTop, logicalBottom);
|
|
|
| /*-----------------------------------------------------------------------*\
|
| * 3. If 'bottom' is 'auto', replace any 'auto' on 'margin-top' or
|
|
|