1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
8c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com#include "gm.h"
9b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com#include "SkBlurMask.h"
10c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com#include "SkBlurMaskFilter.h"
11c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com
12c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.comnamespace skiagm {
13c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com
14c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.comclass BlursGM : public GM {
15c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.compublic:
1648dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    BlursGM() {
1748dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com        this->setBGColor(0xFFDDDDDD);
1848dd1a26ec07c5baa04856202e4e7e2a53e4d7e5bsalomon@google.com    }
19c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com
20c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.comprotected:
21a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    virtual uint32_t onGetFlags() const SK_OVERRIDE {
22a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org        return kSkipTiled_Flag;
23a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    }
24a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
25c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com    virtual SkString onShortName() {
26c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com        return SkString("blurs");
27c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com    }
28c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com
293c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com    virtual SkISize onISize() {
30f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina        return SkISize::Make(700, 500);
31c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com    }
32c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com
33c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com    virtual void onDraw(SkCanvas* canvas) {
34e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org        SkBlurStyle NONE = SkBlurStyle(-999);
35c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com        static const struct {
36e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org            SkBlurStyle fStyle;
37e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org            int         fCx, fCy;
38c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com        } gRecs[] = {
39e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org            { NONE,                 0,  0 },
40e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org            { kInner_SkBlurStyle,  -1,  0 },
41e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org            { kNormal_SkBlurStyle,  0,  1 },
42e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org            { kSolid_SkBlurStyle,   0, -1 },
43e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org            { kOuter_SkBlurStyle,   1,  0 },
44c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com        };
45c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com
46c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com        SkPaint paint;
47c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com        paint.setAntiAlias(true);
483c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com        paint.setTextSize(SkIntToScalar(25));
493c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com        canvas->translate(SkIntToScalar(-40), SkIntToScalar(0));
50c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com
51c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com        SkBlurMaskFilter::BlurFlags flags = SkBlurMaskFilter::kNone_BlurFlag;
52c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com        for (int j = 0; j < 2; j++) {
53c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com            canvas->save();
54c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com            paint.setColor(SK_ColorBLUE);
55c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com            for (size_t i = 0; i < SK_ARRAY_COUNT(gRecs); i++) {
56c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                if (gRecs[i].fStyle != NONE) {
57b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com                    SkMaskFilter* mf = SkBlurMaskFilter::Create(gRecs[i].fStyle,
58b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com                                           SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(20)),
59b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com                                           flags);
60c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                    paint.setMaskFilter(mf)->unref();
61c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                } else {
62c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                    paint.setMaskFilter(NULL);
63c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                }
647ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com                canvas->drawCircle(SkIntToScalar(200 + gRecs[i].fCx*100),
657ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com                                   SkIntToScalar(200 + gRecs[i].fCy*100),
667ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com                                   SkIntToScalar(50),
677ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com                                   paint);
68c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com            }
69c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com            // draw text
70c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com            {
71e396455d2d60ddf8e625b5037254f3c09fbcdcf5commit-bot@chromium.org                SkMaskFilter* mf = SkBlurMaskFilter::Create(kNormal_SkBlurStyle,
72b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com                                           SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(4)),
73b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com                                           flags);
74c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                paint.setMaskFilter(mf)->unref();
75c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                SkScalar x = SkIntToScalar(70);
76c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                SkScalar y = SkIntToScalar(400);
77c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                paint.setColor(SK_ColorBLACK);
78c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                canvas->drawText("Hamburgefons Style", 18, x, y, paint);
797ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com                canvas->drawText("Hamburgefons Style", 18,
807ce661d19c5cf4484305a1b20c44bd111f129847robertphillips@google.com                                 x, y + SkIntToScalar(50), paint);
81c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                paint.setMaskFilter(NULL);
82c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                paint.setColor(SK_ColorWHITE);
83c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                x -= SkIntToScalar(2);
84c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                y -= SkIntToScalar(2);
85c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com                canvas->drawText("Hamburgefons Style", 18, x, y, paint);
86c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com            }
87c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com            canvas->restore();
8811a5ff376be94d15daf5bc66cdf857f5f2f297afreed@google.com            flags = SkBlurMaskFilter::kHighQuality_BlurFlag;
893c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com            canvas->translate(SkIntToScalar(350), SkIntToScalar(0));
90c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com        }
91c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com    }
92c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com
93c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.comprivate:
94c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com    typedef GM INHERITED;
95c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com};
96c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com
97c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com//////////////////////////////////////////////////////////////////////////////
98c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com
99c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.comstatic GM* MyFactory(void*) { return new BlursGM; }
100c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.comstatic GMRegistry reg(MyFactory);
101c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com
102c96e5c2720e03dbcad6cd9eb55073fb2f40e89e3reed@google.com}
103