1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2011 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "gm.h" 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRandom.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotnamespace skiagm { 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define W 400 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define H 400 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define N 100 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotconstexpr SkScalar SW = SkIntToScalar(W); 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotconstexpr SkScalar SH = SkIntToScalar(H); 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass StrokeRectsGM : public GM { 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot StrokeRectsGM() {} 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString onShortName() override { 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkString("strokerects"); 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkISize onISize() override { 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return SkISize::Make(W*2, H*2); 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void rnd_rect(SkRect* r, SkRandom& rand) { 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar x = rand.nextUScalar1() * W; 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar y = rand.nextUScalar1() * H; 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar w = rand.nextUScalar1() * (W >> 2); 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar h = rand.nextUScalar1() * (H >> 2); 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar hoffset = rand.nextSScalar1(); 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar woffset = rand.nextSScalar1(); 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot r->set(x, y, x + w, y + h); 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot r->offset(-w/2 + woffset, -h/2 + hoffset); 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDraw(SkCanvas* canvas) override { 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStyle(SkPaint::kStroke_Style); 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int y = 0; y < 2; y++) { 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setAntiAlias(!!y); 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int x = 0; x < 2; x++) { 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setStrokeWidth(x * SkIntToScalar(3)); 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkAutoCanvasRestore acr(canvas, true); 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->translate(SW * x, SH * y); 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->clipRect(SkRect::MakeLTRB( 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkIntToScalar(2), SkIntToScalar(2) 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot , SW - SkIntToScalar(2), SH - SkIntToScalar(2) 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot )); 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRandom rand; 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < N; i++) { 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRect r; 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot rnd_rect(&r, rand); 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawRect(r, paint); 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef GM INHERITED; 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot////////////////////////////////////////////////////////////////////////////// 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic GM* MyFactory(void*) { return new StrokeRectsGM; } 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic GMRegistry reg(MyFactory); 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 84