Chromium Code Reviews| 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_ref_sp(SkColorFilterImageFilter::Create(cf.get(), nullptr, &cropR ect)), |
|
f(malita)
2016/04/04 18:13:09
Don't we need to adopt here (instead of ref)?
robertphillips
2016/04/04 19:13:10
Done.
| |
| 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_ref_sp(SkColorFilterImageFilter::Create(cf.get(), nullptr, &bogus Rect)), | |
|
f(malita)
2016/04/04 18:13:09
Ditto.
robertphillips
2016/04/04 19:13:10
Done.
| |
| 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 |