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