blob: c31a439ddbc44ad43e8861af1dd5fc56eac2c99b [file] [log] [blame]
reed@google.com32d25b62011-12-20 16:19:00 +00001
2#ifndef _SkTestImageFilters_h
3#define _SkTestImageFilters_h
4
5#include "SkImageFilter.h"
djsollen@google.comc73dd5c2012-08-07 15:54:32 +00006#include "SkPoint.h"
reed@google.com32d25b62011-12-20 16:19:00 +00007
8class SkOffsetImageFilter : public SkImageFilter {
9public:
senorblanco@chromium.org9f25de72012-10-10 20:36:13 +000010 SkOffsetImageFilter(SkScalar dx, SkScalar dy) : INHERITED(0) {
reed@google.com32d25b62011-12-20 16:19:00 +000011 fOffset.set(dx, dy);
12 }
13
djsollen@google.comba28d032012-03-26 17:57:35 +000014 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkOffsetImageFilter)
reed@google.com32d25b62011-12-20 16:19:00 +000015
16protected:
17 SkOffsetImageFilter(SkFlattenableReadBuffer& buffer);
djsollen@google.com54924242012-03-29 15:18:04 +000018 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +000019
reed@google.com76dd2772012-01-05 21:15:07 +000020 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +000021 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
22 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE;
reed@google.com32d25b62011-12-20 16:19:00 +000023
24private:
25 SkVector fOffset;
26
27 typedef SkImageFilter INHERITED;
28};
29
30class SkComposeImageFilter : public SkImageFilter {
31public:
senorblanco@chromium.org9f25de72012-10-10 20:36:13 +000032 SkComposeImageFilter(SkImageFilter* outer, SkImageFilter* inner) : INHERITED(2, outer, inner) {}
reed@google.com32d25b62011-12-20 16:19:00 +000033 virtual ~SkComposeImageFilter();
34
djsollen@google.comba28d032012-03-26 17:57:35 +000035 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposeImageFilter)
rmistry@google.comfbfcd562012-08-23 18:09:54 +000036
reed@google.com32d25b62011-12-20 16:19:00 +000037protected:
38 SkComposeImageFilter(SkFlattenableReadBuffer& buffer);
rmistry@google.comfbfcd562012-08-23 18:09:54 +000039
reed@google.com76dd2772012-01-05 21:15:07 +000040 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +000041 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
42 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE;
rmistry@google.comfbfcd562012-08-23 18:09:54 +000043
reed@google.com32d25b62011-12-20 16:19:00 +000044private:
reed@google.com32d25b62011-12-20 16:19:00 +000045 typedef SkImageFilter INHERITED;
46};
47
48#include "SkXfermode.h"
49
50class SkMergeImageFilter : public SkImageFilter {
51public:
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.comfbfcd562012-08-23 18:09:54 +000057
djsollen@google.comba28d032012-03-26 17:57:35 +000058 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkMergeImageFilter)
rmistry@google.comfbfcd562012-08-23 18:09:54 +000059
reed@google.com32d25b62011-12-20 16:19:00 +000060protected:
61 SkMergeImageFilter(SkFlattenableReadBuffer& buffer);
djsollen@google.com54924242012-03-29 15:18:04 +000062 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
rmistry@google.comfbfcd562012-08-23 18:09:54 +000063
reed@google.com76dd2772012-01-05 21:15:07 +000064 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +000065 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
66 virtual bool onFilterBounds(const SkIRect&, const SkMatrix&, SkIRect*) SK_OVERRIDE;
rmistry@google.comfbfcd562012-08-23 18:09:54 +000067
reed@google.com32d25b62011-12-20 16:19:00 +000068private:
reed@google.com32d25b62011-12-20 16:19:00 +000069 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.org9f25de72012-10-10 20:36:13 +000076 void initAllocModes();
77 void initModes(const SkXfermode::Mode []);
rmistry@google.comfbfcd562012-08-23 18:09:54 +000078
reed@google.com32d25b62011-12-20 16:19:00 +000079 typedef SkImageFilter INHERITED;
80};
81
reed@google.com32d25b62011-12-20 16:19:00 +000082///////////////////////////////////////////////////////////////////////////////
83
84// Fun mode that scales down (only) and then scales back up to look pixelated
85class SkDownSampleImageFilter : public SkImageFilter {
86public:
senorblanco@chromium.org9f25de72012-10-10 20:36:13 +000087 SkDownSampleImageFilter(SkScalar scale) : INHERITED(0), fScale(scale) {}
rmistry@google.comfbfcd562012-08-23 18:09:54 +000088
djsollen@google.comba28d032012-03-26 17:57:35 +000089 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDownSampleImageFilter)
rmistry@google.comfbfcd562012-08-23 18:09:54 +000090
reed@google.com32d25b62011-12-20 16:19:00 +000091protected:
92 SkDownSampleImageFilter(SkFlattenableReadBuffer& buffer);
djsollen@google.com54924242012-03-29 15:18:04 +000093 virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
rmistry@google.comfbfcd562012-08-23 18:09:54 +000094
reed@google.com76dd2772012-01-05 21:15:07 +000095 virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
reed@google.com32d25b62011-12-20 16:19:00 +000096 SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
rmistry@google.comfbfcd562012-08-23 18:09:54 +000097
reed@google.com32d25b62011-12-20 16:19:00 +000098private:
99 SkScalar fScale;
rmistry@google.comfbfcd562012-08-23 18:09:54 +0000100
reed@google.com32d25b62011-12-20 16:19:00 +0000101 typedef SkImageFilter INHERITED;
102};
103
104#endif