| Index: Source/core/rendering/svg/SVGRenderSupport.cpp
|
| diff --git a/Source/core/rendering/svg/SVGRenderSupport.cpp b/Source/core/rendering/svg/SVGRenderSupport.cpp
|
| index b8579383c2fb007d3d7c1c3054e255607b0d48ad..8949527810815fb10dd8f4583d1a76f41640babc 100644
|
| --- a/Source/core/rendering/svg/SVGRenderSupport.cpp
|
| +++ b/Source/core/rendering/svg/SVGRenderSupport.cpp
|
| @@ -39,7 +39,6 @@
|
| #include "core/rendering/svg/RenderSVGShape.h"
|
| #include "core/rendering/svg/RenderSVGText.h"
|
| #include "core/rendering/svg/RenderSVGViewportContainer.h"
|
| -#include "core/rendering/svg/SVGRenderingContext.h"
|
| #include "core/rendering/svg/SVGResources.h"
|
| #include "core/rendering/svg/SVGResourcesCache.h"
|
| #include "core/svg/SVGElement.h"
|
| @@ -394,57 +393,10 @@ void SVGRenderSupport::applyStrokeStyleToStrokeData(StrokeData* strokeData, cons
|
| strokeData->setLineDash(dashArray, svgStyle.strokeDashOffset()->value(lengthContext));
|
| }
|
|
|
| -static bool shouldTransformOnTextPainting(RenderObject& renderer, AffineTransform& resourceTransform)
|
| -{
|
| - // This method should only be called for RenderObjects that deal with text rendering. Cmp. RenderObject.h's is*() methods.
|
| - ASSERT(renderer.isSVGText() || renderer.isSVGTextPath() || renderer.isSVGInline());
|
| -
|
| - // In text drawing, the scaling part of the graphics context CTM is removed, compare SVGInlineTextBox::paintTextWithShadows.
|
| - // So, we use that scaling factor here, too, and then push it down to pattern or gradient space
|
| - // in order to keep the pattern or gradient correctly scaled.
|
| - float scalingFactor = SVGRenderingContext::calculateScreenFontSizeScalingFactor(&renderer);
|
| - if (scalingFactor == 1)
|
| - return false;
|
| - resourceTransform.scale(scalingFactor);
|
| - return true;
|
| -}
|
| -
|
| -static AffineTransform transformOnNonScalingStroke(RenderObject& renderer, const AffineTransform& resourceTransform)
|
| -{
|
| - ASSERT(renderer.isSVGShape());
|
| - SVGGraphicsElement* element = toSVGGraphicsElement(renderer.node());
|
| - AffineTransform transform = element->getScreenCTM(SVGGraphicsElement::DisallowStyleUpdate);
|
| - transform *= resourceTransform;
|
| - return transform;
|
| -}
|
| -
|
| -static AffineTransform computeResourceSpaceTransform(RenderObject& renderer, const SVGRenderStyle& svgStyle, RenderSVGResourceModeFlags resourceModeFlags)
|
| -{
|
| - AffineTransform computedSpaceTransform;
|
| - if (resourceModeFlags & ApplyToTextMode) {
|
| - // Depending on the font scaling factor, we may need to apply an
|
| - // additional transform (scale-factor) to the paintserver, since text
|
| - // painting removes the scale factor from the context. (See
|
| - // SVGInlineTextBoxPainter::paintTextWithShadows.)
|
| - AffineTransform additionalTextTransformation;
|
| - if (shouldTransformOnTextPainting(renderer, additionalTextTransformation))
|
| - computedSpaceTransform = additionalTextTransformation;
|
| - }
|
| - if (resourceModeFlags & ApplyToStrokeMode) {
|
| - // Non-scaling stroke needs to reset the transform back to the host transform.
|
| - if (renderer.isSVGShape() && svgStyle.vectorEffect() == VE_NON_SCALING_STROKE)
|
| - computedSpaceTransform = transformOnNonScalingStroke(renderer, computedSpaceTransform);
|
| - }
|
| - return computedSpaceTransform;
|
| -}
|
| -
|
| -bool SVGRenderSupport::updateGraphicsContext(GraphicsContextStateSaver& stateSaver, RenderStyle* style, RenderObject& renderer, unsigned resourceModeFlags)
|
| +bool SVGRenderSupport::updateGraphicsContext(GraphicsContextStateSaver& stateSaver, RenderStyle* style, RenderObject& renderer, RenderSVGResourceMode resourceMode, const AffineTransform* additionalPaintServerTransform)
|
| {
|
| ASSERT(style);
|
|
|
| - RenderSVGResourceMode resourceMode = static_cast<RenderSVGResourceMode>(resourceModeFlags & (ApplyToFillMode | ApplyToStrokeMode));
|
| - ASSERT(resourceMode == ApplyToFillMode || resourceMode == ApplyToStrokeMode);
|
| -
|
| GraphicsContext* context = stateSaver.context();
|
| if (isRenderingClipPathAsMaskImage(renderer)) {
|
| if (resourceMode == ApplyToStrokeMode)
|
| @@ -458,13 +410,13 @@ bool SVGRenderSupport::updateGraphicsContext(GraphicsContextStateSaver& stateSav
|
| if (!paintServer.isValid())
|
| return false;
|
|
|
| - const SVGRenderStyle& svgStyle = style->svgStyle();
|
| -
|
| - if (paintServer.isTransformDependent())
|
| - paintServer.prependTransform(computeResourceSpaceTransform(renderer, svgStyle, resourceModeFlags));
|
| + if (additionalPaintServerTransform && paintServer.isTransformDependent())
|
| + paintServer.prependTransform(*additionalPaintServerTransform);
|
|
|
| paintServer.apply(*context, resourceMode, &stateSaver);
|
|
|
| + const SVGRenderStyle& svgStyle = style->svgStyle();
|
| +
|
| if (resourceMode == ApplyToFillMode) {
|
| context->setAlphaAsFloat(svgStyle.fillOpacity());
|
| context->setFillRule(svgStyle.fillRule());
|
|
|