• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/gm.h"
9 #include "include/core/SkBitmap.h"
10 #include "include/core/SkBlendMode.h"
11 #include "include/core/SkCanvas.h"
12 #include "include/core/SkColor.h"
13 #include "include/core/SkColorFilter.h"
14 #include "include/core/SkFont.h"
15 #include "include/core/SkMaskFilter.h"
16 #include "include/core/SkPaint.h"
17 #include "include/core/SkScalar.h"
18 #include "include/core/SkShader.h"
19 #include "include/core/SkSize.h"
20 #include "include/core/SkString.h"
21 #include "include/core/SkTypeface.h"
22 #include "src/core/SkBlurMask.h"
23 #include "src/effects/SkEmbossMaskFilter.h"
24 
make_bm()25 static SkBitmap make_bm() {
26     SkBitmap bm;
27     bm.allocN32Pixels(100, 100);
28 
29     SkCanvas canvas(bm);
30     canvas.clear(0);
31     SkPaint paint;
32     paint.setAntiAlias(true);
33     canvas.drawCircle(50, 50, 50, paint);
34     return bm;
35 }
36 
37 class EmbossGM : public skiagm::GM {
38 public:
EmbossGM()39     EmbossGM() {
40     }
41 
42 protected:
onShortName()43     SkString onShortName() override {
44         return SkString("emboss");
45     }
46 
onISize()47     SkISize onISize() override {
48         return SkISize::Make(600, 120);
49     }
50 
onDraw(SkCanvas * canvas)51     void onDraw(SkCanvas* canvas) override {
52         SkPaint paint;
53         SkBitmap bm = make_bm();
54         canvas->drawBitmap(bm, 10, 10, &paint);
55         canvas->translate(bm.width() + SkIntToScalar(10), 0);
56 
57         paint.setMaskFilter(SkEmbossMaskFilter::Make(
58             SkBlurMask::ConvertRadiusToSigma(3),
59             { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 }));
60         canvas->drawBitmap(bm, 10, 10, &paint);
61         canvas->translate(bm.width() + SkIntToScalar(10), 0);
62 
63         // this combination of emboss+colorfilter used to crash -- so we exercise it to
64         // confirm that we have a fix.
65         paint.setColorFilter(SkColorFilters::Blend(0xFFFF0000, SkBlendMode::kSrcATop));
66         canvas->drawBitmap(bm, 10, 10, &paint);
67         canvas->translate(bm.width() + SkIntToScalar(10), 0);
68 
69         paint.setAntiAlias(true);
70         paint.setStyle(SkPaint::kStroke_Style);
71         paint.setStrokeWidth(SkIntToScalar(10));
72         paint.setMaskFilter(SkEmbossMaskFilter::Make(
73             SkBlurMask::ConvertRadiusToSigma(4),
74             { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 }));
75         paint.setColorFilter(nullptr);
76         paint.setShader(SkShaders::Color(SK_ColorBLUE));
77         paint.setDither(true);
78         canvas->drawCircle(SkIntToScalar(50), SkIntToScalar(50),
79                            SkIntToScalar(30), paint);
80         canvas->translate(SkIntToScalar(100), 0);
81 
82         paint.setStyle(SkPaint::kFill_Style);
83         canvas->drawString("Hello", 0, 50, SkFont(nullptr, 50), paint);
84     }
85 
86 private:
87     typedef skiagm::GM INHERITED;
88 };
89 
90 DEF_GM(return new EmbossGM;)
91