OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "gm.h" | 8 #include "gm.h" |
9 | 9 |
10 #include "SkArithmeticMode.h" | 10 #include "SkArithmeticMode.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 class SimpleOffsetFilter : public SkImageFilter { | 28 class SimpleOffsetFilter : public SkImageFilter { |
29 public: | 29 public: |
30 class Registrar { | 30 class Registrar { |
31 public: | 31 public: |
32 Registrar() { | 32 Registrar() { |
33 SkFlattenable::Register("SimpleOffsetFilter", | 33 SkFlattenable::Register("SimpleOffsetFilter", |
34 SimpleOffsetFilter::CreateProc, | 34 SimpleOffsetFilter::CreateProc, |
35 SimpleOffsetFilter::GetFlattenableType()); | 35 SimpleOffsetFilter::GetFlattenableType()); |
36 } | 36 } |
37 }; | 37 }; |
38 static SkImageFilter* Create(SkScalar dx, SkScalar dy, SkImageFilter* input)
{ | 38 static sk_sp<SkImageFilter> Make(SkScalar dx, SkScalar dy, sk_sp<SkImageFilt
er> input) { |
39 return new SimpleOffsetFilter(dx, dy, input); | 39 return sk_sp<SkImageFilter>(new SimpleOffsetFilter(dx, dy, std::move(inp
ut))); |
40 } | 40 } |
41 | 41 |
| 42 SK_TO_STRING_OVERRIDE() |
| 43 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SimpleOffsetFilter); |
| 44 |
| 45 protected: |
42 bool onFilterImageDeprecated(Proxy* proxy, const SkBitmap& src, const Contex
t& ctx, | 46 bool onFilterImageDeprecated(Proxy* proxy, const SkBitmap& src, const Contex
t& ctx, |
43 SkBitmap* dst, SkIPoint* offset) const override
{ | 47 SkBitmap* dst, SkIPoint* offset) const override
{ |
44 SkBitmap source = src; | 48 SkBitmap source = src; |
45 SkIPoint srcOffset = SkIPoint::Make(0, 0); | 49 SkIPoint srcOffset = SkIPoint::Make(0, 0); |
46 if (!this->filterInputDeprecated(0, proxy, src, ctx, &source, &srcOffset
)) { | 50 if (!this->filterInputDeprecated(0, proxy, src, ctx, &source, &srcOffset
)) { |
47 return false; | 51 return false; |
48 } | 52 } |
49 | 53 |
50 SkIRect bounds; | 54 SkIRect bounds; |
51 if (!this->applyCropRectDeprecated(ctx, proxy, source, &srcOffset, &boun
ds, &source)) { | 55 if (!this->applyCropRectDeprecated(ctx, proxy, source, &srcOffset, &boun
ds, &source)) { |
52 return false; | 56 return false; |
53 } | 57 } |
54 | 58 |
55 SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(bounds.width(), bo
unds.height())); | 59 SkAutoTUnref<SkBaseDevice> device(proxy->createDevice(bounds.width(), bo
unds.height())); |
56 SkCanvas canvas(device); | 60 SkCanvas canvas(device); |
57 SkPaint paint; | 61 SkPaint paint; |
58 paint.setXfermodeMode(SkXfermode::kSrc_Mode); | 62 paint.setXfermodeMode(SkXfermode::kSrc_Mode); |
59 canvas.drawBitmap(source, fDX - bounds.left(), fDY - bounds.top(), &pain
t); | 63 canvas.drawBitmap(source, fDX - bounds.left(), fDY - bounds.top(), &pain
t); |
60 *dst = device->accessBitmap(false); | 64 *dst = device->accessBitmap(false); |
61 offset->fX += bounds.left(); | 65 offset->fX += bounds.left(); |
62 offset->fY += bounds.top(); | 66 offset->fY += bounds.top(); |
63 return true; | 67 return true; |
64 } | 68 } |
65 | 69 |
66 SK_TO_STRING_OVERRIDE() | |
67 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SimpleOffsetFilter); | |
68 | |
69 protected: | |
70 void flatten(SkWriteBuffer& buffer) const override { | 70 void flatten(SkWriteBuffer& buffer) const override { |
71 this->INHERITED::flatten(buffer); | 71 this->INHERITED::flatten(buffer); |
72 buffer.writeScalar(fDX); | 72 buffer.writeScalar(fDX); |
73 buffer.writeScalar(fDY); | 73 buffer.writeScalar(fDY); |
74 } | 74 } |
75 | 75 |
76 private: | 76 private: |
77 SimpleOffsetFilter(SkScalar dx, SkScalar dy, SkImageFilter* input) | 77 SimpleOffsetFilter(SkScalar dx, SkScalar dy, sk_sp<SkImageFilter> input) |
78 : SkImageFilter(1, &input), fDX(dx), fDY(dy) {} | 78 : SkImageFilter(&input, 1, nullptr) |
| 79 , fDX(dx) |
| 80 , fDY(dy) { |
| 81 } |
79 | 82 |
80 SkScalar fDX, fDY; | 83 SkScalar fDX, fDY; |
81 | 84 |
82 typedef SkImageFilter INHERITED; | 85 typedef SkImageFilter INHERITED; |
83 }; | 86 }; |
84 | 87 |
85 static SimpleOffsetFilter::Registrar gReg; | 88 static SimpleOffsetFilter::Registrar gReg; |
86 | 89 |
87 sk_sp<SkFlattenable> SimpleOffsetFilter::CreateProc(SkReadBuffer& buffer) { | 90 sk_sp<SkFlattenable> SimpleOffsetFilter::CreateProc(SkReadBuffer& buffer) { |
88 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); | 91 SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); |
89 SkScalar dx = buffer.readScalar(); | 92 SkScalar dx = buffer.readScalar(); |
90 SkScalar dy = buffer.readScalar(); | 93 SkScalar dy = buffer.readScalar(); |
91 return sk_sp<SkFlattenable>(Create(dx, dy, common.getInput(0).get())); | 94 return Make(dx, dy, common.getInput(0)); |
92 } | 95 } |
93 | 96 |
94 #ifndef SK_IGNORE_TO_STRING | 97 #ifndef SK_IGNORE_TO_STRING |
95 void SimpleOffsetFilter::toString(SkString* str) const { | 98 void SimpleOffsetFilter::toString(SkString* str) const { |
96 str->appendf("SimpleOffsetFilter: ("); | 99 str->appendf("SimpleOffsetFilter: ("); |
97 str->append(")"); | 100 str->append(")"); |
98 } | 101 } |
99 #endif | 102 #endif |
100 | 103 |
101 class ImageFiltersGraphGM : public skiagm::GM { | 104 class ImageFiltersGraphGM : public skiagm::GM { |
(...skipping 23 matching lines...) Expand all Loading... |
125 sk_sp<SkImageFilter> erode(SkErodeImageFilter::Create(4, 4, blur.get
())); | 128 sk_sp<SkImageFilter> erode(SkErodeImageFilter::Create(4, 4, blur.get
())); |
126 sk_sp<SkImageFilter> color(SkColorFilterImageFilter::Create(cf.get()
, erode.get())); | 129 sk_sp<SkImageFilter> color(SkColorFilterImageFilter::Create(cf.get()
, erode.get())); |
127 sk_sp<SkImageFilter> merge(SkMergeImageFilter::Make(blur, color)); | 130 sk_sp<SkImageFilter> merge(SkMergeImageFilter::Make(blur, color)); |
128 | 131 |
129 SkPaint paint; | 132 SkPaint paint; |
130 paint.setImageFilter(std::move(merge)); | 133 paint.setImageFilter(std::move(merge)); |
131 canvas->drawPaint(paint); | 134 canvas->drawPaint(paint); |
132 canvas->translate(SkIntToScalar(100), 0); | 135 canvas->translate(SkIntToScalar(100), 0); |
133 } | 136 } |
134 { | 137 { |
135 SkAutoTUnref<SkImageFilter> morph(SkDilateImageFilter::Create(5, 5))
; | 138 sk_sp<SkImageFilter> morph(SkDilateImageFilter::Create(5, 5)); |
136 | 139 |
137 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, | 140 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, |
138 0, SK_Scalar1, 0, 0, 0, | 141 0, SK_Scalar1, 0, 0, 0, |
139 0, 0, SK_Scalar1, 0, 0, | 142 0, 0, SK_Scalar1, 0, 0, |
140 0, 0, 0, 0.5f, 0 }; | 143 0, 0, 0, 0.5f, 0 }; |
141 | 144 |
142 auto matrixFilter(SkColorFilter::MakeMatrixFilterRowMajor255(matrix)
); | 145 sk_sp<SkColorFilter> matrixFilter(SkColorFilter::MakeMatrixFilterRow
Major255(matrix)); |
143 SkAutoTUnref<SkImageFilter> colorMorph(SkColorFilterImageFilter::Cre
ate(matrixFilter.get(), morph)); | 146 sk_sp<SkImageFilter> colorMorph(SkColorFilterImageFilter::Create(mat
rixFilter.get(), |
| 147 mor
ph.get())); |
144 SkPaint paint; | 148 SkPaint paint; |
145 paint.setImageFilter(SkXfermodeImageFilter::Make( | 149 paint.setImageFilter(SkXfermodeImageFilter::Make( |
146 SkXfermode::Make(SkXfermode::kSrcOver_Mo
de), colorMorph)); | 150 SkXfermode::Make(SkXfermode::kSrcOver_Mo
de), |
| 151 colorMorph.get())); |
147 | 152 |
148 DrawClippedImage(canvas, fImage.get(), paint); | 153 DrawClippedImage(canvas, fImage.get(), paint); |
149 canvas->translate(SkIntToScalar(100), 0); | 154 canvas->translate(SkIntToScalar(100), 0); |
150 } | 155 } |
151 { | 156 { |
152 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, | 157 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, |
153 0, SK_Scalar1, 0, 0, 0, | 158 0, SK_Scalar1, 0, 0, 0, |
154 0, 0, SK_Scalar1, 0, 0, | 159 0, 0, SK_Scalar1, 0, 0, |
155 0, 0, 0, 0.5f, 0 }; | 160 0, 0, 0, 0.5f, 0 }; |
156 auto matrixCF(SkColorFilter::MakeMatrixFilterRowMajor255(matrix)); | 161 sk_sp<SkColorFilter> matrixCF(SkColorFilter::MakeMatrixFilterRowMajo
r255(matrix)); |
157 SkAutoTUnref<SkImageFilter> matrixFilter(SkColorFilterImageFilter::C
reate(matrixCF.get())); | 162 sk_sp<SkImageFilter> matrixFilter(SkColorFilterImageFilter::Create(m
atrixCF.get())); |
158 SkAutoTUnref<SkImageFilter> offsetFilter( | 163 sk_sp<SkImageFilter> offsetFilter(SimpleOffsetFilter::Make(10.0f, 10
.f, matrixFilter)); |
159 SimpleOffsetFilter::Create(10.0f, 10.f, matrixFilter)); | |
160 | 164 |
161 SkPaint paint; | 165 SkPaint paint; |
162 paint.setImageFilter( | 166 paint.setImageFilter( |
163 SkXfermodeImageFilter::Make(SkArithmeticMode::Make(0, SK_Scalar1
, SK_Scalar1, 0), | 167 SkXfermodeImageFilter::Make(SkArithmeticMode::Make(0, SK_Scalar1
, SK_Scalar1, 0), |
164 matrixFilter, offsetFilter, nullptr)
); | 168 matrixFilter.get(), offsetFilter.get
(), nullptr)); |
165 | 169 |
166 DrawClippedImage(canvas, fImage.get(), paint); | 170 DrawClippedImage(canvas, fImage.get(), paint); |
167 canvas->translate(SkIntToScalar(100), 0); | 171 canvas->translate(SkIntToScalar(100), 0); |
168 } | 172 } |
169 { | 173 { |
170 SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create( | 174 SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create( |
171 SkIntToScalar(10), SkIntToScalar(10))); | 175 SkIntToScalar(10), SkIntToScalar(10))); |
172 | 176 |
173 SkImageFilter::CropRect cropRect(SkRect::MakeWH(SkIntToScalar(95), S
kIntToScalar(100))); | 177 SkImageFilter::CropRect cropRect(SkRect::MakeWH(SkIntToScalar(95), S
kIntToScalar(100))); |
174 SkPaint paint; | 178 SkPaint paint; |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 } | 242 } |
239 | 243 |
240 sk_sp<SkImage> fImage; | 244 sk_sp<SkImage> fImage; |
241 | 245 |
242 typedef GM INHERITED; | 246 typedef GM INHERITED; |
243 }; | 247 }; |
244 | 248 |
245 /////////////////////////////////////////////////////////////////////////////// | 249 /////////////////////////////////////////////////////////////////////////////// |
246 | 250 |
247 DEF_GM(return new ImageFiltersGraphGM;) | 251 DEF_GM(return new ImageFiltersGraphGM;) |
OLD | NEW |