Index: src/gpu/SkGpuDevice.cpp |
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp |
index 063509a5a4d6b3d4e27a81f7a852d7c140030a40..0f9055e218bcd47ffc42472b55a578e4985d4ab4 100644 |
--- a/src/gpu/SkGpuDevice.cpp |
+++ b/src/gpu/SkGpuDevice.cpp |
@@ -1117,26 +1117,25 @@ void SkGpuDevice::drawBitmapCommon(const SkDraw& draw, |
SkBitmap tmp; // subset of bitmap, if necessary |
const SkBitmap* bitmapPtr = &bitmap; |
if (NULL != srcRectPtr) { |
- SkIRect iSrc; |
- srcRect.roundOut(&iSrc); |
- |
- SkPoint offset = SkPoint::Make(SkIntToScalar(iSrc.fLeft), |
- SkIntToScalar(iSrc.fTop)); |
- |
- if (SkCanvas::kBleed_DrawBitmapRectFlag & flags) { |
- // In bleed mode we want to expand the src rect on all sides |
- // but stay within the bitmap bounds |
- SkIRect iClampRect = SkIRect::MakeWH(bitmap.width(), bitmap.height()); |
- clamped_unit_outset_with_offset(&iSrc, &offset, iClampRect); |
- } |
- |
- if (!bitmap.extractSubset(&tmp, iSrc)) { |
- return; // extraction failed |
+ // In bleed mode we position and trim the bitmap based on the src rect which is |
+ // already accounted for in 'm' and 'srcRect'. In clamp mode we need to chop out |
+ // the desired portion of the bitmap and then update 'm' and 'srcRect' to |
+ // compensate. |
+ if (!(SkCanvas::kBleed_DrawBitmapRectFlag & flags)) { |
+ SkIRect iSrc; |
+ srcRect.roundOut(&iSrc); |
+ |
+ SkPoint offset = SkPoint::Make(SkIntToScalar(iSrc.fLeft), |
+ SkIntToScalar(iSrc.fTop)); |
+ |
+ if (!bitmap.extractSubset(&tmp, iSrc)) { |
+ return; // extraction failed |
+ } |
+ bitmapPtr = &tmp; |
+ srcRect.offset(-offset.fX, -offset.fY); |
+ // The source rect has changed so update the matrix |
+ newM.preTranslate(offset.fX, offset.fY); |
} |
- bitmapPtr = &tmp; |
- srcRect.offset(-offset.fX, -offset.fY); |
- // The source rect has changed so update the matrix |
- newM.preTranslate(offset.fX, offset.fY); |
} |
SkPaint paintWithTexture(paint); |