| Index: Source/core/paint/SVGInlineTextBoxPainter.cpp
|
| diff --git a/Source/core/paint/SVGInlineTextBoxPainter.cpp b/Source/core/paint/SVGInlineTextBoxPainter.cpp
|
| index 6d10802279fcd5fee95efb63cef277fb7b423e08..9143e34defe42aaa3337b9989c7434cb1b37ef72 100644
|
| --- a/Source/core/paint/SVGInlineTextBoxPainter.cpp
|
| +++ b/Source/core/paint/SVGInlineTextBoxPainter.cpp
|
| @@ -77,7 +77,7 @@ void SVGInlineTextBoxPainter::paint(PaintInfo& paintInfo, const LayoutPoint& pai
|
| }
|
| }
|
|
|
| - if (SVGRenderSupport::isRenderingClipPathAsMaskImage(textRenderer)) {
|
| + if (paintInfo.isRenderingClipPathAsMaskImage()) {
|
| hasFill = true;
|
| hasVisibleStroke = false;
|
| }
|
| @@ -97,23 +97,23 @@ void SVGInlineTextBoxPainter::paint(PaintInfo& paintInfo, const LayoutPoint& pai
|
| // Spec: All text decorations except line-through should be drawn before the text is filled and stroked; thus, the text is rendered on top of these decorations.
|
| unsigned decorations = style->textDecorationsInEffect();
|
| if (decorations & TextDecorationUnderline)
|
| - paintDecoration(paintInfo.context, TextDecorationUnderline, fragment);
|
| + paintDecoration(paintInfo, TextDecorationUnderline, fragment);
|
| if (decorations & TextDecorationOverline)
|
| - paintDecoration(paintInfo.context, TextDecorationOverline, fragment);
|
| + paintDecoration(paintInfo, TextDecorationOverline, fragment);
|
|
|
| for (int i = 0; i < 3; i++) {
|
| switch (svgStyle.paintOrderType(i)) {
|
| case PT_FILL:
|
| // Fill text
|
| if (hasFill) {
|
| - paintText(paintInfo.context, style, selectionStyle, fragment,
|
| + paintText(paintInfo, style, selectionStyle, fragment,
|
| ApplyToFillMode, hasSelection, paintSelectedTextOnly);
|
| }
|
| break;
|
| case PT_STROKE:
|
| // Stroke text
|
| if (hasVisibleStroke) {
|
| - paintText(paintInfo.context, style, selectionStyle, fragment,
|
| + paintText(paintInfo, style, selectionStyle, fragment,
|
| ApplyToStrokeMode, hasSelection, paintSelectedTextOnly);
|
| }
|
| break;
|
| @@ -128,7 +128,7 @@ void SVGInlineTextBoxPainter::paint(PaintInfo& paintInfo, const LayoutPoint& pai
|
|
|
| // Spec: Line-through should be drawn after the text is filled and stroked; thus, the line-through is rendered on top of the text.
|
| if (decorations & TextDecorationLineThrough)
|
| - paintDecoration(paintInfo.context, TextDecorationLineThrough, fragment);
|
| + paintDecoration(paintInfo, TextDecorationLineThrough, fragment);
|
| }
|
|
|
| // finally, paint the outline if any
|
| @@ -136,7 +136,7 @@ void SVGInlineTextBoxPainter::paint(PaintInfo& paintInfo, const LayoutPoint& pai
|
| InlinePainter(toRenderInline(parentRenderer)).paintOutline(paintInfo, paintOffset);
|
| }
|
|
|
| -void SVGInlineTextBoxPainter::paintSelectionBackground(PaintInfo& paintInfo)
|
| +void SVGInlineTextBoxPainter::paintSelectionBackground(const PaintInfo& paintInfo)
|
| {
|
| if (m_svgInlineTextBox.renderer().style()->visibility() != VISIBLE)
|
| return;
|
| @@ -203,7 +203,6 @@ static inline RenderObject* findRenderObjectDefininingTextDecoration(InlineFlowB
|
| return renderer;
|
| }
|
|
|
| -
|
| // Offset from the baseline for |decoration|. Positive offsets are above the baseline.
|
| static inline float baselineOffsetForDecoration(TextDecoration decoration, const FontMetrics& fontMetrics, float thickness)
|
| {
|
| @@ -227,7 +226,7 @@ static inline float thicknessForDecoration(TextDecoration, const Font& font)
|
| return font.fontDescription().computedSize() / 20.0f;
|
| }
|
|
|
| -void SVGInlineTextBoxPainter::paintDecoration(GraphicsContext* context, TextDecoration decoration, const SVGTextFragment& fragment)
|
| +void SVGInlineTextBoxPainter::paintDecoration(const PaintInfo& paintInfo, TextDecoration decoration, const SVGTextFragment& fragment)
|
| {
|
| if (m_svgInlineTextBox.renderer().style()->textDecorationsInEffect() == TextDecorationNone)
|
| return;
|
| @@ -264,19 +263,19 @@ void SVGInlineTextBoxPainter::paintDecoration(GraphicsContext* context, TextDeco
|
| switch (svgDecorationStyle.paintOrderType(i)) {
|
| case PT_FILL:
|
| if (svgDecorationStyle.hasFill()) {
|
| - GraphicsContextStateSaver stateSaver(*context, false);
|
| - if (!SVGRenderSupport::updateGraphicsContext(stateSaver, decorationStyle, *decorationRenderer, ApplyToFillMode))
|
| + GraphicsContextStateSaver stateSaver(*paintInfo.context, false);
|
| + if (!SVGRenderSupport::updateGraphicsContext(paintInfo, stateSaver, decorationStyle, *decorationRenderer, ApplyToFillMode))
|
| break;
|
| - context->fillPath(path);
|
| + paintInfo.context->fillPath(path);
|
| }
|
| break;
|
| case PT_STROKE:
|
| if (svgDecorationStyle.hasVisibleStroke()) {
|
| // FIXME: Non-scaling stroke is not applied here.
|
| - GraphicsContextStateSaver stateSaver(*context, false);
|
| - if (!SVGRenderSupport::updateGraphicsContext(stateSaver, decorationStyle, *decorationRenderer, ApplyToStrokeMode))
|
| + GraphicsContextStateSaver stateSaver(*paintInfo.context, false);
|
| + if (!SVGRenderSupport::updateGraphicsContext(paintInfo, stateSaver, decorationStyle, *decorationRenderer, ApplyToStrokeMode))
|
| break;
|
| - context->strokePath(path);
|
| + paintInfo.context->strokePath(path);
|
| }
|
| break;
|
| case PT_MARKERS:
|
| @@ -287,7 +286,7 @@ void SVGInlineTextBoxPainter::paintDecoration(GraphicsContext* context, TextDeco
|
| }
|
| }
|
|
|
| -void SVGInlineTextBoxPainter::paintTextWithShadows(GraphicsContext* context, RenderStyle* style,
|
| +void SVGInlineTextBoxPainter::paintTextWithShadows(const PaintInfo& paintInfo, RenderStyle* style,
|
| TextRun& textRun, const SVGTextFragment& fragment, int startPosition, int endPosition,
|
| RenderSVGResourceMode resourceMode)
|
| {
|
| @@ -298,6 +297,7 @@ void SVGInlineTextBoxPainter::paintTextWithShadows(GraphicsContext* context, Ren
|
|
|
| const Font& scaledFont = textRenderer.scaledFont();
|
| const ShadowList* shadowList = style->textShadow();
|
| + GraphicsContext* context = paintInfo.context;
|
|
|
| // Text shadows are disabled when printing. http://crbug.com/258321
|
| bool hasShadow = shadowList && !context->printing();
|
| @@ -320,7 +320,7 @@ void SVGInlineTextBoxPainter::paintTextWithShadows(GraphicsContext* context, Ren
|
|
|
| // FIXME: Non-scaling stroke is not applied here.
|
|
|
| - if (!SVGRenderSupport::updateGraphicsContext(stateSaver, style, m_svgInlineTextBox.parent()->renderer(), resourceMode, additionalPaintServerTransform))
|
| + if (!SVGRenderSupport::updateGraphicsContext(paintInfo, stateSaver, style, m_svgInlineTextBox.parent()->renderer(), resourceMode, additionalPaintServerTransform))
|
| return;
|
|
|
| if (hasShadow) {
|
| @@ -344,7 +344,7 @@ void SVGInlineTextBoxPainter::paintTextWithShadows(GraphicsContext* context, Ren
|
| scaledFont.drawText(context, textRunPaintInfo, textOrigin);
|
| }
|
|
|
| -void SVGInlineTextBoxPainter::paintText(GraphicsContext* context, RenderStyle* style,
|
| +void SVGInlineTextBoxPainter::paintText(const PaintInfo& paintInfo, RenderStyle* style,
|
| RenderStyle* selectionStyle, const SVGTextFragment& fragment,
|
| RenderSVGResourceMode resourceMode, bool hasSelection, bool paintSelectedTextOnly)
|
| {
|
| @@ -361,13 +361,13 @@ void SVGInlineTextBoxPainter::paintText(GraphicsContext* context, RenderStyle* s
|
| // 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 (!hasSelection || startPosition >= endPosition) {
|
| - paintTextWithShadows(context, style, textRun, fragment, 0, fragment.length, resourceMode);
|
| + paintTextWithShadows(paintInfo, style, textRun, fragment, 0, fragment.length, resourceMode);
|
| return;
|
| }
|
|
|
| // Eventually draw text using regular style until the start position of the selection
|
| if (startPosition > 0 && !paintSelectedTextOnly)
|
| - paintTextWithShadows(context, style, textRun, fragment, 0, startPosition, resourceMode);
|
| + paintTextWithShadows(paintInfo, style, textRun, fragment, 0, startPosition, resourceMode);
|
|
|
| // Draw text using selection style from the start to the end position of the selection
|
| if (style != selectionStyle) {
|
| @@ -376,7 +376,7 @@ void SVGInlineTextBoxPainter::paintText(GraphicsContext* context, RenderStyle* s
|
| SVGResourcesCache::clientStyleChanged(&m_svgInlineTextBox.parent()->renderer(), diff, selectionStyle);
|
| }
|
|
|
| - paintTextWithShadows(context, selectionStyle, textRun, fragment, startPosition, endPosition, resourceMode);
|
| + paintTextWithShadows(paintInfo, selectionStyle, textRun, fragment, startPosition, endPosition, resourceMode);
|
|
|
| if (style != selectionStyle) {
|
| StyleDifference diff;
|
| @@ -386,7 +386,7 @@ void SVGInlineTextBoxPainter::paintText(GraphicsContext* context, RenderStyle* s
|
|
|
| // 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(context, style, textRun, fragment, endPosition, fragment.length, resourceMode);
|
| + paintTextWithShadows(paintInfo, style, textRun, fragment, endPosition, fragment.length, resourceMode);
|
| }
|
|
|
| void SVGInlineTextBoxPainter::paintTextMatchMarker(GraphicsContext* context, const FloatPoint&, DocumentMarker* marker, RenderStyle* style, const Font& font)
|
|
|