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