1e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com/* 2e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com * Copyright 2013 Google Inc. 3e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com * 4e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com * Use of this source code is governed by a BSD-style license that can be 5e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com * found in the LICENSE file. 6e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com */ 7e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 8e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com#include "gm.h" 933d2055e594177b27360f84e0631b26d74a55a9bMike Klein#include "sk_tool_utils.h" 10e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com#include "SkRandom.h" 11e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 12e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.comnamespace skiagm { 13e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 149e1ec1a52985cce9db3a0d0e8d448b82a32e70cbskia.committer@gmail.com// This GM draws a lot of arcs in a 'Z' shape. It particularly exercises 15e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com// the 'drawArc' code near a singularly of its processing (i.e., near the 16e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com// edge of one of its underlying quads). 17e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.comclass ArcOfZorroGM : public GM { 18e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.compublic: 19e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com ArcOfZorroGM() { 2065cdba6ba78aaec0c0a4596bb5941020c789482bcaryclark this->setBGColor(sk_tool_utils::color_to_565(0xFFCCCCCC)); 21e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com } 22e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 23e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.comprotected: 24a90c6803865766d28e92091f56f718f5e41fe80fcommit-bot@chromium.org 2536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkString onShortName() override { 26e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com return SkString("arcofzorro"); 27e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com } 28e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 2936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize onISize() override { 30f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina return SkISize::Make(1000, 1000); 31e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com } 32e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 3336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void onDraw(SkCanvas* canvas) override { 34e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org SkRandom rand; 35e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 36e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com SkRect rect = SkRect::MakeXYWH(10, 10, 200, 200); 37e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 38e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com SkPaint p; 39e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 40e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com p.setStyle(SkPaint::kStroke_Style); 41e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com p.setStrokeWidth(35); 42e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com int xOffset = 0, yOffset = 0; 43e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com int direction = 0; 44e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 45e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com for (float arc = 134.0f; arc < 136.0f; arc += 0.01f) { 46e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com SkColor color = rand.nextU(); 47e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com color |= 0xff000000; 48e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com p.setColor(color); 49e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 50e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com canvas->save(); 51e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com canvas->translate(SkIntToScalar(xOffset), SkIntToScalar(yOffset)); 52e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com canvas->drawArc(rect, 0, arc, false, p); 53e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com canvas->restore(); 54e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 55e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com switch (direction) { 56e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com case 0: 57e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com xOffset += 10; 58e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com if (xOffset >= 700) { 59e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com direction = 1; 60e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com } 61e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com break; 62e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com case 1: 63e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com xOffset -= 10; 64e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com yOffset += 10; 65e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com if (xOffset < 50) { 66e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com direction = 2; 67e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com } 68e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com break; 69e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com case 2: 70e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com xOffset += 10; 71e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com break; 72e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com } 73e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com } 74e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 75e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com } 76e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 77e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.comprivate: 78e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com typedef GM INHERITED; 79e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com}; 80e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 81e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com////////////////////////////////////////////////////////////////////////////// 82e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com 83385fe4d4b62d7d1dd76116dd570df3290a2f487bhalcanaryDEF_GM(return new ArcOfZorroGM;) 84e1b75b4096c8ba9a569ae33d580806edd3c4a97arobertphillips@google.com} 85