addarc.cpp revision d9adfe6a223955bc69c8c7661ab8e0a078afbc32
119d8f9f17373bcf7d352b77e72a6a46568ee8a8breed/* 219d8f9f17373bcf7d352b77e72a6a46568ee8a8breed * Copyright 2015 Google Inc. 319d8f9f17373bcf7d352b77e72a6a46568ee8a8breed * 419d8f9f17373bcf7d352b77e72a6a46568ee8a8breed * Use of this source code is governed by a BSD-style license that can be 519d8f9f17373bcf7d352b77e72a6a46568ee8a8breed * found in the LICENSE file. 619d8f9f17373bcf7d352b77e72a6a46568ee8a8breed */ 719d8f9f17373bcf7d352b77e72a6a46568ee8a8breed 819d8f9f17373bcf7d352b77e72a6a46568ee8a8breed#include "gm.h" 919d8f9f17373bcf7d352b77e72a6a46568ee8a8breed#include "SkCanvas.h" 1019d8f9f17373bcf7d352b77e72a6a46568ee8a8breed#include "SkRandom.h" 1119d8f9f17373bcf7d352b77e72a6a46568ee8a8breed 1219d8f9f17373bcf7d352b77e72a6a46568ee8a8breedclass AddArcGM : public skiagm::GM { 13d9adfe6a223955bc69c8c7661ab8e0a078afbc32reedpublic: 14d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed AddArcGM() : fRotate(0) {} 15d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed 1619d8f9f17373bcf7d352b77e72a6a46568ee8a8breedprotected: 1719d8f9f17373bcf7d352b77e72a6a46568ee8a8breed SkString onShortName() SK_OVERRIDE { return SkString("addarc"); } 1819d8f9f17373bcf7d352b77e72a6a46568ee8a8breed 1919d8f9f17373bcf7d352b77e72a6a46568ee8a8breed SkISize onISize() SK_OVERRIDE { return SkISize::Make(1040, 1040); } 2019d8f9f17373bcf7d352b77e72a6a46568ee8a8breed 2119d8f9f17373bcf7d352b77e72a6a46568ee8a8breed void onDraw(SkCanvas* canvas) SK_OVERRIDE { 2219d8f9f17373bcf7d352b77e72a6a46568ee8a8breed canvas->translate(20, 20); 2319d8f9f17373bcf7d352b77e72a6a46568ee8a8breed 2419d8f9f17373bcf7d352b77e72a6a46568ee8a8breed SkRect r = SkRect::MakeWH(1000, 1000); 2519d8f9f17373bcf7d352b77e72a6a46568ee8a8breed 2619d8f9f17373bcf7d352b77e72a6a46568ee8a8breed SkPaint paint; 2719d8f9f17373bcf7d352b77e72a6a46568ee8a8breed paint.setAntiAlias(true); 2819d8f9f17373bcf7d352b77e72a6a46568ee8a8breed paint.setStyle(SkPaint::kStroke_Style); 2919d8f9f17373bcf7d352b77e72a6a46568ee8a8breed paint.setStrokeWidth(15); 3019d8f9f17373bcf7d352b77e72a6a46568ee8a8breed 3119d8f9f17373bcf7d352b77e72a6a46568ee8a8breed const SkScalar inset = paint.getStrokeWidth() + 4; 3219d8f9f17373bcf7d352b77e72a6a46568ee8a8breed const SkScalar sweepAngle = 345; 3319d8f9f17373bcf7d352b77e72a6a46568ee8a8breed SkRandom rand; 3419d8f9f17373bcf7d352b77e72a6a46568ee8a8breed 35d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed SkScalar sign = 1; 3619d8f9f17373bcf7d352b77e72a6a46568ee8a8breed while (r.width() > paint.getStrokeWidth() * 3) { 3719d8f9f17373bcf7d352b77e72a6a46568ee8a8breed paint.setColor(rand.nextU() | (0xFF << 24)); 3819d8f9f17373bcf7d352b77e72a6a46568ee8a8breed SkScalar startAngle = rand.nextUScalar1() * 360; 3919d8f9f17373bcf7d352b77e72a6a46568ee8a8breed 40d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed SkScalar speed = SkScalarSqrt(16 / r.width()) * 0.5f; 41d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed startAngle += fRotate * 360 * speed * sign; 42d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed 4319d8f9f17373bcf7d352b77e72a6a46568ee8a8breed SkPath path; 4419d8f9f17373bcf7d352b77e72a6a46568ee8a8breed path.addArc(r, startAngle, sweepAngle); 4519d8f9f17373bcf7d352b77e72a6a46568ee8a8breed canvas->drawPath(path, paint); 4619d8f9f17373bcf7d352b77e72a6a46568ee8a8breed 4719d8f9f17373bcf7d352b77e72a6a46568ee8a8breed r.inset(inset, inset); 48d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed sign = -sign; 4919d8f9f17373bcf7d352b77e72a6a46568ee8a8breed } 5019d8f9f17373bcf7d352b77e72a6a46568ee8a8breed } 5119d8f9f17373bcf7d352b77e72a6a46568ee8a8breed 52d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed bool onAnimatePulse(SkMSec curr, SkMSec prev) SK_OVERRIDE { 53d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed fRotate = SkDoubleToScalar(fmod(curr * 0.001, 360)); 54d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed return true; 55d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed } 56d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed 5719d8f9f17373bcf7d352b77e72a6a46568ee8a8breedprivate: 58d9adfe6a223955bc69c8c7661ab8e0a078afbc32reed SkScalar fRotate; 5919d8f9f17373bcf7d352b77e72a6a46568ee8a8breed typedef skiagm::GM INHERITED; 6019d8f9f17373bcf7d352b77e72a6a46568ee8a8breed}; 6119d8f9f17373bcf7d352b77e72a6a46568ee8a8breedDEF_GM( return new AddArcGM; ) 62