use SkColorType instead of SkBitmap::Config in views/effects

R=scroggo@google.com, reed@google.com
TBR=scroggo

Author: reed@chromium.org

Review URL: https://codereview.chromium.org/168843002

git-svn-id: http://skia.googlecode.com/svn/trunk@13469 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/effects/SkAlphaThresholdFilter.cpp b/src/effects/SkAlphaThresholdFilter.cpp
index 6b55fdf..1163f67 100644
--- a/src/effects/SkAlphaThresholdFilter.cpp
+++ b/src/effects/SkAlphaThresholdFilter.cpp
@@ -306,9 +306,9 @@
 bool SkAlphaThresholdFilterImpl::onFilterImage(Proxy*, const SkBitmap& src,
                                                const SkMatrix& matrix, SkBitmap* dst,
                                                SkIPoint* offset) const {
-    SkASSERT(src.config() == SkBitmap::kARGB_8888_Config);
+    SkASSERT(src.colorType() == kPMColor_SkColorType);
 
-    if (src.config() != SkBitmap::kARGB_8888_Config) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkBicubicImageFilter.cpp b/src/effects/SkBicubicImageFilter.cpp
index cf71435..887e2b8 100644
--- a/src/effects/SkBicubicImageFilter.cpp
+++ b/src/effects/SkBicubicImageFilter.cpp
@@ -92,7 +92,7 @@
         return false;
     }
 
-    if (src.config() != SkBitmap::kARGB_8888_Config) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkBlurImageFilter.cpp b/src/effects/SkBlurImageFilter.cpp
index a08b9c5..f946f87 100644
--- a/src/effects/SkBlurImageFilter.cpp
+++ b/src/effects/SkBlurImageFilter.cpp
@@ -143,7 +143,7 @@
         return false;
     }
 
-    if (src.config() != SkBitmap::kARGB_8888_Config) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp
index 21731c4..f4d399b 100644
--- a/src/effects/SkBlurMaskFilter.cpp
+++ b/src/effects/SkBlurMaskFilter.cpp
@@ -195,10 +195,9 @@
     // FIXME: This code duplicates code in draw_rects_into_mask, below. Is there a
     // clean way to share more code?
     SkBitmap bitmap;
-    bitmap.setConfig(SkBitmap::kA8_Config,
-                     mask->fBounds.width(), mask->fBounds.height(),
-                     mask->fRowBytes);
-    bitmap.setPixels(mask->fImage);
+    bitmap.installPixels(SkImageInfo::MakeA8(mask->fBounds.width(),
+                                             mask->fBounds.height()),
+                         mask->fImage, mask->fRowBytes, NULL, NULL);
 
     SkCanvas canvas(bitmap);
     canvas.translate(-SkIntToScalar(mask->fBounds.left()),
@@ -216,10 +215,11 @@
     }
 
     SkBitmap bitmap;
-    bitmap.setConfig(SkBitmap::kA8_Config,
-                     mask->fBounds.width(), mask->fBounds.height(),
-                     mask->fRowBytes);
-    bitmap.setPixels(mask->fImage);
+    bitmap.installPixels(SkImageInfo::Make(mask->fBounds.width(),
+                                           mask->fBounds.height(),
+                                           kAlpha_8_SkColorType,
+                                           kPremul_SkAlphaType),
+                         mask->fImage, mask->fRowBytes, NULL, NULL);
 
     SkCanvas canvas(bitmap);
     canvas.translate(-SkIntToScalar(mask->fBounds.left()),
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index a563a6e..cffadb2 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -204,8 +204,8 @@
         (displInput && !displInput->filterImage(proxy, src, ctm, &displ, &displOffset))) {
         return false;
     }
-    if ((displ.config() != SkBitmap::kARGB_8888_Config) ||
-        (color.config() != SkBitmap::kARGB_8888_Config)) {
+    if ((displ.colorType() != kPMColor_SkColorType) ||
+        (color.colorType() != kPMColor_SkColorType)) {
         return false;
     }
 
diff --git a/src/effects/SkLayerRasterizer.cpp b/src/effects/SkLayerRasterizer.cpp
index 6381c4d..65ebd8a 100644
--- a/src/effects/SkLayerRasterizer.cpp
+++ b/src/effects/SkLayerRasterizer.cpp
@@ -122,8 +122,9 @@
         translatedMatrix.postTranslate(-SkIntToScalar(mask->fBounds.fLeft),
                                        -SkIntToScalar(mask->fBounds.fTop));
 
-        device.setConfig(SkBitmap::kA8_Config, mask->fBounds.width(), mask->fBounds.height(), mask->fRowBytes);
-        device.setPixels(mask->fImage);
+        device.installPixels(SkImageInfo::MakeA8(mask->fBounds.width(),
+                                                 mask->fBounds.height()),
+                             mask->fImage, mask->fRowBytes, NULL, NULL);
 
         draw.fBitmap    = &device;
         draw.fMatrix    = &drawMatrix;
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index f4f1ae1..f4d0ea2 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -933,7 +933,7 @@
         return false;
     }
 
