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