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) |