Index: src/core/SkBitmapDevice.cpp |
diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp |
index 1f17e6fac12d30212f62819c75cd6fa47b6986ea..f902e59f72fe625851c3c3cfad1bf9502a08b7e9 100644 |
--- a/src/core/SkBitmapDevice.cpp |
+++ b/src/core/SkBitmapDevice.cpp |
@@ -69,11 +69,10 @@ SkBitmapDevice::SkBitmapDevice(const SkBitmap& bitmap, const SkDeviceProperties& |
SkASSERT(valid_for_bitmap_device(bitmap.info(), NULL)); |
} |
-SkBitmapDevice* SkBitmapDevice::Create(const SkImageInfo& origInfo, |
- const SkDeviceProperties* props) { |
+bool SkBitmapDevice::CreateBackendBitmap(const SkImageInfo& origInfo, SkBitmap* target) { |
SkAlphaType newAT = origInfo.alphaType(); |
if (!valid_for_bitmap_device(origInfo, &newAT)) { |
- return NULL; |
+ return false; |
} |
const SkImageInfo info = origInfo.makeAlphaType(newAT); |
@@ -81,17 +80,26 @@ SkBitmapDevice* SkBitmapDevice::Create(const SkImageInfo& origInfo, |
if (kUnknown_SkColorType == info.colorType()) { |
if (!bitmap.setInfo(info)) { |
- return NULL; |
+ return false; |
} |
} else { |
if (!bitmap.tryAllocPixels(info)) { |
- return NULL; |
+ return false; |
} |
if (!bitmap.info().isOpaque()) { |
bitmap.eraseColor(SK_ColorTRANSPARENT); |
} |
} |
+ target->swap(bitmap); |
+ return true; |
+} |
+SkBitmapDevice* SkBitmapDevice::Create(const SkImageInfo& info, |
+ const SkDeviceProperties* props) { |
+ SkBitmap bitmap; |
+ if (!CreateBackendBitmap(info, &bitmap)) { |
+ return NULL; |
+ } |
if (props) { |
return SkNEW_ARGS(SkBitmapDevice, (bitmap, *props)); |
} else { |
@@ -103,7 +111,7 @@ SkImageInfo SkBitmapDevice::imageInfo() const { |
return fBitmap.info(); |
} |
-void SkBitmapDevice::replaceBitmapBackendForRasterSurface(const SkBitmap& bm) { |
+void SkBitmapDevice::replaceBitmapBackend(const SkBitmap& bm) { |
SkASSERT(bm.width() == fBitmap.width()); |
SkASSERT(bm.height() == fBitmap.height()); |
fBitmap = bm; // intent is to use bm's pixelRef (and rowbytes/config) |