diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-07-23 15:52:16 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2013-07-23 15:52:16 +0000 |
commit | dfec28d4a9e05d1d525f377b380b4df3c5e07c7b (patch) | |
tree | 495b005eba700d8eb59316017bd3569388683358 /src/image/SkImagePriv.cpp | |
parent | bcc6d7d390083c6c8ce04b2078ee2904399b8435 (diff) |
Add SkImage->draw() call with src and dst rects.
Committed: http://code.google.com/p/skia/source/detail?r=10237
R=junov@chromium.org, senorblanco@chromium.org, reed@google.com
Author: arbesfeld@chromium.org
Review URL: https://chromiumcodereview.appspot.com/19729007
git-svn-id: http://skia.googlecode.com/svn/trunk@10274 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/image/SkImagePriv.cpp')
-rw-r--r-- | src/image/SkImagePriv.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/image/SkImagePriv.cpp b/src/image/SkImagePriv.cpp index c44e439b72..4ff1c92bff 100644 --- a/src/image/SkImagePriv.cpp +++ b/src/image/SkImagePriv.cpp @@ -141,3 +141,33 @@ void SkImagePrivDrawPicture(SkCanvas* canvas, SkPicture* picture, canvas->drawPicture(*picture); canvas->restoreToCount(saveCount); } + +void SkImagePrivDrawPicture(SkCanvas* canvas, SkPicture* picture, + const SkRect* src, const SkRect& dst, const SkPaint* paint) { + int saveCount = canvas->getSaveCount(); + + SkMatrix matrix; + SkRect tmpSrc; + + if (NULL != src) { + tmpSrc = *src; + } else { + tmpSrc.set(0, 0, + SkIntToScalar(picture->width()), + SkIntToScalar(picture->height())); + } + + matrix.setRectToRect(tmpSrc, dst, SkMatrix::kFill_ScaleToFit); + if (paint && needs_layer(*paint)) { + canvas->saveLayer(&dst, paint); + } else { + canvas->save(); + } + canvas->concat(matrix); + if (!paint || !needs_layer(*paint)) { + canvas->clipRect(tmpSrc); + } + + canvas->drawPicture(*picture); + canvas->restoreToCount(saveCount); +} |