blob: a8483d0882b2ae10db45a32677a90229fdd18427 [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"
Ben Wagner339b84e2017-11-10 16:24:50 -05009#include "SkBlurMask.h"
reedcc0e3112014-09-10 10:20:24 -070010#include "SkCanvas.h"
11#include "SkColorFilter.h"
Ben Wagner339b84e2017-11-10 16:24:50 -050012#include "SkEmbossMaskFilter.h"
reedcc0e3112014-09-10 10:20:24 -070013
reedcc0e3112014-09-10 10:20:24 -070014static 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
26class EmbossGM : public skiagm::GM {
27public:
28 EmbossGM() {
29 }
30
31protected:
mtklein36352bf2015-03-25 18:17:31 -070032 SkString onShortName() override {
reedcc0e3112014-09-10 10:20:24 -070033 return SkString("emboss");
34 }
35
mtklein36352bf2015-03-25 18:17:31 -070036 SkISize onISize() override {
reedcc0e3112014-09-10 10:20:24 -070037 return SkISize::Make(600, 120);
38 }
39
mtklein36352bf2015-03-25 18:17:31 -070040 void onDraw(SkCanvas* canvas) override {
reedcc0e3112014-09-10 10:20:24 -070041 SkPaint paint;
42 SkBitmap bm = make_bm();
43 canvas->drawBitmap(bm, 10, 10, &paint);
Ben Wagner16622572017-11-10 16:24:50 -050044 canvas->translate(bm.width() + SkIntToScalar(10), 0);
Ben Wagner339b84e2017-11-10 16:24:50 -050045
46 paint.setMaskFilter(SkEmbossMaskFilter::Make(
47 SkBlurMask::ConvertRadiusToSigma(3),
48 { { SK_Scalar1, SK_Scalar1, SK_Scalar1 }, 0, 128, 16*2 }));
Brian Osman3e31e992017-11-14 16:16:39 +000049 canvas->drawBitmap(bm, 10, 10, &paint);
Ben Wagner339b84e2017-11-10 16:24:50 -050050 canvas->translate(bm.width() + SkIntToScalar(10), 0);
reedcc0e3112014-09-10 10:20:24 -070051
52 // this combination of emboss+colorfilter used to crash -- so we exercise it to
53 // confirm that we have a fix.
Mike Reed7d954ad2016-10-28 15:42:34 -040054 paint.setColorFilter(SkColorFilter::MakeModeFilter(0xFFFF0000, SkBlendMode::kSrcATop));
Brian Osman3e31e992017-11-14 16:16:39 +000055 canvas->drawBitmap(bm, 10, 10, &paint);
Ben Wagner339b84e2017-11-10 16:24:50 -050056 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);
reedcc0e3112014-09-10 10:20:24 -070074 }
75
76private:
77 typedef skiagm::GM INHERITED;
78};
79
halcanary385fe4d2015-08-26 13:07:48 -070080DEF_GM(return new EmbossGM;)