| Index: Source/core/rendering/InlineFlowBox.cpp
|
| diff --git a/Source/core/rendering/InlineFlowBox.cpp b/Source/core/rendering/InlineFlowBox.cpp
|
| index 66e89f3b5e07451a201aeafa4dd0e65654b1724f..c5780f5a3c7fe5cf3cb2dcba9c1dcfa06eac58d4 100644
|
| --- a/Source/core/rendering/InlineFlowBox.cpp
|
| +++ b/Source/core/rendering/InlineFlowBox.cpp
|
| @@ -109,7 +109,7 @@ void InlineFlowBox::addToLine(InlineBox* child)
|
| child->setFirstLineStyleBit(isFirstLineStyle());
|
| child->setIsHorizontal(isHorizontal());
|
| if (child->isText()) {
|
| - if (child->renderer()->parent() == renderer())
|
| + if (child->renderer().parent() == renderer())
|
| m_hasTextChildren = true;
|
| setHasTextDescendantsOnAncestors(this);
|
| } else if (child->isInlineFlowBox()) {
|
| @@ -117,14 +117,14 @@ void InlineFlowBox::addToLine(InlineBox* child)
|
| setHasTextDescendantsOnAncestors(this);
|
| }
|
|
|
| - if (descendantsHaveSameLineHeightAndBaseline() && !child->renderer()->isOutOfFlowPositioned()) {
|
| - RenderStyle* parentStyle = renderer()->style(isFirstLineStyle());
|
| - RenderStyle* childStyle = child->renderer()->style(isFirstLineStyle());
|
| + if (descendantsHaveSameLineHeightAndBaseline() && !child->renderer().isOutOfFlowPositioned()) {
|
| + RenderStyle* parentStyle = renderer().style(isFirstLineStyle());
|
| + RenderStyle* childStyle = child->renderer().style(isFirstLineStyle());
|
| bool shouldClearDescendantsHaveSameLineHeightAndBaseline = false;
|
| - if (child->renderer()->isReplaced())
|
| + if (child->renderer().isReplaced())
|
| shouldClearDescendantsHaveSameLineHeightAndBaseline = true;
|
| else if (child->isText()) {
|
| - if (child->renderer()->isBR() || child->renderer()->parent() != renderer()) {
|
| + if (child->renderer().isBR() || child->renderer().parent() != renderer()) {
|
| if (!parentStyle->font().fontMetrics().hasIdenticalAscentDescentAndLineGap(childStyle->font().fontMetrics())
|
| || parentStyle->lineHeight() != childStyle->lineHeight()
|
| || (parentStyle->verticalAlign() != BASELINE && !isRootInlineBox()) || childStyle->verticalAlign() != BASELINE)
|
| @@ -133,7 +133,7 @@ void InlineFlowBox::addToLine(InlineBox* child)
|
| if (childStyle->hasTextCombine() || childStyle->textEmphasisMark() != TextEmphasisMarkNone)
|
| shouldClearDescendantsHaveSameLineHeightAndBaseline = true;
|
| } else {
|
| - if (child->renderer()->isBR()) {
|
| + if (child->renderer().isBR()) {
|
| // FIXME: This is dumb. We only turn off because current layout test results expect the <br> to be 0-height on the baseline.
|
| // Other than making a zillion tests have to regenerate results, there's no reason to ditch the optimization here.
|
| shouldClearDescendantsHaveSameLineHeightAndBaseline = true;
|
| @@ -154,19 +154,21 @@ void InlineFlowBox::addToLine(InlineBox* child)
|
| clearDescendantsHaveSameLineHeightAndBaseline();
|
| }
|
|
|
| - if (!child->renderer()->isOutOfFlowPositioned()) {
|
| + if (!child->renderer().isOutOfFlowPositioned()) {
|
| if (child->isText()) {
|
| - RenderStyle* childStyle = child->renderer()->style(isFirstLineStyle());
|
| + RenderStyle* childStyle = child->renderer().style(isFirstLineStyle());
|
| if (childStyle->letterSpacing() < 0 || childStyle->textShadow() || childStyle->textEmphasisMark() != TextEmphasisMarkNone || childStyle->textStrokeWidth())
|
| child->clearKnownToHaveNoOverflow();
|
| - } else if (child->renderer()->isReplaced()) {
|
| - RenderBox* box = toRenderBox(child->renderer());
|
| - if (box->hasRenderOverflow() || box->hasSelfPaintingLayer())
|
| + } else if (child->renderer().isReplaced()) {
|
| + RenderBox& box = toRenderBox(child->renderer());
|
| + if (box.hasRenderOverflow() || box.hasSelfPaintingLayer())
|
| child->clearKnownToHaveNoOverflow();
|
| - } else if (!child->renderer()->isBR() && (child->renderer()->style(isFirstLineStyle())->boxShadow() || child->boxModelObject()->hasSelfPaintingLayer()
|
| - || (child->renderer()->isListMarker() && !toRenderListMarker(child->renderer())->isInside())
|
| - || child->renderer()->style(isFirstLineStyle())->hasBorderImageOutsets()))
|
| + } else if (!child->renderer().isBR() && (child->renderer().style(isFirstLineStyle())->boxShadow() || child->boxModelObject()->hasSelfPaintingLayer()
|
| + || (child->renderer().isListMarker() && !toRenderListMarker(child->renderer()).isInside())
|
| + || child->renderer().style(isFirstLineStyle())->hasBorderImageOutsets())) {
|
| +
|
| child->clearKnownToHaveNoOverflow();
|
| + }
|
|
|
| if (knownToHaveNoOverflow() && child->isInlineFlowBox() && !toInlineFlowBox(child)->knownToHaveNoOverflow())
|
| clearKnownToHaveNoOverflow();
|
| @@ -222,7 +224,7 @@ void InlineFlowBox::deleteLine()
|
|
|
| void InlineFlowBox::removeLineBoxFromRenderObject()
|
| {
|
| - toRenderInline(renderer())->lineBoxes()->removeLineBox(this);
|
| + rendererLineBoxes()->removeLineBox(this);
|
| }
|
|
|
| void InlineFlowBox::extractLine()
|
| @@ -235,7 +237,7 @@ void InlineFlowBox::extractLine()
|
|
|
| void InlineFlowBox::extractLineBoxFromRenderObject()
|
| {
|
| - toRenderInline(renderer())->lineBoxes()->extractLineBox(this);
|
| + rendererLineBoxes()->extractLineBox(this);
|
| }
|
|
|
| void InlineFlowBox::attachLine()
|
| @@ -248,7 +250,7 @@ void InlineFlowBox::attachLine()
|
|
|
| void InlineFlowBox::attachLineBoxToRenderObject()
|
| {
|
| - toRenderInline(renderer())->lineBoxes()->attachLineBox(this);
|
| + rendererLineBoxes()->attachLineBox(this);
|
| }
|
|
|
| void InlineFlowBox::adjustPosition(float dx, float dy)
|
| @@ -262,7 +264,7 @@ void InlineFlowBox::adjustPosition(float dx, float dy)
|
|
|
| RenderLineBoxList* InlineFlowBox::rendererLineBoxes() const
|
| {
|
| - return toRenderInline(renderer())->lineBoxes();
|
| + return toRenderInline(renderer()).lineBoxes();
|
| }
|
|
|
| static inline bool isLastChildForRenderer(RenderObject* ancestor, RenderObject* child)
|
| @@ -308,13 +310,13 @@ void InlineFlowBox::determineSpacingForFlowBoxes(bool lastLine, bool isLogically
|
|
|
| // The root inline box never has borders/margins/padding.
|
| if (parent()) {
|
| - bool ltr = renderer()->style()->isLeftToRightDirection();
|
| + bool ltr = renderer().style()->isLeftToRightDirection();
|
|
|
| // Check to see if all initial lines are unconstructed. If so, then
|
| // we know the inline began on this line (unless we are a continuation).
|
| RenderLineBoxList* lineBoxList = rendererLineBoxes();
|
| - if (!lineBoxList->firstLineBox()->isConstructed() && !renderer()->isInlineElementContinuation()) {
|
| - if (renderer()->style()->boxDecorationBreak() == DCLONE)
|
| + if (!lineBoxList->firstLineBox()->isConstructed() && !renderer().isInlineElementContinuation()) {
|
| + if (renderer().style()->boxDecorationBreak() == DCLONE)
|
| includeLeftEdge = includeRightEdge = true;
|
| else if (ltr && lineBoxList->firstLineBox() == this)
|
| includeLeftEdge = true;
|
| @@ -323,23 +325,23 @@ void InlineFlowBox::determineSpacingForFlowBoxes(bool lastLine, bool isLogically
|
| }
|
|
|
| if (!lineBoxList->lastLineBox()->isConstructed()) {
|
| - RenderInline* inlineFlow = toRenderInline(renderer());
|
| - bool isLastObjectOnLine = !isAnsectorAndWithinBlock(renderer(), logicallyLastRunRenderer) || (isLastChildForRenderer(renderer(), logicallyLastRunRenderer) && !isLogicallyLastRunWrapped);
|
| + RenderInline& inlineFlow = toRenderInline(renderer());
|
| + bool isLastObjectOnLine = !isAnsectorAndWithinBlock(&renderer(), logicallyLastRunRenderer) || (isLastChildForRenderer(&renderer(), logicallyLastRunRenderer) && !isLogicallyLastRunWrapped);
|
|
|
| // We include the border under these conditions:
|
| // (1) The next line was not created, or it is constructed. We check the previous line for rtl.
|
| // (2) The logicallyLastRun is not a descendant of this renderer.
|
| // (3) The logicallyLastRun is a descendant of this renderer, but it is the last child of this renderer and it does not wrap to the next line.
|
| // (4) The decoration break is set to clone therefore there will be borders on every sides.
|
| - if (renderer()->style()->boxDecorationBreak() == DCLONE)
|
| + if (renderer().style()->boxDecorationBreak() == DCLONE)
|
| includeLeftEdge = includeRightEdge = true;
|
| else if (ltr) {
|
| if (!nextLineBox()
|
| - && ((lastLine || isLastObjectOnLine) && !inlineFlow->continuation()))
|
| + && ((lastLine || isLastObjectOnLine) && !inlineFlow.continuation()))
|
| includeRightEdge = true;
|
| } else {
|
| if ((!prevLineBox() || prevLineBox()->isConstructed())
|
| - && ((lastLine || isLastObjectOnLine) && !inlineFlow->continuation()))
|
| + && ((lastLine || isLastObjectOnLine) && !inlineFlow.continuation()))
|
| includeLeftEdge = true;
|
| }
|
| }
|
| @@ -377,13 +379,13 @@ float InlineFlowBox::placeBoxesInInlineDirection(float logicalLeft, bool& needsW
|
| float InlineFlowBox::placeBoxRangeInInlineDirection(InlineBox* firstChild, InlineBox* lastChild, float& logicalLeft, float& minLogicalLeft, float& maxLogicalRight, bool& needsWordSpacing, GlyphOverflowAndFallbackFontsMap& textBoxDataMap)
|
| {
|
| for (InlineBox* curr = firstChild; curr && curr != lastChild; curr = curr->nextOnLine()) {
|
| - if (curr->renderer()->isText()) {
|
| + if (curr->renderer().isText()) {
|
| InlineTextBox* text = toInlineTextBox(curr);
|
| - RenderText* rt = toRenderText(text->renderer());
|
| - if (rt->textLength()) {
|
| - if (needsWordSpacing && isSpaceOrNewline(rt->characterAt(text->start())))
|
| - logicalLeft += rt->style(isFirstLineStyle())->font().fontDescription().wordSpacing();
|
| - needsWordSpacing = !isSpaceOrNewline(rt->characterAt(text->end()));
|
| + RenderText& rt = toRenderText(text->renderer());
|
| + if (rt.textLength()) {
|
| + if (needsWordSpacing && isSpaceOrNewline(rt.characterAt(text->start())))
|
| + logicalLeft += rt.style(isFirstLineStyle())->font().fontDescription().wordSpacing();
|
| + needsWordSpacing = !isSpaceOrNewline(rt.characterAt(text->end()));
|
| }
|
| text->setLogicalLeft(logicalLeft);
|
| if (knownToHaveNoOverflow())
|
| @@ -392,17 +394,18 @@ float InlineFlowBox::placeBoxRangeInInlineDirection(InlineBox* firstChild, Inlin
|
| if (knownToHaveNoOverflow())
|
| maxLogicalRight = max(logicalLeft, maxLogicalRight);
|
| } else {
|
| - if (curr->renderer()->isOutOfFlowPositioned()) {
|
| - if (curr->renderer()->parent()->style()->isLeftToRightDirection())
|
| + if (curr->renderer().isOutOfFlowPositioned()) {
|
| + if (curr->renderer().parent()->style()->isLeftToRightDirection()) {
|
| curr->setLogicalLeft(logicalLeft);
|
| - else
|
| + } else {
|
| // Our offset that we cache needs to be from the edge of the right border box and
|
| // not the left border box. We have to subtract |x| from the width of the block
|
| // (which can be obtained from the root line box).
|
| - curr->setLogicalLeft(root()->block()->logicalWidth() - logicalLeft);
|
| + curr->setLogicalLeft(root()->block().logicalWidth() - logicalLeft);
|
| + }
|
| continue; // The positioned object has no effect on the width.
|
| }
|
| - if (curr->renderer()->isRenderInline()) {
|
| + if (curr->renderer().isRenderInline()) {
|
| InlineFlowBox* flow = toInlineFlowBox(curr);
|
| logicalLeft += flow->marginLogicalLeft();
|
| if (knownToHaveNoOverflow())
|
| @@ -411,7 +414,7 @@ float InlineFlowBox::placeBoxRangeInInlineDirection(InlineBox* firstChild, Inlin
|
| if (knownToHaveNoOverflow())
|
| maxLogicalRight = max(logicalLeft, maxLogicalRight);
|
| logicalLeft += flow->marginLogicalRight();
|
| - } else if (!curr->renderer()->isListMarker() || toRenderListMarker(curr->renderer())->isInside()) {
|
| + } else if (!curr->renderer().isListMarker() || toRenderListMarker(curr->renderer()).isInside()) {
|
| // The box can have a different writing-mode than the overall line, so this is a bit complicated.
|
| // Just get all the physical margin and overflow values by hand based off |isVertical|.
|
| LayoutUnit logicalLeftMargin = isHorizontal() ? curr->boxModelObject()->marginLeft() : curr->boxModelObject()->marginTop();
|
| @@ -438,19 +441,19 @@ bool InlineFlowBox::requiresIdeographicBaseline(const GlyphOverflowAndFallbackFo
|
| if (isHorizontal())
|
| return false;
|
|
|
| - if (renderer()->style(isFirstLineStyle())->fontDescription().nonCJKGlyphOrientation() == NonCJKGlyphOrientationUpright
|
| - || renderer()->style(isFirstLineStyle())->font().primaryFont()->hasVerticalGlyphs())
|
| + if (renderer().style(isFirstLineStyle())->fontDescription().nonCJKGlyphOrientation() == NonCJKGlyphOrientationUpright
|
| + || renderer().style(isFirstLineStyle())->font().primaryFont()->hasVerticalGlyphs())
|
| return true;
|
|
|
| for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
|
| - if (curr->renderer()->isOutOfFlowPositioned())
|
| + if (curr->renderer().isOutOfFlowPositioned())
|
| continue; // Positioned placeholders don't affect calculations.
|
|
|
| if (curr->isInlineFlowBox()) {
|
| if (toInlineFlowBox(curr)->requiresIdeographicBaseline(textBoxDataMap))
|
| return true;
|
| } else {
|
| - if (curr->renderer()->style(isFirstLineStyle())->font().primaryFont()->hasVerticalGlyphs())
|
| + if (curr->renderer().style(isFirstLineStyle())->font().primaryFont()->hasVerticalGlyphs())
|
| return true;
|
|
|
| const Vector<const SimpleFontData*>* usedFonts = 0;
|
| @@ -476,7 +479,7 @@ void InlineFlowBox::adjustMaxAscentAndDescent(int& maxAscent, int& maxDescent, i
|
| for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
|
| // The computed lineheight needs to be extended for the
|
| // positioned elements
|
| - if (curr->renderer()->isOutOfFlowPositioned())
|
| + if (curr->renderer().isOutOfFlowPositioned())
|
| continue; // Positioned placeholders don't affect calculations.
|
| if (curr->verticalAlign() == TOP || curr->verticalAlign() == BOTTOM) {
|
| int lineHeight = curr->lineHeight();
|
| @@ -543,7 +546,7 @@ void InlineFlowBox::computeLogicalBoxHeights(RootInlineBox* rootBox, LayoutUnit&
|
| return;
|
|
|
| for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
|
| - if (curr->renderer()->isOutOfFlowPositioned())
|
| + if (curr->renderer().isOutOfFlowPositioned())
|
| continue; // Positioned placeholders don't affect calculations.
|
|
|
| InlineFlowBox* inlineFlowBox = curr->isInlineFlowBox() ? toInlineFlowBox(curr) : 0;
|
| @@ -600,7 +603,7 @@ void InlineFlowBox::placeBoxesInBlockDirection(LayoutUnit top, LayoutUnit maxHei
|
| {
|
| bool isRootBox = isRootInlineBox();
|
| if (isRootBox) {
|
| - const FontMetrics& fontMetrics = renderer()->style(isFirstLineStyle())->fontMetrics();
|
| + const FontMetrics& fontMetrics = renderer().style(isFirstLineStyle())->fontMetrics();
|
| // RootInlineBoxes are always placed on at pixel boundaries in their logical y direction. Not doing
|
| // so results in incorrect rendering of text decorations, most notably underlines.
|
| setLogicalTop(roundToInt(top + maxAscent - fontMetrics.ascent(baselineType)));
|
| @@ -614,7 +617,7 @@ void InlineFlowBox::placeBoxesInBlockDirection(LayoutUnit top, LayoutUnit maxHei
|
| }
|
|
|
| for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
|
| - if (curr->renderer()->isOutOfFlowPositioned())
|
| + if (curr->renderer().isOutOfFlowPositioned())
|
| continue; // Positioned placeholders don't affect calculations.
|
|
|
| if (descendantsHaveSameLineHeightAndBaseline()) {
|
| @@ -642,19 +645,19 @@ void InlineFlowBox::placeBoxesInBlockDirection(LayoutUnit top, LayoutUnit maxHei
|
| LayoutUnit boxHeightIncludingMargins = boxHeight;
|
|
|
| if (curr->isText() || curr->isInlineFlowBox()) {
|
| - const FontMetrics& fontMetrics = curr->renderer()->style(isFirstLineStyle())->fontMetrics();
|
| + const FontMetrics& fontMetrics = curr->renderer().style(isFirstLineStyle())->fontMetrics();
|
| newLogicalTop += curr->baselinePosition(baselineType) - fontMetrics.ascent(baselineType);
|
| if (curr->isInlineFlowBox()) {
|
| - RenderBoxModelObject* boxObject = toRenderBoxModelObject(curr->renderer());
|
| - newLogicalTop -= boxObject->style(isFirstLineStyle())->isHorizontalWritingMode() ? boxObject->borderTop() + boxObject->paddingTop() :
|
| - boxObject->borderRight() + boxObject->paddingRight();
|
| + RenderBoxModelObject& boxObject = toRenderBoxModelObject(curr->renderer());
|
| + newLogicalTop -= boxObject.style(isFirstLineStyle())->isHorizontalWritingMode() ? boxObject.borderTop() + boxObject.paddingTop() :
|
| + boxObject.borderRight() + boxObject.paddingRight();
|
| }
|
| newLogicalTopIncludingMargins = newLogicalTop;
|
| - } else if (!curr->renderer()->isBR()) {
|
| - RenderBox* box = toRenderBox(curr->renderer());
|
| + } else if (!curr->renderer().isBR()) {
|
| + RenderBox& box = toRenderBox(curr->renderer());
|
| newLogicalTopIncludingMargins = newLogicalTop;
|
| - LayoutUnit overSideMargin = curr->isHorizontal() ? box->marginTop() : box->marginRight();
|
| - LayoutUnit underSideMargin = curr->isHorizontal() ? box->marginBottom() : box->marginLeft();
|
| + LayoutUnit overSideMargin = curr->isHorizontal() ? box.marginTop() : box.marginRight();
|
| + LayoutUnit underSideMargin = curr->isHorizontal() ? box.marginBottom() : box.marginLeft();
|
| newLogicalTop += overSideMargin;
|
| boxHeightIncludingMargins += overSideMargin + underSideMargin;
|
| }
|
| @@ -662,28 +665,28 @@ void InlineFlowBox::placeBoxesInBlockDirection(LayoutUnit top, LayoutUnit maxHei
|
| curr->setLogicalTop(newLogicalTop);
|
|
|
| if (childAffectsTopBottomPos) {
|
| - if (curr->renderer()->isRubyRun()) {
|
| + if (curr->renderer().isRubyRun()) {
|
| // Treat the leading on the first and last lines of ruby runs as not being part of the overall lineTop/lineBottom.
|
| // Really this is a workaround hack for the fact that ruby should have been done as line layout and not done using
|
| // inline-block.
|
| - if (renderer()->style()->isFlippedLinesWritingMode() == (curr->renderer()->style()->rubyPosition() == RubyPositionAfter))
|
| + if (renderer().style()->isFlippedLinesWritingMode() == (curr->renderer().style()->rubyPosition() == RubyPositionAfter))
|
| hasAnnotationsBefore = true;
|
| else
|
| hasAnnotationsAfter = true;
|
|
|
| - RenderRubyRun* rubyRun = toRenderRubyRun(curr->renderer());
|
| - if (RenderRubyBase* rubyBase = rubyRun->rubyBase()) {
|
| + RenderRubyRun& rubyRun = toRenderRubyRun(curr->renderer());
|
| + if (RenderRubyBase* rubyBase = rubyRun.rubyBase()) {
|
| LayoutUnit bottomRubyBaseLeading = (curr->logicalHeight() - rubyBase->logicalBottom()) + rubyBase->logicalHeight() - (rubyBase->lastRootBox() ? rubyBase->lastRootBox()->lineBottom() : LayoutUnit());
|
| LayoutUnit topRubyBaseLeading = rubyBase->logicalTop() + (rubyBase->firstRootBox() ? rubyBase->firstRootBox()->lineTop() : LayoutUnit());
|
| - newLogicalTop += !renderer()->style()->isFlippedLinesWritingMode() ? topRubyBaseLeading : bottomRubyBaseLeading;
|
| + newLogicalTop += !renderer().style()->isFlippedLinesWritingMode() ? topRubyBaseLeading : bottomRubyBaseLeading;
|
| boxHeight -= (topRubyBaseLeading + bottomRubyBaseLeading);
|
| }
|
| }
|
| if (curr->isInlineTextBox()) {
|
| TextEmphasisPosition emphasisMarkPosition;
|
| - if (toInlineTextBox(curr)->getEmphasisMarkPosition(curr->renderer()->style(isFirstLineStyle()), emphasisMarkPosition)) {
|
| + if (toInlineTextBox(curr)->getEmphasisMarkPosition(curr->renderer().style(isFirstLineStyle()), emphasisMarkPosition)) {
|
| bool emphasisMarkIsOver = emphasisMarkPosition == TextEmphasisPositionOver;
|
| - if (emphasisMarkIsOver != curr->renderer()->style(isFirstLineStyle())->isFlippedLinesWritingMode())
|
| + if (emphasisMarkIsOver != curr->renderer().style(isFirstLineStyle())->isFlippedLinesWritingMode())
|
| hasAnnotationsBefore = true;
|
| else
|
| hasAnnotationsAfter = true;
|
| @@ -723,7 +726,7 @@ void InlineFlowBox::placeBoxesInBlockDirection(LayoutUnit top, LayoutUnit maxHei
|
| lineBottomIncludingMargins = max(lineBottom, lineBottomIncludingMargins);
|
| }
|
|
|
| - if (renderer()->style()->isFlippedLinesWritingMode())
|
| + if (renderer().style()->isFlippedLinesWritingMode())
|
| flipLinesInBlockDirection(lineTopIncludingMargins, lineBottomIncludingMargins);
|
| }
|
| }
|
| @@ -731,7 +734,7 @@ void InlineFlowBox::placeBoxesInBlockDirection(LayoutUnit top, LayoutUnit maxHei
|
| void InlineFlowBox::computeMaxLogicalTop(float& maxLogicalTop) const
|
| {
|
| for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
|
| - if (curr->renderer()->isOutOfFlowPositioned())
|
| + if (curr->renderer().isOutOfFlowPositioned())
|
| continue; // Positioned placeholders don't affect calculations.
|
|
|
| if (descendantsHaveSameLineHeightAndBaseline())
|
| @@ -751,7 +754,7 @@ void InlineFlowBox::flipLinesInBlockDirection(LayoutUnit lineTop, LayoutUnit lin
|
| setLogicalTop(lineBottom - (logicalTop() - lineTop) - logicalHeight());
|
|
|
| for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
|
| - if (curr->renderer()->isOutOfFlowPositioned())
|
| + if (curr->renderer().isOutOfFlowPositioned())
|
| continue; // Positioned placeholders aren't affected here.
|
|
|
| if (curr->isInlineFlowBox())
|
| @@ -767,7 +770,7 @@ inline void InlineFlowBox::addBoxShadowVisualOverflow(LayoutRect& logicalVisualO
|
| if (!parent())
|
| return;
|
|
|
| - RenderStyle* style = renderer()->style(isFirstLineStyle());
|
| + RenderStyle* style = renderer().style(isFirstLineStyle());
|
| if (!style->boxShadow())
|
| return;
|
|
|
| @@ -800,7 +803,7 @@ inline void InlineFlowBox::addBorderOutsetVisualOverflow(LayoutRect& logicalVisu
|
| if (!parent())
|
| return;
|
|
|
| - RenderStyle* style = renderer()->style(isFirstLineStyle());
|
| + RenderStyle* style = renderer().style(isFirstLineStyle());
|
| if (!style->hasBorderImageOutsets())
|
| return;
|
|
|
| @@ -834,7 +837,7 @@ inline void InlineFlowBox::addTextBoxVisualOverflow(InlineTextBox* textBox, Glyp
|
| if (textBox->knownToHaveNoOverflow())
|
| return;
|
|
|
| - RenderStyle* style = textBox->renderer()->style(isFirstLineStyle());
|
| + RenderStyle* style = textBox->renderer().style(isFirstLineStyle());
|
|
|
| GlyphOverflowAndFallbackFontsMap::iterator it = textBoxDataMap.find(textBox);
|
| GlyphOverflow* glyphOverflow = it == textBoxDataMap.end() ? 0 : &it->value.second;
|
| @@ -891,13 +894,13 @@ inline void InlineFlowBox::addTextBoxVisualOverflow(InlineTextBox* textBox, Glyp
|
|
|
| inline void InlineFlowBox::addReplacedChildOverflow(const InlineBox* inlineBox, LayoutRect& logicalLayoutOverflow, LayoutRect& logicalVisualOverflow)
|
| {
|
| - RenderBox* box = toRenderBox(inlineBox->renderer());
|
| + RenderBox& box = toRenderBox(inlineBox->renderer());
|
|
|
| // Visual overflow only propagates if the box doesn't have a self-painting layer. This rectangle does not include
|
| // transforms or relative positioning (since those objects always have self-painting layers), but it does need to be adjusted
|
| // for writing-mode differences.
|
| - if (!box->hasSelfPaintingLayer()) {
|
| - LayoutRect childLogicalVisualOverflow = box->logicalVisualOverflowRectForPropagation(renderer()->style());
|
| + if (!box.hasSelfPaintingLayer()) {
|
| + LayoutRect childLogicalVisualOverflow = box.logicalVisualOverflowRectForPropagation(renderer().style());
|
| childLogicalVisualOverflow.move(inlineBox->logicalLeft(), inlineBox->logicalTop());
|
| logicalVisualOverflow.unite(childLogicalVisualOverflow);
|
| }
|
| @@ -905,7 +908,7 @@ inline void InlineFlowBox::addReplacedChildOverflow(const InlineBox* inlineBox,
|
| // Layout overflow internal to the child box only propagates if the child box doesn't have overflow clip set.
|
| // Otherwise the child border box propagates as layout overflow. This rectangle must include transforms and relative positioning
|
| // and be adjusted for writing-mode differences.
|
| - LayoutRect childLogicalLayoutOverflow = box->logicalLayoutOverflowRectForPropagation(renderer()->style());
|
| + LayoutRect childLogicalLayoutOverflow = box.logicalLayoutOverflowRectForPropagation(renderer().style());
|
| childLogicalLayoutOverflow.move(inlineBox->logicalLeft(), inlineBox->logicalTop());
|
| logicalLayoutOverflow.unite(childLogicalLayoutOverflow);
|
| }
|
| @@ -926,18 +929,18 @@ void InlineFlowBox::computeOverflow(LayoutUnit lineTop, LayoutUnit lineBottom, G
|
| addBorderOutsetVisualOverflow(logicalVisualOverflow);
|
|
|
| for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
|
| - if (curr->renderer()->isOutOfFlowPositioned())
|
| + if (curr->renderer().isOutOfFlowPositioned())
|
| continue; // Positioned placeholders don't affect calculations.
|
|
|
| - if (curr->renderer()->isText()) {
|
| + if (curr->renderer().isText()) {
|
| InlineTextBox* text = toInlineTextBox(curr);
|
| - RenderText* rt = toRenderText(text->renderer());
|
| - if (rt->isBR())
|
| + RenderText& rt = toRenderText(text->renderer());
|
| + if (rt.isBR())
|
| continue;
|
| LayoutRect textBoxOverflow(enclosingLayoutRect(text->logicalFrameRect()));
|
| addTextBoxVisualOverflow(text, textBoxDataMap, textBoxOverflow);
|
| logicalVisualOverflow.unite(textBoxOverflow);
|
| - } else if (curr->renderer()->isRenderInline()) {
|
| + } else if (curr->renderer().isRenderInline()) {
|
| InlineFlowBox* flow = toInlineFlowBox(curr);
|
| flow->computeOverflow(lineTop, lineBottom, textBoxDataMap);
|
| if (!flow->boxModelObject()->hasSelfPaintingLayer())
|
| @@ -945,8 +948,9 @@ void InlineFlowBox::computeOverflow(LayoutUnit lineTop, LayoutUnit lineBottom, G
|
| LayoutRect childLayoutOverflow = flow->logicalLayoutOverflowRect(lineTop, lineBottom);
|
| childLayoutOverflow.move(flow->boxModelObject()->relativePositionLogicalOffset());
|
| logicalLayoutOverflow.unite(childLayoutOverflow);
|
| - } else
|
| + } else {
|
| addReplacedChildOverflow(curr, logicalLayoutOverflow, logicalVisualOverflow);
|
| + }
|
| }
|
|
|
| setOverflowFromLogicalRects(logicalLayoutOverflow, logicalVisualOverflow, lineTop, lineBottom);
|
| @@ -997,11 +1001,11 @@ bool InlineFlowBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re
|
| // We need to account for culled inline parents of the hit-tested nodes, so that they may also get included in area-based hit-tests.
|
| RenderObject* culledParent = 0;
|
| for (InlineBox* curr = lastChild(); curr; curr = curr->prevOnLine()) {
|
| - if (curr->renderer()->isText() || !curr->boxModelObject()->hasSelfPaintingLayer()) {
|
| + if (curr->renderer().isText() || !curr->boxModelObject()->hasSelfPaintingLayer()) {
|
| RenderObject* newParent = 0;
|
| // Culled parents are only relevant for area-based hit-tests, so ignore it in point-based ones.
|
| if (locationInContainer.isRectBasedTest()) {
|
| - newParent = curr->renderer()->parent();
|
| + newParent = curr->renderer().parent();
|
| if (newParent == renderer())
|
| newParent = 0;
|
| }
|
| @@ -1018,7 +1022,7 @@ bool InlineFlowBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re
|
| culledParent = newParent;
|
| }
|
| if (curr->nodeAtPoint(request, result, locationInContainer, accumulatedOffset, lineTop, lineBottom)) {
|
| - renderer()->updateHitTestResult(result, locationInContainer.point() - toLayoutSize(accumulatedOffset));
|
| + renderer().updateHitTestResult(result, locationInContainer.point() - toLayoutSize(accumulatedOffset));
|
| return true;
|
| }
|
| }
|
| @@ -1038,7 +1042,7 @@ bool InlineFlowBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re
|
| LayoutUnit height = frameRect.height();
|
|
|
| // Constrain our hit testing to the line top and bottom if necessary.
|
| - bool noQuirksMode = renderer()->document().inNoQuirksMode();
|
| + bool noQuirksMode = renderer().document().inNoQuirksMode();
|
| if (!noQuirksMode && !hasTextChildren() && !(descendantsHaveSameLineHeightAndBaseline() && hasTextDescendants())) {
|
| RootInlineBox* rootBox = root();
|
| LayoutUnit& top = isHorizontal() ? minY : minX;
|
| @@ -1054,8 +1058,8 @@ bool InlineFlowBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re
|
| rect.moveBy(accumulatedOffset);
|
|
|
| if (visibleToHitTestRequest(request) && locationInContainer.intersects(rect)) {
|
| - renderer()->updateHitTestResult(result, flipForWritingMode(locationInContainer.point() - toLayoutSize(accumulatedOffset))); // Don't add in m_x or m_y here, we want coords in the containing block's space.
|
| - if (!result.addNodeToRectBasedTestResult(renderer()->node(), request, locationInContainer, rect))
|
| + renderer().updateHitTestResult(result, flipForWritingMode(locationInContainer.point() - toLayoutSize(accumulatedOffset))); // Don't add in m_x or m_y here, we want coords in the containing block's space.
|
| + if (!result.addNodeToRectBasedTestResult(renderer().node(), request, locationInContainer, rect))
|
| return true;
|
| }
|
|
|
| @@ -1065,7 +1069,7 @@ bool InlineFlowBox::nodeAtPoint(const HitTestRequest& request, HitTestResult& re
|
| void InlineFlowBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset, LayoutUnit lineTop, LayoutUnit lineBottom)
|
| {
|
| LayoutRect overflowRect(visualOverflowRect(lineTop, lineBottom));
|
| - overflowRect.inflate(renderer()->maximalOutlineSize(paintInfo.phase));
|
| + overflowRect.inflate(renderer().maximalOutlineSize(paintInfo.phase));
|
| flipForWritingMode(overflowRect);
|
| overflowRect.moveBy(paintOffset);
|
|
|
| @@ -1076,16 +1080,16 @@ void InlineFlowBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset,
|
| if (paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhaseSelfOutline) {
|
| // Add ourselves to the paint info struct's list of inlines that need to paint their
|
| // outlines.
|
| - if (renderer()->style()->visibility() == VISIBLE && renderer()->hasOutline() && !isRootInlineBox()) {
|
| - RenderInline* inlineFlow = toRenderInline(renderer());
|
| + if (renderer().style()->visibility() == VISIBLE && renderer().hasOutline() && !isRootInlineBox()) {
|
| + RenderInline& inlineFlow = toRenderInline(renderer());
|
|
|
| RenderBlock* cb = 0;
|
| - bool containingBlockPaintsContinuationOutline = inlineFlow->continuation() || inlineFlow->isInlineElementContinuation();
|
| + bool containingBlockPaintsContinuationOutline = inlineFlow.continuation() || inlineFlow.isInlineElementContinuation();
|
| if (containingBlockPaintsContinuationOutline) {
|
| // FIXME: See https://bugs.webkit.org/show_bug.cgi?id=54690. We currently don't reconnect inline continuations
|
| // after a child removal. As a result, those merged inlines do not get seperated and hence not get enclosed by
|
| // anonymous blocks. In this case, it is better to bail out and paint it ourself.
|
| - RenderBlock* enclosingAnonymousBlock = renderer()->containingBlock();
|
| + RenderBlock* enclosingAnonymousBlock = renderer().containingBlock();
|
| if (!enclosingAnonymousBlock->isAnonymousBlock())
|
| containingBlockPaintsContinuationOutline = false;
|
| else {
|
| @@ -1102,9 +1106,9 @@ void InlineFlowBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset,
|
| if (containingBlockPaintsContinuationOutline) {
|
| // Add ourselves to the containing block of the entire continuation so that it can
|
| // paint us atomically.
|
| - cb->addContinuationWithOutline(toRenderInline(renderer()->node()->renderer()));
|
| - } else if (!inlineFlow->isInlineElementContinuation()) {
|
| - paintInfo.outlineObjects()->add(inlineFlow);
|
| + cb->addContinuationWithOutline(toRenderInline(renderer().node()->renderer()));
|
| + } else if (!inlineFlow.isInlineElementContinuation()) {
|
| + paintInfo.outlineObjects()->add(&inlineFlow);
|
| }
|
| }
|
| } else if (paintInfo.phase == PaintPhaseMask) {
|
| @@ -1122,12 +1126,12 @@ void InlineFlowBox::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset,
|
| PaintPhase paintPhase = paintInfo.phase == PaintPhaseChildOutlines ? PaintPhaseOutline : paintInfo.phase;
|
| PaintInfo childInfo(paintInfo);
|
| childInfo.phase = paintPhase;
|
| - childInfo.updatePaintingRootForChildren(renderer());
|
| + childInfo.updatePaintingRootForChildren(&renderer());
|
|
|
| // Paint our children.
|
| if (paintPhase != PaintPhaseSelfOutline) {
|
| for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
|
| - if (curr->renderer()->isText() || !curr->boxModelObject()->hasSelfPaintingLayer())
|
| + if (curr->renderer().isText() || !curr->boxModelObject()->hasSelfPaintingLayer())
|
| curr->paint(childInfo, paintOffset, lineTop, lineBottom);
|
| }
|
| }
|
| @@ -1146,17 +1150,17 @@ bool InlineFlowBox::boxShadowCanBeAppliedToBackground(const FillLayer& lastBackg
|
| // The checks here match how paintFillLayer() decides whether to clip (if it does, the shadow
|
| // would be clipped out, so it has to be drawn separately).
|
| StyleImage* image = lastBackgroundLayer.image();
|
| - bool hasFillImage = image && image->canRender(renderer(), renderer()->style()->effectiveZoom());
|
| - return (!hasFillImage && !renderer()->style()->hasBorderRadius()) || (!prevLineBox() && !nextLineBox()) || !parent();
|
| + bool hasFillImage = image && image->canRender(&renderer(), renderer().style()->effectiveZoom());
|
| + return (!hasFillImage && !renderer().style()->hasBorderRadius()) || (!prevLineBox() && !nextLineBox()) || !parent();
|
| }
|
|
|
| void InlineFlowBox::paintFillLayer(const PaintInfo& paintInfo, const Color& c, const FillLayer* fillLayer, const LayoutRect& rect, CompositeOperator op)
|
| {
|
| StyleImage* img = fillLayer->image();
|
| - bool hasFillImage = img && img->canRender(renderer(), renderer()->style()->effectiveZoom());
|
| - if ((!hasFillImage && !renderer()->style()->hasBorderRadius()) || (!prevLineBox() && !nextLineBox()) || !parent())
|
| + bool hasFillImage = img && img->canRender(&renderer(), renderer().style()->effectiveZoom());
|
| + if ((!hasFillImage && !renderer().style()->hasBorderRadius()) || (!prevLineBox() && !nextLineBox()) || !parent()) {
|
| boxModelObject()->paintFillLayerExtended(paintInfo, c, fillLayer, rect, BackgroundBleedNone, this, rect.size(), op);
|
| - else if (renderer()->style()->boxDecorationBreak() == DCLONE) {
|
| + } else if (renderer().style()->boxDecorationBreak() == DCLONE) {
|
| GraphicsContextStateSaver stateSaver(*paintInfo.context);
|
| paintInfo.context->clip(LayoutRect(rect.x(), rect.y(), width(), height()));
|
| boxModelObject()->paintFillLayerExtended(paintInfo, c, fillLayer, rect, BackgroundBleedNone, this, rect.size(), op);
|
| @@ -1169,7 +1173,7 @@ void InlineFlowBox::paintFillLayer(const PaintInfo& paintInfo, const Color& c, c
|
| // the previous line left off.
|
| LayoutUnit logicalOffsetOnLine = 0;
|
| LayoutUnit totalLogicalWidth;
|
| - if (renderer()->style()->direction() == LTR) {
|
| + if (renderer().style()->direction() == LTR) {
|
| for (InlineFlowBox* curr = prevLineBox(); curr; curr = curr->prevLineBox())
|
| logicalOffsetOnLine += curr->logicalWidth();
|
| totalLogicalWidth = logicalOffsetOnLine;
|
| @@ -1206,7 +1210,7 @@ void InlineFlowBox::paintBoxShadow(const PaintInfo& info, RenderStyle* s, Shadow
|
|
|
| void InlineFlowBox::constrainToLineTopAndBottomIfNeeded(LayoutRect& rect) const
|
| {
|
| - bool noQuirksMode = renderer()->document().inNoQuirksMode();
|
| + bool noQuirksMode = renderer().document().inNoQuirksMode();
|
| if (!noQuirksMode && !hasTextChildren() && !(descendantsHaveSameLineHeightAndBaseline() && hasTextDescendants())) {
|
| const RootInlineBox* rootBox = root();
|
| LayoutUnit logicalTop = isHorizontal() ? rect.y() : rect.x();
|
| @@ -1227,7 +1231,7 @@ void InlineFlowBox::constrainToLineTopAndBottomIfNeeded(LayoutRect& rect) const
|
| static LayoutRect clipRectForNinePieceImageStrip(InlineFlowBox* box, const NinePieceImage& image, const LayoutRect& paintRect)
|
| {
|
| LayoutRect clipRect(paintRect);
|
| - RenderStyle* style = box->renderer()->style();
|
| + RenderStyle* style = box->renderer().style();
|
| LayoutBoxExtent outsets = style->imageOutsets(image);
|
| if (box->isHorizontal()) {
|
| clipRect.setY(paintRect.y() - outsets.top());
|
| @@ -1253,7 +1257,7 @@ static LayoutRect clipRectForNinePieceImageStrip(InlineFlowBox* box, const NineP
|
|
|
| void InlineFlowBox::paintBoxDecorations(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
|
| {
|
| - if (!paintInfo.shouldPaintWithinRoot(renderer()) || renderer()->style()->visibility() != VISIBLE || paintInfo.phase != PaintPhaseForeground)
|
| + if (!paintInfo.shouldPaintWithinRoot(&renderer()) || renderer().style()->visibility() != VISIBLE || paintInfo.phase != PaintPhaseForeground)
|
| return;
|
|
|
| // Pixel snap background/border painting.
|
| @@ -1270,30 +1274,30 @@ void InlineFlowBox::paintBoxDecorations(PaintInfo& paintInfo, const LayoutPoint&
|
|
|
| // You can use p::first-line to specify a background. If so, the root line boxes for
|
| // a line may actually have to paint a background.
|
| - RenderStyle* styleToUse = renderer()->style(isFirstLineStyle());
|
| - if ((!parent() && isFirstLineStyle() && styleToUse != renderer()->style()) || (parent() && renderer()->hasBoxDecorations())) {
|
| + RenderStyle* styleToUse = renderer().style(isFirstLineStyle());
|
| + if ((!parent() && isFirstLineStyle() && styleToUse != renderer().style()) || (parent() && renderer().hasBoxDecorations())) {
|
| LayoutRect paintRect = LayoutRect(adjustedPaintoffset, frameRect.size());
|
| // Shadow comes first and is behind the background and border.
|
| if (!boxModelObject()->boxShadowShouldBeAppliedToBackground(BackgroundBleedNone, this))
|
| paintBoxShadow(paintInfo, styleToUse, Normal, paintRect);
|
|
|
| - Color c = renderer()->resolveColor(styleToUse, CSSPropertyBackgroundColor);
|
| + Color c = renderer().resolveColor(styleToUse, CSSPropertyBackgroundColor);
|
| paintFillLayers(paintInfo, c, styleToUse->backgroundLayers(), paintRect);
|
| paintBoxShadow(paintInfo, styleToUse, Inset, paintRect);
|
|
|
| // :first-line cannot be used to put borders on a line. Always paint borders with our
|
| // non-first-line style.
|
| - if (parent() && renderer()->style()->hasBorder()) {
|
| - const NinePieceImage& borderImage = renderer()->style()->borderImage();
|
| + if (parent() && renderer().style()->hasBorder()) {
|
| + const NinePieceImage& borderImage = renderer().style()->borderImage();
|
| StyleImage* borderImageSource = borderImage.image();
|
| - bool hasBorderImage = borderImageSource && borderImageSource->canRender(renderer(), styleToUse->effectiveZoom());
|
| + bool hasBorderImage = borderImageSource && borderImageSource->canRender(&renderer(), styleToUse->effectiveZoom());
|
| if (hasBorderImage && !borderImageSource->isLoaded())
|
| return; // Don't paint anything while we wait for the image to load.
|
|
|
| // The simple case is where we either have no border image or we are the only box for this object. In those
|
| // cases only a single call to draw is required.
|
| if (!hasBorderImage || (!prevLineBox() && !nextLineBox()))
|
| - boxModelObject()->paintBorder(paintInfo, paintRect, renderer()->style(isFirstLineStyle()), BackgroundBleedNone, includeLogicalLeftEdge(), includeLogicalRightEdge());
|
| + boxModelObject()->paintBorder(paintInfo, paintRect, renderer().style(isFirstLineStyle()), BackgroundBleedNone, includeLogicalLeftEdge(), includeLogicalRightEdge());
|
| else {
|
| // We have a border image that spans multiple lines.
|
| // We need to adjust tx and ty by the width of all previous lines.
|
| @@ -1317,7 +1321,7 @@ void InlineFlowBox::paintBoxDecorations(PaintInfo& paintInfo, const LayoutPoint&
|
| LayoutRect clipRect = clipRectForNinePieceImageStrip(this, borderImage, paintRect);
|
| GraphicsContextStateSaver stateSaver(*context);
|
| context->clip(clipRect);
|
| - boxModelObject()->paintBorder(paintInfo, LayoutRect(stripX, stripY, stripWidth, stripHeight), renderer()->style(isFirstLineStyle()));
|
| + boxModelObject()->paintBorder(paintInfo, LayoutRect(stripX, stripY, stripWidth, stripHeight), renderer().style(isFirstLineStyle()));
|
| }
|
| }
|
| }
|
| @@ -1325,7 +1329,7 @@ void InlineFlowBox::paintBoxDecorations(PaintInfo& paintInfo, const LayoutPoint&
|
|
|
| void InlineFlowBox::paintMask(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
|
| {
|
| - if (!paintInfo.shouldPaintWithinRoot(renderer()) || renderer()->style()->visibility() != VISIBLE || paintInfo.phase != PaintPhaseMask)
|
| + if (!paintInfo.shouldPaintWithinRoot(&renderer()) || renderer().style()->visibility() != VISIBLE || paintInfo.phase != PaintPhaseMask)
|
| return;
|
|
|
| // Pixel snap mask painting.
|
| @@ -1338,16 +1342,16 @@ void InlineFlowBox::paintMask(PaintInfo& paintInfo, const LayoutPoint& paintOffs
|
| flipForWritingMode(localRect);
|
| LayoutPoint adjustedPaintOffset = paintOffset + localRect.location();
|
|
|
| - const NinePieceImage& maskNinePieceImage = renderer()->style()->maskBoxImage();
|
| - StyleImage* maskBoxImage = renderer()->style()->maskBoxImage().image();
|
| + const NinePieceImage& maskNinePieceImage = renderer().style()->maskBoxImage();
|
| + StyleImage* maskBoxImage = renderer().style()->maskBoxImage().image();
|
|
|
| // Figure out if we need to push a transparency layer to render our mask.
|
| bool pushTransparencyLayer = false;
|
| - bool compositedMask = renderer()->hasLayer() && boxModelObject()->layer()->hasCompositedMask();
|
| - bool flattenCompositingLayers = renderer()->view()->frameView() && renderer()->view()->frameView()->paintBehavior() & PaintBehaviorFlattenCompositingLayers;
|
| + bool compositedMask = renderer().hasLayer() && boxModelObject()->layer()->hasCompositedMask();
|
| + bool flattenCompositingLayers = renderer().view()->frameView() && renderer().view()->frameView()->paintBehavior() & PaintBehaviorFlattenCompositingLayers;
|
| CompositeOperator compositeOp = CompositeSourceOver;
|
| if (!compositedMask || flattenCompositingLayers) {
|
| - if ((maskBoxImage && renderer()->style()->maskLayers()->hasImage()) || renderer()->style()->maskLayers()->next())
|
| + if ((maskBoxImage && renderer().style()->maskLayers()->hasImage()) || renderer().style()->maskLayers()->next())
|
| pushTransparencyLayer = true;
|
|
|
| compositeOp = CompositeDestinationIn;
|
| @@ -1359,9 +1363,9 @@ void InlineFlowBox::paintMask(PaintInfo& paintInfo, const LayoutPoint& paintOffs
|
| }
|
|
|
| LayoutRect paintRect = LayoutRect(adjustedPaintOffset, frameRect.size());
|
| - paintFillLayers(paintInfo, Color::transparent, renderer()->style()->maskLayers(), paintRect, compositeOp);
|
| + paintFillLayers(paintInfo, Color::transparent, renderer().style()->maskLayers(), paintRect, compositeOp);
|
|
|
| - bool hasBoxImage = maskBoxImage && maskBoxImage->canRender(renderer(), renderer()->style()->effectiveZoom());
|
| + bool hasBoxImage = maskBoxImage && maskBoxImage->canRender(&renderer(), renderer().style()->effectiveZoom());
|
| if (!hasBoxImage || !maskBoxImage->isLoaded()) {
|
| if (pushTransparencyLayer)
|
| paintInfo.context->endLayer();
|
| @@ -1371,7 +1375,7 @@ void InlineFlowBox::paintMask(PaintInfo& paintInfo, const LayoutPoint& paintOffs
|
| // The simple case is where we are the only box for this object. In those
|
| // cases only a single call to draw is required.
|
| if (!prevLineBox() && !nextLineBox()) {
|
| - boxModelObject()->paintNinePieceImage(paintInfo.context, LayoutRect(adjustedPaintOffset, frameRect.size()), renderer()->style(), maskNinePieceImage, compositeOp);
|
| + boxModelObject()->paintNinePieceImage(paintInfo.context, LayoutRect(adjustedPaintOffset, frameRect.size()), renderer().style(), maskNinePieceImage, compositeOp);
|
| } else {
|
| // We have a mask image that spans multiple lines.
|
| // We need to adjust _tx and _ty by the width of all previous lines.
|
| @@ -1389,7 +1393,7 @@ void InlineFlowBox::paintMask(PaintInfo& paintInfo, const LayoutPoint& paintOffs
|
| LayoutRect clipRect = clipRectForNinePieceImageStrip(this, maskNinePieceImage, paintRect);
|
| GraphicsContextStateSaver stateSaver(*paintInfo.context);
|
| paintInfo.context->clip(clipRect);
|
| - boxModelObject()->paintNinePieceImage(paintInfo.context, LayoutRect(stripX, stripY, stripWidth, stripHeight), renderer()->style(), maskNinePieceImage, compositeOp);
|
| + boxModelObject()->paintNinePieceImage(paintInfo.context, LayoutRect(stripX, stripY, stripWidth, stripHeight), renderer().style(), maskNinePieceImage, compositeOp);
|
| }
|
|
|
| if (pushTransparencyLayer)
|
| @@ -1466,19 +1470,19 @@ LayoutUnit InlineFlowBox::computeOverAnnotationAdjustment(LayoutUnit allowedPosi
|
| {
|
| LayoutUnit result = 0;
|
| for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
|
| - if (curr->renderer()->isOutOfFlowPositioned())
|
| + if (curr->renderer().isOutOfFlowPositioned())
|
| continue; // Positioned placeholders don't affect calculations.
|
|
|
| if (curr->isInlineFlowBox())
|
| result = max(result, toInlineFlowBox(curr)->computeOverAnnotationAdjustment(allowedPosition));
|
|
|
| - if (curr->renderer()->isReplaced() && curr->renderer()->isRubyRun() && curr->renderer()->style()->rubyPosition() == RubyPositionBefore) {
|
| - RenderRubyRun* rubyRun = toRenderRubyRun(curr->renderer());
|
| - RenderRubyText* rubyText = rubyRun->rubyText();
|
| + if (curr->renderer().isReplaced() && curr->renderer().isRubyRun() && curr->renderer().style()->rubyPosition() == RubyPositionBefore) {
|
| + RenderRubyRun& rubyRun = toRenderRubyRun(curr->renderer());
|
| + RenderRubyText* rubyText = rubyRun.rubyText();
|
| if (!rubyText)
|
| continue;
|
|
|
| - if (!rubyRun->style()->isFlippedLinesWritingMode()) {
|
| + if (!rubyRun.style()->isFlippedLinesWritingMode()) {
|
| LayoutUnit topOfFirstRubyTextLine = rubyText->logicalTop() + (rubyText->firstRootBox() ? rubyText->firstRootBox()->lineTop() : LayoutUnit());
|
| if (topOfFirstRubyTextLine >= 0)
|
| continue;
|
| @@ -1494,7 +1498,7 @@ LayoutUnit InlineFlowBox::computeOverAnnotationAdjustment(LayoutUnit allowedPosi
|
| }
|
|
|
| if (curr->isInlineTextBox()) {
|
| - RenderStyle* style = curr->renderer()->style(isFirstLineStyle());
|
| + RenderStyle* style = curr->renderer().style(isFirstLineStyle());
|
| TextEmphasisPosition emphasisMarkPosition;
|
| if (style->textEmphasisMark() != TextEmphasisMarkNone && toInlineTextBox(curr)->getEmphasisMarkPosition(style, emphasisMarkPosition) && emphasisMarkPosition == TextEmphasisPositionOver) {
|
| if (!style->isFlippedLinesWritingMode()) {
|
| @@ -1514,19 +1518,19 @@ LayoutUnit InlineFlowBox::computeUnderAnnotationAdjustment(LayoutUnit allowedPos
|
| {
|
| LayoutUnit result = 0;
|
| for (InlineBox* curr = firstChild(); curr; curr = curr->nextOnLine()) {
|
| - if (curr->renderer()->isOutOfFlowPositioned())
|
| + if (curr->renderer().isOutOfFlowPositioned())
|
| continue; // Positioned placeholders don't affect calculations.
|
|
|
| if (curr->isInlineFlowBox())
|
| result = max(result, toInlineFlowBox(curr)->computeUnderAnnotationAdjustment(allowedPosition));
|
|
|
| - if (curr->renderer()->isReplaced() && curr->renderer()->isRubyRun() && curr->renderer()->style()->rubyPosition() == RubyPositionAfter) {
|
| - RenderRubyRun* rubyRun = toRenderRubyRun(curr->renderer());
|
| - RenderRubyText* rubyText = rubyRun->rubyText();
|
| + if (curr->renderer().isReplaced() && curr->renderer().isRubyRun() && curr->renderer().style()->rubyPosition() == RubyPositionAfter) {
|
| + RenderRubyRun& rubyRun = toRenderRubyRun(curr->renderer());
|
| + RenderRubyText* rubyText = rubyRun.rubyText();
|
| if (!rubyText)
|
| continue;
|
|
|
| - if (rubyRun->style()->isFlippedLinesWritingMode()) {
|
| + if (rubyRun.style()->isFlippedLinesWritingMode()) {
|
| LayoutUnit topOfFirstRubyTextLine = rubyText->logicalTop() + (rubyText->firstRootBox() ? rubyText->firstRootBox()->lineTop() : LayoutUnit());
|
| if (topOfFirstRubyTextLine >= 0)
|
| continue;
|
| @@ -1542,7 +1546,7 @@ LayoutUnit InlineFlowBox::computeUnderAnnotationAdjustment(LayoutUnit allowedPos
|
| }
|
|
|
| if (curr->isInlineTextBox()) {
|
| - RenderStyle* style = curr->renderer()->style(isFirstLineStyle());
|
| + RenderStyle* style = curr->renderer().style(isFirstLineStyle());
|
| if (style->textEmphasisMark() != TextEmphasisMarkNone && style->textEmphasisPosition() == TextEmphasisPositionUnder) {
|
| if (!style->isFlippedLinesWritingMode()) {
|
| LayoutUnit bottomOfEmphasisMark = curr->logicalBottom() + style->font().emphasisMarkHeight(style->textEmphasisMarkString());
|
| @@ -1573,7 +1577,7 @@ void InlineFlowBox::collectLeafBoxesInLogicalOrder(Vector<InlineBox*>& leafBoxes
|
| leafBoxesInLogicalOrder.append(leaf);
|
| }
|
|
|
| - if (renderer()->style()->rtlOrdering() == VisualOrder)
|
| + if (renderer().style()->rtlOrdering() == VisualOrder)
|
| return;
|
|
|
| // Reverse of reordering of the line (L2 according to Bidi spec):
|
|
|