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