diff options
author | 2013-07-22 16:16:37 +0000 | |
---|---|---|
committer | 2013-07-22 16:16:37 +0000 | |
commit | 1d91600a0272025364e2d3447b4c085f470a773b (patch) | |
tree | 9378d08705adb108aa60eaa35979c5d310d35d11 /src/image/SkImagePriv.cpp | |
parent | ac03d91ee03599eab946a8ad25e33f9fc5f3166e (diff) |
Add SkImage->draw() call with src and dst rects.
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@10237 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); +} |