blob: 82b5fd9f8ecaad7d93b328f85f10de943c0f5a17 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001/*
2 * Copyright 2011 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 */
bungemand3ebb482015-08-05 13:57:49 -07007
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +00008#include "gm.h"
reedfb8c1fc2015-08-04 18:44:56 -07009#include "SkBlurDrawLooper.h"
bungemand3ebb482015-08-05 13:57:49 -070010#include "SkBlurMask.h"
11#include "SkPath.h"
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000012
13namespace skiagm {
14
15///////////////////////////////////////////////////////////////////////////////
16
reed@google.come3605d02011-05-26 15:12:35 +000017static void setup(SkPaint* paint, SkColor c, SkScalar strokeWidth) {
18 paint->setColor(c);
19 if (strokeWidth < 0) {
20 paint->setStyle(SkPaint::kFill_Style);
21 } else {
22 paint->setStyle(SkPaint::kStroke_Style);
23 paint->setStrokeWidth(strokeWidth);
24 }
25}
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000026
reed@google.come3605d02011-05-26 15:12:35 +000027class ShadowsGM : public GM {
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000028public:
29 SkPath fCirclePath;
reed@google.come3605d02011-05-26 15:12:35 +000030 SkRect fRect;
31
caryclark63c684a2015-02-25 09:04:04 -080032protected:
mtklein36352bf2015-03-25 18:17:31 -070033 void onOnceBeforeDraw() override {
caryclark65cdba62015-06-15 06:51:08 -070034 this->setBGColor(sk_tool_utils::color_to_565(0xFFDDDDDD));
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000035 fCirclePath.addCircle(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(10) );
reed@google.come3605d02011-05-26 15:12:35 +000036 fRect.set(SkIntToScalar(10), SkIntToScalar(10),
37 SkIntToScalar(30), SkIntToScalar(30));
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000038 }
39
mtkleinf0599002015-07-13 06:18:39 -070040 SkString onShortName() override {
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000041 return SkString("shadows");
42 }
43
mtkleinf0599002015-07-13 06:18:39 -070044 SkISize onISize() override {
tfarinaf5393182014-06-09 23:59:03 -070045 return SkISize::Make(200, 120);
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000046 }
47
mtkleinf0599002015-07-13 06:18:39 -070048 void onDraw(SkCanvas* canvas) override {
49 SkBlurDrawLooper* shadowLoopers[5];
50 shadowLoopers[0] =
51 SkBlurDrawLooper::Create(SK_ColorBLUE,
52 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(10)),
53 SkIntToScalar(5), SkIntToScalar(10),
54 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
55 SkBlurDrawLooper::kOverrideColor_BlurFlag |
56 SkBlurDrawLooper::kHighQuality_BlurFlag);
57 SkAutoUnref aurL0(shadowLoopers[0]);
58 shadowLoopers[1] =
59 SkBlurDrawLooper::Create(SK_ColorBLUE,
60 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(10)),
61 SkIntToScalar(5), SkIntToScalar(10),
62 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
63 SkBlurDrawLooper::kOverrideColor_BlurFlag);
64 SkAutoUnref aurL1(shadowLoopers[1]);
65 shadowLoopers[2] =
66 SkBlurDrawLooper::Create(SK_ColorBLACK,
67 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)),
68 SkIntToScalar(5),
69 SkIntToScalar(10),
70 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
71 SkBlurDrawLooper::kHighQuality_BlurFlag);
72 SkAutoUnref aurL2(shadowLoopers[2]);
73 shadowLoopers[3] =
74 SkBlurDrawLooper::Create(0x7FFF0000,
75 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)),
76 SkIntToScalar(-5), SkIntToScalar(-10),
77 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
78 SkBlurDrawLooper::kOverrideColor_BlurFlag |
79 SkBlurDrawLooper::kHighQuality_BlurFlag);
80 SkAutoUnref aurL3(shadowLoopers[3]);
81 shadowLoopers[4] =
82 SkBlurDrawLooper::Create(SK_ColorBLACK, SkIntToScalar(0),
83 SkIntToScalar(5), SkIntToScalar(5),
84 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
85 SkBlurDrawLooper::kOverrideColor_BlurFlag |
86 SkBlurDrawLooper::kHighQuality_BlurFlag);
87 SkAutoUnref aurL4(shadowLoopers[4]);
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000088
mtkleinf0599002015-07-13 06:18:39 -070089 static const struct {
90 SkColor fColor;
91 SkScalar fStrokeWidth;
92 } gRec[] = {
93 { SK_ColorRED, -SK_Scalar1 },
94 { SK_ColorGREEN, SkIntToScalar(4) },
95 { SK_ColorBLUE, SkIntToScalar(0)},
96 };
reed@google.come3605d02011-05-26 15:12:35 +000097
mtkleinf0599002015-07-13 06:18:39 -070098 SkPaint paint;
99 paint.setAntiAlias(true);
100 for (size_t i = 0; i < SK_ARRAY_COUNT(shadowLoopers); ++i) {
101 SkAutoCanvasRestore acr(canvas, true);
reed@google.come3605d02011-05-26 15:12:35 +0000102
mtkleinf0599002015-07-13 06:18:39 -0700103 paint.setLooper(shadowLoopers[i]);
reed@google.come3605d02011-05-26 15:12:35 +0000104
mtkleinf0599002015-07-13 06:18:39 -0700105 canvas->translate(SkIntToScalar((unsigned int)i*40), SkIntToScalar(0));
106 setup(&paint, gRec[0].fColor, gRec[0].fStrokeWidth);
107 canvas->drawRect(fRect, paint);
reed@google.come3605d02011-05-26 15:12:35 +0000108
mtkleinf0599002015-07-13 06:18:39 -0700109 canvas->translate(SkIntToScalar(0), SkIntToScalar(40));
110 setup(&paint, gRec[1].fColor, gRec[1].fStrokeWidth);
111 canvas->drawPath(fCirclePath, paint);
junov@chromium.org7c545bd2012-04-05 13:20:59 +0000112
mtkleinf0599002015-07-13 06:18:39 -0700113 canvas->translate(SkIntToScalar(0), SkIntToScalar(40));
114 setup(&paint, gRec[2].fColor, gRec[2].fStrokeWidth);
115 canvas->drawPath(fCirclePath, paint);
116 }
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +0000117 }
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +0000118
119private:
120 typedef GM INHERITED;
121};
122
123///////////////////////////////////////////////////////////////////////////////
124
125static GM* MyFactory(void*) { return new ShadowsGM; }
126static GMRegistry reg(MyFactory);
127
128}