• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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