13b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc.
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
73b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com */
83b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
93b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
10ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
113b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com#include "gm.h"
123b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com#include "SkRandom.h"
133b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
143b14dc18511fdc2612791d07707e4385182d3ca7reed@google.comnamespace skiagm {
153b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
163b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com#define W   400
173b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com#define H   400
183b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com#define N   100
193b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
203b14dc18511fdc2612791d07707e4385182d3ca7reed@google.comstatic const SkScalar SW = SkIntToScalar(W);
213b14dc18511fdc2612791d07707e4385182d3ca7reed@google.comstatic const SkScalar SH = SkIntToScalar(H);
223b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
23bc451d2823e5b4a14b7d4382a9bd2b5f15c2325ecommit-bot@chromium.orgclass StrokeRectsGM : public GM {
243b14dc18511fdc2612791d07707e4385182d3ca7reed@google.compublic:
25bc451d2823e5b4a14b7d4382a9bd2b5f15c2325ecommit-bot@chromium.org    StrokeRectsGM() {}
26d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
273b14dc18511fdc2612791d07707e4385182d3ca7reed@google.comprotected:
28a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
2936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkString onShortName() override {
303b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com        return SkString("strokerects");
313b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com    }
323b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
3336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    SkISize onISize() override {
34f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina        return SkISize::Make(W*2, H*2);
353b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com    }
363b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
37f9d610179d7d4198b57b12d06f8d1ca09f580df3scroggo    static void rnd_rect(SkRect* r, SkRandom& rand) {
383b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com        SkScalar x = rand.nextUScalar1() * W;
393b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com        SkScalar y = rand.nextUScalar1() * H;
403b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com        SkScalar w = rand.nextUScalar1() * (W >> 2);
413b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com        SkScalar h = rand.nextUScalar1() * (H >> 2);
4217b78946096265d80215a6c946286ecaa35ea7edepoger@google.com        SkScalar hoffset = rand.nextSScalar1();
4317b78946096265d80215a6c946286ecaa35ea7edepoger@google.com        SkScalar woffset = rand.nextSScalar1();
44d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
453b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com        r->set(x, y, x + w, y + h);
4617b78946096265d80215a6c946286ecaa35ea7edepoger@google.com        r->offset(-w/2 + woffset, -h/2 + hoffset);
473b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com    }
483b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
4936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein    void onDraw(SkCanvas* canvas) override {
503b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com        SkPaint paint;
513b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com        paint.setStyle(SkPaint::kStroke_Style);
523b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
533b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com        for (int y = 0; y < 2; y++) {
543b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com            paint.setAntiAlias(!!y);
553b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com            for (int x = 0; x < 2; x++) {
563b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com                paint.setStrokeWidth(x * SkIntToScalar(3));
573b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
583b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com                SkAutoCanvasRestore acr(canvas, true);
593b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com                canvas->translate(SW * x, SH * y);
603c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com                canvas->clipRect(SkRect::MakeLTRB(
613c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com                        SkIntToScalar(2), SkIntToScalar(2)
623c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com                        , SW - SkIntToScalar(2), SH - SkIntToScalar(2)
633c14d0f3d1b467dc3776669b0fc48cb463a20d41bungeman@google.com                ));
643b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
65f9d610179d7d4198b57b12d06f8d1ca09f580df3scroggo                SkRandom rand;
663b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com                for (int i = 0; i < N; i++) {
673b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com                    SkRect r;
683b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com                    rnd_rect(&r, rand);
693b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com                    canvas->drawRect(r, paint);
703b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com                }
713b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com            }
723b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com        }
733b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com    }
74d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com
753b14dc18511fdc2612791d07707e4385182d3ca7reed@google.comprivate:
763b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com    typedef GM INHERITED;
773b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com};
783b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
793b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com//////////////////////////////////////////////////////////////////////////////
803b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
81bc451d2823e5b4a14b7d4382a9bd2b5f15c2325ecommit-bot@chromium.orgstatic GM* MyFactory(void*) { return new StrokeRectsGM; }
823b14dc18511fdc2612791d07707e4385182d3ca7reed@google.comstatic GMRegistry reg(MyFactory);
833b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com
843b14dc18511fdc2612791d07707e4385182d3ca7reed@google.com}
85