diff options
author | 2011-06-17 13:10:25 +0000 | |
---|---|---|
committer | 2011-06-17 13:10:25 +0000 | |
commit | e97f0856a8044866b12527819d14cdfbcdfd96f2 (patch) | |
tree | d0273fcd80930ebfbb0e2640dd6d0adf3bbbf632 /include/core/SkDevice.h | |
parent | a54e2f61f8d181b95dd1757d405eacf9f6a9d792 (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.h | 39 |
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; |