blob: e2c9cf465748c051e2d75c03be8fb4836bd024ff [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);
18
reed@google.com76dd2772012-01-05 21:15:07 +000019 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +000020 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
21 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE;
22 // overrides from SkFlattenable
23 virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +000024
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
djsollen@google.comba28d032012-03-26 17:57:35 +000041 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposeImageFilter)
reed@google.com32d25b62011-12-20 16:19:00 +000042
43protected:
44 SkComposeImageFilter(SkFlattenableReadBuffer& buffer);
45
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;
49 // overrides from SkFlattenable
50 virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +000051
52private:
53 SkImageFilter* fOuter;
54 SkImageFilter* fInner;
55
56 typedef SkImageFilter INHERITED;
57};
58
59#include "SkXfermode.h"
60
61class SkMergeImageFilter : public SkImageFilter {
62public:
63 SkMergeImageFilter(SkImageFilter* first, SkImageFilter* second,
64 SkXfermode::Mode = SkXfermode::kSrcOver_Mode);
65 SkMergeImageFilter(SkImageFilter* const filters[], int count,
66 const SkXfermode::Mode modes[] = NULL);
67 virtual ~SkMergeImageFilter();
68
djsollen@google.comba28d032012-03-26 17:57:35 +000069 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMergeImageFilter)
reed@google.com32d25b62011-12-20 16:19:00 +000070
71protected:
72 SkMergeImageFilter(SkFlattenableReadBuffer& buffer);
73
reed@google.com76dd2772012-01-05 21:15:07 +000074 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +000075 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
76 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE;
77 // overrides from SkFlattenable
78 virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +000079
80private:
81 SkImageFilter** fFilters;
82 uint8_t* fModes; // SkXfermode::Mode
83 int fCount;
84
85 // private storage, to avoid dynamically allocating storage for our copy
86 // of the filters and modes (unless fCount is so large we can't fit).
87 intptr_t fStorage[16];
88
89 void initAlloc(int count, bool hasModes);
90 void init(SkImageFilter* const [], int count, const SkXfermode::Mode []);
91
92 typedef SkImageFilter INHERITED;
93};
94
reed@google.com32d25b62011-12-20 16:19:00 +000095class SkColorFilterImageFilter : public SkImageFilter {
96public:
97 SkColorFilterImageFilter(SkColorFilter* cf) : fColorFilter(cf) {
98 SkSafeRef(cf);
99 }
100 virtual ~SkColorFilterImageFilter();
101
djsollen@google.comba28d032012-03-26 17:57:35 +0000102 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorFilterImageFilter)
reed@google.com32d25b62011-12-20 16:19:00 +0000103
104protected:
105 SkColorFilterImageFilter(SkFlattenableReadBuffer& buffer);
106
reed@google.com76dd2772012-01-05 21:15:07 +0000107 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +0000108 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
109 // overrides from SkFlattenable
110 virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +0000111
112private:
113 SkColorFilter* fColorFilter;
114
115 typedef SkImageFilter INHERITED;
116};
117
118///////////////////////////////////////////////////////////////////////////////
119
120// Fun mode that scales down (only) and then scales back up to look pixelated
121class SkDownSampleImageFilter : public SkImageFilter {
122public:
123 SkDownSampleImageFilter(SkScalar scale) : fScale(scale) {}
124
djsollen@google.comba28d032012-03-26 17:57:35 +0000125 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDownSampleImageFilter)
reed@google.com32d25b62011-12-20 16:19:00 +0000126
127protected:
128 SkDownSampleImageFilter(SkFlattenableReadBuffer& buffer);
129
reed@google.com76dd2772012-01-05 21:15:07 +0000130 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +0000131 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
132 // overrides from SkFlattenable
133 virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +0000134
135private:
136 SkScalar fScale;
137
138 typedef SkImageFilter INHERITED;
139};
140
141#endif