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