Bug 1385239 - Part 1. Correct the transform matix of the given draw target in nsFilterInstance::Render. draft
authorcku <cku@mozilla.com>
Wed, 23 Aug 2017 13:27:12 +0800
changeset 651893 dab5681990ee3ef08bf009f938e1ebd3117887fc
parent 650941 7c50f0c999c5bf8ee915261997597a5a9b8fb2ae
child 651894 97efe01a58bdbbcd7884429f45095e6b72fd4a4a
push id75851
push userbmo:cku@mozilla.com
push dateThu, 24 Aug 2017 06:22:05 +0000
bugs1385239, 1224207
milestone57.0a1
Bug 1385239 - Part 1. Correct the transform matix of the given draw target in nsFilterInstance::Render. The translation vector in nsFilterInstance::mPaintTransform does not apply to the transform matrix of the given draw target after the patches in bug 1224207 landed. Most of time, we apply translation vector onto layer, so there is no translation vector pass to this function, except drawing of indirect paint objects, such as svg mask or pattern. This patch is trying to fix it by bringing disappeared translation vector back. MozReview-Commit-ID: 4rorOotGLD5
layout/svg/nsFilterInstance.cpp
--- a/layout/svg/nsFilterInstance.cpp
+++ b/layout/svg/nsFilterInstance.cpp
@@ -485,16 +485,17 @@ nsFilterInstance::Render(DrawTarget* aDr
   nsIntRect filterRect =
     mPostFilterDirtyRegion.GetBounds().Intersect(OutputFilterSpaceBounds());
   if (filterRect.IsEmpty() || mPaintTransform.IsSingular()) {
     return;
   }
 
   AutoRestoreTransform autoRestoreTransform(aDrawTarget);
   Matrix newTM =
+    Matrix::Translation(ToPoint(mPaintTransform.GetTranslation())) *
     aDrawTarget->GetTransform().PreTranslate(filterRect.x, filterRect.y);
   aDrawTarget->SetTransform(newTM);
 
   ComputeNeededBoxes();
 
   BuildSourceImage(aImgParams);
   BuildSourcePaints(aImgParams);