Index: src/core/SkCanvas.cpp |
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp |
index 09bfa4593588a3ca41880e87d87fc09f56cab10a..e33eae4fc852d1071641e8764a93f90b7eda93f7 100644 |
--- a/src/core/SkCanvas.cpp |
+++ b/src/core/SkCanvas.cpp |
@@ -1765,11 +1765,11 @@ void SkCanvas::drawImage(const SkImage* image, SkScalar x, SkScalar y, const SkP |
} |
void SkCanvas::drawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst, |
- const SkPaint* paint) { |
+ const SkPaint* paint, SrcRectConstraint constraint) { |
if (dst.isEmpty()) { |
return; |
} |
- this->onDrawImageRect(image, src, dst, paint); |
+ this->onDrawImageRect(image, src, dst, paint SRC_RECT_CONSTRAINT_ARG(constraint)); |
} |
void SkCanvas::drawImageNine(const SkImage* image, const SkIRect& center, const SkRect& dst, |
@@ -1798,6 +1798,17 @@ void SkCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, const SkRect* src, c |
this->onDrawBitmapRect(bitmap, src, dst, paint, flags); |
} |
+void SkCanvas::drawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const SkRect& dst, |
+ const SkPaint* paint, SrcRectConstraint constraint) { |
+ // TODO: update virtual signature so we can past constraint directly |
+ if (bitmap.drawsNothing() || dst.isEmpty()) { |
+ return; |
+ } |
+ this->onDrawBitmapRect(bitmap, src, dst, paint, |
+ kStrict_SrcRectConstraint == constraint ? |
+ kNone_DrawBitmapRectFlag : kBleed_DrawBitmapRectFlag); |
+} |
+ |
void SkCanvas::drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst, |
const SkPaint* paint) { |
if (bitmap.drawsNothing() || dst.isEmpty()) { |
@@ -2042,8 +2053,9 @@ void SkCanvas::onDrawImage(const SkImage* image, SkScalar x, SkScalar y, const S |
} |
void SkCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst, |
- const SkPaint* paint) { |
+ const SkPaint* paint SRC_RECT_CONSTRAINT_PARAM(constraint)) { |
TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawImageRect()"); |
+ SRC_RECT_CONSTRAINT_LOCAL_DEFAULT(constraint) |
SkRect storage; |
const SkRect* bounds = &dst; |
if (NULL == paint || paint->canComputeFastBounds()) { |
@@ -2062,7 +2074,7 @@ void SkCanvas::onDrawImageRect(const SkImage* image, const SkRect* src, const Sk |
LOOPER_BEGIN(*paint, SkDrawFilter::kBitmap_Type, bounds) |
while (iter.next()) { |
- iter.fDevice->drawImageRect(iter, image, src, dst, looper.paint()); |
+ iter.fDevice->drawImageRect(iter, image, src, dst, looper.paint(), constraint); |
} |
LOOPER_END |
@@ -2094,7 +2106,7 @@ void SkCanvas::onDrawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y, cons |
// this one is non-virtual, so it can be called safely by other canvas apis |
void SkCanvas::internalDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, |
const SkRect& dst, const SkPaint* paint, |
- DrawBitmapRectFlags flags) { |
+ SrcRectConstraint constraint) { |
if (bitmap.drawsNothing() || dst.isEmpty()) { |
return; |
} |
@@ -2118,7 +2130,7 @@ void SkCanvas::internalDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, |
LOOPER_BEGIN(*paint, SkDrawFilter::kBitmap_Type, bounds) |
while (iter.next()) { |
- iter.fDevice->drawBitmapRect(iter, bitmap, src, dst, looper.paint(), flags); |
+ iter.fDevice->drawBitmapRect(iter, bitmap, src, dst, looper.paint(), constraint); |
} |
LOOPER_END |
@@ -2128,7 +2140,9 @@ void SkCanvas::onDrawBitmapRect(const SkBitmap& bitmap, const SkRect* src, const |
const SkPaint* paint, DrawBitmapRectFlags flags) { |
TRACE_EVENT0("disabled-by-default-skia", "SkCanvas::drawBitmapRectToRect()"); |
SkDEBUGCODE(bitmap.validate();) |
- this->internalDrawBitmapRect(bitmap, src, dst, paint, flags); |
+ this->internalDrawBitmapRect(bitmap, src, dst, paint, |
+ kNone_DrawBitmapRectFlag == flags ? |
+ kStrict_SrcRectConstraint : kFast_SrcRectConstraint); |
} |
void SkCanvas::onDrawImageNine(const SkImage* image, const SkIRect& center, const SkRect& dst, |