| Index: Source/core/rendering/svg/SVGRenderingContext.cpp
|
| diff --git a/Source/core/rendering/svg/SVGRenderingContext.cpp b/Source/core/rendering/svg/SVGRenderingContext.cpp
|
| index b425add29e08294c888db6ac7ed7f7107e65b932..793371644225a1f466358f5069a91f020b631a8d 100644
|
| --- a/Source/core/rendering/svg/SVGRenderingContext.cpp
|
| +++ b/Source/core/rendering/svg/SVGRenderingContext.cpp
|
| @@ -195,17 +195,6 @@ SubtreeContentTransformScope::~SubtreeContentTransformScope()
|
|
|
| float SVGRenderingContext::calculateScreenFontSizeScalingFactor(const RenderObject* renderer)
|
| {
|
| - ASSERT(renderer);
|
| -
|
| - AffineTransform ctm;
|
| - // FIXME: calculateDeviceSpaceTransformation() queries layer compositing state - which is not
|
| - // supported during layout. Hence, the result may not include all CSS transforms.
|
| - calculateDeviceSpaceTransformation(renderer, ctm);
|
| - return narrowPrecisionToFloat(sqrt((pow(ctm.xScale(), 2) + pow(ctm.yScale(), 2)) / 2));
|
| -}
|
| -
|
| -void SVGRenderingContext::calculateDeviceSpaceTransformation(const RenderObject* renderer, AffineTransform& absoluteTransform)
|
| -{
|
| // FIXME: trying to compute a device space transform at record time is wrong. All clients
|
| // should be updated to avoid relying on this information, and the method should be removed.
|
|
|
| @@ -214,15 +203,17 @@ void SVGRenderingContext::calculateDeviceSpaceTransformation(const RenderObject*
|
| float deviceScaleFactor = renderer->document().frameHost()->deviceScaleFactor();
|
|
|
| // Walk up the render tree, accumulating SVG transforms.
|
| - absoluteTransform = currentContentTransformation();
|
| + AffineTransform ctm = currentContentTransformation();
|
| while (renderer) {
|
| - absoluteTransform = renderer->localToParentTransform() * absoluteTransform;
|
| + ctm = renderer->localToParentTransform() * ctm;
|
| if (renderer->isSVGRoot())
|
| break;
|
| renderer = renderer->parent();
|
| }
|
|
|
| // Continue walking up the layer tree, accumulating CSS transforms.
|
| + // FIXME: this queries layer compositing state - which is not
|
| + // supported during layout. Hence, the result may not include all CSS transforms.
|
| RenderLayer* layer = renderer ? renderer->enclosingLayer() : 0;
|
| while (layer && layer->isAllowedToQueryCompositingState()) {
|
| // We can stop at compositing layers, to match the backing resolution.
|
| @@ -234,12 +225,14 @@ void SVGRenderingContext::calculateDeviceSpaceTransformation(const RenderObject*
|
| break;
|
|
|
| if (TransformationMatrix* layerTransform = layer->transform())
|
| - absoluteTransform = layerTransform->toAffineTransform() * absoluteTransform;
|
| + ctm = layerTransform->toAffineTransform() * ctm;
|
|
|
| layer = layer->parent();
|
| }
|
|
|
| - absoluteTransform.scale(deviceScaleFactor);
|
| + ctm.scale(deviceScaleFactor);
|
| +
|
| + return narrowPrecisionToFloat(sqrt((pow(ctm.xScale(), 2) + pow(ctm.yScale(), 2)) / 2));
|
| }
|
|
|
| void SVGRenderingContext::renderSubtree(GraphicsContext* context, RenderObject* item)
|
|
|