Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Unified Diff: src/core/SkCanvas.cpp

Issue 1228083004: add src-rect-constraint to drawImageRect (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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,

Powered by Google App Engine
This is Rietveld 408576698