Index: Source/core/paint/SVGInlineTextBoxPainter.cpp |
diff --git a/Source/core/paint/SVGInlineTextBoxPainter.cpp b/Source/core/paint/SVGInlineTextBoxPainter.cpp |
index 3c108b61d46d08150a1628b7ec373bf1d17fac26..da2841d3565ff09c7ddcfeeeb6f7bb5eac261e54 100644 |
--- a/Source/core/paint/SVGInlineTextBoxPainter.cpp |
+++ b/Source/core/paint/SVGInlineTextBoxPainter.cpp |
@@ -204,38 +204,6 @@ static inline RenderObject* findRenderObjectDefininingTextDecoration(InlineFlowB |
return renderer; |
} |
-void SVGInlineTextBoxPainter::paintDecoration(GraphicsContext* context, TextDecoration decoration, const SVGTextFragment& fragment) |
-{ |
- if (m_svgInlineTextBox.renderer().style()->textDecorationsInEffect() == TextDecorationNone) |
- return; |
- |
- // Find out which render style defined the text-decoration, as its fill/stroke properties have to be used for drawing instead of ours. |
- RenderObject* decorationRenderer = findRenderObjectDefininingTextDecoration(m_svgInlineTextBox.parent()); |
- RenderStyle* decorationStyle = decorationRenderer->style(); |
- ASSERT(decorationStyle); |
- |
- if (decorationStyle->visibility() == HIDDEN) |
- return; |
- |
- const SVGRenderStyle& svgDecorationStyle = decorationStyle->svgStyle(); |
- |
- for (int i = 0; i < 3; i++) { |
- switch (svgDecorationStyle.paintOrderType(i)) { |
- case PT_FILL: |
- if (svgDecorationStyle.hasFill()) |
- paintDecorationWithStyle(context, decoration, fragment, decorationRenderer, ApplyToFillMode); |
- break; |
- case PT_STROKE: |
- if (svgDecorationStyle.hasVisibleStroke()) |
- paintDecorationWithStyle(context, decoration, fragment, decorationRenderer, ApplyToStrokeMode); |
- break; |
- case PT_MARKERS: |
- break; |
- default: |
- ASSERT_NOT_REACHED(); |
- } |
- } |
-} |
// Offset from the baseline for |decoration|. Positive offsets are above the baseline. |
static inline float baselineOffsetForDecoration(TextDecoration decoration, const FontMetrics& fontMetrics, float thickness) |
@@ -260,20 +228,29 @@ static inline float thicknessForDecoration(TextDecoration, const Font& font) |
return font.fontDescription().computedSize() / 20.0f; |
} |
-void SVGInlineTextBoxPainter::paintDecorationWithStyle(GraphicsContext* context, TextDecoration decoration, |
- const SVGTextFragment& fragment, RenderObject* decorationRenderer, RenderSVGResourceMode resourceMode) |
+void SVGInlineTextBoxPainter::paintDecoration(GraphicsContext* context, TextDecoration decoration, const SVGTextFragment& fragment) |
{ |
+ if (m_svgInlineTextBox.renderer().style()->textDecorationsInEffect() == TextDecorationNone) |
+ return; |
+ |
+ if (fragment.width <= 0) |
+ return; |
+ |
+ // Find out which render style defined the text-decoration, as its fill/stroke properties have to be used for drawing instead of ours. |
+ RenderObject* decorationRenderer = findRenderObjectDefininingTextDecoration(m_svgInlineTextBox.parent()); |
RenderStyle* decorationStyle = decorationRenderer->style(); |
ASSERT(decorationStyle); |
+ if (decorationStyle->visibility() == HIDDEN) |
+ return; |
+ |
float scalingFactor = 1; |
Font scaledFont; |
RenderSVGInlineText::computeNewScaledFontForStyle(decorationRenderer, decorationStyle, scalingFactor, scaledFont); |
ASSERT(scalingFactor); |
float thickness = thicknessForDecoration(decoration, scaledFont); |
- |
- if (fragment.width <= 0 && thickness <= 0) |
+ if (thickness <= 0) |
return; |
float decorationOffset = baselineOffsetForDecoration(decoration, scaledFont.fontMetrics(), thickness); |
@@ -282,10 +259,32 @@ void SVGInlineTextBoxPainter::paintDecorationWithStyle(GraphicsContext* context, |
Path path; |
path.addRect(FloatRect(decorationOrigin, FloatSize(fragment.width, thickness / scalingFactor))); |
- GraphicsContextStateSaver stateSaver(*context, false); |
- if (!SVGRenderSupport::updateGraphicsContext(stateSaver, decorationStyle, *decorationRenderer, resourceMode)) |
- return; |
- SVGRenderSupport::fillOrStrokePath(context, resourceMode, path); |
+ const SVGRenderStyle& svgDecorationStyle = decorationStyle->svgStyle(); |
+ |
+ for (int i = 0; i < 3; i++) { |
+ switch (svgDecorationStyle.paintOrderType(i)) { |
+ case PT_FILL: |
+ if (svgDecorationStyle.hasFill()) { |
+ GraphicsContextStateSaver stateSaver(*context, false); |
+ if (!SVGRenderSupport::updateGraphicsContext(stateSaver, decorationStyle, *decorationRenderer, ApplyToFillMode)) |
+ break; |
+ context->fillPath(path); |
+ } |
+ break; |
+ case PT_STROKE: |
+ if (svgDecorationStyle.hasVisibleStroke()) { |
+ GraphicsContextStateSaver stateSaver(*context, false); |
+ if (!SVGRenderSupport::updateGraphicsContext(stateSaver, decorationStyle, *decorationRenderer, ApplyToStrokeMode)) |
+ break; |
+ context->strokePath(path); |
+ } |
+ break; |
+ case PT_MARKERS: |
+ break; |
+ default: |
+ ASSERT_NOT_REACHED(); |
+ } |
+ } |
} |
void SVGInlineTextBoxPainter::paintTextWithShadows(GraphicsContext* context, RenderStyle* style, |