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 2536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkString onShortName() override { 2682aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com return SkString("imagemagnifier"); 2782aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com } 2882aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 2936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize onISize() override { 30f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(WIDTH, HEIGHT); 3182aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com } 3282aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 3336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(SkCanvas* canvas) override { 34cbf6b6ecd5edca74aa9f78ea5b9a73fb955b8654senorblanco SkPaint filterPaint; 35cbf6b6ecd5edca74aa9f78ea5b9a73fb955b8654senorblanco filterPaint.setImageFilter( 36cac5fd597f6e2495f50aaa6bcbe3dadc56f0b977commit-bot@chromium.org SkMagnifierImageFilter::Create( 37f642f8cf90c8fd4111094026a1a9e9fdc92be9c3commit-bot@chromium.org SkRect::MakeXYWH(SkIntToScalar(100), SkIntToScalar(100), 3882aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com SkIntToScalar(WIDTH / 2), 3982aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com SkIntToScalar(HEIGHT / 2)), 4082aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 100))->unref(); 41cbf6b6ecd5edca74aa9f78ea5b9a73fb955b8654senorblanco canvas->saveLayer(NULL, &filterPaint); 4282aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com const char* str = "The quick brown fox jumped over the lazy dog."; 43cfa7ba7753720425bf09e7d6ee2905b36b8e27a3mtklein@google.com SkRandom rand; 4482aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com for (int i = 0; i < 25; ++i) { 45cfa7ba7753720425bf09e7d6ee2905b36b8e27a3mtklein@google.com int x = rand.nextULessThan(WIDTH); 46cfa7ba7753720425bf09e7d6ee2905b36b8e27a3mtklein@google.com int y = rand.nextULessThan(HEIGHT); 47cbf6b6ecd5edca74aa9f78ea5b9a73fb955b8654senorblanco SkPaint paint; 48cbf6b6ecd5edca74aa9f78ea5b9a73fb955b8654senorblanco sk_tool_utils::set_portable_typeface(&paint); 49cfa7ba7753720425bf09e7d6ee2905b36b8e27a3mtklein@google.com paint.setColor(rand.nextBits(24) | 0xFF000000); 5026c6d58274c50de3a03fe22e4f27b29073efb836mtklein@google.com paint.setTextSize(rand.nextRangeScalar(0, 300)); 51cbf6b6ecd5edca74aa9f78ea5b9a73fb955b8654senorblanco paint.setAntiAlias(true); 5282aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com canvas->drawText(str, strlen(str), SkIntToScalar(x), 5382aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com SkIntToScalar(y), paint); 5482aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com } 5582aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com canvas->restore(); 5682aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com } 5782aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 5882aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.comprivate: 5982aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com typedef GM INHERITED; 6082aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com}; 6182aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 6282aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com////////////////////////////////////////////////////////////////////////////// 6382aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 6482aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.comstatic GM* MyFactory(void*) { return new ImageMagnifierGM; } 6582aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.comstatic GMRegistry reg(MyFactory); 6682aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com 6782aa7482cbf55ce6d42c692550cadee5e23146e4bsalomon@google.com} 68