15acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt/* 25acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt * Copyright 2011 Google Inc. 35acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt * 45acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt * Use of this source code is governed by a BSD-style license that can be 55acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt * found in the LICENSE file. 65acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt */ 75acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 85acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt#include "gm.h" 95acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt#include "SkBlurImageFilter.h" 105acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt#include "SkRandom.h" 115acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 125acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt// TODO deprecate imageblur 135acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 145acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt#define WIDTH 500 155acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt#define HEIGHT 500 165acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 175acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittstatic const float kBlurSigmas[] = { 185acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 0.0, 0.3f, 0.5f, 2.0f, 32.0f, 80.0f }; 195acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 205acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittconst char* kTestStrings[] = { 215acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt "The quick`~", 225acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt "brown fox[]", 235acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt "jumped over", 245acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt "the lazy@#$", 255acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt "dog.{}!%^&", 265acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt "*()+=-\\'\"/", 275acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt}; 285acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 295acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittnamespace skiagm { 305acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 315acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittclass BlurImageFilter : public GM { 325acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittpublic: 335acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt BlurImageFilter() { 345acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt this->setBGColor(0xFFFFFFFF); 355acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt fName.printf("imageblur2"); 365acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt } 375acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 385acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittprotected: 395acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt virtual uint32_t onGetFlags() const SK_OVERRIDE { 405acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt return kSkipTiled_Flag; 415acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt } 425acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 435acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt virtual SkString onShortName() { 445acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt return fName; 455acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt } 465acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 475acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt virtual SkISize onISize() { 485acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt return SkISize::Make(WIDTH, HEIGHT); 495acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt } 505acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 515acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt virtual void onDraw(SkCanvas* canvas) { 525acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt const int sigmaCount = SK_ARRAY_COUNT(kBlurSigmas); 535acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt const int testStringCount = SK_ARRAY_COUNT(kTestStrings); 545acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt SkScalar dx = WIDTH / sigmaCount; 555acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt SkScalar dy = HEIGHT / sigmaCount; 565acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt const SkScalar textSize = 12; 575acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 585acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt for (int x = 0; x < sigmaCount; x++) { 595acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt SkScalar sigmaX = kBlurSigmas[x]; 605acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt for (int y = 0; y < sigmaCount; y++) { 615acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt SkScalar sigmaY = kBlurSigmas[y]; 625acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 635acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt SkPaint paint; 645acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt paint.setImageFilter(SkBlurImageFilter::Create(sigmaX, sigmaY))->unref(); 655acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt canvas->saveLayer(NULL, &paint); 665acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 675acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt SkRandom rand; 685acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt SkPaint textPaint; 695acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt textPaint.setAntiAlias(false); 705acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt textPaint.setColor(rand.nextBits(24) | 0xFF000000); 715acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt textPaint.setTextSize(textSize); 725acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 735acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt for (int i = 0; i < testStringCount; i++) { 745acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt canvas->drawText(kTestStrings[i], 755acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt strlen(kTestStrings[i]), 765acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt SkIntToScalar(x * dx), 775acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt SkIntToScalar(y * dy + textSize * i + textSize), 785acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt textPaint); 795acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt } 805acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt canvas->restore(); 815acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt } 825acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt } 835acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt } 845acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 855acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittprivate: 865acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt SkString fName; 875acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 885acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt typedef GM INHERITED; 895acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt}; 905acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 915acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt////////////////////////////////////////////////////////////////////////////// 925acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 935acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittstatic GM* MyFactory(void*) { return new BlurImageFilter; } 945acfea789d39106dbc706c6ee85cd8f027fce3edjoshualittstatic GMRegistry reg(MyFactory); 955acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt 965acfea789d39106dbc706c6ee85cd8f027fce3edjoshualitt} 97