| Index: Source/core/rendering/RenderBlockLineLayout.cpp
|
| diff --git a/Source/core/rendering/RenderBlockLineLayout.cpp b/Source/core/rendering/RenderBlockLineLayout.cpp
|
| index 8c47b06bc5481ad5e1d47566e24d89913d44cf44..688c3085efe76ee45533cb3aaed0a45192181a46 100644
|
| --- a/Source/core/rendering/RenderBlockLineLayout.cpp
|
| +++ b/Source/core/rendering/RenderBlockLineLayout.cpp
|
| @@ -419,7 +419,7 @@ static inline void setLogicalWidthForTextRun(RootInlineBox* lineBox, BidiRun* ru
|
| HashSet<const SimpleFontData*> fallbackFonts;
|
| GlyphOverflow glyphOverflow;
|
|
|
| - const Font& font = renderer->style(lineInfo.isFirstLine())->font();
|
| + const Font& font = renderer->style(lineInfo.isFirstLine() ? FirstLineStyle : OwnStyle)->font();
|
| // Always compute glyph overflow if the block's line-box-contain value is "glyphs".
|
| if (lineBox->fitsToGlyphs()) {
|
| // If we don't stick out of the root line's font box, then don't bother computing our glyph overflow. This optimization
|
| @@ -436,7 +436,7 @@ static inline void setLogicalWidthForTextRun(RootInlineBox* lineBox, BidiRun* ru
|
|
|
| LayoutUnit hyphenWidth = 0;
|
| if (toInlineTextBox(run->m_box)->hasHyphen()) {
|
| - const Font& font = renderer->style(lineInfo.isFirstLine())->font();
|
| + const Font& font = renderer->style(lineInfo.isFirstLine() ? FirstLineStyle : OwnStyle)->font();
|
| hyphenWidth = measureHyphenWidth(renderer, font, run->direction());
|
| }
|
| float measuredWidth = 0;
|
| @@ -466,7 +466,7 @@ static inline void setLogicalWidthForTextRun(RootInlineBox* lineBox, BidiRun* ru
|
| lastEndOffset = wordMeasurement.endOffset;
|
| if (kerningIsEnabled && lastEndOffset == run->m_stop) {
|
| int wordLength = lastEndOffset - wordMeasurement.startOffset;
|
| - measuredWidth += renderer->width(wordMeasurement.startOffset, wordLength, xPos, run->direction(), lineInfo.isFirstLine());
|
| + measuredWidth += renderer->width(wordMeasurement.startOffset, wordLength, xPos, run->direction(), lineInfo.isFirstLine() ? FirstLineStyle : OwnStyle);
|
| if (i > 0 && wordLength == 1 && renderer->characterAt(wordMeasurement.startOffset) == ' ')
|
| measuredWidth += renderer->style()->wordSpacing();
|
| } else
|
| @@ -485,7 +485,7 @@ static inline void setLogicalWidthForTextRun(RootInlineBox* lineBox, BidiRun* ru
|
| }
|
|
|
| if (!measuredWidth)
|
| - measuredWidth = renderer->width(run->m_start, run->m_stop - run->m_start, xPos, run->direction(), lineInfo.isFirstLine(), &fallbackFonts, &glyphOverflow);
|
| + measuredWidth = renderer->width(run->m_start, run->m_stop - run->m_start, xPos, run->direction(), lineInfo.isFirstLine() ? FirstLineStyle : OwnStyle, &fallbackFonts, &glyphOverflow);
|
|
|
| run->m_box->setLogicalWidth(measuredWidth + hyphenWidth);
|
| if (!fallbackFonts.isEmpty()) {
|
| @@ -586,7 +586,7 @@ void RenderBlockFlow::updateLogicalWidthForAlignment(const ETextAlign& textAlign
|
|
|
| static void updateLogicalInlinePositions(RenderBlockFlow* block, float& lineLogicalLeft, float& lineLogicalRight, float& availableLogicalWidth, bool firstLine, IndentTextOrNot shouldIndentText, LayoutUnit boxLogicalHeight)
|
| {
|
| - LayoutUnit lineLogicalHeight = block->minLineHeightForReplacedRenderer(firstLine, boxLogicalHeight);
|
| + LayoutUnit lineLogicalHeight = block->minLineHeightForReplacedRenderer(firstLine ? FirstLineStyle : OwnStyle, boxLogicalHeight);
|
| lineLogicalLeft = block->logicalLeftOffsetForLine(block->logicalHeight(), shouldIndentText == IndentText, lineLogicalHeight).toFloat();
|
| lineLogicalRight = block->logicalRightOffsetForLine(block->logicalHeight(), shouldIndentText == IndentText, lineLogicalHeight).toFloat();
|
| availableLogicalWidth = lineLogicalRight - lineLogicalLeft;
|
| @@ -656,7 +656,7 @@ BidiRun* RenderBlockFlow::computeInlineDirectionPositionsForSegment(RootInlineBo
|
|
|
| if (rt->textLength()) {
|
| if (!r->m_start && needsWordSpacing && isSpaceOrNewline(rt->characterAt(r->m_start)))
|
| - totalLogicalWidth += rt->style(lineInfo.isFirstLine())->font().fontDescription().wordSpacing();
|
| + totalLogicalWidth += rt->style(lineInfo.isFirstLine() ? FirstLineStyle : OwnStyle)->font().fontDescription().wordSpacing();
|
| needsWordSpacing = !isSpaceOrNewline(rt->characterAt(r->m_stop - 1));
|
| }
|
|
|
| @@ -1741,7 +1741,7 @@ void RenderBlockFlow::layoutInlineChildren(bool relayoutChildren, LayoutUnit& re
|
| setLogicalHeight(logicalHeight() + lastLineAnnotationsAdjustment + afterEdge);
|
|
|
| if (!firstLineBox() && hasLineIfEmpty())
|
| - setLogicalHeight(logicalHeight() + lineHeight(true, isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes));
|
| + setLogicalHeight(logicalHeight() + lineHeight(FirstLineStyle, isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes));
|
|
|
| // See if we have any lines that spill out of our block. If we do, then we will possibly need to
|
| // truncate text.
|
|
|