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