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:
25e4636aa17307b00c76e228fc5ddda1bd4904e0ddmtklein    virtual uint32_t onGetFlags() const SK_OVERRIDE { return kNoBBH_Flag; }
26e4636aa17307b00c76e228fc5ddda1bd4904e0ddmtklein
27897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    virtual SkString onShortName() SK_OVERRIDE {
28897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        return SkString("imageresizetiled");
29897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    }
30897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
31897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    virtual SkISize onISize() SK_OVERRIDE {
32f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina        return SkISize::Make(WIDTH, HEIGHT);
33897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    }
34897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
35897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
36897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        SkPaint paint;
37fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org        SkMatrix matrix;
38fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org        matrix.setScale(RESIZE_FACTOR, RESIZE_FACTOR);
39897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        SkAutoTUnref<SkImageFilter> imageFilter(
40fd0ec2c76a27ce26a62da23eb75017839959e7cbsenorblanco@chromium.org            SkMatrixImageFilter::Create(matrix, SkPaint::kNone_FilterLevel));
41897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        paint.setImageFilter(imageFilter.get());
42897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        const SkScalar tile_size = SkIntToScalar(100);
43897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        SkRect bounds;
44897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        canvas->getClipBounds(&bounds);
45897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        for (SkScalar y = 0; y < HEIGHT; y += tile_size) {
46897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org            for (SkScalar x = 0; x < WIDTH; x += tile_size) {
47897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                canvas->save();
48897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                canvas->clipRect(SkRect::MakeXYWH(x, y, tile_size, tile_size));
49897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                canvas->scale(SkScalarInvert(RESIZE_FACTOR),
50897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                              SkScalarInvert(RESIZE_FACTOR));
51897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                canvas->saveLayer(NULL, &paint);
52897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                const char* str[] = {
53897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                    "The quick",
54897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                    "brown fox",
55897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                    "jumped over",
56897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                    "the lazy dog.",
57897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                };
58897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                SkPaint textPaint;
59897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                textPaint.setAntiAlias(true);
60992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark                sk_tool_utils::set_portable_typeface(&textPaint);
61897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                textPaint.setTextSize(SkIntToScalar(100));
62897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                int posY = 0;
63897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                for (unsigned i = 0; i < SK_ARRAY_COUNT(str); i++) {
64897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                    posY += 100;
65897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                    canvas->drawText(str[i], strlen(str[i]), SkIntToScalar(0),
66897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                                     SkIntToScalar(posY), textPaint);
67897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                }
68897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                canvas->restore();
69897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org                canvas->restore();
70897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org            }
71897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org        }
72897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    }
73897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
74897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.orgprivate:
75897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org    typedef GM INHERITED;
76897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org};
77897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
78897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org//////////////////////////////////////////////////////////////////////////////
79897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
80897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.orgDEF_GM(return new ImageResizeTiledGM(); )
81897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org
82897b73f62c012758bd8fef77c24d3573c847dbc3senorblanco@chromium.org}
83