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 "SkRandom.h"
     10 
     11 namespace skiagm {
     12 
     13 // This GM draws a lot of arcs in a 'Z' shape. It particularly exercises
     14 // the 'drawArc' code near a singularly of its processing (i.e., near the
     15 // edge of one of its underlying quads).
     16 class ArcOfZorroGM : public GM {
     17 public:
     18     ArcOfZorroGM() {
     19         this->setBGColor(0xFFCCCCCC);
     20     }
     21 
     22 protected:
     23     virtual uint32_t onGetFlags() const SK_OVERRIDE {
     24         return kSkipTiled_Flag;
     25     }
     26 
     27     virtual SkString onShortName() SK_OVERRIDE {
     28         return SkString("arcofzorro");
     29     }
     30 
     31     virtual SkISize onISize() SK_OVERRIDE {
     32         return SkISize::Make(1000, 1000);
     33     }
     34 
     35     virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
     36         SkRandom rand;
     37 
     38         SkRect rect = SkRect::MakeXYWH(10, 10, 200, 200);
     39 
     40         SkPaint p;
     41 
     42         p.setStyle(SkPaint::kStroke_Style);
     43         p.setStrokeWidth(35);
     44         int xOffset = 0, yOffset = 0;
     45         int direction = 0;
     46 
     47         for (float arc = 134.0f; arc < 136.0f; arc += 0.01f) {
     48             SkColor color = rand.nextU();
     49             color |= 0xff000000;
     50             p.setColor(color);
     51 
     52             canvas->save();
     53             canvas->translate(SkIntToScalar(xOffset), SkIntToScalar(yOffset));
     54             canvas->drawArc(rect, 0, arc, false, p);
     55             canvas->restore();
     56 
     57             switch (direction) {
     58             case 0:
     59                 xOffset += 10;
     60                 if (xOffset >= 700) {
     61                     direction = 1;
     62                 }
     63                 break;
     64             case 1:
     65                 xOffset -= 10;
     66                 yOffset += 10;
     67                 if (xOffset < 50) {
     68                     direction = 2;
     69                 }
     70                 break;
     71             case 2:
     72                 xOffset += 10;
     73                 break;
     74             }
     75         }
     76 
     77     }
     78 
     79 private:
     80     typedef GM INHERITED;
     81 };
     82 
     83 //////////////////////////////////////////////////////////////////////////////
     84 
     85 DEF_GM( return SkNEW(ArcOfZorroGM); )
     86 
     87 }
     88