| 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.
|
|
|