1/*
2 * Copyright 2011 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7#include "gm.h"
8#include "SkRandom.h"
9
10namespace skiagm {
11
12class PointsGM : public GM {
13public:
14    PointsGM() {}
15
16protected:
17
18    SkString onShortName() override {
19        return SkString("points");
20    }
21
22    SkISize onISize() override {
23        return SkISize::Make(640, 490);
24    }
25
26    static void fill_pts(SkPoint pts[], size_t n, SkRandom* rand) {
27        for (size_t i = 0; i < n; i++) {
28            // Compute these independently and store in variables, rather
29            // than in the parameter-passing expression, to get consistent
30            // evaluation order across compilers.
31            SkScalar y = rand->nextUScalar1() * 480;
32            SkScalar x = rand->nextUScalar1() * 640;
33            pts[i].set(x, y);
34        }
35    }
36
37    void onDraw(SkCanvas* canvas) override {
38        canvas->translate(SK_Scalar1, SK_Scalar1);
39
40        SkRandom rand;
41        SkPaint  p0, p1, p2, p3;
42        const size_t n = 99;
43
44        p0.setColor(SK_ColorRED);
45        p1.setColor(SK_ColorGREEN);
46        p2.setColor(SK_ColorBLUE);
47        p3.setColor(SK_ColorWHITE);
48
49        p0.setStrokeWidth(SkIntToScalar(4));
50        p2.setStrokeCap(SkPaint::kRound_Cap);
51        p2.setStrokeWidth(SkIntToScalar(6));
52
53        SkPoint* pts = new SkPoint[n];
54        fill_pts(pts, n, &rand);
55
56        canvas->drawPoints(SkCanvas::kPolygon_PointMode, n, pts, p0);
57        canvas->drawPoints(SkCanvas::kLines_PointMode, n, pts, p1);
58        canvas->drawPoints(SkCanvas::kPoints_PointMode, n, pts, p2);
59        canvas->drawPoints(SkCanvas::kPoints_PointMode, n, pts, p3);
60
61        delete[] pts;
62    }
63
64private:
65    typedef GM INHERITED;
66};
67
68//////////////////////////////////////////////////////////////////////////////
69
70static GM* MyFactory(void*) { return new PointsGM; }
71static GMRegistry reg(MyFactory);
72
73}
74