OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkColorFilter.h" | 10 #include "SkColorFilter.h" |
11 #include "SkColorPriv.h" | 11 #include "SkColorPriv.h" |
12 #include "SkShader.h" | 12 #include "SkShader.h" |
13 | 13 |
14 #include "SkBlurImageFilter.h" | 14 #include "SkBlurImageFilter.h" |
15 #include "SkMorphologyImageFilter.h" | 15 #include "SkMorphologyImageFilter.h" |
16 #include "SkColorFilterImageFilter.h" | 16 #include "SkColorFilterImageFilter.h" |
17 #include "SkMergeImageFilter.h" | 17 #include "SkMergeImageFilter.h" |
18 #include "SkOffsetImageFilter.h" | 18 #include "SkOffsetImageFilter.h" |
19 #include "SkTestImageFilters.h" | 19 #include "SkTestImageFilters.h" |
20 | 20 |
21 /////////////////////////////////////////////////////////////////////////////// | 21 /////////////////////////////////////////////////////////////////////////////// |
22 | 22 |
23 static void draw_paint(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) { | 23 static void draw_paint(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> i
mf) { |
24 SkPaint paint; | 24 SkPaint paint; |
25 paint.setImageFilter(imf); | 25 paint.setImageFilter(std::move(imf)); |
26 paint.setColor(SK_ColorBLACK); | 26 paint.setColor(SK_ColorBLACK); |
27 canvas->save(); | 27 canvas->save(); |
28 canvas->clipRect(r); | 28 canvas->clipRect(r); |
29 canvas->drawPaint(paint); | 29 canvas->drawPaint(paint); |
30 canvas->restore(); | 30 canvas->restore(); |
31 } | 31 } |
32 | 32 |
33 static void draw_path(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) { | 33 static void draw_path(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> im
f) { |
34 SkPaint paint; | 34 SkPaint paint; |
35 paint.setColor(SK_ColorMAGENTA); | 35 paint.setColor(SK_ColorMAGENTA); |
36 paint.setImageFilter(imf); | 36 paint.setImageFilter(std::move(imf)); |
37 paint.setAntiAlias(true); | 37 paint.setAntiAlias(true); |
38 canvas->drawCircle(r.centerX(), r.centerY(), r.width()*2/5, paint); | 38 canvas->drawCircle(r.centerX(), r.centerY(), r.width()*2/5, paint); |
39 } | 39 } |
40 | 40 |
41 static void draw_text(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) { | 41 static void draw_text(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter> im
f) { |
42 SkPaint paint; | 42 SkPaint paint; |
43 paint.setImageFilter(imf); | 43 paint.setImageFilter(std::move(imf)); |
44 paint.setColor(SK_ColorGREEN); | 44 paint.setColor(SK_ColorGREEN); |
45 paint.setAntiAlias(true); | 45 paint.setAntiAlias(true); |
46 sk_tool_utils::set_portable_typeface(&paint); | 46 sk_tool_utils::set_portable_typeface(&paint); |
47 paint.setTextSize(r.height()/2); | 47 paint.setTextSize(r.height()/2); |
48 paint.setTextAlign(SkPaint::kCenter_Align); | 48 paint.setTextAlign(SkPaint::kCenter_Align); |
49 canvas->drawText("Text", 4, r.centerX(), r.centerY(), paint); | 49 canvas->drawText("Text", 4, r.centerX(), r.centerY(), paint); |
50 } | 50 } |
51 | 51 |
52 static void draw_bitmap(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) { | 52 static void draw_bitmap(SkCanvas* canvas, const SkRect& r, sk_sp<SkImageFilter>
imf) { |
53 SkPaint paint; | 53 SkPaint paint; |
54 | 54 |
55 SkIRect bounds; | 55 SkIRect bounds; |
56 r.roundOut(&bounds); | 56 r.roundOut(&bounds); |
57 | 57 |
58 SkBitmap bm; | 58 SkBitmap bm; |
59 bm.allocN32Pixels(bounds.width(), bounds.height()); | 59 bm.allocN32Pixels(bounds.width(), bounds.height()); |
60 bm.eraseColor(SK_ColorTRANSPARENT); | 60 bm.eraseColor(SK_ColorTRANSPARENT); |
61 SkCanvas c(bm); | 61 SkCanvas c(bm); |
62 draw_path(&c, r, nullptr); | 62 draw_path(&c, r, nullptr); |
63 | 63 |
64 paint.setImageFilter(imf); | 64 paint.setImageFilter(std::move(imf)); |
65 canvas->drawBitmap(bm, 0, 0, &paint); | 65 canvas->drawBitmap(bm, 0, 0, &paint); |
66 } | 66 } |
67 | 67 |
68 /////////////////////////////////////////////////////////////////////////////// | 68 /////////////////////////////////////////////////////////////////////////////// |
69 | 69 |
70 class ImageFiltersCroppedGM : public skiagm::GM { | 70 class ImageFiltersCroppedGM : public skiagm::GM { |
71 public: | 71 public: |
72 ImageFiltersCroppedGM () {} | 72 ImageFiltersCroppedGM () {} |
73 | 73 |
74 protected: | 74 protected: |
(...skipping 29 matching lines...) Expand all Loading... |
104 paint.setStyle(SkPaint::kStroke_Style); | 104 paint.setStyle(SkPaint::kStroke_Style); |
105 paint.setColor(SK_ColorRED); | 105 paint.setColor(SK_ColorRED); |
106 canvas->drawRect(r, paint); | 106 canvas->drawRect(r, paint); |
107 } | 107 } |
108 | 108 |
109 virtual void onOnceBeforeDraw() override{ | 109 virtual void onOnceBeforeDraw() override{ |
110 make_checkerboard(); | 110 make_checkerboard(); |
111 } | 111 } |
112 | 112 |
113 virtual void onDraw(SkCanvas* canvas) override { | 113 virtual void onDraw(SkCanvas* canvas) override { |
114 void (*drawProc[])(SkCanvas*, const SkRect&, SkImageFilter*) = { | 114 void (*drawProc[])(SkCanvas*, const SkRect&, sk_sp<SkImageFilter>) = { |
115 draw_bitmap, draw_path, draw_paint, draw_text | 115 draw_bitmap, draw_path, draw_paint, draw_text |
116 }; | 116 }; |
117 | 117 |
118 auto cf(SkColorFilter::MakeModeFilter(SK_ColorBLUE, SkXfermode::kSrcIn_M
ode)); | 118 sk_sp<SkColorFilter> cf(SkColorFilter::MakeModeFilter(SK_ColorBLUE, |
119 SkImageFilter::CropRect cropRect(SkRect::Make(SkIRect::MakeXYWH(10, 10,
44, 44)), SkImageFilter::CropRect::kHasAll_CropEdge); | 119 SkXfermode::kSrcIn
_Mode)); |
120 SkImageFilter::CropRect bogusRect(SkRect::Make(SkIRect::MakeXYWH(-100, -
100, 10, 10)), SkImageFilter::CropRect::kHasAll_CropEdge); | 120 SkImageFilter::CropRect cropRect(SkRect::Make(SkIRect::MakeXYWH(10, 10,
44, 44)), |
| 121 SkImageFilter::CropRect::kHasAll_CropEd
ge); |
| 122 SkImageFilter::CropRect bogusRect(SkRect::Make(SkIRect::MakeXYWH(-100, -
100, 10, 10)), |
| 123 SkImageFilter::CropRect::kHasAll_CropE
dge); |
121 | 124 |
122 sk_sp<SkImageFilter> offset(SkOffsetImageFilter::Make(SkIntToScalar(-10)
, | 125 sk_sp<SkImageFilter> offset(SkOffsetImageFilter::Make(SkIntToScalar(-10)
, |
123 SkIntToScalar(-10)
, | 126 SkIntToScalar(-10)
, |
124 nullptr)); | 127 nullptr)); |
125 | 128 |
126 sk_sp<SkImageFilter> cfOffset(SkColorFilterImageFilter::Create(cf.get(),
offset.get())); | 129 sk_sp<SkImageFilter> cfOffset(SkColorFilterImageFilter::Create(cf.get(),
offset.get())); |
127 | 130 |
128 SkAutoTUnref<SkImageFilter> erodeX(SkErodeImageFilter::Create(8, 0, null
ptr, &cropRect)); | 131 sk_sp<SkImageFilter> erodeX(SkErodeImageFilter::Make(8, 0, nullptr, &cro
pRect)); |
129 SkAutoTUnref<SkImageFilter> erodeY(SkErodeImageFilter::Create(0, 8, null
ptr, &cropRect)); | 132 sk_sp<SkImageFilter> erodeY(SkErodeImageFilter::Make(0, 8, nullptr, &cro
pRect)); |
130 | 133 |
131 SkImageFilter* filters[] = { | 134 sk_sp<SkImageFilter> filters[] = { |
132 nullptr, | 135 nullptr, |
133 SkColorFilterImageFilter::Create(cf.get(), nullptr, &cropRect), | 136 sk_sp<SkImageFilter>(SkColorFilterImageFilter::Create(cf.get(), null
ptr, &cropRect)), |
134 SkBlurImageFilter::Make(0.0f, 0.0f, nullptr, &cropRect).release(), | 137 SkBlurImageFilter::Make(0.0f, 0.0f, nullptr, &cropRect), |
135 SkBlurImageFilter::Make(1.0f, 1.0f, nullptr, &cropRect).release(), | 138 SkBlurImageFilter::Make(1.0f, 1.0f, nullptr, &cropRect), |
136 SkBlurImageFilter::Make(8.0f, 0.0f, nullptr, &cropRect).release(), | 139 SkBlurImageFilter::Make(8.0f, 0.0f, nullptr, &cropRect), |
137 SkBlurImageFilter::Make(0.0f, 8.0f, nullptr, &cropRect).release(), | 140 SkBlurImageFilter::Make(0.0f, 8.0f, nullptr, &cropRect), |
138 SkBlurImageFilter::Make(8.0f, 8.0f, nullptr, &cropRect).release(), | 141 SkBlurImageFilter::Make(8.0f, 8.0f, nullptr, &cropRect), |
139 SkErodeImageFilter::Create(1, 1, nullptr, &cropRect), | 142 SkErodeImageFilter::Make(1, 1, nullptr, &cropRect), |
140 SkErodeImageFilter::Create(8, 0, erodeY, &cropRect), | 143 SkErodeImageFilter::Make(8, 0, std::move(erodeY), &cropRect), |
141 SkErodeImageFilter::Create(0, 8, erodeX, &cropRect), | 144 SkErodeImageFilter::Make(0, 8, std::move(erodeX), &cropRect), |
142 SkErodeImageFilter::Create(8, 8, nullptr, &cropRect), | 145 SkErodeImageFilter::Make(8, 8, nullptr, &cropRect), |
143 SkMergeImageFilter::Make(nullptr, std::move(cfOffset), | 146 SkMergeImageFilter::Make(nullptr, |
144 SkXfermode::kSrcOver_Mode, &cropRect).relea
se(), | 147 std::move(cfOffset), |
145 SkBlurImageFilter::Make(8.0f, 8.0f, nullptr, &bogusRect).release(), | 148 SkXfermode::kSrcOver_Mode, |
146 SkColorFilterImageFilter::Create(cf.get(), nullptr, &bogusRect), | 149 &cropRect), |
| 150 SkBlurImageFilter::Make(8.0f, 8.0f, nullptr, &bogusRect), |
| 151 sk_sp<SkImageFilter>(SkColorFilterImageFilter::Create(cf.get(), null
ptr, &bogusRect)), |
147 }; | 152 }; |
148 | 153 |
149 SkRect r = SkRect::MakeWH(SkIntToScalar(64), SkIntToScalar(64)); | 154 SkRect r = SkRect::MakeWH(SkIntToScalar(64), SkIntToScalar(64)); |
150 SkScalar MARGIN = SkIntToScalar(16); | 155 SkScalar MARGIN = SkIntToScalar(16); |
151 SkScalar DX = r.width() + MARGIN; | 156 SkScalar DX = r.width() + MARGIN; |
152 SkScalar DY = r.height() + MARGIN; | 157 SkScalar DY = r.height() + MARGIN; |
153 | 158 |
154 canvas->translate(MARGIN, MARGIN); | 159 canvas->translate(MARGIN, MARGIN); |
155 for (size_t j = 0; j < SK_ARRAY_COUNT(drawProc); ++j) { | 160 for (size_t j = 0; j < SK_ARRAY_COUNT(drawProc); ++j) { |
156 canvas->save(); | 161 canvas->save(); |
157 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { | 162 for (size_t i = 0; i < SK_ARRAY_COUNT(filters); ++i) { |
158 SkPaint paint; | 163 SkPaint paint; |
159 canvas->drawBitmap(fCheckerboard, 0, 0); | 164 canvas->drawBitmap(fCheckerboard, 0, 0); |
160 drawProc[j](canvas, r, filters[i]); | 165 drawProc[j](canvas, r, filters[i]); |
161 canvas->translate(0, DY); | 166 canvas->translate(0, DY); |
162 } | 167 } |
163 canvas->restore(); | 168 canvas->restore(); |
164 canvas->translate(DX, 0); | 169 canvas->translate(DX, 0); |
165 } | 170 } |
166 | |
167 for(size_t j = 0; j < SK_ARRAY_COUNT(filters); ++j) { | |
168 SkSafeUnref(filters[j]); | |
169 } | |
170 } | 171 } |
171 | 172 |
172 private: | 173 private: |
173 SkBitmap fCheckerboard; | 174 SkBitmap fCheckerboard; |
174 typedef GM INHERITED; | 175 typedef GM INHERITED; |
175 }; | 176 }; |
176 | 177 |
177 /////////////////////////////////////////////////////////////////////////////// | 178 /////////////////////////////////////////////////////////////////////////////// |
178 | 179 |
179 DEF_GM( return new ImageFiltersCroppedGM; ) | 180 DEF_GM( return new ImageFiltersCroppedGM; ) |
OLD | NEW |