/* * Copyright 2013 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "gm/gm.h" #include "include/core/SkCanvas.h" #include "include/core/SkColor.h" #include "include/core/SkPaint.h" #include "include/core/SkRect.h" #include "include/core/SkScalar.h" #include "include/core/SkSize.h" #include "include/core/SkString.h" #include "include/utils/SkRandom.h" namespace skiagm { // This GM draws a lot of arcs in a 'Z' shape. It particularly exercises // the 'drawArc' code near a singularly of its processing (i.e., near the // edge of one of its underlying quads). class ArcOfZorroGM : public GM { public: ArcOfZorroGM() { this->setBGColor(0xFFCCCCCC); } protected: SkString onShortName() override { return SkString("arcofzorro"); } SkISize onISize() override { return SkISize::Make(1000, 1000); } void onDraw(SkCanvas* canvas) override { SkRandom rand; SkRect rect = SkRect::MakeXYWH(10, 10, 200, 200); SkPaint p; p.setStyle(SkPaint::kStroke_Style); p.setStrokeWidth(35); int xOffset = 0, yOffset = 0; int direction = 0; for (float arc = 134.0f; arc < 136.0f; arc += 0.01f) { SkColor color = rand.nextU(); color |= 0xff000000; p.setColor(color); canvas->save(); canvas->translate(SkIntToScalar(xOffset), SkIntToScalar(yOffset)); canvas->drawArc(rect, 0, arc, false, p); canvas->restore(); switch (direction) { case 0: xOffset += 10; if (xOffset >= 700) { direction = 1; } break; case 1: xOffset -= 10; yOffset += 10; if (xOffset < 50) { direction = 2; } break; case 2: xOffset += 10; break; } } } private: typedef GM INHERITED; }; ////////////////////////////////////////////////////////////////////////////// DEF_GM(return new ArcOfZorroGM;) } // namespace skiagm