From f2c21cdaf18f5c6be0dba65c5d901f32fa3149ce Mon Sep 17 00:00:00 2001 From: "mike@reedtribe.org" Date: Sat, 18 Jun 2011 00:15:04 +0000 Subject: [PATCH] add git-svn-id: http://skia.googlecode.com/svn/trunk@1645 2bbb7eff-a529-9590-31e7-b0007b416f81 --- gm/strokes.cpp | 156 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 gm/strokes.cpp diff --git a/gm/strokes.cpp b/gm/strokes.cpp new file mode 100644 index 0000000..7b44ff9 --- /dev/null +++ b/gm/strokes.cpp @@ -0,0 +1,156 @@ +/* + Copyright 2011 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + + +#include "gm.h" +#include "SkRandom.h" + +namespace skiagm { + +#define W 400 +#define H 400 +#define N 50 + +static const SkScalar SW = SkIntToScalar(W); +static const SkScalar SH = SkIntToScalar(H); + +static void rnd_rect(SkRect* r, SkPaint* paint, SkRandom& rand) { + SkScalar x = rand.nextUScalar1() * W; + SkScalar y = rand.nextUScalar1() * H; + SkScalar w = rand.nextUScalar1() * (W >> 2); + SkScalar h = rand.nextUScalar1() * (H >> 2); + + r->set(x, y, x + w, y + h); + r->offset(-w/2 + rand.nextSScalar1(), -h/2 + + rand.nextSScalar1()); + + paint->setColor(rand.nextU()); + paint->setAlpha(0xFF); +} + + +class StrokesGM : public GM { +public: + StrokesGM() {} + +protected: + virtual SkString onShortName() { + return SkString("strokes_round"); + } + + virtual SkISize onISize() { + return make_isize(W, H*2); + } + + virtual void onDraw(SkCanvas* canvas) { + canvas->drawColor(SK_ColorWHITE); + + SkPaint paint; + paint.setStyle(SkPaint::kStroke_Style); + paint.setStrokeWidth(SkIntToScalar(9)/2); + + for (int y = 0; y < 2; y++) { + paint.setAntiAlias(!!y); + SkAutoCanvasRestore acr(canvas, true); + canvas->translate(0, SH * y); + canvas->clipRect(SkRect::MakeLTRB( + SkIntToScalar(2), SkIntToScalar(2) + , SW - SkIntToScalar(2), SH - SkIntToScalar(2) + )); + + SkRandom rand; + for (int i = 0; i < N; i++) { + SkRect r; + rnd_rect(&r, &paint, rand); + canvas->drawOval(r, paint); + rnd_rect(&r, &paint, rand); + canvas->drawRoundRect(r, r.width()/4, r.height()/4, paint); + rnd_rect(&r, &paint, rand); + } + } + } + +private: + typedef GM INHERITED; +}; + +class Strokes2GM : public GM { + SkPath fPath; +public: + Strokes2GM() { + SkRandom rand; + fPath.moveTo(0, 0); + for (int i = 0; i < 13; i++) { + SkScalar x = rand.nextUScalar1() * (W >> 1); + SkScalar y = rand.nextUScalar1() * (H >> 1); + fPath.lineTo(x, y); + } + } + +protected: + virtual SkString onShortName() { + return SkString("strokes_poly"); + } + + virtual SkISize onISize() { + return make_isize(W, H*2); + } + + static void rotate(SkScalar angle, SkScalar px, SkScalar py, SkCanvas* canvas) { + SkMatrix matrix; + matrix.setRotate(angle, px, py); + canvas->concat(matrix); + } + + virtual void onDraw(SkCanvas* canvas) { + canvas->drawColor(SK_ColorWHITE); + + SkPaint paint; + paint.setStyle(SkPaint::kStroke_Style); + paint.setStrokeWidth(SkIntToScalar(9)/2); + + for (int y = 0; y < 2; y++) { + paint.setAntiAlias(!!y); + SkAutoCanvasRestore acr(canvas, true); + canvas->translate(0, SH * y); + canvas->clipRect(SkRect::MakeLTRB(SkIntToScalar(2), + SkIntToScalar(2), + SW - SkIntToScalar(2), + SH - SkIntToScalar(2))); + + SkRandom rand; + for (int i = 0; i < N/2; i++) { + SkRect r; + rnd_rect(&r, &paint, rand); + rotate(SkIntToScalar(15), SW/2, SH/2, canvas); + canvas->drawPath(fPath, paint); + } + } + } + +private: + typedef GM INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +static GM* MyFactory(void*) { return new StrokesGM; } +static GMRegistry reg(MyFactory); + +static GM* MyFactory2(void*) { return new Strokes2GM; } +static GMRegistry reg2(MyFactory2); + +} + -- 2.7.4