Index: Source/core/rendering/svg/RenderSVGResourceContainer.cpp |
diff --git a/Source/core/rendering/svg/RenderSVGResourceContainer.cpp b/Source/core/rendering/svg/RenderSVGResourceContainer.cpp |
index 4a396667a43b5fa67d24c0248b128382a8c3b595..4bd1c6fe472ba4dc2a5dbeeb4617d6119b30b791 100644 |
--- a/Source/core/rendering/svg/RenderSVGResourceContainer.cpp |
+++ b/Source/core/rendering/svg/RenderSVGResourceContainer.cpp |
@@ -232,6 +232,26 @@ void RenderSVGResourceContainer::registerResource() |
} |
} |
+AffineTransform RenderSVGResourceContainer::computeResourceSpaceTransform(RenderObject* object, const AffineTransform& baseTransform, const SVGRenderStyle* svgStyle, unsigned short resourceMode) |
+{ |
+ AffineTransform computedSpaceTransform = baseTransform; |
+ if (resourceMode & ApplyToTextMode) { |
+ // Depending on the font scaling factor, we may need to apply an |
+ // additional transform (scale-factor) the paintserver, since text |
+ // painting removes the scale factor from the context. (See |
+ // SVGInlineTextBox::paintTextWithShadows.) |
+ AffineTransform additionalTextTransformation; |
+ if (shouldTransformOnTextPainting(object, additionalTextTransformation)) |
+ computedSpaceTransform = additionalTextTransformation * computedSpaceTransform; |
+ } |
+ if (resourceMode & ApplyToStrokeMode) { |
+ // Non-scaling stroke needs to reset the transform back to the host transform. |
+ if (svgStyle->vectorEffect() == VE_NON_SCALING_STROKE) |
+ computedSpaceTransform = transformOnNonScalingStroke(object, computedSpaceTransform); |
+ } |
+ return computedSpaceTransform; |
+} |
+ |
bool RenderSVGResourceContainer::shouldTransformOnTextPainting(RenderObject* object, AffineTransform& resourceTransform) |
{ |
ASSERT_UNUSED(object, object); |