remove SkDeviceFactory from the collective consciousness, now that devices know
how to create compatible siblings.



git-svn-id: http://skia.googlecode.com/svn/trunk@1808 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index d5a2d15..3c17351 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -419,17 +419,10 @@
     return this->setDevice(device);
 }
 
-SkCanvas::SkCanvas(SkDeviceFactory* factory)
-        : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) {
+SkCanvas::SkCanvas()
+: fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) {
     inc_canvas();
-
-    if (factory) {
-        factory->ref();
-    } else {
-        factory = SkNEW(SkRasterDeviceFactory);
-    }
-    fDeviceFactory = factory;
-
+    
     this->init(NULL);
 }
 
@@ -437,9 +430,6 @@
         : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) {
     inc_canvas();
 
-    fDeviceFactory = device->getDeviceFactory();
-    SkSafeRef(fDeviceFactory);
-
     this->init(device);
 }
 
@@ -447,11 +437,7 @@
         : fMCStack(sizeof(MCRec), fMCRecStorage, sizeof(fMCRecStorage)) {
     inc_canvas();
 
-    SkDevice* device = SkNEW_ARGS(SkDevice, (bitmap));
-    fDeviceFactory = device->getDeviceFactory();
-    SkSafeRef(fDeviceFactory);
-
-    this->init(device)->unref();
+    this->init(SkNEW_ARGS(SkDevice, (bitmap)))->unref();
 }
 
 SkCanvas::~SkCanvas() {
@@ -460,7 +446,6 @@
     this->internalRestore();    // restore the last, since we're going away
 
     SkSafeUnref(fBounder);
-    SkSafeUnref(fDeviceFactory);
 
     dec_canvas();
 }
@@ -508,10 +493,6 @@
        things like lock/unlock their pixels, etc.
     */
     if (device) {
-        // To mirror our (SkDevice*) constructor, we grab the factory from the
-        // new device
-        this->setDeviceFactory(device->getDeviceFactory());
-
         device->lockPixels();
     }
     if (rootDevice) {
@@ -573,11 +554,6 @@
     return device->readPixels(srcRect, bitmap);
 }
 
