1/* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#include "gm.h" 9#include "SkBlurImageFilter.h" 10#include "SkRandom.h" 11 12#define WIDTH 640 13#define HEIGHT 480 14 15namespace skiagm { 16 17class ImageBlurTiledGM : public GM { 18public: 19 ImageBlurTiledGM(SkScalar sigmaX, SkScalar sigmaY) 20 : fSigmaX(sigmaX), fSigmaY(sigmaY) { 21 } 22 23protected: 24 virtual SkString onShortName() { 25 return SkString("imageblurtiled"); 26 } 27 28 virtual SkISize onISize() { 29 return SkISize::Make(WIDTH, HEIGHT); 30 } 31 32 virtual void onDraw(SkCanvas* canvas) { 33 SkPaint paint; 34 paint.setImageFilter(SkBlurImageFilter::Create(fSigmaX, fSigmaY))->unref(); 35 const SkScalar tile_size = SkIntToScalar(128); 36 SkRect bounds; 37 if (!canvas->getClipBounds(&bounds)) { 38 bounds.setEmpty(); 39 } 40 for (SkScalar y = bounds.top(); y < bounds.bottom(); y += tile_size) { 41 for (SkScalar x = bounds.left(); x < bounds.right(); x += tile_size) { 42 canvas->save(); 43 canvas->clipRect(SkRect::MakeXYWH(x, y, tile_size, tile_size)); 44 canvas->saveLayer(NULL, &paint); 45 const char* str[] = { 46 "The quick", 47 "brown fox", 48 "jumped over", 49 "the lazy dog.", 50 }; 51 SkPaint textPaint; 52 textPaint.setAntiAlias(true); 53 sk_tool_utils::set_portable_typeface(&textPaint); 54 textPaint.setTextSize(SkIntToScalar(100)); 55 int posY = 0; 56 for (unsigned i = 0; i < SK_ARRAY_COUNT(str); i++) { 57 posY += 100; 58 canvas->drawText(str[i], strlen(str[i]), SkIntToScalar(0), 59 SkIntToScalar(posY), textPaint); 60 } 61 canvas->restore(); 62 canvas->restore(); 63 } 64 } 65 } 66 67private: 68 SkScalar fSigmaX; 69 SkScalar fSigmaY; 70 71 typedef GM INHERITED; 72}; 73 74////////////////////////////////////////////////////////////////////////////// 75 76static GM* MyFactory1(void*) { return new ImageBlurTiledGM(3.0f, 3.0f); } 77static GMRegistry reg1(MyFactory1); 78 79} 80