1/*
2 * Copyright 2014 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "gm.h"
9#include "SkBlurImageFilter.h"
10#include "SkRandom.h"
11
12#define WIDTH 640
13#define HEIGHT 480
14
15namespace skiagm {
16
17class ImageBlurTiledGM : public GM {
18public:
19    ImageBlurTiledGM(SkScalar sigmaX, SkScalar sigmaY)
20        : fSigmaX(sigmaX), fSigmaY(sigmaY) {
21    }
22
23protected:
24    virtual SkString onShortName() {
25        return SkString("imageblurtiled");
26    }
27
28    virtual SkISize onISize() {
29        return SkISize::Make(WIDTH, HEIGHT);
30    }
31
32    virtual void onDraw(SkCanvas* canvas) {
33        SkPaint paint;
34        SkAutoTUnref<SkImageFilter> blur(SkBlurImageFilter::Create(fSigmaX, fSigmaY));
35        paint.setImageFilter(blur);
36        const SkScalar tile_size = SkIntToScalar(128);
37        SkRect bounds;
38        if (!canvas->getClipBounds(&bounds)) {
39            bounds.setEmpty();
40        }
41        for (SkScalar y = bounds.top(); y < bounds.bottom(); y += tile_size) {
42            for (SkScalar x = bounds.left(); x < bounds.right(); x += tile_size) {
43                canvas->save();
44                canvas->clipRect(SkRect::MakeXYWH(x, y, tile_size, tile_size));
45                canvas->saveLayer(nullptr, &paint);
46                const char* str[] = {
47                    "The quick",
48                    "brown fox",
49                    "jumped over",
50                    "the lazy dog.",
51                };
52                SkPaint textPaint;
53                textPaint.setAntiAlias(true);
54                sk_tool_utils::set_portable_typeface(&textPaint);
55                textPaint.setTextSize(SkIntToScalar(100));
56                int posY = 0;
57                for (unsigned i = 0; i < SK_ARRAY_COUNT(str); i++) {
58                    posY += 100;
59                    canvas->drawText(str[i], strlen(str[i]), SkIntToScalar(0),
60                                     SkIntToScalar(posY), textPaint);
61                }
62                canvas->restore();
63                canvas->restore();
64            }
65        }
66    }
67
68private:
69    SkScalar fSigmaX;
70    SkScalar fSigmaY;
71
72    typedef GM INHERITED;
73};
74
75//////////////////////////////////////////////////////////////////////////////
76
77static GM* MyFactory1(void*) { return new ImageBlurTiledGM(3.0f, 3.0f); }
78static GMRegistry reg1(MyFactory1);
79
80}
81