1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@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.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
8a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com#include "gm.h"
9a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com#include "SkRandom.h"
10a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
11a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.comnamespace skiagm {
12a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
13a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.comclass PointsGM : public GM {
14a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.compublic:
15ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    PointsGM() {}
16a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
17a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.comprotected:
18a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    virtual uint32_t onGetFlags() const SK_OVERRIDE {
19a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org        return kSkipTiled_Flag;
20a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org    }
21a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org
22a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com    virtual SkString onShortName() {
23a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        return SkString("points");
24a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com    }
25a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
26ae933ce0ea5fd9d21cb6ef2cee7e729d32690aacrmistry@google.com    virtual SkISize onISize() {
27f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina        return SkISize::Make(640, 490);
28a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com    }
29a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
30e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org    static void fill_pts(SkPoint pts[], size_t n, SkLCGRandom* rand) {
3117b78946096265d80215a6c946286ecaa35ea7edepoger@google.com        for (size_t i = 0; i < n; i++) {
3217b78946096265d80215a6c946286ecaa35ea7edepoger@google.com            // Compute these independently and store in variables, rather
3317b78946096265d80215a6c946286ecaa35ea7edepoger@google.com            // than in the parameter-passing expression, to get consistent
3417b78946096265d80215a6c946286ecaa35ea7edepoger@google.com            // evaluation order across compilers.
3572e49b8982586a5d8b0425f16d909c05a36ea8c3bsalomon@google.com            SkScalar y = rand->nextUScalar1() * 480;
3672e49b8982586a5d8b0425f16d909c05a36ea8c3bsalomon@google.com            SkScalar x = rand->nextUScalar1() * 640;
3717b78946096265d80215a6c946286ecaa35ea7edepoger@google.com            pts[i].set(x, y);
3817b78946096265d80215a6c946286ecaa35ea7edepoger@google.com        }
39a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com    }
40a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
41a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com    virtual void onDraw(SkCanvas* canvas) {
42a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        canvas->translate(SK_Scalar1, SK_Scalar1);
43a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
44e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org        SkLCGRandom rand;
45a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        SkPaint  p0, p1, p2, p3;
46a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        const size_t n = 99;
47a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
48a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        p0.setColor(SK_ColorRED);
49a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        p1.setColor(SK_ColorGREEN);
50a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        p2.setColor(SK_ColorBLUE);
51a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        p3.setColor(SK_ColorWHITE);
52a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
53a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        p0.setStrokeWidth(SkIntToScalar(4));
54a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        p2.setStrokeCap(SkPaint::kRound_Cap);
55a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        p2.setStrokeWidth(SkIntToScalar(6));
56a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
57a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        SkPoint* pts = new SkPoint[n];
58a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        fill_pts(pts, n, &rand);
59a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
60a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        canvas->drawPoints(SkCanvas::kPolygon_PointMode, n, pts, p0);
61a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        canvas->drawPoints(SkCanvas::kLines_PointMode, n, pts, p1);
62a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        canvas->drawPoints(SkCanvas::kPoints_PointMode, n, pts, p2);
63a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        canvas->drawPoints(SkCanvas::kPoints_PointMode, n, pts, p3);
64a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
65a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com        delete[] pts;
66a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com    }
67a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
68a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.comprivate:
69a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com    typedef GM INHERITED;
70a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com};
71a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
72a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com//////////////////////////////////////////////////////////////////////////////
73a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
74a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.comstatic GM* MyFactory(void*) { return new PointsGM; }
75a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.comstatic GMRegistry reg(MyFactory);
76a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com
77a965a15abd57ea1bbbbfcc8dc1574d7d7a2e424dreed@google.com}
78