SkTestImageFilters.h revision 54924243c1b65b3ee6d8fa064b50a9b1bb2a19a5
1 2#ifndef _SkTestImageFilters_h 3#define _SkTestImageFilters_h 4 5#include "SkImageFilter.h" 6#include "SkColorFilter.h" 7 8class SkOffsetImageFilter : public SkImageFilter { 9public: 10 SkOffsetImageFilter(SkScalar dx, SkScalar dy) { 11 fOffset.set(dx, dy); 12 } 13 14 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkOffsetImageFilter) 15 16protected: 17 SkOffsetImageFilter(SkFlattenableReadBuffer& buffer); 18 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 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 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 40 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposeImageFilter) 41 42protected: 43 SkComposeImageFilter(SkFlattenableReadBuffer& buffer); 44 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 45 46 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 47 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; 48 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE; 49 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 67 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMergeImageFilter) 68 69protected: 70 SkMergeImageFilter(SkFlattenableReadBuffer& buffer); 71 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 72 73 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 74 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; 75 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE; 76 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 92class SkColorFilterImageFilter : public SkImageFilter { 93public: 94 SkColorFilterImageFilter(SkColorFilter* cf) : fColorFilter(cf) { 95 SkSafeRef(cf); 96 } 97 virtual ~SkColorFilterImageFilter(); 98 99 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorFilterImageFilter) 100 101protected: 102 SkColorFilterImageFilter(SkFlattenableReadBuffer& buffer); 103 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 104 105 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 106 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; 107 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 121 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDownSampleImageFilter) 122 123protected: 124 SkDownSampleImageFilter(SkFlattenableReadBuffer& buffer); 125 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 126 127 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 128 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; 129 130private: 131 SkScalar fScale; 132 133 typedef SkImageFilter INHERITED; 134}; 135 136#endif 137