| Index: third_party/WebKit/WebCore/rendering/InlineFlowBox.cpp
|
| ===================================================================
|
| --- third_party/WebKit/WebCore/rendering/InlineFlowBox.cpp (revision 9391)
|
| +++ third_party/WebKit/WebCore/rendering/InlineFlowBox.cpp (working copy)
|
| @@ -55,26 +55,14 @@
|
| {
|
| if (!includeLeftEdge())
|
| return 0;
|
| -
|
| - Length margin = object()->style()->marginLeft();
|
| - if (margin.isAuto())
|
| - return 0;
|
| - if (margin.isFixed())
|
| - return margin.value();
|
| - return renderBox()->marginLeft();
|
| + return boxModelObject()->marginLeft();
|
| }
|
|
|
| int InlineFlowBox::marginRight()
|
| {
|
| if (!includeRightEdge())
|
| return 0;
|
| -
|
| - Length margin = object()->style()->marginRight();
|
| - if (margin.isAuto())
|
| - return 0;
|
| - if (margin.isFixed())
|
| - return margin.value();
|
| - return renderBox()->marginRight();
|
| + return boxModelObject()->marginRight();
|
| }
|
|
|
| int InlineFlowBox::marginBorderPaddingLeft()
|
| @@ -330,7 +318,7 @@
|
|
|
| leftPosition = min(x + visualOverflowLeft, leftPosition);
|
| rightPosition = max(x + text->width() + visualOverflowRight, rightPosition);
|
| - m_maxHorizontalVisualOverflow = max(max(visualOverflowRight, -visualOverflowLeft), m_maxHorizontalVisualOverflow);
|
| + m_maxHorizontalVisualOverflow = max(max(visualOverflowRight, -visualOverflowLeft), (int)m_maxHorizontalVisualOverflow);
|
| x += text->width();
|
| } else {
|
| if (curr->object()->isPositioned()) {
|
| @@ -349,11 +337,11 @@
|
| x = flow->placeBoxesHorizontally(x, leftPosition, rightPosition, needsWordSpacing);
|
| x += flow->marginRight();
|
| } else if (!curr->object()->isListMarker() || static_cast<RenderListMarker*>(curr->object())->isInside()) {
|
| - x += curr->renderBox()->marginLeft();
|
| + x += curr->boxModelObject()->marginLeft();
|
| curr->setXPos(x);
|
| - leftPosition = min(x + curr->renderBox()->overflowLeft(false), leftPosition);
|
| - rightPosition = max(x + curr->renderBox()->overflowWidth(false), rightPosition);
|
| - x += curr->width() + curr->renderBox()->marginRight();
|
| + leftPosition = min(x + toRenderBox(curr->object())->overflowLeft(false), leftPosition);
|
| + rightPosition = max(x + toRenderBox(curr->object())->overflowWidth(false), rightPosition);
|
| + x += curr->width() + curr->boxModelObject()->marginRight();
|
| }
|
| }
|
| }
|
| @@ -457,6 +445,8 @@
|
| if (curr->object()->isPositioned())
|
| continue; // Positioned placeholders don't affect calculations.
|
|
|
| + bool isInlineFlow = curr->isInlineFlowBox();
|
| +
|
| curr->setHeight(curr->object()->lineHeight(m_firstLine));
|
| curr->setBaseline(curr->object()->baselinePosition(m_firstLine));
|
| curr->setYPos(curr->object()->verticalPositionHint(m_firstLine));
|
| @@ -468,7 +458,7 @@
|
| if (maxPositionBottom < curr->height())
|
| maxPositionBottom = curr->height();
|
| }
|
| - else if (curr->hasTextChildren() || curr->renderBox()->hasHorizontalBordersOrPadding() || strictMode) {
|
| + else if ((!isInlineFlow || static_cast<InlineFlowBox*>(curr)->hasTextChildren()) || curr->boxModelObject()->hasHorizontalBordersOrPadding() || strictMode) {
|
| int ascent = curr->baseline() - curr->yPos();
|
| int descent = curr->height() - ascent;
|
| if (maxAscent < ascent)
|
| @@ -494,7 +484,8 @@
|
|
|
| // Adjust boxes to use their real box y/height and not the logical height (as dictated by
|
| // line-height).
|
| - if (curr->isInlineFlowBox())
|
| + bool isInlineFlow = curr->isInlineFlowBox();
|
| + if (isInlineFlow)
|
| static_cast<InlineFlowBox*>(curr)->placeBoxesVertically(y, maxHeight, maxAscent, strictMode, topPosition, bottomPosition, selectionTop, selectionBottom);
|
|
|
| bool childAffectsTopBottomPos = true;
|
| @@ -503,7 +494,7 @@
|
| else if (curr->yPos() == PositionBottom)
|
| curr->setYPos(y + maxHeight - curr->height());
|
| else {
|
| - if (!curr->hasTextChildren() && !curr->renderBox()->hasHorizontalBordersOrPadding() && !strictMode)
|
| + if ((isInlineFlow && !static_cast<InlineFlowBox*>(curr)->hasTextChildren()) && !curr->boxModelObject()->hasHorizontalBordersOrPadding() && !strictMode)
|
| childAffectsTopBottomPos = false;
|
| curr->setYPos(curr->yPos() + y + maxAscent - curr->baseline());
|
| }
|
| @@ -534,21 +525,23 @@
|
| }
|
|
|
| if (curr->object()->hasReflection()) {
|
| - overflowTop = min(overflowTop, curr->renderBox()->reflectionBox().y());
|
| - overflowBottom = max(overflowBottom, curr->renderBox()->reflectionBox().bottom());
|
| + RenderBox* box = toRenderBox(curr->object());
|
| + overflowTop = min(overflowTop, box->reflectionBox().y());
|
| + overflowBottom = max(overflowBottom, box->reflectionBox().bottom());
|
| }
|
|
|
| if (curr->isInlineFlowBox()) {
|
| - newHeight += curr->renderBox()->borderTop() + curr->renderBox()->paddingTop() +
|
| - curr->renderBox()->borderBottom() + curr->renderBox()->paddingBottom();
|
| - newY -= curr->renderBox()->borderTop() + curr->renderBox()->paddingTop();
|
| - newBaseline += curr->renderBox()->borderTop() + curr->renderBox()->paddingTop();
|
| + newHeight += curr->boxModelObject()->borderTop() + curr->boxModelObject()->paddingTop() +
|
| + curr->boxModelObject()->borderBottom() + curr->boxModelObject()->paddingBottom();
|
| + newY -= curr->boxModelObject()->borderTop() + curr->boxModelObject()->paddingTop();
|
| + newBaseline += curr->boxModelObject()->borderTop() + curr->boxModelObject()->paddingTop();
|
| }
|
| } else if (!curr->object()->isBR()) {
|
| - newY += curr->renderBox()->marginTop();
|
| - newHeight = curr->height() - (curr->renderBox()->marginTop() + curr->renderBox()->marginBottom());
|
| - overflowTop = curr->renderBox()->overflowTop(false);
|
| - overflowBottom = curr->renderBox()->overflowHeight(false) - newHeight;
|
| + RenderBox* box = toRenderBox(curr->object());
|
| + newY += box->marginTop();
|
| + newHeight = curr->height() - (box->marginTop() + box->marginBottom());
|
| + overflowTop = box->overflowTop(false);
|
| + overflowBottom = box->overflowHeight(false) - newHeight;
|
| }
|
|
|
| curr->setYPos(newY);
|
| @@ -587,7 +580,7 @@
|
| }
|
|
|
| // See if we have text children. If not, then we need to shrink ourselves to fit on the line.
|
| - if (!hasTextChildren() && !renderBox()->hasHorizontalBordersOrPadding()) {
|
| + if (!hasTextChildren() && !boxModelObject()->hasHorizontalBordersOrPadding()) {
|
| if (yPos() < topPos)
|
| setYPos(topPos);
|
| if (yPos() + height() > bottomPos)
|
|
|