aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/core/SkDevice.h
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-06-17 13:10:25 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-06-17 13:10:25 +0000
commite97f0856a8044866b12527819d14cdfbcdfd96f2 (patch)
treed0273fcd80930ebfbb0e2640dd6d0adf3bbbf632 /include/core/SkDevice.h
parenta54e2f61f8d181b95dd1757d405eacf9f6a9d792 (diff)
Add createNewCompatibleDevice. Allow devices to have a NULL factory and saveLayer will fall back on createNewCompatibleDevice.
Review URL: http://codereview.appspot.com/4633044/ git-svn-id: http://skia.googlecode.com/svn/trunk@1625 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'include/core/SkDevice.h')
-rw-r--r--include/core/SkDevice.h39
1 files changed, 38 insertions, 1 deletions
diff --git a/include/core/SkDevice.h b/include/core/SkDevice.h
index ff9c4d1361..59e95e7fdf 100644
--- a/include/core/SkDevice.h
+++ b/include/core/SkDevice.h
@@ -32,6 +32,8 @@ class SkRegion;
/** \class SkDeviceFactory
+ DEPRECATED: Will be replaced by SkDevice::createCompatibleDevice
+
Devices that extend SkDevice should also provide a SkDeviceFactory class
to pass into SkCanvas. Doing so will eliminate the need to extend
SkCanvas as well.
@@ -79,12 +81,27 @@ public:
virtual ~SkDevice();
/**
+ * DEPRECATED: Will be replaced by SkDevice::createCompatibleDevice
+ *
* Return the factory that will create this subclass of SkDevice.
* The returned factory is cached by the device, and so its reference count
* is not changed by this call.
*/
SkDeviceFactory* getDeviceFactory();
+ /**
+ * Creates a device that is of the same type as this device (e.g. SW-raster,
+ * GPU, or PDF).
+ *
+ * @param width width of the device to create
+ * @param height height of the device to create
+ * @param isOpaque
+ * @param usage clients should always use the default, kGeneral_Usage.
+ */
+ SkDevice* createCompatibleDevice(SkBitmap::Config config,
+ int width, int height,
+ bool isOpaque);
+
enum Capabilities {
kGL_Capability = 0x1, //!< mask indicating GL support
kVector_Capability = 0x2, //!< mask indicating a vector representation
@@ -264,9 +281,13 @@ public:
protected:
/**
- * subclasses must override this to return a new (or ref'd) instance of
+ * DEPRECATED: Will be replaced by SkDevice::createCompatibleDevice
+ *
+ * subclasses can override this to return a new (or ref'd) instance of
* a device factory that will create this subclass of device. This value
* is cached, so it should get called at most once for a given instance.
+ *
+ * If not overriden then createCompatibleDevice will be used by canvas.
*/
virtual SkDeviceFactory* onNewDeviceFactory();
@@ -276,6 +297,18 @@ protected:
*/
virtual void onAccessBitmap(SkBitmap*);
+ enum Usage {
+ kGeneral_Usage,
+ kSaveLayer_Usage, // <! internal use only
+ };
+ /**
+ * subclasses should override this to implement createCompatibleDevice.
+ */
+ virtual SkDevice* onCreateCompatibleDevice(SkBitmap::Config config,
+ int width, int height,
+ bool isOpaque,
+ Usage usage);
+
SkPixelRef* getPixelRef() const { return fBitmap.pixelRef(); }
// just for subclasses, to assign a custom pixelref
SkPixelRef* setPixelRef(SkPixelRef* pr, size_t offset) {
@@ -287,6 +320,10 @@ private:
friend class SkCanvas;
// just called by SkCanvas when built as a layer
void setOrigin(int x, int y) { fOrigin.set(x, y); }
+ // just called by SkCanvas for saveLayer
+ SkDevice* createCompatibleDeviceForSaveLayer(SkBitmap::Config config,
+ int width, int height,
+ bool isOpaque);
SkBitmap fBitmap;
SkIPoint fOrigin;