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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 sk_tool_utils::create_string_bitmap(100, 100, SK_ColorWHITE, 20, 70,
96, "e")); | 115 sk_tool_utils::create_string_bitmap(100, 100, SK_ColorWHITE, 20, 70,
96, "e")); |
116 } | 116 } |
117 | 117 |
118 void onDraw(SkCanvas* canvas) override { | 118 void onDraw(SkCanvas* canvas) override { |
119 canvas->clear(SK_ColorBLACK); | 119 canvas->clear(SK_ColorBLACK); |
120 { | 120 { |
121 sk_sp<SkImageFilter> bitmapSource(SkImageSource::Make(fImage)); | 121 sk_sp<SkImageFilter> bitmapSource(SkImageSource::Make(fImage)); |
122 sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorRED, | 122 sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorRED, |
123 SkXfermode::kS
rcIn_Mode)); | 123 SkXfermode::kS
rcIn_Mode)); |
124 sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(4.0f, 4.0f, std::m
ove(bitmapSource))); | 124 sk_sp<SkImageFilter> blur(SkBlurImageFilter::Make(4.0f, 4.0f, std::m
ove(bitmapSource))); |
125 sk_sp<SkImageFilter> erode(SkErodeImageFilter::Create(4, 4, blur.get
())); | 125 sk_sp<SkImageFilter> erode(SkErodeImageFilter::Make(4, 4, blur)); |
126 sk_sp<SkImageFilter> color(SkColorFilterImageFilter::Create(cf.get()
, erode.get())); | 126 sk_sp<SkImageFilter> color(SkColorFilterImageFilter::Create(cf.get()
, erode.get())); |
127 sk_sp<SkImageFilter> merge(SkMergeImageFilter::Make(blur, color)); | 127 sk_sp<SkImageFilter> merge(SkMergeImageFilter::Make(blur, color)); |
128 | 128 |
129 SkPaint paint; | 129 SkPaint paint; |
130 paint.setImageFilter(std::move(merge)); | 130 paint.setImageFilter(std::move(merge)); |
131 canvas->drawPaint(paint); | 131 canvas->drawPaint(paint); |
132 canvas->translate(SkIntToScalar(100), 0); | 132 canvas->translate(SkIntToScalar(100), 0); |
133 } | 133 } |
134 { | 134 { |
135 SkAutoTUnref<SkImageFilter> morph(SkDilateImageFilter::Create(5, 5))
; | 135 sk_sp<SkImageFilter> morph(SkDilateImageFilter::Make(5, 5, nullptr))
; |
136 | 136 |
137 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, | 137 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, |
138 0, SK_Scalar1, 0, 0, 0, | 138 0, SK_Scalar1, 0, 0, 0, |
139 0, 0, SK_Scalar1, 0, 0, | 139 0, 0, SK_Scalar1, 0, 0, |
140 0, 0, 0, 0.5f, 0 }; | 140 0, 0, 0, 0.5f, 0 }; |
141 | 141 |
142 auto matrixFilter(SkColorFilter::MakeMatrixFilterRowMajor255(matrix)
); | 142 sk_sp<SkColorFilter> matrixFilter(SkColorFilter::MakeMatrixFilterRow
Major255(matrix)); |
143 SkAutoTUnref<SkImageFilter> colorMorph(SkColorFilterImageFilter::Cre
ate(matrixFilter.get(), morph)); | 143 sk_sp<SkImageFilter> colorMorph(SkColorFilterImageFilter::Create(mat
rixFilter.get(), |
| 144 mor
ph.get())); |
144 SkPaint paint; | 145 SkPaint paint; |
145 paint.setImageFilter(SkXfermodeImageFilter::Make( | 146 paint.setImageFilter(SkXfermodeImageFilter::Make( |
146 SkXfermode::Make(SkXfermode::kSrcOver_Mo
de), colorMorph)); | 147 SkXfermode::Make(SkXfermode::kSrcOver_Mo
de), |
| 148 colorMorph.get())); |
147 | 149 |
148 DrawClippedImage(canvas, fImage.get(), paint); | 150 DrawClippedImage(canvas, fImage.get(), paint); |
149 canvas->translate(SkIntToScalar(100), 0); | 151 canvas->translate(SkIntToScalar(100), 0); |
150 } | 152 } |
151 { | 153 { |
152 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, | 154 SkScalar matrix[20] = { SK_Scalar1, 0, 0, 0, 0, |
153 0, SK_Scalar1, 0, 0, 0, | 155 0, SK_Scalar1, 0, 0, 0, |
154 0, 0, SK_Scalar1, 0, 0, | 156 0, 0, SK_Scalar1, 0, 0, |
155 0, 0, 0, 0.5f, 0 }; | 157 0, 0, 0, 0.5f, 0 }; |
156 auto matrixCF(SkColorFilter::MakeMatrixFilterRowMajor255(matrix)); | 158 auto matrixCF(SkColorFilter::MakeMatrixFilterRowMajor255(matrix)); |
(...skipping 20 matching lines...) Expand all Loading... |
177 SkXfermodeImageFilter::Make(SkXfermode::Make(SkXfermode::kSrcIn_
Mode), blur.get(), | 179 SkXfermodeImageFilter::Make(SkXfermode::Make(SkXfermode::kSrcIn_
Mode), blur.get(), |
178 nullptr, &cropRect)); | 180 nullptr, &cropRect)); |
179 DrawClippedImage(canvas, fImage.get(), paint); | 181 DrawClippedImage(canvas, fImage.get(), paint); |
180 canvas->translate(SkIntToScalar(100), 0); | 182 canvas->translate(SkIntToScalar(100), 0); |
181 } | 183 } |
182 { | 184 { |
183 // Dilate -> matrix convolution. | 185 // Dilate -> matrix convolution. |
184 // This tests that a filter using asFragmentProcessor (matrix | 186 // This tests that a filter using asFragmentProcessor (matrix |
185 // convolution) correctly handles a non-zero source offset | 187 // convolution) correctly handles a non-zero source offset |
186 // (supplied by the dilate). | 188 // (supplied by the dilate). |
187 SkAutoTUnref<SkImageFilter> dilate(SkDilateImageFilter::Create(5, 5)
); | 189 sk_sp<SkImageFilter> dilate(SkDilateImageFilter::Make(5, 5, nullptr)
); |
188 | 190 |
189 SkScalar kernel[9] = { | 191 SkScalar kernel[9] = { |
190 SkIntToScalar(-1), SkIntToScalar( -1 ), SkIntToScalar(-1), | 192 SkIntToScalar(-1), SkIntToScalar( -1 ), SkIntToScalar(-1), |
191 SkIntToScalar(-1), SkIntToScalar( 7 ), SkIntToScalar(-1), | 193 SkIntToScalar(-1), SkIntToScalar( 7 ), SkIntToScalar(-1), |
192 SkIntToScalar(-1), SkIntToScalar( -1 ), SkIntToScalar(-1), | 194 SkIntToScalar(-1), SkIntToScalar( -1 ), SkIntToScalar(-1), |
193 }; | 195 }; |
194 SkISize kernelSize = SkISize::Make(3, 3); | 196 SkISize kernelSize = SkISize::Make(3, 3); |
195 SkScalar gain = 1.0f, bias = SkIntToScalar(0); | 197 SkScalar gain = 1.0f, bias = SkIntToScalar(0); |
196 SkIPoint kernelOffset = SkIPoint::Make(1, 1); | 198 SkIPoint kernelOffset = SkIPoint::Make(1, 1); |
197 auto tileMode = SkMatrixConvolutionImageFilter::kClamp_TileMode; | 199 auto tileMode = SkMatrixConvolutionImageFilter::kClamp_TileMode; |
198 bool convolveAlpha = false; | 200 bool convolveAlpha = false; |
199 SkAutoTUnref<SkImageFilter> convolve( | 201 sk_sp<SkImageFilter> convolve( |
200 SkMatrixConvolutionImageFilter::Create(kernelSize, | 202 SkMatrixConvolutionImageFilter::Create(kernelSize, |
201 kernel, | 203 kernel, |
202 gain, | 204 gain, |
203 bias, | 205 bias, |
204 kernelOffset, | 206 kernelOffset, |
205 tileMode, | 207 tileMode, |
206 convolveAlpha, | 208 convolveAlpha, |
207 dilate)); | 209 dilate.get())); |
208 | 210 |
209 SkPaint paint; | 211 SkPaint paint; |
210 paint.setImageFilter(convolve); | 212 paint.setImageFilter(std::move(convolve)); |
211 DrawClippedImage(canvas, fImage.get(), paint); | 213 DrawClippedImage(canvas, fImage.get(), paint); |
212 canvas->translate(SkIntToScalar(100), 0); | 214 canvas->translate(SkIntToScalar(100), 0); |
213 } | 215 } |
214 { | 216 { |
215 // Test that crop offsets are absolute, not relative to the parent's
crop rect. | 217 // Test that crop offsets are absolute, not relative to the parent's
crop rect. |
216 auto cf1(SkColorFilter::MakeModeFilter(SK_ColorBLUE, SkXfermode::kSr
cIn_Mode)); | 218 auto cf1(SkColorFilter::MakeModeFilter(SK_ColorBLUE, SkXfermode::kSr
cIn_Mode)); |
217 auto cf2(SkColorFilter::MakeModeFilter(SK_ColorGREEN, SkXfermode::kS
rcIn_Mode)); | 219 auto cf2(SkColorFilter::MakeModeFilter(SK_ColorGREEN, SkXfermode::kS
rcIn_Mode)); |
218 SkImageFilter::CropRect outerRect(SkRect::MakeXYWH(SkIntToScalar(10)
, SkIntToScalar(10), | 220 SkImageFilter::CropRect outerRect(SkRect::MakeXYWH(SkIntToScalar(10)
, SkIntToScalar(10), |
219 SkIntToScalar(80)
, SkIntToScalar(80))); | 221 SkIntToScalar(80)
, SkIntToScalar(80))); |
220 SkImageFilter::CropRect innerRect(SkRect::MakeXYWH(SkIntToScalar(20)
, SkIntToScalar(20), | 222 SkImageFilter::CropRect innerRect(SkRect::MakeXYWH(SkIntToScalar(20)
, SkIntToScalar(20), |
221 SkIntToScalar(60)
, SkIntToScalar(60))); | 223 SkIntToScalar(60)
, SkIntToScalar(60))); |
222 SkAutoTUnref<SkImageFilter> color1(SkColorFilterImageFilter::Create(
cf1.get(), nullptr, &outerRect)); | 224 sk_sp<SkImageFilter> color1(SkColorFilterImageFilter::Create(cf1.get
(), |
223 SkAutoTUnref<SkImageFilter> color2(SkColorFilterImageFilter::Create(
cf2.get(), color1, &innerRect)); | 225 nullptr
, |
| 226 &outerR
ect)); |
| 227 sk_sp<SkImageFilter> color2(SkColorFilterImageFilter::Create(cf2.get
(), |
| 228 color1.
get(), |
| 229 &innerR
ect)); |
224 | 230 |
225 SkPaint paint; | 231 SkPaint paint; |
226 paint.setImageFilter(color2); | 232 paint.setImageFilter(std::move(color2)); |
227 paint.setColor(SK_ColorRED); | 233 paint.setColor(SK_ColorRED); |
228 canvas->drawRect(SkRect::MakeXYWH(0, 0, 100, 100), paint); | 234 canvas->drawRect(SkRect::MakeXYWH(0, 0, 100, 100), paint); |
229 canvas->translate(SkIntToScalar(100), 0); | 235 canvas->translate(SkIntToScalar(100), 0); |
230 } | 236 } |
231 } | 237 } |
232 | 238 |
233 private: | 239 private: |
234 static void DrawClippedImage(SkCanvas* canvas, const SkImage* image, const S
kPaint& paint) { | 240 static void DrawClippedImage(SkCanvas* canvas, const SkImage* image, const S
kPaint& paint) { |
235 canvas->save(); | 241 canvas->save(); |
236 canvas->clipRect(SkRect::MakeIWH(image->width(), image->height())); | 242 canvas->clipRect(SkRect::MakeIWH(image->width(), image->height())); |
237 canvas->drawImage(image, 0, 0, &paint); | 243 canvas->drawImage(image, 0, 0, &paint); |
238 canvas->restore(); | 244 canvas->restore(); |
239 } | 245 } |
240 | 246 |
241 sk_sp<SkImage> fImage; | 247 sk_sp<SkImage> fImage; |
242 | 248 |
243 typedef GM INHERITED; | 249 typedef GM INHERITED; |
244 }; | 250 }; |
245 | 251 |
246 /////////////////////////////////////////////////////////////////////////////// | 252 /////////////////////////////////////////////////////////////////////////////// |
247 | 253 |
248 DEF_GM(return new ImageFiltersGraphGM;) | 254 DEF_GM(return new ImageFiltersGraphGM;) |
OLD | NEW |