blob: 2a962474eeb1cfda4488dcc0f0153bb100e05339 [file] [log] [blame]
reedcc0e3112014-09-10 10:20:24 -07001/*
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"
Hal Canary6ac0df82019-01-07 16:01:22 -05009
Ben Wagner339b84e2017-11-10 16:24:50 -050010#include "SkBlurMask.h"
reedcc0e3112014-09-10 10:20:24 -070011#include "SkCanvas.h"
12#include "SkColorFilter.h"
Ben Wagner339b84e2017-11-10 16:24:50 -050013#include "SkEmbossMaskFilter.h"
Hal Canary6ac0df82019-01-07 16:01:22 -050014#include "SkFont.h"
reedcc0e3112014-09-10 10:20:24 -070015
reedcc0e3112014-09-10 10:20:24 -070016static SkBitmap make_bm() {
17 SkBitmap bm;
18 bm.allocN32Pixels(100, 100);
19
20 SkCanvas canvas(bm);
21 canvas.clear(0);
22 SkPaint paint;
23 paint.setAntiAlias(true);
24 canvas.drawCircle(50, 50, 50, paint);
25 return bm;
26}
27
28class EmbossGM : public skiagm::GM {
29public:
30 EmbossGM() {
31 }
32
33protected:
mtklein36352bf2015-03-25 18:17:31 -070034 SkString onShortName() override {
reedcc0e3112014-09-10 10:20:24 -070035 return SkString("emboss");
36 }
37
mtklein36352bf2015-03-25 18:17:31 -070038 SkISize onISize() override {
reedcc0e3112014-09-10 10:20:24 -070039 return SkISize::Make(600, 120);
40 }
41
mtklein36352bf2015-03-25 18:17:31 -070042 void onDraw(SkCanvas* canvas) override {
reedcc0e3112014-09-10 10:20:24 -070043 SkPaint paint;
44 SkBitmap bm = make_bm();
45 canvas->drawBitmap(bm, 10, 10, &paint);
Ben Wagner16622572017-11-10 16:24:50 -050046 canvas->translate(bm.width() + SkIntToScalar(10), 0);
Ben Wagner339b84e2017-11-10 16:24:50 -050047
48 paint.setMaskFilter(SkEmbossMaskFilter::Make(
49 SkBlurMask::ConvertRadiusToSigma(3),
50 { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 }));
Brian Osman3e31e992017-11-14 16:16:39 +000051 canvas->drawBitmap(bm, 10, 10, &paint);
Ben Wagner339b84e2017-11-10 16:24:50 -050052 canvas->translate(bm.width() + SkIntToScalar(10), 0);
reedcc0e3112014-09-10 10:20:24 -070053
54 // this combination of emboss+colorfilter used to crash -- so we exercise it to
55 // confirm that we have a fix.
Mike Reed7d954ad2016-10-28 15:42:34 -040056 paint.setColorFilter(SkColorFilter::MakeModeFilter(0xFFFF0000, SkBlendMode::kSrcATop));
Brian Osman3e31e992017-11-14 16:16:39 +000057 canvas->drawBitmap(bm, 10, 10, &paint);
Ben Wagner339b84e2017-11-10 16:24:50 -050058 canvas->translate(bm.width() + SkIntToScalar(10), 0);
59
60 paint.setAntiAlias(true);
61 paint.setStyle(SkPaint::kStroke_Style);
62 paint.setStrokeWidth(SkIntToScalar(10));
63 paint.setMaskFilter(SkEmbossMaskFilter::Make(
64 SkBlurMask::ConvertRadiusToSigma(4),
65 { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 }));
66 paint.setColorFilter(nullptr);
67 paint.setShader(SkShader::MakeColorShader(SK_ColorBLUE));
68 paint.setDither(true);
69 canvas->drawCircle(SkIntToScalar(50), SkIntToScalar(50),
70 SkIntToScalar(30), paint);
71 canvas->translate(SkIntToScalar(100), 0);
72
73 paint.setStyle(SkPaint::kFill_Style);
Hal Canary6ac0df82019-01-07 16:01:22 -050074 canvas->drawString("Hello", 0, 50, SkFont(nullptr, 50), paint);
reedcc0e3112014-09-10 10:20:24 -070075 }
76
77private:
78 typedef skiagm::GM INHERITED;
79};
80
halcanary385fe4d2015-08-26 13:07:48 -070081DEF_GM(return new EmbossGM;)