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);