Changing SkDeferredCanvas to use factories for creation
The objective of this change is to remove all calls to
SkCanvas::setDevice. The factory API is hidden behind
a build flag in order to ease the roll into chromium.
A side-effect of the factory pattern is that it will
no longer be possible to allocate a SkDeferredCanvas on
the stack. This changes nothing for chrome, but it
impacts skia test programs.
Review URL: https://codereview.chromium.org/16040002
git-svn-id: http://skia.googlecode.com/svn/trunk@9298 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/utils/SkDeferredCanvas.h b/include/utils/SkDeferredCanvas.h
index bef26c0..f961605 100644
--- a/include/utils/SkDeferredCanvas.h
+++ b/include/utils/SkDeferredCanvas.h
@@ -15,6 +15,11 @@
class SkImage;
class SkSurface;
+#if !defined(SK_DEFERRED_CANVAS_USES_FACTORIES)
+// This is temporary, for rolling the API change into Chromium/Blink
+#define SK_DEFERRED_CANVAS_USES_FACTORIES 0
+#endif
+
/** \class SkDeferredCanvas
Subclass of SkCanvas that encapsulates an SkPicture or SkGPipe for deferred
drawing. The main difference between this class and SkPictureRecord (the
@@ -27,23 +32,39 @@
public:
class NotificationClient;
+ /** Construct a canvas with the specified surface to draw into.
+ This factory must be used for newImageSnapshot to work.
+ @param surface Specifies a surface for the canvas to draw into.
+ */
+ static SkDeferredCanvas* Create(SkSurface* surface);
+
+#ifdef SK_DEVELOPER
+ static SkDeferredCanvas* Create(SkDevice* device); // Used for testing
+#endif
+
+#if !SK_DEFERRED_CANVAS_USES_FACTORIES
+ /** DEPRECATED
+ */
SkDeferredCanvas();
- /** Construct a canvas with the specified device to draw into.
+ /** DEPRACATED, use create instead
+ Construct a canvas with the specified device to draw into.
Equivalent to calling default constructor, then setDevice.
@param device Specifies a device for the canvas to draw into.
*/
explicit SkDeferredCanvas(SkDevice* device);
- /** Construct a canvas with the specified surface to draw into.
+ /** DEPRECATED, use create instead
+ Construct a canvas with the specified surface to draw into.
This constructor must be used for newImageSnapshot to work.
@param surface Specifies a surface for the canvas to draw into.
*/
explicit SkDeferredCanvas(SkSurface* surface);
+#endif
virtual ~SkDeferredCanvas();
- /**
+ /** DEPRECATED
* Specify a device to be used by this canvas. Calling setDevice will
* release the previously set device, if any. Takes a reference on the
* device.
@@ -254,6 +275,8 @@
DeferredDevice* getDeferredDevice() const;
private:
+ SkDeferredCanvas(DeferredDevice*);
+
void recordedDrawCommand();
SkCanvas* drawingCanvas() const;
SkCanvas* immediateCanvas() const;