SkTestImageFilters.h revision 9daf96afb34313842d8d2c4abca73d954d2e9005
15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#ifndef _SkTestImageFilters_h 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define _SkTestImageFilters_h 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "SkImageFilter.h" 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "SkPoint.h" 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass SK_API SkComposeImageFilter : public SkImageFilter { 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liupublic: 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkComposeImageFilter(SkImageFilter* outer, SkImageFilter* inner) : INHERITED(outer, inner) {} 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ~SkComposeImageFilter(); 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposeImageFilter) 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuprotected: 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkComposeImageFilter(SkFlattenableReadBuffer& buffer); 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; 195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE; 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuprivate: 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu typedef SkImageFilter INHERITED; 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "SkXfermode.h" 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass SK_API SkMergeImageFilter : public SkImageFilter { 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liupublic: 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkMergeImageFilter(SkImageFilter* first, SkImageFilter* second, 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkXfermode::Mode = SkXfermode::kSrcOver_Mode); 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkMergeImageFilter(SkImageFilter* filters[], int count, 325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const SkXfermode::Mode modes[] = NULL); 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ~SkMergeImageFilter(); 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMergeImageFilter) 365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuprotected: 385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkMergeImageFilter(SkFlattenableReadBuffer& buffer); 395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE; 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuprivate: 465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu uint8_t* fModes; // SkXfermode::Mode 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int fCount; 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // private storage, to avoid dynamically allocating storage for our copy 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // of the filters and modes (unless fCount is so large we can't fit). 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu intptr_t fStorage[16]; 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void initAllocModes(); 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu void initModes(const SkXfermode::Mode []); 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu typedef SkImageFilter INHERITED; 575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu/////////////////////////////////////////////////////////////////////////////// 605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Fun mode that scales down (only) and then scales back up to look pixelated 625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass SK_API SkDownSampleImageFilter : public SkImageFilter { 635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liupublic: 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkDownSampleImageFilter(SkScalar scale) : INHERITED(0), fScale(scale) {} 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDownSampleImageFilter) 675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuprotected: 695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkDownSampleImageFilter(SkFlattenableReadBuffer& buffer); 705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; 715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, 735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; 745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuprivate: 765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkScalar fScale; 775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu typedef SkImageFilter INHERITED; 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}; 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#endif 825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu