Chromium Code Reviews| Index: third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp |
| diff --git a/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp b/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp |
| index bac8976e35ac6e246d80beb64a79d6c2c440115b..1898186b37aaeb0452a6bda711a184044d0e0fc5 100644 |
| --- a/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp |
| +++ b/third_party/WebKit/Source/core/paint/SVGInlineTextBoxPainter.cpp |
| @@ -296,41 +296,30 @@ void SVGInlineTextBoxPainter::paintDecoration(const PaintInfo& paintInfo, TextDe |
| } |
| } |
| -void SVGInlineTextBoxPainter::paintTextWithShadows(const PaintInfo& paintInfo, const ComputedStyle& style, |
| - TextRun& textRun, const SVGTextFragment& fragment, int startPosition, int endPosition, |
| - LayoutSVGResourceMode resourceMode) |
| +bool SVGInlineTextBoxPainter::setupTextPaint(const PaintInfo& paintInfo, const ComputedStyle& style, |
| + TextRun& textRun, const SVGTextFragment& fragment, LayoutSVGResourceMode resourceMode, SkPaint& paint) |
|
fs
2015/12/16 13:21:41
This doesn't really use textRun and fragment, so t
ramya.v
2015/12/17 04:25:46
Done.
|
| { |
| LayoutSVGInlineText& textLayoutObject = toLayoutSVGInlineText(*LineLayoutPaintShim::layoutObjectFrom(m_svgInlineTextBox.lineLayoutItem())); |
| float scalingFactor = textLayoutObject.scalingFactor(); |
| ASSERT(scalingFactor); |
| - const Font& scaledFont = textLayoutObject.scaledFont(); |
| const ShadowList* shadowList = style.textShadow(); |
| - GraphicsContext& context = paintInfo.context; |
| // Text shadows are disabled when printing. http://crbug.com/258321 |
| bool hasShadow = shadowList && !paintInfo.isPrinting(); |
| - FloatPoint textOrigin(fragment.x, fragment.y); |
| - FloatSize textSize(fragment.width, fragment.height); |
| AffineTransform paintServerTransform; |
| const AffineTransform* additionalPaintServerTransform = 0; |
| - GraphicsContextStateSaver stateSaver(context, false); |
| if (scalingFactor != 1) { |
| - textOrigin.scale(scalingFactor, scalingFactor); |
| - textSize.scale(scalingFactor); |
| - stateSaver.save(); |
| - context.scale(1 / scalingFactor, 1 / scalingFactor); |
| // Adjust the paint-server coordinate space. |
| paintServerTransform.scale(scalingFactor); |
| additionalPaintServerTransform = &paintServerTransform; |
| } |
| - SkPaint paint; |
| if (!SVGPaintContext::paintForLayoutObject(paintInfo, style, *LineLayoutPaintShim::layoutObjectFrom(m_svgInlineTextBox.parent()->lineLayoutItem()), resourceMode, paint, additionalPaintServerTransform)) |
| - return; |
| + return false; |
| paint.setAntiAlias(true); |
| if (hasShadow) { |
| @@ -346,6 +335,28 @@ void SVGInlineTextBoxPainter::paintTextWithShadows(const PaintInfo& paintInfo, c |
| strokeData.setThickness(strokeData.thickness() * scalingFactor); |
| strokeData.setupPaint(&paint); |
| } |
| + return true; |
| +} |
| + |
| +void SVGInlineTextBoxPainter::paintText(const PaintInfo& paintInfo, TextRun& textRun, const SVGTextFragment& fragment, int startPosition, int endPosition, SkPaint& paint) |
|
fs
2015/12/16 13:21:41
const SkPaint& ?
ramya.v
2015/12/17 04:25:45
Done.
|
| +{ |
| + LayoutSVGInlineText& textLayoutObject = toLayoutSVGInlineText(*LineLayoutPaintShim::layoutObjectFrom(m_svgInlineTextBox.lineLayoutItem())); |
| + const Font& scaledFont = textLayoutObject.scaledFont(); |
| + |
| + float scalingFactor = textLayoutObject.scalingFactor(); |
| + ASSERT(scalingFactor); |
| + |
| + FloatPoint textOrigin(fragment.x, fragment.y); |
| + FloatSize textSize(fragment.width, fragment.height); |
| + |
| + GraphicsContext& context = paintInfo.context; |
| + GraphicsContextStateSaver stateSaver(context, false); |
| + if (scalingFactor != 1) { |
| + textOrigin.scale(scalingFactor, scalingFactor); |
| + textSize.scale(scalingFactor); |
| + stateSaver.save(); |
| + context.scale(1 / scalingFactor, 1 / scalingFactor); |
| + } |
| TextRunPaintInfo textRunPaintInfo(textRun); |
| textRunPaintInfo.from = startPosition; |
| @@ -372,14 +383,19 @@ void SVGInlineTextBoxPainter::paintText(const PaintInfo& paintInfo, const Comput |
| // Fast path if there is no selection, just draw the whole chunk part using the regular style |
| TextRun textRun = m_svgInlineTextBox.constructTextRun(style, fragment); |
| if (!shouldPaintSelection || startPosition >= endPosition) { |
| - paintTextWithShadows(paintInfo, style, textRun, fragment, 0, fragment.length, resourceMode); |
| + SkPaint paint; |
| + if (setupTextPaint(paintInfo, style, textRun, fragment, resourceMode, paint)) |
| + paintText(paintInfo, textRun, fragment, 0, fragment.length, paint); |
| return; |
| } |
| // Eventually draw text using regular style until the start position of the selection |
| bool paintSelectedTextOnly = paintInfo.phase == PaintPhaseSelection; |
| - if (startPosition > 0 && !paintSelectedTextOnly) |
| - paintTextWithShadows(paintInfo, style, textRun, fragment, 0, startPosition, resourceMode); |
| + if (startPosition > 0 && !paintSelectedTextOnly) { |
| + SkPaint paint; |
| + if (setupTextPaint(paintInfo, style, textRun, fragment, resourceMode, paint)) |
| + paintText(paintInfo, textRun, fragment, 0, startPosition, paint); |
| + } |
| // Draw text using selection style from the start to the end position of the selection |
| if (style != selectionStyle) { |
| @@ -388,7 +404,9 @@ void SVGInlineTextBoxPainter::paintText(const PaintInfo& paintInfo, const Comput |
| SVGResourcesCache::clientStyleChanged(LineLayoutPaintShim::layoutObjectFrom(m_svgInlineTextBox.parent()->lineLayoutItem()), diff, selectionStyle); |
| } |
| - paintTextWithShadows(paintInfo, selectionStyle, textRun, fragment, startPosition, endPosition, resourceMode); |
| + SkPaint paint; |
| + if (setupTextPaint(paintInfo, selectionStyle, textRun, fragment, resourceMode, paint)) |
| + paintText(paintInfo, textRun, fragment, startPosition, endPosition, paint); |
| if (style != selectionStyle) { |
| StyleDifference diff; |
| @@ -397,8 +415,11 @@ void SVGInlineTextBoxPainter::paintText(const PaintInfo& paintInfo, const Comput |
| } |
| // Eventually draw text using regular style from the end position of the selection to the end of the current chunk part |
| - if (endPosition < static_cast<int>(fragment.length) && !paintSelectedTextOnly) |
| - paintTextWithShadows(paintInfo, style, textRun, fragment, endPosition, fragment.length, resourceMode); |
| + if (endPosition < static_cast<int>(fragment.length) && !paintSelectedTextOnly) { |
| + SkPaint paint; |
| + if (setupTextPaint(paintInfo, style, textRun, fragment, resourceMode, paint)) |
| + paintText(paintInfo, textRun, fragment, endPosition, fragment.length, paint); |
| + } |
| } |
| void SVGInlineTextBoxPainter::paintTextMatchMarker(GraphicsContext& context, const LayoutPoint&, DocumentMarker* marker, const ComputedStyle& style, const Font& font) |