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