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