| Index: src/image/SkImagePriv.cpp | 
| diff --git a/src/image/SkImagePriv.cpp b/src/image/SkImagePriv.cpp | 
| index c44e439b72c8b29eb82837b6dae19797d4b9569b..4ff1c92bff4c00a646a234f0b1d9b79a5f0bdf10 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); | 
| +} | 
|  |