1/* 2 * Copyright 2014 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#define W 400 12#define H 400 13#define N 10 14 15static const SkScalar SH = SkIntToScalar(H); 16 17static void rnd_quad(SkPath* p, SkPaint* paint, SkRandom& rand) { 18 p->moveTo(rand.nextRangeScalar(0, W), rand.nextRangeScalar(0, H)); 19 for (int x = 0; x < 2; ++x) { 20 p->quadTo(rand.nextRangeScalar(W / 4, W), rand.nextRangeScalar(0, H), 21 rand.nextRangeScalar(0, W), rand.nextRangeScalar(H / 4, H)); 22 } 23 paint->setColor(rand.nextU()); 24 SkScalar width = rand.nextRangeScalar(1, 5); 25 width *= width; 26 paint->setStrokeWidth(width); 27 paint->setAlpha(0xFF); 28} 29 30static void rnd_cubic(SkPath* p, SkPaint* paint, SkRandom& rand) { 31 p->moveTo(rand.nextRangeScalar(0, W), rand.nextRangeScalar(0, H)); 32 for (int x = 0; x < 2; ++x) { 33 p->cubicTo(rand.nextRangeScalar(W / 4, W), rand.nextRangeScalar(0, H), 34 rand.nextRangeScalar(0, W), rand.nextRangeScalar(H / 4, H), 35 rand.nextRangeScalar(W / 4, W), rand.nextRangeScalar(H / 4, H)); 36 } 37 paint->setColor(rand.nextU()); 38 SkScalar width = rand.nextRangeScalar(1, 5); 39 width *= width; 40 paint->setStrokeWidth(width); 41 paint->setAlpha(0xFF); 42} 43 44class BeziersGM : public skiagm::GM { 45public: 46 BeziersGM() {} 47 48protected: 49 50 SkString onShortName() override { 51 return SkString("beziers"); 52 } 53 54 SkISize onISize() override { 55 return SkISize::Make(W, H*2); 56 } 57 58 void onDraw(SkCanvas* canvas) override { 59 SkPaint paint; 60 paint.setStyle(SkPaint::kStroke_Style); 61 paint.setStrokeWidth(SkIntToScalar(9)/2); 62 paint.setAntiAlias(true); 63 64 SkRandom rand; 65 for (int i = 0; i < N; i++) { 66 SkPath p; 67 rnd_quad(&p, &paint, rand); 68 canvas->drawPath(p, paint); 69 } 70 canvas->translate(0, SH); 71 for (int i = 0; i < N; i++) { 72 SkPath p; 73 rnd_cubic(&p, &paint, rand); 74 canvas->drawPath(p, paint); 75 } 76 } 77 78private: 79 typedef skiagm::GM INHERITED; 80}; 81 82static skiagm::GM* F0(void*) { return new BeziersGM; } 83static skiagm::GMRegistry R0(F0); 84