diff options
Diffstat (limited to 'include/core')
-rw-r--r-- | include/core/SkBitmapDevice.h | 8 | ||||
-rw-r--r-- | include/core/SkCanvas.h | 3 | ||||
-rw-r--r-- | include/core/SkDevice.h | 48 |
3 files changed, 29 insertions, 30 deletions
diff --git a/include/core/SkBitmapDevice.h b/include/core/SkBitmapDevice.h index caff6857da..8ca6a523be 100644 --- a/include/core/SkBitmapDevice.h +++ b/include/core/SkBitmapDevice.h @@ -98,7 +98,11 @@ protected: const SkColor colors[], SkXfermode* xmode, const uint16_t indices[], int indexCount, const SkPaint& paint) SK_OVERRIDE; - virtual void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, const SkPaint&) SK_OVERRIDE; + /** The SkBaseDevice passed will be an SkBaseDevice which was returned by a call to + onCreateCompatibleDevice on this device with kSaveLayer_Usage. + */ + virtual void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, + const SkPaint&) SK_OVERRIDE; /////////////////////////////////////////////////////////////////////////// @@ -141,7 +145,7 @@ private: // any clip information. void replaceBitmapBackendForRasterSurface(const SkBitmap&) SK_OVERRIDE; - SkBaseDevice* onCreateDevice(const CreateInfo&, const SkPaint*) SK_OVERRIDE; + SkBaseDevice* onCreateCompatibleDevice(const CreateInfo&) SK_OVERRIDE; SkSurface* newSurface(const SkImageInfo&, const SkSurfaceProps&) SK_OVERRIDE; const void* peekPixels(SkImageInfo*, size_t* rowBytes) SK_OVERRIDE; diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h index 836f7b1115..74bf909c21 100644 --- a/include/core/SkCanvas.h +++ b/include/core/SkCanvas.h @@ -1321,7 +1321,8 @@ private: void internalDrawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, const SkRect& dst, const SkPaint* paint); void internalDrawPaint(const SkPaint& paint); - void internalSaveLayer(const SkRect* bounds, const SkPaint*, SaveFlags, SaveLayerStrategy); + void internalSaveLayer(const SkRect* bounds, const SkPaint* paint, + SaveFlags, bool justForImageFilter, SaveLayerStrategy strategy); void internalDrawDevice(SkBaseDevice*, int x, int y, const SkPaint*); // shared by save() and saveLayer() diff --git a/include/core/SkDevice.h b/include/core/SkDevice.h index 684a08404c..c7c5c30b3a 100644 --- a/include/core/SkDevice.h +++ b/include/core/SkDevice.h @@ -125,9 +125,10 @@ public: }; protected: - enum TileUsage { - kPossible_TileUsage, //!< the created device may be drawn tiled - kNever_TileUsage, //!< the created device will never be drawn tiled + enum Usage { + kGeneral_Usage, + kSaveLayer_Usage, // <! internal use only + kImageFilter_Usage // <! internal use only }; struct TextFlags { @@ -230,7 +231,7 @@ protected: virtual void drawPatch(const SkDraw&, const SkPoint cubics[12], const SkColor colors[4], const SkPoint texCoords[4], SkXfermode* xmode, const SkPaint& paint); /** The SkDevice passed will be an SkDevice which was returned by a call to - onCreateDevice on this device with kNeverTile_TileExpectation. + onCreateCompatibleDevice on this device with kSaveLayer_Usage. */ virtual void drawDevice(const SkDraw&, SkBaseDevice*, int x, int y, const SkPaint&) = 0; @@ -254,6 +255,14 @@ protected: virtual void unlockPixels() {} /** + * Returns true if the device allows processing of this imagefilter. If + * false is returned, then the filter is ignored. This may happen for + * some subclasses that do not support pixel manipulations after drawing + * has occurred (e.g. printing). The default implementation returns true. + */ + virtual bool allowImageFilter(const SkImageFilter*) { return true; } + + /** * Override and return true for filters that the device can handle * intrinsically. Doing so means that SkCanvas will pass-through this * filter to drawSprite and drawDevice (and potentially filterImage). @@ -327,39 +336,24 @@ protected: const SkPaint*); struct CreateInfo { - static SkPixelGeometry AdjustGeometry(const SkImageInfo&, TileUsage, SkPixelGeometry); + static SkPixelGeometry AdjustGeometry(const SkImageInfo&, Usage, SkPixelGeometry geo); - // The constructor may change the pixel geometry based on other parameters. - CreateInfo(const SkImageInfo& info, TileUsage tileUsage, SkPixelGeometry geo) + // The construct may change the pixel geometry based on usage as needed. + CreateInfo(const SkImageInfo& info, Usage usage, SkPixelGeometry geo) : fInfo(info) - , fTileUsage(tileUsage) - , fPixelGeometry(AdjustGeometry(info, tileUsage, geo)) + , fUsage(usage) + , fPixelGeometry(AdjustGeometry(info, usage, geo)) {} - const SkImageInfo fInfo; - const TileUsage fTileUsage; - const SkPixelGeometry fPixelGeometry; + const SkImageInfo fInfo; + const Usage fUsage; + const SkPixelGeometry fPixelGeometry; }; -#ifdef SK_SUPPORT_LEGACY_ONCREATECOMPATIBLEDEVICE - // legacy method name -- please override onCreateDevice instead virtual SkBaseDevice* onCreateCompatibleDevice(const CreateInfo&) { return NULL; } - virtual SkBaseDevice* onCreateDevice(const CreateInfo& cinfo, const SkPaint* layerPaint) { - return this->onCreateCompatibleDevice(cinfo); - } -#else - /** - * Create a new device based on CreateInfo. If the paint is not null, then it represents a - * preview of how the new device will be composed with its creator device (this). - */ - virtual SkBaseDevice* onCreateDevice(const CreateInfo&, const SkPaint*) { - return NULL; - } -#endif - virtual void initForRootLayer(SkPixelGeometry geo); private: |