Home | History | Annotate | Download | only in gm
      1 /*
      2  * Copyright 2013 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "gm.h"
      9 #include "SkCanvas.h"
     10 #include "SkPath.h"
     11 
     12 // Reproduces https://code.google.com/p/chromium/issues/detail?id=279014
     13 
     14 static const int kWidth = 640;
     15 static const int kHeight = 480;
     16 static const SkScalar kAngle = 0.305f;
     17 
     18 // Renders a string art shape.
     19 // The particular shape rendered can be controlled by adjusting kAngle, from 0 to 1
     20 
     21 class StringArtGM : public skiagm::GM {
     22 public:
     23     StringArtGM() {}
     24 
     25 protected:
     26 
     27     SkString onShortName() override {
     28         return SkString("stringart");
     29     }
     30 
     31     SkISize onISize() override {
     32         return SkISize::Make(kWidth, kHeight);
     33     }
     34 
     35     void onDraw(SkCanvas* canvas) override {
     36         SkScalar angle = kAngle*SK_ScalarPI + SkScalarHalf(SK_ScalarPI);
     37         SkScalar size = SkIntToScalar(SkMin32(kWidth, kHeight));
     38         SkPoint center = SkPoint::Make(SkScalarHalf(kWidth), SkScalarHalf(kHeight));
     39         SkScalar length = 5;
     40         SkScalar step = angle;
     41 
     42         SkPath path;
     43         path.moveTo(center);
     44 
     45         while (length < (SkScalarHalf(size) - 10.f))
     46         {
     47             SkPoint rp = SkPoint::Make(length*SkScalarCos(step) + center.fX,
     48                                        length*SkScalarSin(step) + center.fY);
     49             path.lineTo(rp);
     50             length += angle / SkScalarHalf(SK_ScalarPI);
     51             step += angle;
     52         }
     53         path.close();
     54 
     55         SkPaint paint;
     56         paint.setAntiAlias(true);
     57         paint.setStyle(SkPaint::kStroke_Style);
     58         paint.setColor(sk_tool_utils::color_to_565(0xFF007700));
     59 
     60         canvas->drawPath(path, paint);
     61     }
     62 
     63 private:
     64     typedef GM INHERITED;
     65 };
     66 
     67 DEF_GM( return new StringArtGM; )
     68