1
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 */
8 #include "gm.h"
9 #include "SkBlurDrawLooper.h"
10
11 namespace skiagm {
12
13 ///////////////////////////////////////////////////////////////////////////////
14
setup(SkPaint * paint,SkColor c,SkScalar strokeWidth)15 static void setup(SkPaint* paint, SkColor c, SkScalar strokeWidth) {
16 paint->setColor(c);
17 if (strokeWidth < 0) {
18 paint->setStyle(SkPaint::kFill_Style);
19 } else {
20 paint->setStyle(SkPaint::kStroke_Style);
21 paint->setStrokeWidth(strokeWidth);
22 }
23 }
24
25 class ShadowsGM : public GM {
26 public:
27 SkPath fCirclePath;
28 SkRect fRect;
29
ShadowsGM()30 ShadowsGM() {
31 this->setBGColor(0xFFDDDDDD);
32 fCirclePath.addCircle(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(10) );
33 fRect.set(SkIntToScalar(10), SkIntToScalar(10),
34 SkIntToScalar(30), SkIntToScalar(30));
35 }
36
37 protected:
onShortName()38 virtual SkString onShortName() {
39 return SkString("shadows");
40 }
41
onISize()42 virtual SkISize onISize() {
43 return make_isize(200, 120);
44 }
45
onDraw(SkCanvas * canvas)46 virtual void onDraw(SkCanvas* canvas) {
47 SkBlurDrawLooper* shadowLoopers[5];
48 shadowLoopers[0] =
49 new SkBlurDrawLooper (SkIntToScalar(10), SkIntToScalar(5),
50 SkIntToScalar(10), 0xFF0000FF,
51 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
52 SkBlurDrawLooper::kOverrideColor_BlurFlag |
53 SkBlurDrawLooper::kHighQuality_BlurFlag );
54 SkAutoUnref aurL0(shadowLoopers[0]);
55 shadowLoopers[1] =
56 new SkBlurDrawLooper (SkIntToScalar(10), SkIntToScalar(5),
57 SkIntToScalar(10), 0xFF0000FF,
58 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
59 SkBlurDrawLooper::kOverrideColor_BlurFlag );
60 SkAutoUnref aurL1(shadowLoopers[1]);
61 shadowLoopers[2] =
62 new SkBlurDrawLooper (SkIntToScalar(5), SkIntToScalar(5),
63 SkIntToScalar(10), 0xFF000000,
64 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
65 SkBlurDrawLooper::kHighQuality_BlurFlag );
66 SkAutoUnref aurL2(shadowLoopers[2]);
67 shadowLoopers[3] =
68 new SkBlurDrawLooper (SkIntToScalar(5), SkIntToScalar(-5),
69 SkIntToScalar(-10), 0x7FFF0000,
70 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
71 SkBlurDrawLooper::kOverrideColor_BlurFlag |
72 SkBlurDrawLooper::kHighQuality_BlurFlag );
73 SkAutoUnref aurL3(shadowLoopers[3]);
74 shadowLoopers[4] =
75 new SkBlurDrawLooper (SkIntToScalar(0), SkIntToScalar(5),
76 SkIntToScalar(5), 0xFF000000,
77 SkBlurDrawLooper::kIgnoreTransform_BlurFlag |
78 SkBlurDrawLooper::kOverrideColor_BlurFlag |
79 SkBlurDrawLooper::kHighQuality_BlurFlag );
80 SkAutoUnref aurL4(shadowLoopers[4]);
81
82 static const struct {
83 SkColor fColor;
84 SkScalar fStrokeWidth;
85 } gRec[] = {
86 { SK_ColorRED, -SK_Scalar1 },
87 { SK_ColorGREEN, SkIntToScalar(4) },
88 { SK_ColorBLUE, SkIntToScalar(0)},
89 };
90
91 SkPaint paint;
92 paint.setAntiAlias(true);
93 for (size_t i = 0; i < SK_ARRAY_COUNT(shadowLoopers); ++i) {
94 SkAutoCanvasRestore acr(canvas, true);
95
96 paint.setLooper(shadowLoopers[i]);
97
98 canvas->translate(SkIntToScalar((unsigned int)i*40), SkIntToScalar(0));
99 setup(&paint, gRec[0].fColor, gRec[0].fStrokeWidth);
100 canvas->drawRect(fRect, paint);
101
102 canvas->translate(SkIntToScalar(0), SkIntToScalar(40));
103 setup(&paint, gRec[1].fColor, gRec[1].fStrokeWidth);
104 canvas->drawPath(fCirclePath, paint);
105
106 canvas->translate(SkIntToScalar(0), SkIntToScalar(40));
107 setup(&paint, gRec[2].fColor, gRec[2].fStrokeWidth);
108 canvas->drawPath(fCirclePath, paint);
109 }
110 }
111
112 private:
113 typedef GM INHERITED;
114 };
115
116 ///////////////////////////////////////////////////////////////////////////////
117
MyFactory(void *)118 static GM* MyFactory(void*) { return new ShadowsGM; }
119 static GMRegistry reg(MyFactory);
120
121 }
122