-    if (src.config() != SkBitmap::kARGB_8888_Config) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
     SkAutoLockPixels alp(src);
@@ -1026,7 +1026,7 @@
         return false;
     }
 
-    if (src.config() != SkBitmap::kARGB_8888_Config) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
     SkAutoLockPixels alp(src);
diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp
index 2fed24d..4ab3fa1 100644
--- a/src/effects/SkMagnifierImageFilter.cpp
+++ b/src/effects/SkMagnifierImageFilter.cpp
@@ -282,11 +282,11 @@
 bool SkMagnifierImageFilter::onFilterImage(Proxy*, const SkBitmap& src,
                                            const SkMatrix&, SkBitmap* dst,
                                            SkIPoint* offset) const {
-    SkASSERT(src.config() == SkBitmap::kARGB_8888_Config);
+    SkASSERT(src.colorType() == kPMColor_SkColorType);
     SkASSERT(fSrcRect.width() < src.width());
     SkASSERT(fSrcRect.height() < src.height());
 
-    if ((src.config() != SkBitmap::kARGB_8888_Config) ||
+    if ((src.colorType() != kPMColor_SkColorType) ||
         (fSrcRect.width() >= src.width()) ||
         (fSrcRect.height() >= src.height())) {
       return false;
diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp
index 43ebc6c..79b8e27 100644
--- a/src/effects/SkMatrixConvolutionImageFilter.cpp
+++ b/src/effects/SkMatrixConvolutionImageFilter.cpp
@@ -260,7 +260,7 @@
         return false;
     }
 
-    if (src.config() != SkBitmap::kARGB_8888_Config) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index f2eeb2d..351042b 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -150,7 +150,7 @@
         return false;
     }
 
-    if (src.config() != SkBitmap::kARGB_8888_Config) {
+    if (src.colorType() != kPMColor_SkColorType) {
         return false;
     }
 
diff --git a/src/effects/SkTransparentShader.cpp b/src/effects/SkTransparentShader.cpp
index 1d7e808..9de4a0c 100644
--- a/src/effects/SkTransparentShader.cpp
+++ b/src/effects/SkTransparentShader.cpp
@@ -23,13 +23,13 @@
 uint32_t SkTransparentShader::getFlags() {
     uint32_t flags = this->INHERITED::getFlags();
 
-    switch (fDevice->config()) {
-        case SkBitmap::kRGB_565_Config:
+    switch (fDevice->colorType()) {
+        case kRGB_565_SkColorType:
             flags |= kHasSpan16_Flag;
             if (fAlpha == 255)
                 flags |= kOpaqueAlpha_Flag;
             break;
-        case SkBitmap::kARGB_8888_Config:
+        case kPMColor_SkColorType:
             if (fAlpha == 255 && fDevice->isOpaque())
                 flags |= kOpaqueAlpha_Flag;
             break;
@@ -42,8 +42,8 @@
 void SkTransparentShader::shadeSpan(int x, int y, SkPMColor span[], int count) {
     unsigned scale = SkAlpha255To256(fAlpha);
 
-    switch (fDevice->config()) {
-        case SkBitmap::kARGB_8888_Config:
+    switch (fDevice->colorType()) {
+        case kPMColor_SkColorType:
             if (scale == 256) {
                 SkPMColor* src = fDevice->getAddr32(x, y);
                 if (src != span) {
@@ -56,7 +56,7 @@
                 }
             }
             break;
-        case SkBitmap::kRGB_565_Config: {
+        case kRGB_565_SkColorType: {
             const uint16_t* src = fDevice->getAddr16(x, y);
             if (scale == 256) {
                 for (int i = count - 1; i >= 0; --i) {
@@ -78,10 +78,7 @@
             }
             break;
         }
-        case SkBitmap::kIndex8_Config:
-            SkDEBUGFAIL("index8 not supported as a destination device");
-            break;
-        case SkBitmap::kA8_Config: {
+        case kAlpha_8_SkColorType: {
             const uint8_t* src = fDevice->getAddr8(x, y);
             if (scale == 256) {
                 for (int i = count - 1; i >= 0; --i) {
@@ -94,13 +91,14 @@
             }
             break;
         }
-        default:    // to avoid warnings
+        default:
+            SkDEBUGFAIL("colorType not supported as a destination device");
             break;
     }
 }
 
 void SkTransparentShader::shadeSpan16(int x, int y, uint16_t span[], int count) {
-    SkASSERT(fDevice->config() == SkBitmap::kRGB_565_Config);
+    SkASSERT(fDevice->colorType() == kRGB_565_SkColorType);
 
     uint16_t* src = fDevice->getAddr16(x, y);
     if (src != span) {
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
index 1da259a..5b0b9c7 100644
--- a/src/effects/gradients/SkGradientShader.cpp
+++ b/src/effects/gradients/SkGradientShader.cpp
@@ -583,7 +583,7 @@
     if (fMapper) {
         // force our cahce32pixelref to be built
         (void)this->getCache32();
-        bitmap->setConfig(SkBitmap::kARGB_8888_Config, kCache32Count, 1);
+        bitmap->setConfig(SkImageInfo::MakeN32Premul(kCache32Count, 1));
         bitmap->setPixelRef(fCache32PixelRef);
         return;
     }
@@ -624,7 +624,7 @@
     if (!gCache->find(storage.get(), size, bitmap)) {
         // force our cahce32pixelref to be built
         (void)this->getCache32();
-        bitmap->setConfig(SkBitmap::kARGB_8888_Config, kCache32Count, 1);
+        bitmap->setConfig(SkImageInfo::MakeN32Premul(kCache32Count, 1));
         bitmap->setPixelRef(fCache32PixelRef);
 
         gCache->add(storage.get(), size, *bitmap);
@@ -1043,7 +1043,7 @@
         desc.fHeight = 32;
         desc.fRowHeight = bitmap.height();
         desc.fContext = ctx;
-        desc.fConfig = SkBitmapConfig2GrPixelConfig(bitmap.config());
+        desc.fConfig = SkImageInfo2GrPixelConfig(bitmap.colorType(), bitmap.alphaType());
         fAtlas = GrTextureStripAtlas::GetAtlas(desc);
         SkASSERT(NULL != fAtlas);
 
diff --git a/src/utils/SkCanvasStateUtils.cpp b/src/utils/SkCanvasStateUtils.cpp
index 77b0e20..4b8868b 100644
--- a/src/utils/SkCanvasStateUtils.cpp
+++ b/src/utils/SkCanvasStateUtils.cpp
@@ -221,11 +221,11 @@
         layerState->width = bitmap.width();
         layerState->height = bitmap.height();
 
-        switch (bitmap.config()) {
-            case SkBitmap::kARGB_8888_Config:
+        switch (bitmap.colorType()) {
+            case kPMColor_SkColorType:
                 layerState->raster.config = kARGB_8888_RasterConfig;
                 break;
-            case SkBitmap::kRGB_565_Config:
+            case kRGB_565_SkColorType:
                 layerState->raster.config = kRGB_565_RasterConfig;
                 break;
             default:
@@ -279,25 +279,24 @@
     SkASSERT(kRaster_CanvasBackend == layerState.type);
 
     SkBitmap bitmap;
-    SkBitmap::Config config =
-        layerState.raster.config == kARGB_8888_RasterConfig ? SkBitmap::kARGB_8888_Config :
-        layerState.raster.config == kRGB_565_RasterConfig ? SkBitmap::kRGB_565_Config :
-        SkBitmap::kNo_Config;
+    SkColorType colorType =
+        layerState.raster.config == kARGB_8888_RasterConfig ? kPMColor_SkColorType :
+        layerState.raster.config == kRGB_565_RasterConfig ? kRGB_565_SkColorType :
+        kUnknown_SkColorType;
 
-    if (config == SkBitmap::kNo_Config) {
+    if (colorType == kUnknown_SkColorType) {
         return NULL;
     }
 
-    bitmap.setConfig(config, layerState.width, layerState.height,
-                     layerState.raster.rowBytes);
-    bitmap.setPixels(layerState.raster.pixels);
+    bitmap.installPixels(SkImageInfo::Make(layerState.width, layerState.height,
+                                           colorType, kPremul_SkAlphaType),
+                         layerState.raster.pixels, layerState.raster.rowBytes,
+                         NULL, NULL);
 
     SkASSERT(!bitmap.empty());
     SkASSERT(!bitmap.isNull());
 
-    // create a device & canvas
-    SkAutoTUnref<SkBitmapDevice> device(SkNEW_ARGS(SkBitmapDevice, (bitmap)));
-    SkAutoTUnref<SkCanvas> canvas(SkNEW_ARGS(SkCanvas, (device.get())));
+    SkAutoTUnref<SkCanvas> canvas(SkNEW_ARGS(SkCanvas, (bitmap)));
 
     // setup the matrix and clip
     setup_canvas_from_MC_state(layerState.mcState, canvas.get());
diff --git a/src/utils/mac/SkCreateCGImageRef.cpp b/src/utils/mac/SkCreateCGImageRef.cpp
index 1b52ba3..01f2dac 100644
--- a/src/utils/mac/SkCreateCGImageRef.cpp
+++ b/src/utils/mac/SkCreateCGImageRef.cpp
@@ -22,13 +22,19 @@
         *upscaleTo32 = false;
     }
 
-    switch (bm.config()) {
-        case SkBitmap::kRGB_565_Config:
+    switch (bm.colorType()) {
+        case kRGB_565_SkColorType:
+#if 0
+            // doesn't see quite right. Are they thinking 1555?
+            *bitsPerComponent = 5;
+            *info = kCGBitmapByteOrder16Little | kCGImageAlphaNone;
+            break;
+#endif
             if (upscaleTo32) {
                 *upscaleTo32 = true;
             }
             // fall through
-        case SkBitmap::kARGB_8888_Config:
+        case kPMColor_SkColorType:
             *bitsPerComponent = 8;
 #if SK_PMCOLOR_BYTE_ORDER(R,G,B,A)
             *info = kCGBitmapByteOrder32Big;
@@ -60,14 +66,7 @@
             }
 #endif
             break;
-#if 0
-        case SkBitmap::kRGB_565_Config:
-            // doesn't see quite right. Are they thinking 1555?
-            *bitsPerComponent = 5;
-            *info = kCGBitmapByteOrder16Little | kCGImageAlphaNone;
-            break;
-#endif
-        case SkBitmap::kARGB_4444_Config:
+        case kARGB_4444_SkColorType:
             *bitsPerComponent = 4;
             *info = kCGBitmapByteOrder16Little;
             if (bm.isOpaque()) {
diff --git a/src/views/SkWidgets.cpp b/src/views/SkWidgets.cpp
index e4547ec..fb16f1e 100644
--- a/src/views/SkWidgets.cpp
+++ b/src/views/SkWidgets.cpp
@@ -507,7 +507,7 @@
 {
     if (bitmap)
         *bitmap = fBitmap;
-    return fBitmap.getConfig() != SkBitmap::kNo_Config;
+    return fBitmap.colorType() != kUnknown_SkColorType;
 }
 
 void SkBitmapView::setBitmap(const SkBitmap* bitmap, bool viewOwnsPixels)
@@ -534,7 +534,7 @@
 
 void SkBitmapView::onDraw(SkCanvas* canvas)
 {
-    if (fBitmap.getConfig() != SkBitmap::kNo_Config &&
+    if (fBitmap.colorType() != kUnknown_SkColorType &&
         fBitmap.width() && fBitmap.height())
     {
         SkAutoCanvasRestore    restore(canvas, true);
diff --git a/src/views/SkWindow.cpp b/src/views/SkWindow.cpp
index 5451fca..cca291a 100644
--- a/src/views/SkWindow.cpp
+++ b/src/views/SkWindow.cpp
@@ -51,9 +51,9 @@
     fWaitingOnInval = false;
 
 #ifdef SK_BUILD_FOR_WINCE
-    fConfig = SkBitmap::kRGB_565_Config;
+    fColorType = kRGB_565_SkColorType;
 #else
-    fConfig = SkBitmap::kARGB_8888_Config;
+    fColorType = kPMColor_SkColorType;
 #endif
 
     fMatrix.reset();
@@ -87,18 +87,18 @@
     this->setMatrix(m);
 }
 
-void SkWindow::setConfig(SkBitmap::Config config) {
-    this->resize(fBitmap.width(), fBitmap.height(), config);
+void SkWindow::setColorType(SkColorType ct) {
+    this->resize(fBitmap.width(), fBitmap.height(), ct);
 }
 
-void SkWindow::resize(int width, int height, SkBitmap::Config config) {
-    if (config == SkBitmap::kNo_Config)
-        config = fConfig;
+void SkWindow::resize(int width, int height, SkColorType ct) {
+    if (ct == kUnknown_SkColorType)
+        ct = fColorType;
 
-    if (width != fBitmap.width() || height != fBitmap.height() || config != fConfig) {
-        fConfig = config;
-        fBitmap.setConfig(config, width, height, 0, kOpaque_SkAlphaType);
-        fBitmap.allocPixels();
+    if (width != fBitmap.width() || height != fBitmap.height() || ct != fColorType) {
+        fColorType = ct;
+        fBitmap.allocPixels(SkImageInfo::Make(width, height,
+                                              ct, kPremul_SkAlphaType));
 
         this->setSize(SkIntToScalar(width), SkIntToScalar(height));
         this->inval(NULL);
diff --git a/src/views/mac/SkNSView.mm b/src/views/mac/SkNSView.mm
index 209aeca..1014ffe 100644
--- a/src/views/mac/SkNSView.mm
+++ b/src/views/mac/SkNSView.mm
@@ -57,7 +57,7 @@
         size = [self convertSizeToBacking:self.frame.size];
 #endif
         fWind->resize((int) size.width, (int) size.height,
-                      SkBitmap::kARGB_8888_Config);
+                      kPMColor_SkColorType);
     }
 }