diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/core/SkImageFilter.h | 33 | ||||
-rw-r--r-- | include/core/SkPaint.h | 5 |
2 files changed, 33 insertions, 5 deletions
diff --git a/include/core/SkImageFilter.h b/include/core/SkImageFilter.h index 945e69f7eb..c59b2cdb53 100644 --- a/include/core/SkImageFilter.h +++ b/include/core/SkImageFilter.h @@ -10,7 +10,22 @@ #include "SkFlattenable.h" -class SkImageFilter : public SkFlattenable { +class SkBitmap; +class SkMatrix; +struct SkPoint; + +/** + * Experimental. + * + * Base class for image filters. If one is installed in the paint, then + * all drawing occurs as usual, but it is as if the drawing happened into an + * offscreen (before the xfermode is applied). This offscreen bitmap will + * then be handed to the imagefilter, who in turn creates a new bitmap which + * is what will finally be drawn to the device (using the original xfermode). + * + * If the imagefilter returns false, nothing is drawn. + */ +class SK_API SkImageFilter : public SkRefCnt /*SkFlattenable*/ { public: /** @@ -27,14 +42,22 @@ public: * the result and offset parameters will be ignored by the caller. */ bool filterImage(const SkBitmap& src, const SkMatrix&, - SkBitmap* result, SkPoint* offset); + SkBitmap* result, SkIPoint* offset); + + /** + * Experimental. + * + * If the filter can be expressed as a gaussian-blur, return true and + * set the sigma to the values for horizontal and vertical. + */ + virtual bool asABlur(SkSize* sigma) const; protected: - virtual bool onFilterImage(const SkBitmap& src, const SkMatrix& - SkBitmap* result, SkPoint* offset) = 0; + virtual bool onFilterImage(const SkBitmap& src, const SkMatrix&, + SkBitmap* result, SkIPoint* offset); private: - typedef SkFlattenable INHERITED; + typedef SkRefCnt INHERITED; }; #endif diff --git a/include/core/SkPaint.h b/include/core/SkPaint.h index 5e3e26ba7d..ee9b65ca7d 100644 --- a/include/core/SkPaint.h +++ b/include/core/SkPaint.h @@ -21,6 +21,7 @@ class SkFlattenableWriteBuffer; struct SkGlyph; struct SkRect; class SkGlyphCache; +class SkImageFilter; class SkMaskFilter; class SkMatrix; class SkPath; @@ -595,6 +596,9 @@ public: */ SkRasterizer* setRasterizer(SkRasterizer* rasterizer); + SkImageFilter* getImageFilter() const { return fImageFilter; } + SkImageFilter* setImageFilter(SkImageFilter*); + /** * Return the paint's SkDrawLooper (if any). Does not affect the looper's * reference count. @@ -838,6 +842,7 @@ private: SkColorFilter* fColorFilter; SkRasterizer* fRasterizer; SkDrawLooper* fLooper; + SkImageFilter* fImageFilter; SkColor fColor; SkScalar fWidth; |