aboutsummaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/core/SkImageFilter.h33
-rw-r--r--include/core/SkPaint.h5
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;