blob: ca49a02bd3f09d9435d1061c4b6d214c48f3f9f4 [file] [log] [blame]
epoger@google.comec3ed6a2011-07-28 14:26:00 +00001
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +00008#include "gm.h"
robertphillips@google.comb7061172013-09-06 14:16:12 +00009#include "SkBlurMask.h"
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000010#include "SkBlurDrawLooper.h"
11
12namespace skiagm {
13
14///////////////////////////////////////////////////////////////////////////////
15
reed@google.come3605d02011-05-26 15:12:35 +000016static void setup(SkPaint* paint, SkColor c, SkScalar strokeWidth) {
17 paint->setColor(c);
18 if (strokeWidth < 0) {
19 paint->setStyle(SkPaint::kFill_Style);
20 } else {
21 paint->setStyle(SkPaint::kStroke_Style);
22 paint->setStrokeWidth(strokeWidth);
23 }
24}
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000025
reed@google.come3605d02011-05-26 15:12:35 +000026class ShadowsGM : public GM {
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000027public:
28 SkPath fCirclePath;
reed@google.come3605d02011-05-26 15:12:35 +000029 SkRect fRect;
30
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000031 ShadowsGM() {
bsalomon@google.com48dd1a22011-10-31 14:18:20 +000032 this->setBGColor(0xFFDDDDDD);
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000033 fCirclePath.addCircle(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(10) );
reed@google.come3605d02011-05-26 15:12:35 +000034 fRect.set(SkIntToScalar(10), SkIntToScalar(10),
35 SkIntToScalar(30), SkIntToScalar(30));
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000036 }
37
38protected:
commit-bot@chromium.orga90c6802014-04-30 13:20:45 +000039 virtual uint32_t onGetFlags() const SK_OVERRIDE {
40 return kSkipTiled_Flag;
41 }
42
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000043 virtual SkString onShortName() {
44 return SkString("shadows");
45 }
46
47 virtual SkISize onISize() {
tfarinaf5393182014-06-09 23:59:03 -070048 return SkISize::Make(200, 120);
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000049 }
50
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000051 virtual void onDraw(SkCanvas* canvas) {
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000052 SkBlurDrawLooper* shadowLoopers[5];
53 shadowLoopers[0] =
commit-bot@chromium.org73cb1532014-04-15 15:48:36 +000054 SkBlurDrawLooper::Create(SK_ColorBLUE,
55 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(10)),
56 SkIntToScalar(5), SkIntToScalar(10),
57 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
58 SkBlurDrawLooper::kOverrideColor_BlurFlag |
59 SkBlurDrawLooper::kHighQuality_BlurFlag);
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000060 SkAutoUnref aurL0(shadowLoopers[0]);
61 shadowLoopers[1] =
commit-bot@chromium.org73cb1532014-04-15 15:48:36 +000062 SkBlurDrawLooper::Create(SK_ColorBLUE,
63 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(10)),
64 SkIntToScalar(5), SkIntToScalar(10),
65 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
66 SkBlurDrawLooper::kOverrideColor_BlurFlag);
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000067 SkAutoUnref aurL1(shadowLoopers[1]);
68 shadowLoopers[2] =
commit-bot@chromium.org73cb1532014-04-15 15:48:36 +000069 SkBlurDrawLooper::Create(SK_ColorBLACK,
70 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)),
71 SkIntToScalar(5),
72 SkIntToScalar(10),
73 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
74 SkBlurDrawLooper::kHighQuality_BlurFlag);
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000075 SkAutoUnref aurL2(shadowLoopers[2]);
76 shadowLoopers[3] =
commit-bot@chromium.org73cb1532014-04-15 15:48:36 +000077 SkBlurDrawLooper::Create(0x7FFF0000,
78 SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)),
79 SkIntToScalar(-5), SkIntToScalar(-10),
80 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
81 SkBlurDrawLooper::kOverrideColor_BlurFlag |
82 SkBlurDrawLooper::kHighQuality_BlurFlag);
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000083 SkAutoUnref aurL3(shadowLoopers[3]);
84 shadowLoopers[4] =
commit-bot@chromium.org73cb1532014-04-15 15:48:36 +000085 SkBlurDrawLooper::Create(SK_ColorBLACK, SkIntToScalar(0),
86 SkIntToScalar(5), SkIntToScalar(5),
87 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
88 SkBlurDrawLooper::kOverrideColor_BlurFlag |
89 SkBlurDrawLooper::kHighQuality_BlurFlag);
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +000090 SkAutoUnref aurL4(shadowLoopers[4]);
91
reed@google.come3605d02011-05-26 15:12:35 +000092 static const struct {
93 SkColor fColor;
94 SkScalar fStrokeWidth;
95 } gRec[] = {
96 { SK_ColorRED, -SK_Scalar1 },
97 { SK_ColorGREEN, SkIntToScalar(4) },
junov@chromium.org7c545bd2012-04-05 13:20:59 +000098 { SK_ColorBLUE, SkIntToScalar(0)},
reed@google.come3605d02011-05-26 15:12:35 +000099 };
100
101 SkPaint paint;
102 paint.setAntiAlias(true);
103 for (size_t i = 0; i < SK_ARRAY_COUNT(shadowLoopers); ++i) {
104 SkAutoCanvasRestore acr(canvas, true);
105
106 paint.setLooper(shadowLoopers[i]);
107
tomhudson@google.comffe39bd2012-05-17 15:38:00 +0000108 canvas->translate(SkIntToScalar((unsigned int)i*40), SkIntToScalar(0));
reed@google.come3605d02011-05-26 15:12:35 +0000109 setup(&paint, gRec[0].fColor, gRec[0].fStrokeWidth);
110 canvas->drawRect(fRect, paint);
111
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +0000112 canvas->translate(SkIntToScalar(0), SkIntToScalar(40));
reed@google.come3605d02011-05-26 15:12:35 +0000113 setup(&paint, gRec[1].fColor, gRec[1].fStrokeWidth);
114 canvas->drawPath(fCirclePath, paint);
junov@chromium.org7c545bd2012-04-05 13:20:59 +0000115
116 canvas->translate(SkIntToScalar(0), SkIntToScalar(40));
117 setup(&paint, gRec[2].fColor, gRec[2].fStrokeWidth);
118 canvas->drawPath(fCirclePath, paint);
senorblanco@chromium.org4868e6b2011-02-18 19:03:01 +0000119 }
120}
121
122private:
123 typedef GM INHERITED;
124};
125
126///////////////////////////////////////////////////////////////////////////////
127
128static GM* MyFactory(void*) { return new ShadowsGM; }
129static GMRegistry reg(MyFactory);
130
131}