1
2/*
3 * Copyright 2012 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 "SampleCode.h"
9#include "SkBlurMaskFilter.h"
10#include "SkColorPriv.h"
11#include "SkCanvas.h"
12#include "SkRandom.h"
13
14class AnimBlurView : public SampleView {
15public:
16    AnimBlurView() {
17    }
18
19protected:
20    // overrides from SkEventSink
21    virtual bool onQuery(SkEvent* evt) {
22        if (SampleCode::TitleQ(*evt)) {
23            SampleCode::TitleR(evt, "AnimBlur");
24            return true;
25        }
26        return this->INHERITED::onQuery(evt);
27    }
28
29    virtual void onDrawContent(SkCanvas* canvas) {
30
31        SkScalar blurSigma = SampleCode::GetAnimSinScalar(100 * SK_Scalar1,
32                                                          4 * SK_Scalar1,
33                                                          5 * SK_Scalar1);
34
35        SkScalar circleRadius = 3 * SK_Scalar1 +
36                                SampleCode::GetAnimSinScalar(150 * SK_Scalar1,
37                                                             25 * SK_Scalar1,
38                                                             3 * SK_Scalar1);
39
40        static const SkBlurStyle gStyles[] = {
41            kNormal_SkBlurStyle,
42            kInner_SkBlurStyle,
43            kSolid_SkBlurStyle,
44            kOuter_SkBlurStyle,
45        };
46        SkRandom random;
47
48        for (size_t i = 0; i < SK_ARRAY_COUNT(gStyles); ++i) {
49            SkMaskFilter* mf = SkBlurMaskFilter::Create(
50                                       gStyles[i],
51                                       blurSigma,
52                                       SkBlurMaskFilter::kHighQuality_BlurFlag);
53            SkPaint paint;
54            SkSafeUnref(paint.setMaskFilter(mf));
55            paint.setColor(random.nextU() | 0xff000000);
56            canvas->drawCircle(200 * SK_Scalar1 + 400 * (i % 2) * SK_Scalar1,
57                               200 * SK_Scalar1 + i / 2 * 400 * SK_Scalar1,
58                               circleRadius, paint);
59        }
60        this->inval(NULL);
61    }
62
63private:
64    typedef SkView INHERITED;
65};
66
67//////////////////////////////////////////////////////////////////////////////
68
69static SkView* MyFactory() { return new AnimBlurView; }
70static SkViewRegister reg(MyFactory);
71