SkTestImageFilters.h revision c73dd5c6880739f26216f198c757028fd28df1a4
1
2#ifndef _SkTestImageFilters_h
3#define _SkTestImageFilters_h
4
5#include "SkImageFilter.h"
6#include "SkColorFilter.h"
7#include "SkPoint.h"
8
9class SkOffsetImageFilter : public SkImageFilter {
10public:
11    SkOffsetImageFilter(SkScalar dx, SkScalar dy) {
12        fOffset.set(dx, dy);
13    }
14
15    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkOffsetImageFilter)
16
17protected:
18    SkOffsetImageFilter(SkFlattenableReadBuffer& buffer);
19    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
20
21    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
22                               SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
23    virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE;
24
25private:
26    SkVector fOffset;
27
28    typedef SkImageFilter INHERITED;
29};
30
31class SkComposeImageFilter : public SkImageFilter {
32public:
33    SkComposeImageFilter(SkImageFilter* outer, SkImageFilter* inner) {
34        fOuter = outer;
35        fInner = inner;
36        SkSafeRef(outer);
37        SkSafeRef(inner);
38    }
39    virtual ~SkComposeImageFilter();
40
41    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposeImageFilter)
42
43protected:
44    SkComposeImageFilter(SkFlattenableReadBuffer& buffer);
45    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
46
47    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
48                               SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
49    virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE;
50
51private:
52    SkImageFilter*  fOuter;
53    SkImageFilter*  fInner;
54
55    typedef SkImageFilter INHERITED;
56};
57
58#include "SkXfermode.h"
59
60class SkMergeImageFilter : public SkImageFilter {
61public:
62    SkMergeImageFilter(SkImageFilter* first, SkImageFilter* second,
63                       SkXfermode::Mode = SkXfermode::kSrcOver_Mode);
64    SkMergeImageFilter(SkImageFilter* const filters[], int count,
65                       const SkXfermode::Mode modes[] = NULL);
66    virtual ~SkMergeImageFilter();
67
68    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMergeImageFilter)
69
70protected:
71    SkMergeImageFilter(SkFlattenableReadBuffer& buffer);
72    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
73
74    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
75                               SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
76    virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE;
77
78private:
79    SkImageFilter**     fFilters;
80    uint8_t*            fModes; // SkXfermode::Mode
81    int                 fCount;
82
83    // private storage, to avoid dynamically allocating storage for our copy
84    // of the filters and modes (unless fCount is so large we can't fit).
85    intptr_t    fStorage[16];
86
87    void initAlloc(int count, bool hasModes);
88    void init(SkImageFilter* const [], int count, const SkXfermode::Mode []);
89
90    typedef SkImageFilter INHERITED;
91};
92
93class SkColorFilterImageFilter : public SkImageFilter {
94public:
95    SkColorFilterImageFilter(SkColorFilter* cf) : fColorFilter(cf) {
96        SkSafeRef(cf);
97    }
98    virtual ~SkColorFilterImageFilter();
99
100    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorFilterImageFilter)
101
102protected:
103    SkColorFilterImageFilter(SkFlattenableReadBuffer& buffer);
104    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
105
106    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
107                               SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
108
109private:
110    SkColorFilter*  fColorFilter;
111
112    typedef SkImageFilter INHERITED;
113};
114
115///////////////////////////////////////////////////////////////////////////////
116
117// Fun mode that scales down (only) and then scales back up to look pixelated
118class SkDownSampleImageFilter : public SkImageFilter {
119public:
120    SkDownSampleImageFilter(SkScalar scale) : fScale(scale) {}
121
122    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDownSampleImageFilter)
123
124protected:
125    SkDownSampleImageFilter(SkFlattenableReadBuffer& buffer);
126    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
127
128    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
129                               SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
130
131private:
132    SkScalar fScale;
133
134    typedef SkImageFilter INHERITED;
135};
136
137#endif
138