Index: src/image/SkSurface_Raster.cpp |
=================================================================== |
--- src/image/SkSurface_Raster.cpp (revision 8710) |
+++ src/image/SkSurface_Raster.cpp (working copy) |
@@ -25,7 +25,7 @@ |
virtual SkImage* onNewImageSnapshot() SK_OVERRIDE; |
virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y, |
const SkPaint*) SK_OVERRIDE; |
- virtual void onCopyOnWrite() SK_OVERRIDE; |
+ virtual void onCopyOnWrite(ContentChangeMode) SK_OVERRIDE; |
private: |
SkBitmap fBitmap; |
@@ -124,13 +124,18 @@ |
return SkNewImageFromBitmap(fBitmap, fWeOwnThePixels); |
} |
-void SkSurface_Raster::onCopyOnWrite() { |
+void SkSurface_Raster::onCopyOnWrite(ContentChangeMode mode) { |
// are we sharing pixelrefs with the image? |
- SkASSERT(NULL !=this->getCachedImage()); |
+ SkASSERT(NULL != this->getCachedImage()); |
if (SkBitmapImageGetPixelRef(this->getCachedImage()) == fBitmap.pixelRef()) { |
SkASSERT(fWeOwnThePixels); |
- SkBitmap prev(fBitmap); |
- prev.deepCopyTo(&fBitmap, prev.config()); |
+ if (kDiscard_ContentChangeMode == mode) { |
+ fBitmap.setPixelRef(NULL, 0); |
+ fBitmap.allocPixels(); |
+ } else { |
+ SkBitmap prev(fBitmap); |
+ prev.deepCopyTo(&fBitmap, prev.config()); |
+ } |
// Now fBitmap is a deep copy of itself (and therefore different from |
// what is being used by the image. Next we update the canvas to use |
// this as its backend, so we can't modify the image's pixels anymore. |