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