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