Bug 1343664 - Part 1. Correct transform matrix. draft
authorcku <cku@mozilla.com>
Mon, 06 Mar 2017 15:25:29 +0800
changeset 500366 de17c5e7fce5161fa87c3bb44c120e9cd203e4b7
parent 500240 39607304b774591fa6e32c4b06158d869483c312
child 500367 4d5eaf21b81bad1dfc938d404949fca38b92d919
push id49706
push userbmo:cku@mozilla.com
push dateFri, 17 Mar 2017 04:22:10 +0000
bugs1343664
milestone55.0a1
Bug 1343664 - Part 1. Correct transform matrix. MozReview-Commit-ID: Eg6i4SoSPoe
layout/svg/nsFilterInstance.cpp
--- a/layout/svg/nsFilterInstance.cpp
+++ b/layout/svg/nsFilterInstance.cpp
@@ -524,19 +524,20 @@ nsFilterInstance::Render(DrawTarget* aDr
   }
 
   AutoRestoreTransform autoRestoreTransform(aDrawTarget);
   gfxMatrix filterSpaceToUserSpace = mPaintTransform;
   DebugOnly<bool> invertible = filterSpaceToUserSpace.Invert();
   MOZ_ASSERT(invertible);
   filterSpaceToUserSpace *= nsSVGUtils::GetCSSPxToDevPxMatrix(mTargetFrame);
 
-  aDrawTarget->SetTransform(ToMatrix(filterSpaceToUserSpace) *
-                            aDrawTarget->GetTransform() *
-                            Matrix::Translation(filterRect.TopLeft()));
+  Matrix newTM =
+    ToMatrix(filterSpaceToUserSpace).PreTranslate(filterRect.x, filterRect.y) *
+    aDrawTarget->GetTransform();
+  aDrawTarget->SetTransform(newTM);
 
   ComputeNeededBoxes();
 
   DrawResult result = BuildSourceImage();
   if (result != DrawResult::SUCCESS){
     return result;
   }
   result = BuildSourcePaints();