1897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org/*
2897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org * Copyright 2014 Google Inc.
3897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org *
4897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org * Use of this source code is governed by a BSD-style license that can be
5897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org * found in the LICENSE file.
6897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org */
7897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
8897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org#include "gm.h"
9fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org#include "SkMatrixImageFilter.h"
10897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org#include "SkRandom.h"
11897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
12897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org#define WIDTH 640
13897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org#define HEIGHT 480
14897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
15897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org#define RESIZE_FACTOR SkIntToScalar(2)
16897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
17897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.orgnamespace skiagm {
18897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
19897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.orgclass ImageResizeTiledGM : public GM {
20897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.orgpublic:
21897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    ImageResizeTiledGM() {
22897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    }
23897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
24897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.orgprotected:
25897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    virtual SkString onShortName() SK_OVERRIDE {
26897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        return SkString("imageresizetiled");
27897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    }
28897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
29897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    virtual SkISize onISize() SK_OVERRIDE {
30f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina        return SkISize::Make(WIDTH, HEIGHT);
31897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    }
32897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
33897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
34897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        SkPaint paint;
35fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org        SkMatrix matrix;
36fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org        matrix.setScale(RESIZE_FACTOR, RESIZE_FACTOR);
37897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        SkAutoTUnref<SkImageFilter> imageFilter(
38fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org            SkMatrixImageFilter::Create(matrix, SkPaint::kNone_FilterLevel));
39897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        paint.setImageFilter(imageFilter.get());
40897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        const SkScalar tile_size = SkIntToScalar(100);
41897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        SkRect bounds;
42897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        canvas->getClipBounds(&bounds);
43897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        for (SkScalar y = 0; y < HEIGHT; y += tile_size) {
44897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org            for (SkScalar x = 0; x < WIDTH; x += tile_size) {
45897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                canvas->save();
46897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                canvas->clipRect(SkRect::MakeXYWH(x, y, tile_size, tile_size));
47897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                canvas->scale(SkScalarInvert(RESIZE_FACTOR),
48897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                              SkScalarInvert(RESIZE_FACTOR));
49897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                canvas->saveLayer(NULL, &paint);
50897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                const char* str[] = {
51897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                    "The quick",
52897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                    "brown fox",
53897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                    "jumped over",
54897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                    "the lazy dog.",
55897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                };
56897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                SkPaint textPaint;
57897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                textPaint.setAntiAlias(true);
58897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                textPaint.setTextSize(SkIntToScalar(100));
59897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                int posY = 0;
60897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                for (unsigned i = 0; i < SK_ARRAY_COUNT(str); i++) {
61897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                    posY += 100;
62897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                    canvas->drawText(str[i], strlen(str[i]), SkIntToScalar(0),
63897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                                     SkIntToScalar(posY), textPaint);
64897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                }
65897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                canvas->restore();
66897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                canvas->restore();
67897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org            }
68897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        }
69897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    }
70897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
71897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.orgprivate:
72897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    typedef GM INHERITED;
73897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org};
74897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
75897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org//////////////////////////////////////////////////////////////////////////////
76897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
77897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.orgDEF_GM(return new ImageResizeTiledGM(); )
78897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
79897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org}
80