Bug 1396474: When aSetTransform is false, do not rely on the current DT transform when returning the output transform. r=mattwoodrow draft
authorBas Schouten <bschouten@mozilla.com>
Mon, 04 Sep 2017 06:03:07 +0200
changeset 658412 8806725b051e429e3fa9c88e4903bff7b5590fe4
parent 657142 faa9ec784d9dfb36b5bd77e85fc93e034a03a004
child 729644 7222d674f2347fdd9950c4fb61acea12656ed591
push id77759
push userbschouten@mozilla.com
push dateMon, 04 Sep 2017 04:03:30 +0000
reviewersmattwoodrow
bugs1396474
milestone57.0a1
Bug 1396474: When aSetTransform is false, do not rely on the current DT transform when returning the output transform. r=mattwoodrow MozReview-Commit-ID: 8DbS6dzFVtp
gfx/layers/RotatedBuffer.cpp
--- a/gfx/layers/RotatedBuffer.cpp
+++ b/gfx/layers/RotatedBuffer.cpp
@@ -297,28 +297,26 @@ RotatedContentBuffer::BorrowDrawTargetFo
   // Figure out which quadrant to draw in
   int32_t xBoundary = mBufferRect.XMost() - mBufferRotation.x;
   int32_t yBoundary = mBufferRect.YMost() - mBufferRotation.y;
   XSide sideX = bounds.XMost() <= xBoundary ? RIGHT : LEFT;
   YSide sideY = bounds.YMost() <= yBoundary ? BOTTOM : TOP;
   IntRect quadrantRect = GetQuadrantRectangle(sideX, sideY);
   NS_ASSERTION(quadrantRect.Contains(bounds), "Messed up quadrants");
 
-  mLoanedTransform = mLoanedDrawTarget->GetTransform();
-
-  Matrix transform = Matrix(mLoanedTransform)
-                          .PreTranslate(-quadrantRect.x,
-                                        -quadrantRect.y);
-
   if (aSetTransform) {
+    mLoanedTransform = mLoanedDrawTarget->GetTransform();
+    Matrix transform = Matrix(mLoanedTransform)
+                            .PreTranslate(-quadrantRect.x,
+                                          -quadrantRect.y);
     mLoanedDrawTarget->SetTransform(transform);
     mSetTransform = true;
   } else {
     MOZ_ASSERT(aOutMatrix);
-    *aOutMatrix = transform;
+    *aOutMatrix = Matrix::Translation(-quadrantRect.x, -quadrantRect.y);
     mSetTransform = false;
   }
 
   return mLoanedDrawTarget;
 }
 
 void
 BorrowDrawTarget::ReturnDrawTarget(gfx::DrawTarget*& aReturned)