From 682d07b50e79994b21a4f1ad49693ff75f78e613 Mon Sep 17 00:00:00 2001 From: Nicolas Silva Date: Mon, 19 Jan 2015 12:36:43 +0100 Subject: [PATCH] Bug 1122631 - Fix wrong logic in DrawTargetTiled::CopySurface. r=jrmuizel --- gfx/2d/DrawTargetTiled.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/gfx/2d/DrawTargetTiled.cpp b/gfx/2d/DrawTargetTiled.cpp index 463d5a503331..4eed5d231715 100644 --- a/gfx/2d/DrawTargetTiled.cpp +++ b/gfx/2d/DrawTargetTiled.cpp @@ -178,19 +178,14 @@ DrawTargetTiled::CopySurface(SourceSurface *aSurface, const IntRect &aSourceRect, const IntPoint &aDestination) { - // CopySurface ignores the transform, account for that here. for (size_t i = 0; i < mTiles.size(); i++) { - IntRect src = aSourceRect; - src.x += mTiles[i].mTileOrigin.x; - src.width -= mTiles[i].mTileOrigin.x; - src.y = mTiles[i].mTileOrigin.y; - src.height -= mTiles[i].mTileOrigin.y; - - if (src.width <= 0 || src.height <= 0) { + IntPoint tileOrigin = mTiles[i].mTileOrigin; + IntSize tileSize = mTiles[i].mDrawTarget->GetSize(); + if (!IntRect(aDestination, aSourceRect.Size()).Intersects(IntRect(tileOrigin, tileSize))) { continue; } - - mTiles[i].mDrawTarget->CopySurface(aSurface, src, aDestination); + // CopySurface ignores the transform, account for that here. + mTiles[i].mDrawTarget->CopySurface(aSurface, aSourceRect, aDestination - tileOrigin); } }