Index: Source/core/svg/SVGGraphicsElement.cpp |
diff --git a/Source/core/svg/SVGGraphicsElement.cpp b/Source/core/svg/SVGGraphicsElement.cpp |
index 9da02b36d0c5be6abf56906c9b2bd9bb4be5a591..6c3e1e3bea5c2cfb6092107d6fed7b74242112fc 100644 |
--- a/Source/core/svg/SVGGraphicsElement.cpp |
+++ b/Source/core/svg/SVGGraphicsElement.cpp |
@@ -74,6 +74,14 @@ AffineTransform SVGGraphicsElement::animatedLocalTransform() const |
// Flatten any 3D transform. |
matrix = transform.toAffineTransform(); |
+ |
+ // CSS bakes the zoom factor into lengths, including translation components. |
+ // In order to align CSS & SVG transforms, we need to invert this operation. |
+ float zoom = style->effectiveZoom(); |
+ if (zoom != 1) { |
+ matrix.setE(matrix.e() / zoom); |
+ matrix.setF(matrix.f() / zoom); |
+ } |
} else { |
transformCurrentValue().concatenate(matrix); |
} |