diff --git a/include/core/SkImage.h b/include/core/SkImage.h
index c7625f6..4e01634 100644
--- a/include/core/SkImage.h
+++ b/include/core/SkImage.h
@@ -122,7 +122,7 @@
      *
      *  See SkCanvas::drawBitmapRectToRect for similar behavior.
      */
-    void draw(SkCanvas*, const SkRect* src, const SkRect& dst, const SkPaint*) const;
+    void drawRect(SkCanvas*, const SkRect* src, const SkRect& dst, const SkPaint*) const;
 
     /**
      *  Return a copy of the image's pixels, limiting them to the subset
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 96cd81e..065aecd 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1894,7 +1894,7 @@
 void SkCanvas::drawImageRect(const SkImage* image, const SkRect* src,
                            const SkRect& dst,
                            const SkPaint* paint) {
-    image->draw(this, src, dst, paint);
+    image->drawRect(this, src, dst, paint);
 }
 
 void SkCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar x, SkScalar y,
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 41ac216..f11900d 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -33,9 +33,9 @@
     as_IB(this)->onDraw(canvas, x, y, paint);
 }
 
-void SkImage::draw(SkCanvas* canvas, const SkRect* src, const SkRect& dst,
+void SkImage::drawRect(SkCanvas* canvas, const SkRect* src, const SkRect& dst,
                    const SkPaint* paint) const {
-    as_IB(this)->onDrawRectToRect(canvas, src, dst, paint);
+    as_IB(this)->onDrawRect(canvas, src, dst, paint);
 }
 
 const void* SkImage::peekPixels(SkImageInfo* info, size_t* rowBytes) const {
diff --git a/src/image/SkImage_Base.h b/src/image/SkImage_Base.h
index 9542ba3..4ff6a25 100644
--- a/src/image/SkImage_Base.h
+++ b/src/image/SkImage_Base.h
@@ -15,7 +15,7 @@
     SkImage_Base(int width, int height) : INHERITED(width, height) {}
 
     virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) const = 0;
-    virtual void onDrawRectToRect(SkCanvas*, const SkRect* src,
+    virtual void onDrawRect(SkCanvas*, const SkRect* src,
                                   const SkRect& dst, const SkPaint*) const = 0;
 
     // Default impl calls onDraw
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index cf1b493..de49d1e 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -20,7 +20,7 @@
     virtual ~SkImage_Gpu();
 
     virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y, const SkPaint*) const SK_OVERRIDE;
-    virtual void onDrawRectToRect(SkCanvas*, const SkRect* src, const SkRect& dst,
+    virtual void onDrawRect(SkCanvas*, const SkRect* src, const SkRect& dst,
                                   const SkPaint*) const SK_OVERRIDE;
     virtual GrTexture* onGetTexture() const SK_OVERRIDE;
     virtual bool getROPixels(SkBitmap*) const SK_OVERRIDE;
@@ -61,7 +61,7 @@
     canvas->drawBitmap(fBitmap, x, y, paint);
 }
 
-void SkImage_Gpu::onDrawRectToRect(SkCanvas* canvas, const SkRect* src, const SkRect& dst,
+void SkImage_Gpu::onDrawRect(SkCanvas* canvas, const SkRect* src, const SkRect& dst,
                                    const SkPaint* paint) const {
     canvas->drawBitmapRectToRect(fBitmap, src, dst, paint);
 }
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
index 181f194..d13141c 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -54,7 +54,7 @@
     virtual ~SkImage_Raster();
 
     virtual void onDraw(SkCanvas*, SkScalar, SkScalar, const SkPaint*) const SK_OVERRIDE;
-    virtual void onDrawRectToRect(SkCanvas*, const SkRect*, const SkRect&,
+    virtual void onDrawRect(SkCanvas*, const SkRect*, const SkRect&,
                                   const SkPaint*) const SK_OVERRIDE;
     virtual bool onReadPixels(SkBitmap*, const SkIRect&) const SK_OVERRIDE;
     virtual const void* onPeekPixels(SkImageInfo*, size_t* /*rowBytes*/) const SK_OVERRIDE;
@@ -131,7 +131,7 @@
     canvas->drawBitmap(fBitmap, x, y, paint);
 }
 
-void SkImage_Raster::onDrawRectToRect(SkCanvas* canvas, const SkRect* src, const SkRect& dst,
+void SkImage_Raster::onDrawRect(SkCanvas* canvas, const SkRect* src, const SkRect& dst,
                                       const SkPaint* paint) const {
     canvas->drawBitmapRectToRect(fBitmap, src, dst, paint);
 }
