182aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com/* 282aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com * Copyright 2012 Google Inc. 382aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com * 482aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com * Use of this source code is governed by a BSD-style license that can be 582aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com * found in the LICENSE file. 682aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com */ 782aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 882aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com#include "gm.h" 982aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com#include "SkMagnifierImageFilter.h" 10cfa7ba7753720425bf09e7d6ee2905b36b8e27a3mtklein@google.com#include "SkRandom.h" 1182aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 1282aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com#define WIDTH 500 1382aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com#define HEIGHT 500 1482aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 1582aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.comnamespace skiagm { 1682aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 1782aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.comclass ImageMagnifierGM : public GM { 1882aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.compublic: 1982aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com ImageMagnifierGM() { 2082aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com this->setBGColor(0xFF000000); 2182aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com } 2282aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 2382aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.comprotected: 2463258865c43612de7102e3418074259e13f30d6bscroggo@google.com virtual uint32_t onGetFlags() const SK_OVERRIDE { 2563258865c43612de7102e3418074259e13f30d6bscroggo@google.com // Skip tiled drawing until https://code.google.com/p/skia/issues/detail?id=781 is fixed. 2663258865c43612de7102e3418074259e13f30d6bscroggo@google.com return this->INHERITED::onGetFlags() | GM::kSkipTiled_Flag; 2763258865c43612de7102e3418074259e13f30d6bscroggo@google.com } 2863258865c43612de7102e3418074259e13f30d6bscroggo@google.com 2963258865c43612de7102e3418074259e13f30d6bscroggo@google.com virtual SkString onShortName() SK_OVERRIDE { 3082aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com return SkString("imagemagnifier"); 3182aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com } 3282aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 3363258865c43612de7102e3418074259e13f30d6bscroggo@google.com virtual SkISize onISize() SK_OVERRIDE { 34f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(WIDTH, HEIGHT); 3582aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com } 3682aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 3763258865c43612de7102e3418074259e13f30d6bscroggo@google.com virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE { 3882aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com SkPaint paint; 3982aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com paint.setImageFilter( 40cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org SkMagnifierImageFilter::Create( 41f642f8cf90c8fd4111094026a1a9e9fdc92be9c3commit-bot@chromium.org SkRect::MakeXYWH(SkIntToScalar(100), SkIntToScalar(100), 4282aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com SkIntToScalar(WIDTH / 2), 4382aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com SkIntToScalar(HEIGHT / 2)), 4482aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 100))->unref(); 4582aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com canvas->saveLayer(NULL, &paint); 4682aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com paint.setAntiAlias(true); 4782aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com const char* str = "The quick brown fox jumped over the lazy dog."; 48cfa7ba7753720425bf09e7d6ee2905b36b8e27a3mtklein@google.com SkRandom rand; 4982aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com for (int i = 0; i < 25; ++i) { 50cfa7ba7753720425bf09e7d6ee2905b36b8e27a3mtklein@google.com int x = rand.nextULessThan(WIDTH); 51cfa7ba7753720425bf09e7d6ee2905b36b8e27a3mtklein@google.com int y = rand.nextULessThan(HEIGHT); 52cfa7ba7753720425bf09e7d6ee2905b36b8e27a3mtklein@google.com paint.setColor(rand.nextBits(24) | 0xFF000000); 5326c6d58274c50de3a03fe22e4f27b29073efb836mtklein@google.com paint.setTextSize(rand.nextRangeScalar(0, 300)); 5482aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com canvas->drawText(str, strlen(str), SkIntToScalar(x), 5582aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com SkIntToScalar(y), paint); 5682aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com } 5782aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com canvas->restore(); 5882aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com } 5982aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 6082aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.comprivate: 6182aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com typedef GM INHERITED; 6282aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com}; 6382aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 6482aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com////////////////////////////////////////////////////////////////////////////// 6582aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 6682aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.comstatic GM* MyFactory(void*) { return new ImageMagnifierGM; } 6782aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.comstatic GMRegistry reg(MyFactory); 6882aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 6982aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com} 70