blurs.cpp revision 0b15698a8c76bb8abc1b555c1d91892669b4118f
1#include "gm.h"
2#include "SkBlurMaskFilter.h"
3
4namespace skiagm {
5
6class BlursGM : public GM {
7public:
8    BlursGM() {}
9
10protected:
11    virtual SkString onShortName() {
12        return SkString("blurs");
13    }
14
15    virtual SkISize onISize() {
16        return make_isize(700, 500);
17    }
18
19    void drawBG(SkCanvas* canvas) {
20        canvas->drawColor(0xFFDDDDDD);
21    }
22
23    virtual void onDraw(SkCanvas* canvas) {
24        drawBG(canvas);
25
26        SkBlurMaskFilter::BlurStyle NONE = SkBlurMaskFilter::BlurStyle(-999);
27        static const struct {
28            SkBlurMaskFilter::BlurStyle fStyle;
29            int                         fCx, fCy;
30        } gRecs[] = {
31            { NONE,                                 0,  0 },
32            { SkBlurMaskFilter::kInner_BlurStyle,  -1,  0 },
33            { SkBlurMaskFilter::kNormal_BlurStyle,  0,  1 },
34            { SkBlurMaskFilter::kSolid_BlurStyle,   0, -1 },
35            { SkBlurMaskFilter::kOuter_BlurStyle,   1,  0 },
36        };
37
38        SkPaint paint;
39        paint.setAntiAlias(true);
40        paint.setTextSize(SkIntToScalar(25));
41        canvas->translate(SkIntToScalar(-40), SkIntToScalar(0));
42
43        SkBlurMaskFilter::BlurFlags flags = SkBlurMaskFilter::kNone_BlurFlag;
44        for (int j = 0; j < 2; j++) {
45            canvas->save();
46            paint.setColor(SK_ColorBLUE);
47            for (size_t i = 0; i < SK_ARRAY_COUNT(gRecs); i++) {
48                if (gRecs[i].fStyle != NONE) {
49                    SkMaskFilter* mf = SkBlurMaskFilter::Create(
50                            SkIntToScalar(20), gRecs[i].fStyle, flags
51                    );
52                    paint.setMaskFilter(mf)->unref();
53                } else {
54                    paint.setMaskFilter(NULL);
55                }
56                canvas->drawCircle(SkIntToScalar(200 + gRecs[i].fCx*100)
57                                   , SkIntToScalar(200 + gRecs[i].fCy*100)
58                                   , SkIntToScalar(50)
59                                   , paint);
60            }
61            // draw text
62            {
63                SkMaskFilter* mf = SkBlurMaskFilter::Create(
64                        SkIntToScalar(4)
65                        , SkBlurMaskFilter::kNormal_BlurStyle
66                        , flags
67                );
68                paint.setMaskFilter(mf)->unref();
69                SkScalar x = SkIntToScalar(70);
70                SkScalar y = SkIntToScalar(400);
71                paint.setColor(SK_ColorBLACK);
72                canvas->drawText("Hamburgefons Style", 18, x, y, paint);
73                canvas->drawText("Hamburgefons Style", 18
74                                 , x, y + SkIntToScalar(50), paint);
75                paint.setMaskFilter(NULL);
76                paint.setColor(SK_ColorWHITE);
77                x -= SkIntToScalar(2);
78                y -= SkIntToScalar(2);
79                canvas->drawText("Hamburgefons Style", 18, x, y, paint);
80            }
81            canvas->restore();
82            flags = SkBlurMaskFilter::kHighQuality_BlurFlag;
83            canvas->translate(SkIntToScalar(350), SkIntToScalar(0));
84        }
85    }
86
87private:
88    typedef GM INHERITED;
89};
90
91//////////////////////////////////////////////////////////////////////////////
92
93static GM* MyFactory(void*) { return new BlursGM; }
94static GMRegistry reg(MyFactory);
95
96}
97
98