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