retool so we don't need to call SkCanvas::setDevice
Review URL: https://codereview.appspot.com/6591054

git-svn-id: http://skia.googlecode.com/svn/trunk@5759 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index a98f2fc..c55a5c0 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -257,9 +257,8 @@
         fBackend = kNone_BackEndType;
     }
 
-    virtual bool prepareCanvas(SampleWindow::DeviceType dType,
-                               SkCanvas* canvas,
-                               SampleWindow* win) {
+    virtual SkCanvas* createCanvas(SampleWindow::DeviceType dType,
+                                   SampleWindow* win) {
         switch (dType) {
             case kRaster_DeviceType:
                 // fallthrough
@@ -273,18 +272,19 @@
             case kGPU_DeviceType:
             case kNullGPU_DeviceType:
                 if (fCurContext) {
-                    canvas->setDevice(new SkGpuDevice(fCurContext,
-                                                    fCurRenderTarget))->unref();
+                    SkAutoTUnref<SkDevice> device(new SkGpuDevice(fCurContext,
+                                                                  fCurRenderTarget));
+                    return new SkCanvas(device);
                 } else {
-                    return false;
+                    return NULL;
                 }
                 break;
 #endif
             default:
                 SkASSERT(false);
-                return false;
+                return NULL;
         }
-        return true;
+        return NULL;
     }
 
     virtual void publishCanvas(SampleWindow::DeviceType dType,
@@ -1035,9 +1035,6 @@
 #define YCLIP_N  8
 
 void SampleWindow::draw(SkCanvas* canvas) {
-    if (!fDevManager->prepareCanvas(fDeviceType, canvas, this)) {
-        return;
-    }
     // update the animation time
     if (!gAnimTimePrev && !gAnimTime) {
         // first time make delta be 0
diff --git a/samplecode/SampleApp.h b/samplecode/SampleApp.h
index abd8ac7..85392e0 100644
--- a/samplecode/SampleApp.h
+++ b/samplecode/SampleApp.h
@@ -58,9 +58,7 @@
 
         // called before drawing. should install correct device
         // type on the canvas. Will skip drawing if returns false.
-        virtual bool prepareCanvas(DeviceType dType,
-                                   SkCanvas* canvas,
-                                   SampleWindow* win) = 0;
+        virtual SkCanvas* createCanvas(DeviceType dType, SampleWindow* win) = 0;
 
         // called after drawing, should get the results onto the
         // screen.
@@ -84,6 +82,17 @@
     SampleWindow(void* hwnd, int argc, char** argv, DeviceManager*);
     virtual ~SampleWindow();
 
+    virtual SkCanvas* createCanvas() SK_OVERRIDE {
+        SkCanvas* canvas = NULL;
+        if (fDevManager) {
+            canvas = fDevManager->createCanvas(fDeviceType, this);
+        }
+        if (NULL == canvas) {
+            canvas = this->INHERITED::createCanvas();
+        }
+        return canvas;
+    }
+
     virtual void draw(SkCanvas* canvas);
 
     void setDeviceType(DeviceType type);