-SkDeviceFactory* SkCanvas::setDeviceFactory(SkDeviceFactory* factory) {
-    SkRefCnt_SafeAssign(fDeviceFactory, factory);
-    return factory;
-}
-
 //////////////////////////////////////////////////////////////////////////////
 
 bool SkCanvas::readPixels(SkBitmap* bitmap) {
@@ -1185,13 +1161,12 @@
 SkDevice* SkCanvas::createLayerDevice(SkBitmap::Config config,
                                       int width, int height,
                                       bool isOpaque) {
-    if (fDeviceFactory) {
-        return fDeviceFactory->newDevice(this, config, width, height,
-                                         isOpaque, true);
+    SkDevice* device = this->getDevice();
+    if (device) {
+        return device->createCompatibleDeviceForSaveLayer(config, width, height,
+                                                          isOpaque);
     } else {
-        return this->getDevice()->createCompatibleDeviceForSaveLayer(
-                                config, width, height,
-                                isOpaque);
+        return NULL;
     }
 }
 
@@ -1200,8 +1175,7 @@
                                            bool isOpaque) {
     SkDevice* device = this->getDevice();
     if (device) {
-        return device->createCompatibleDevice(config, width, height,
-                                              isOpaque);
+        return device->createCompatibleDevice(config, width, height, isOpaque);
     } else {
         return NULL;
     }
diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp
index ae283b0..78b2dcc 100644
--- a/src/core/SkDevice.cpp
+++ b/src/core/SkDevice.cpp
@@ -3,45 +3,16 @@
 #include "SkMetaData.h"
 #include "SkRect.h"
 
-//#define TRACE_FACTORY_LIFETIME
-
-#ifdef TRACE_FACTORY_LIFETIME
-    static int gFactoryCounter;
-#endif
-
-SkDeviceFactory::SkDeviceFactory() {
-#ifdef TRACE_FACTORY_LIFETIME
-    SkDebugf("+++ factory index %d\n", gFactoryCounter);
-    ++gFactoryCounter;
-#endif
-}
-
-SkDeviceFactory::~SkDeviceFactory() {
-#ifdef TRACE_FACTORY_LIFETIME
-    --gFactoryCounter;
-    SkDebugf("--- factory index %d\n", gFactoryCounter);
-#endif
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 
-#if 0
-SkDevice::SkDevice() : fMetaData(NULL) {
-    fOrigin.setZero();
-    fCachedDeviceFactory = NULL;
-}
-#endif
-
 SkDevice::SkDevice(const SkBitmap& bitmap) : fBitmap(bitmap) {
     fOrigin.setZero();
     fMetaData = NULL;
-    fCachedDeviceFactory = NULL;
 }
 
 SkDevice::SkDevice(SkBitmap::Config config, int width, int height, bool isOpaque) {
     fOrigin.setZero();
     fMetaData = NULL;
-    fCachedDeviceFactory = NULL;
 
     fBitmap.setConfig(config, width, height);
     fBitmap.allocPixels();
@@ -53,18 +24,6 @@
 
 SkDevice::~SkDevice() {
     delete fMetaData;
-    SkSafeUnref(fCachedDeviceFactory);
-}
-
-SkDeviceFactory* SkDevice::onNewDeviceFactory() {
-    return NULL;
-}
-
-SkDeviceFactory* SkDevice::getDeviceFactory() {
-    if (NULL == fCachedDeviceFactory) {
-        fCachedDeviceFactory = this->onNewDeviceFactory();
-    }
-    return fCachedDeviceFactory;
 }
 
 SkDevice* SkDevice::createCompatibleDevice(SkBitmap::Config config, 
@@ -278,19 +237,3 @@
     return false;
 }
 
-///////////////////////////////////////////////////////////////////////////////
-
-SkDevice* SkRasterDeviceFactory::newDevice(SkCanvas*,
-                                           SkBitmap::Config config, int width,
-                                           int height, bool isOpaque,
-                                           bool isForLayer) {
-    if (isForLayer) {
-        return SkNEW_ARGS(SkDevice, (config, width, height, isOpaque));
-    } else {
-        // should we ever get here?
-        SkBitmap bitmap;
-        bitmap.setConfig(config, width, height);
-        bitmap.setIsOpaque(isOpaque);
-        return SkNEW_ARGS(SkDevice, (bitmap));
-    }
-}
diff --git a/src/gpu/SkGpuCanvas.cpp b/src/gpu/SkGpuCanvas.cpp
index 08cbb32..a3bbea8 100644
--- a/src/gpu/SkGpuCanvas.cpp
+++ b/src/gpu/SkGpuCanvas.cpp
@@ -19,18 +19,15 @@
 
 #include "SkGpuCanvas.h"
 #include "SkGpuDevice.h"
-#include "SkGpuDeviceFactory.h"
 
 ///////////////////////////////////////////////////////////////////////////////
 
 SkGpuCanvas::SkGpuCanvas(GrContext* context, GrRenderTarget* renderTarget) {
-    SkDeviceFactory* factory = SkNEW_ARGS(SkGpuDeviceFactory,
-                                          (context, renderTarget));
-    this->setDeviceFactory(factory)->unref();
-
     SkASSERT(context);
     fContext = context;
     fContext->ref();
+
+    this->setDevice(new SkGpuDevice(context, renderTarget))->unref();
 }
 
 SkGpuCanvas::~SkGpuCanvas() {
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index a49e079..0f18726 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -19,7 +19,6 @@
 #include "GrTextContext.h"
 
 #include "SkGpuDevice.h"
-#include "SkGpuDeviceFactory.h"
 #include "SkGrTexturePixelRef.h"
 
 #include "SkColorFilter.h"
@@ -47,6 +46,7 @@
     kShaderTextureIdx = 0
 };
 
+
 ///////////////////////////////////////////////////////////////////////////////
 
 SkGpuDevice::SkAutoCachedTexture::
@@ -1494,58 +1494,3 @@
                                    width, height, usage));
 }
 
-
-///////////////////////////////////////////////////////////////////////////////
-
-SkGpuDeviceFactory::SkGpuDeviceFactory(GrContext* context,
-                                       GrRenderTarget* rootRenderTarget) {
-    GrAssert(NULL != context);
-    GrAssert(NULL != rootRenderTarget);
-
-    // check this now rather than passing this value to SkGpuDevice cons.
-    // we want the rt that is bound *now* in the 3D API, not the one
-    // at the time of newDevice.
-    if (SkGpuDevice::Current3DApiRenderTarget() == rootRenderTarget) {
-        fRootRenderTarget = context->createRenderTargetFrom3DApiState();
-    } else {
-        fRootRenderTarget = rootRenderTarget;
-        rootRenderTarget->ref();
-    }
-
-    fContext = context;
-    context->ref();
-
-    fRootTexture = NULL;
-}
-
-SkGpuDeviceFactory::SkGpuDeviceFactory(GrContext* context, GrTexture* rootRenderTargetTexture) {
-    GrAssert(NULL != context);
-    GrAssert(NULL != rootRenderTargetTexture);
-    GrAssert(NULL != rootRenderTargetTexture->asRenderTarget());
-
-    fRootTexture = rootRenderTargetTexture;
-    rootRenderTargetTexture->ref();
-
-    fRootRenderTarget = rootRenderTargetTexture->asRenderTarget();
-    fRootRenderTarget->ref();
-
-    fContext = context;
-    context->ref();
-}
-
-SkGpuDeviceFactory::~SkGpuDeviceFactory() {
-    fContext->unref();
-    fRootRenderTarget->unref();
-    GrSafeUnref(fRootTexture);
-}
-
-SkDevice* SkGpuDeviceFactory::newDevice(SkCanvas*, SkBitmap::Config config,
-                                        int width, int height,
-                                        bool isOpaque, bool isLayer) {
-    if (isLayer) {
-        return SkNEW_ARGS(SkGpuDevice, (fContext, config, width, height));
-    } else {
-        return SkNEW_ARGS(SkGpuDevice, (fContext, fRootRenderTarget));
-    }
-}
-
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 0da237d..3eb2ee8 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -487,20 +487,6 @@
 
 ////////////////////////////////////////////////////////////////////////////////
 
-SkDevice* SkPDFDeviceFactory::newDevice(SkCanvas* c, SkBitmap::Config config,
-                                        int width, int height, bool isOpaque,
-                                        bool isForLayer) {
-    SkMatrix initialTransform;
-    initialTransform.reset();
-    SkISize size = SkISize::Make(width, height);
-    if (isForLayer) {
-        return SkNEW_ARGS(SkPDFDevice, (size, c->getTotalClipStack(),
-                                        c->getTotalClip()));
-    } else {
-        return SkNEW_ARGS(SkPDFDevice, (size, size, initialTransform));
-    }
-}
-
 static inline SkBitmap makeContentBitmap(const SkISize& contentSize,
                                          const SkMatrix* initialTransform) {
     SkBitmap bitmap;
@@ -565,10 +551,6 @@
     fLastContentEntry = NULL;
 }
 
-SkDeviceFactory* SkPDFDevice::onNewDeviceFactory() {
-    return SkNEW(SkPDFDeviceFactory);
-}
-
 void SkPDFDevice::cleanUp() {
     fGraphicStateResources.unrefAll();
     fXObjectResources.unrefAll();