Index: src/core/SkCanvas.cpp |
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp |
index f5e91ffc43fa1b943f6ca62a59bdc2529c3cec21..61acf269b46c4d05de972e9d89eec0aa68250d7b 100644 |
--- a/src/core/SkCanvas.cpp |
+++ b/src/core/SkCanvas.cpp |
@@ -746,46 +746,6 @@ int SkCanvas::save(SaveFlags flags) { |
return this->internalSave(flags); |
} |
-#define C32MASK (1 << SkBitmap::kARGB_8888_Config) |
-#define C16MASK (1 << SkBitmap::kRGB_565_Config) |
-#define C8MASK (1 << SkBitmap::kA8_Config) |
- |
-static SkBitmap::Config resolve_config(SkCanvas* canvas, |
- const SkIRect& bounds, |
- SkCanvas::SaveFlags flags, |
- bool* isOpaque) { |
- *isOpaque = (flags & SkCanvas::kHasAlphaLayer_SaveFlag) == 0; |
- |
-#if 0 |
- // loop through and union all the configs we may draw into |
- uint32_t configMask = 0; |
- for (int i = canvas->countLayerDevices() - 1; i >= 0; --i) |
- { |
- SkBaseDevice* device = canvas->getLayerDevice(i); |
- if (device->intersects(bounds)) |
- configMask |= 1 << device->config(); |
- } |
- |
- // if the caller wants alpha or fullcolor, we can't return 565 |
- if (flags & (SkCanvas::kFullColorLayer_SaveFlag | |
- SkCanvas::kHasAlphaLayer_SaveFlag)) |
- configMask &= ~C16MASK; |
- |
- switch (configMask) { |
- case C8MASK: // if we only have A8, return that |
- return SkBitmap::kA8_Config; |
- |
- case C16MASK: // if we only have 565, return that |
- return SkBitmap::kRGB_565_Config; |
- |
- default: |
- return SkBitmap::kARGB_8888_Config; // default answer |
- } |
-#else |
- return SkBitmap::kARGB_8888_Config; // default answer |
-#endif |
-} |
- |
static bool bounds_affects_clip(SkCanvas::SaveFlags flags) { |
return (flags & SkCanvas::kClipToLayer_SaveFlag) != 0; |
} |
@@ -840,15 +800,9 @@ int SkCanvas::saveLayer(const SkRect* bounds, const SkPaint* paint, |
} |
static SkBaseDevice* createCompatibleDevice(SkCanvas* canvas, |
- SkBitmap::Config config, |
- int width, int height, |
- bool isOpaque) { |
+ const SkImageInfo& info) { |
SkBaseDevice* device = canvas->getDevice(); |
- if (device) { |
- return device->createCompatibleDevice(config, width, height, isOpaque); |
- } else { |
- return NULL; |
- } |
+ return device ? device->createCompatibleDevice(info) : NULL; |
} |
int SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, |
@@ -878,16 +832,15 @@ int SkCanvas::internalSaveLayer(const SkRect* bounds, const SkPaint* paint, |
} |
} |
- bool isOpaque; |
- SkBitmap::Config config = resolve_config(this, ir, flags, &isOpaque); |
+ bool isOpaque = !SkToBool(flags & kHasAlphaLayer_SaveFlag); |
+ SkImageInfo info = SkImageInfo::MakeN32(ir.width(), ir.height(), |
+ isOpaque ? kOpaque_SkAlphaType : kPremul_SkAlphaType); |
SkBaseDevice* device; |
if (paint && paint->getImageFilter()) { |
- device = createCompatibleDevice(this, config, ir.width(), ir.height(), |
- isOpaque); |
+ device = createCompatibleDevice(this, info); |
} else { |
- device = this->createLayerDevice(config, ir.width(), ir.height(), |
- isOpaque); |
+ device = this->createLayerDevice(info); |
} |
if (NULL == device) { |
SkDebugf("Unable to create device for layer."); |
@@ -1607,16 +1560,9 @@ const SkRegion& SkCanvas::getTotalClip() const { |
return fMCRec->fRasterClip->forceGetBW(); |
} |
-SkBaseDevice* SkCanvas::createLayerDevice(SkBitmap::Config config, |
- int width, int height, |
- bool isOpaque) { |
+SkBaseDevice* SkCanvas::createLayerDevice(const SkImageInfo& info) { |
SkBaseDevice* device = this->getTopDevice(); |
- if (device) { |
- return device->createCompatibleDeviceForSaveLayer(config, width, height, |
- isOpaque); |
- } else { |
- return NULL; |
- } |
+ return device ? device->createCompatibleDeviceForSaveLayer(info) : NULL; |
} |
GrContext* SkCanvas::getGrContext() { |