Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(453)

Unified Diff: src/image/SkSurface_Raster.cpp

Issue 12567025: Integrating SkSurface with SkDeferredCanvas (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/image/SkSurface_Raster.cpp
===================================================================
--- src/image/SkSurface_Raster.cpp (revision 8402)
+++ src/image/SkSurface_Raster.cpp (working copy)
@@ -25,7 +25,7 @@
virtual SkImage* onNewImageShapshot() SK_OVERRIDE;
virtual void onDraw(SkCanvas*, SkScalar x, SkScalar y,
const SkPaint*) SK_OVERRIDE;
- virtual void onCopyOnWrite(SkImage*, SkCanvas*) SK_OVERRIDE;
+ virtual void onCopyOnWrite(SkImage*, SkCanvas*, bool overwrite) SK_OVERRIDE;
private:
SkBitmap fBitmap;
@@ -124,12 +124,20 @@
return SkNewImageFromBitmap(fBitmap, fWeOwnThePixels);
}
-void SkSurface_Raster::onCopyOnWrite(SkImage* image, SkCanvas* canvas) {
+void SkSurface_Raster::onCopyOnWrite(SkImage* image, SkCanvas* canvas, bool overwrite) {
// are we sharing pixelrefs with the image?
if (SkBitmapImageGetPixelRef(image) == fBitmap.pixelRef()) {
SkASSERT(fWeOwnThePixels);
- SkBitmap prev(fBitmap);
- prev.deepCopyTo(&fBitmap, prev.config());
+ if (!overwrite) {
+ SkBitmap prev(fBitmap);
+ prev.deepCopyTo(&fBitmap, prev.config());
+ } else {
+ SkBitmap newBitmap;
+ newBitmap.setConfig(fBitmap.getConfig(), fBitmap.width(), fBitmap.height(),
+ fBitmap.rowBytes());
+ newBitmap.allocPixels();
+ fBitmap.swap(newBitmap);
+ }
// Now fBitmap is a deep copy of itself (and therefore different from
Stephen White 2013/03/26 20:51:44 Nit: this comment is not strictly true anymore, s
// 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.

Powered by Google App Engine
This is Rietveld 408576698