1 /* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "gm.h" 9 #include "SkBlurMask.h" 10 #include "SkCanvas.h" 11 #include "SkColorFilter.h" 12 #include "SkEmbossMaskFilter.h" 13 14 static SkBitmap make_bm() { 15 SkBitmap bm; 16 bm.allocN32Pixels(100, 100); 17 18 SkCanvas canvas(bm); 19 canvas.clear(0); 20 SkPaint paint; 21 paint.setAntiAlias(true); 22 canvas.drawCircle(50, 50, 50, paint); 23 return bm; 24 } 25 26 class EmbossGM : public skiagm::GM { 27 public: 28 EmbossGM() { 29 } 30 31 protected: 32 SkString onShortName() override { 33 return SkString("emboss"); 34 } 35 36 SkISize onISize() override { 37 return SkISize::Make(600, 120); 38 } 39 40 void onDraw(SkCanvas* canvas) override { 41 SkPaint paint; 42 SkBitmap bm = make_bm(); 43 canvas->drawBitmap(bm, 10, 10, &paint); 44 canvas->translate(bm.width() + SkIntToScalar(10), 0); 45 46 paint.setMaskFilter(SkEmbossMaskFilter::Make( 47 SkBlurMask::ConvertRadiusToSigma(3), 48 { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 })); 49 canvas->drawBitmap(bm, 10, 10, &paint); 50 canvas->translate(bm.width() + SkIntToScalar(10), 0); 51 52 // this combination of emboss+colorfilter used to crash -- so we exercise it to 53 // confirm that we have a fix. 54 paint.setColorFilter(SkColorFilter::MakeModeFilter(0xFFFF0000, SkBlendMode::kSrcATop)); 55 canvas->drawBitmap(bm, 10, 10, &paint); 56 canvas->translate(bm.width() + SkIntToScalar(10), 0); 57 58 paint.setAntiAlias(true); 59 paint.setStyle(SkPaint::kStroke_Style); 60 paint.setStrokeWidth(SkIntToScalar(10)); 61 paint.setMaskFilter(SkEmbossMaskFilter::Make( 62 SkBlurMask::ConvertRadiusToSigma(4), 63 { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 })); 64 paint.setColorFilter(nullptr); 65 paint.setShader(SkShader::MakeColorShader(SK_ColorBLUE)); 66 paint.setDither(true); 67 canvas->drawCircle(SkIntToScalar(50), SkIntToScalar(50), 68 SkIntToScalar(30), paint); 69 canvas->translate(SkIntToScalar(100), 0); 70 71 paint.setStyle(SkPaint::kFill_Style); 72 paint.setTextSize(50); 73 canvas->drawText("Hello", 5, 0, 50, paint); 74 } 75 76 private: 77 typedef skiagm::GM INHERITED; 78 }; 79 80 DEF_GM(return new EmbossGM;) 81