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