blob: a28ed8b98c744ca5260b8d218c01e75fbd060da1 [file] [log] [blame]
reed@google.com32d25b62011-12-20 16:19:00 +00001
2#ifndef _SkTestImageFilters_h
3#define _SkTestImageFilters_h
4
5#include "SkImageFilter.h"
reed@google.com8bb3ba12012-01-26 04:13:31 +00006#include "SkColorFilter.h"
reed@google.com32d25b62011-12-20 16:19:00 +00007
8class SkOffsetImageFilter : public SkImageFilter {
9public:
10 SkOffsetImageFilter(SkScalar dx, SkScalar dy) {
11 fOffset.set(dx, dy);
12 }
13
djsollen@google.comba28d032012-03-26 17:57:35 +000014 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkOffsetImageFilter)
reed@google.com32d25b62011-12-20 16:19:00 +000015
16protected:
17 SkOffsetImageFilter(SkFlattenableReadBuffer& buffer);
djsollen@google.com54924242012-03-29 15:18:04 +000018 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +000019
reed@google.com76dd2772012-01-05 21:15:07 +000020 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +000021 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
22 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +000023
24private:
25 SkVector fOffset;
26
27 typedef SkImageFilter INHERITED;
28};
29
30class SkComposeImageFilter : public SkImageFilter {
31public:
32 SkComposeImageFilter(SkImageFilter* outer, SkImageFilter* inner) {
33 fOuter = outer;
34 fInner = inner;
35 SkSafeRef(outer);
36 SkSafeRef(inner);
37 }
38 virtual ~SkComposeImageFilter();
39
djsollen@google.comba28d032012-03-26 17:57:35 +000040 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposeImageFilter)
reed@google.com32d25b62011-12-20 16:19:00 +000041
42protected:
43 SkComposeImageFilter(SkFlattenableReadBuffer& buffer);
djsollen@google.com54924242012-03-29 15:18:04 +000044 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +000045
reed@google.com76dd2772012-01-05 21:15:07 +000046 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +000047 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
48 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +000049
50private:
51 SkImageFilter* fOuter;
52 SkImageFilter* fInner;
53
54 typedef SkImageFilter INHERITED;
55};
56
57#include "SkXfermode.h"
58
59class SkMergeImageFilter : public SkImageFilter {
60public:
61 SkMergeImageFilter(SkImageFilter* first, SkImageFilter* second,
62 SkXfermode::Mode = SkXfermode::kSrcOver_Mode);
63 SkMergeImageFilter(SkImageFilter* const filters[], int count,
64 const SkXfermode::Mode modes[] = NULL);
65 virtual ~SkMergeImageFilter();
66
djsollen@google.comba28d032012-03-26 17:57:35 +000067 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMergeImageFilter)
reed@google.com32d25b62011-12-20 16:19:00 +000068
69protected:
70 SkMergeImageFilter(SkFlattenableReadBuffer& buffer);
djsollen@google.com54924242012-03-29 15:18:04 +000071 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +000072
reed@google.com76dd2772012-01-05 21:15:07 +000073 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +000074 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
75 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +000076
77private:
78 SkImageFilter** fFilters;
79 uint8_t* fModes; // SkXfermode::Mode
80 int fCount;
81
82 // private storage, to avoid dynamically allocating storage for our copy
83 // of the filters and modes (unless fCount is so large we can't fit).
84 intptr_t fStorage[16];
85
86 void initAlloc(int count, bool hasModes);
87 void init(SkImageFilter* const [], int count, const SkXfermode::Mode []);
88
89 typedef SkImageFilter INHERITED;
90};
91
reed@google.com32d25b62011-12-20 16:19:00 +000092class SkColorFilterImageFilter : public SkImageFilter {
93public:
94 SkColorFilterImageFilter(SkColorFilter* cf) : fColorFilter(cf) {
95 SkSafeRef(cf);
96 }
97 virtual ~SkColorFilterImageFilter();
98
djsollen@google.comba28d032012-03-26 17:57:35 +000099 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorFilterImageFilter)
reed@google.com32d25b62011-12-20 16:19:00 +0000100
101protected:
102 SkColorFilterImageFilter(SkFlattenableReadBuffer& buffer);
djsollen@google.com54924242012-03-29 15:18:04 +0000103 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +0000104
reed@google.com76dd2772012-01-05 21:15:07 +0000105 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +0000106 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +0000107
108private:
109 SkColorFilter* fColorFilter;
110
111 typedef SkImageFilter INHERITED;
112};
113
114///////////////////////////////////////////////////////////////////////////////
115
116// Fun mode that scales down (only) and then scales back up to look pixelated
117class SkDownSampleImageFilter : public SkImageFilter {
118public:
119 SkDownSampleImageFilter(SkScalar scale) : fScale(scale) {}
120
djsollen@google.comba28d032012-03-26 17:57:35 +0000121 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDownSampleImageFilter)
reed@google.com32d25b62011-12-20 16:19:00 +0000122
123protected:
124 SkDownSampleImageFilter(SkFlattenableReadBuffer& buffer);
djsollen@google.com54924242012-03-29 15:18:04 +0000125 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +0000126
reed@google.com76dd2772012-01-05 21:15:07 +0000127 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +0000128 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +0000129
130private:
131 SkScalar fScale;
132
133 typedef SkImageFilter INHERITED;
134};
135
136#endif