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