Bug 1453090. Don't PopClip on a different DT. r=mstange draft
authorJeff Muizelaar <jmuizelaar@mozilla.com>
Wed, 11 Apr 2018 10:27:12 -0400
changeset 780482 84eb6152d60b4327c3dd730e943e2b7ad9183463
parent 780481 d7d2f08e051c3c355d41dc5c1ce1bd3ca55a43b9
push id106013
push userbmo:jmuizelaar@mozilla.com
push dateWed, 11 Apr 2018 14:28:15 +0000
reviewersmstange
bugs1453090
milestone61.0a1
Bug 1453090. Don't PopClip on a different DT. r=mstange Make sure we PushClip on the same DT as we PopClip
gfx/webrender_bindings/Moz2DImageRenderer.cpp
--- a/gfx/webrender_bindings/Moz2DImageRenderer.cpp
+++ b/gfx/webrender_bindings/Moz2DImageRenderer.cpp
@@ -236,33 +236,33 @@ static bool Moz2DRenderCallback(const Ra
     aFormat,
     uninitialized
   );
 
   if (!dt) {
     return false;
   }
 
-  if (aDirtyRect) {
-    Rect dirty(aDirtyRect->origin.x, aDirtyRect->origin.y, aDirtyRect->size.width, aDirtyRect->size.height);
-    dt->PushClipRect(dirty);
-  }
-
   if (aTileOffset) {
     // It's overkill to use a TiledDrawTarget for a single tile
     // but it was the easiest way to get the offset handling working
     gfx::TileSet tileset;
     gfx::Tile tile;
     tile.mDrawTarget = dt;
     tile.mTileOrigin = gfx::IntPoint(aTileOffset->x * *aTileSize, aTileOffset->y * *aTileSize);
     tileset.mTiles = &tile;
     tileset.mTileCount = 1;
     dt = gfx::Factory::CreateTiledDrawTarget(tileset);
   }
 
+  if (aDirtyRect) {
+    Rect dirty(aDirtyRect->origin.x, aDirtyRect->origin.y, aDirtyRect->size.width, aDirtyRect->size.height);
+    dt->PushClipRect(dirty);
+  }
+
   struct Reader {
     const uint8_t *buf;
     size_t len;
     size_t pos;
 
     Reader(const uint8_t *buf, size_t len) : buf(buf), len(len), pos(0) {}
 
     size_t ReadSize() {