SkTestImageFilters.h revision 76dd277b1fa021c42fc3acdd8d61e7dc05f9c267
1 2#ifndef _SkTestImageFilters_h 3#define _SkTestImageFilters_h 4 5#include "SkImageFilter.h" 6 7class SkOffsetImageFilter : public SkImageFilter { 8public: 9 SkOffsetImageFilter(SkScalar dx, SkScalar dy) { 10 fOffset.set(dx, dy); 11 } 12 13 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { 14 return SkNEW_ARGS(SkOffsetImageFilter, (buffer)); 15 } 16 17protected: 18 SkOffsetImageFilter(SkFlattenableReadBuffer& buffer); 19 20 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 21 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; 22 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE; 23 // overrides from SkFlattenable 24 virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE; 25 virtual Factory getFactory() SK_OVERRIDE; 26 27private: 28 SkVector fOffset; 29 30 typedef SkImageFilter INHERITED; 31}; 32 33class SkComposeImageFilter : public SkImageFilter { 34public: 35 SkComposeImageFilter(SkImageFilter* outer, SkImageFilter* inner) { 36 fOuter = outer; 37 fInner = inner; 38 SkSafeRef(outer); 39 SkSafeRef(inner); 40 } 41 virtual ~SkComposeImageFilter(); 42 43 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { 44 return SkNEW_ARGS(SkComposeImageFilter, (buffer)); 45 } 46 47protected: 48 SkComposeImageFilter(SkFlattenableReadBuffer& buffer); 49 50 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 51 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; 52 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE; 53 // overrides from SkFlattenable 54 virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE; 55 virtual Factory getFactory() SK_OVERRIDE; 56 57private: 58 SkImageFilter* fOuter; 59 SkImageFilter* fInner; 60 61 typedef SkImageFilter INHERITED; 62}; 63 64#include "SkXfermode.h" 65 66class SkMergeImageFilter : public SkImageFilter { 67public: 68 SkMergeImageFilter(SkImageFilter* first, SkImageFilter* second, 69 SkXfermode::Mode = SkXfermode::kSrcOver_Mode); 70 SkMergeImageFilter(SkImageFilter* const filters[], int count, 71 const SkXfermode::Mode modes[] = NULL); 72 virtual ~SkMergeImageFilter(); 73 74 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { 75 return SkNEW_ARGS(SkMergeImageFilter, (buffer)); 76 } 77 78protected: 79 SkMergeImageFilter(SkFlattenableReadBuffer& buffer); 80 81 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 82 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; 83 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE; 84 // overrides from SkFlattenable 85 virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE; 86 virtual Factory getFactory() SK_OVERRIDE; 87 88private: 89 SkImageFilter** fFilters; 90 uint8_t* fModes; // SkXfermode::Mode 91 int fCount; 92 93 // private storage, to avoid dynamically allocating storage for our copy 94 // of the filters and modes (unless fCount is so large we can't fit). 95 intptr_t fStorage[16]; 96 97 void initAlloc(int count, bool hasModes); 98 void init(SkImageFilter* const [], int count, const SkXfermode::Mode []); 99 100 typedef SkImageFilter INHERITED; 101}; 102 103class SkColorFilter; 104 105class SkColorFilterImageFilter : public SkImageFilter { 106public: 107 SkColorFilterImageFilter(SkColorFilter* cf) : fColorFilter(cf) { 108 SkSafeRef(cf); 109 } 110 virtual ~SkColorFilterImageFilter(); 111 112 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { 113 return SkNEW_ARGS(SkColorFilterImageFilter, (buffer)); 114 } 115 116protected: 117 SkColorFilterImageFilter(SkFlattenableReadBuffer& buffer); 118 119 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 120 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; 121 // overrides from SkFlattenable 122 virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE; 123 virtual Factory getFactory() SK_OVERRIDE; 124 125private: 126 SkColorFilter* fColorFilter; 127 128 typedef SkImageFilter INHERITED; 129}; 130 131/////////////////////////////////////////////////////////////////////////////// 132 133// Fun mode that scales down (only) and then scales back up to look pixelated 134class SkDownSampleImageFilter : public SkImageFilter { 135public: 136 SkDownSampleImageFilter(SkScalar scale) : fScale(scale) {} 137 138 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { 139 return SkNEW_ARGS(SkDownSampleImageFilter, (buffer)); 140 } 141 142protected: 143 SkDownSampleImageFilter(SkFlattenableReadBuffer& buffer); 144 145 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 146 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; 147 // overrides from SkFlattenable 148 virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE; 149 virtual Factory getFactory() SK_OVERRIDE; 150 151private: 152 SkScalar fScale; 153 154 typedef SkImageFilter INHERITED; 155}; 156 157#endif 158