Home | History | Annotate | Download | only in gm
      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