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 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 68 private: 69 typedef GM INHERITED; 70 }; 71 72 ////////////////////////////////////////////////////////////////////////////// 73 74 static GM* MyFactory(void*) { return new PointsGM; } 75 static GMRegistry reg(MyFactory); 76 77 } 78