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
diff --git a/src/image/SkImagePriv.cpp b/src/image/SkImagePriv.cpp
index c44e439..4ff1c92 100644
--- a/src/image/SkImagePriv.cpp
+++ b/src/image/SkImagePriv.cpp
@@ -141,3 +141,33 @@
     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);
+}