1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2011 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "gm/gm.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPaint.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRect.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkScalar.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkRandom.h" 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker namespace skiagm { 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker #define W 400 20*c8dee2aaSAndroid Build Coastguard Worker #define H 400 21*c8dee2aaSAndroid Build Coastguard Worker #define N 100 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker constexpr SkScalar SW = SkIntToScalar(W); 24*c8dee2aaSAndroid Build Coastguard Worker constexpr SkScalar SH = SkIntToScalar(H); 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker class StrokeRectsGM : public GM { 27*c8dee2aaSAndroid Build Coastguard Worker public: StrokeRectsGM(bool rotated)28*c8dee2aaSAndroid Build Coastguard Worker StrokeRectsGM(bool rotated) : fRotated(rotated) {} 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker protected: getName() const31*c8dee2aaSAndroid Build Coastguard Worker SkString getName() const override { 32*c8dee2aaSAndroid Build Coastguard Worker if (fRotated) { 33*c8dee2aaSAndroid Build Coastguard Worker return SkString("strokerects_rotated"); 34*c8dee2aaSAndroid Build Coastguard Worker } else { 35*c8dee2aaSAndroid Build Coastguard Worker return SkString("strokerects"); 36*c8dee2aaSAndroid Build Coastguard Worker } 37*c8dee2aaSAndroid Build Coastguard Worker } 38*c8dee2aaSAndroid Build Coastguard Worker getISize()39*c8dee2aaSAndroid Build Coastguard Worker SkISize getISize() override { return SkISize::Make(W * 2, H * 2); } 40*c8dee2aaSAndroid Build Coastguard Worker rnd_rect(SkRect * r,SkRandom & rand)41*c8dee2aaSAndroid Build Coastguard Worker static void rnd_rect(SkRect* r, SkRandom& rand) { 42*c8dee2aaSAndroid Build Coastguard Worker SkScalar x = rand.nextUScalar1() * W; 43*c8dee2aaSAndroid Build Coastguard Worker SkScalar y = rand.nextUScalar1() * H; 44*c8dee2aaSAndroid Build Coastguard Worker SkScalar w = rand.nextUScalar1() * (W >> 2); 45*c8dee2aaSAndroid Build Coastguard Worker SkScalar h = rand.nextUScalar1() * (H >> 2); 46*c8dee2aaSAndroid Build Coastguard Worker SkScalar hoffset = rand.nextSScalar1(); 47*c8dee2aaSAndroid Build Coastguard Worker SkScalar woffset = rand.nextSScalar1(); 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker r->setXYWH(x, y, w, h); 50*c8dee2aaSAndroid Build Coastguard Worker r->offset(-w/2 + woffset, -h/2 + hoffset); 51*c8dee2aaSAndroid Build Coastguard Worker } 52*c8dee2aaSAndroid Build Coastguard Worker onDraw(SkCanvas * canvas)53*c8dee2aaSAndroid Build Coastguard Worker void onDraw(SkCanvas* canvas) override { 54*c8dee2aaSAndroid Build Coastguard Worker if (fRotated) { 55*c8dee2aaSAndroid Build Coastguard Worker canvas->rotate(45.f, SW, SH); 56*c8dee2aaSAndroid Build Coastguard Worker } 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker SkPaint paint; 59*c8dee2aaSAndroid Build Coastguard Worker paint.setStyle(SkPaint::kStroke_Style); 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker for (int y = 0; y < 2; y++) { 62*c8dee2aaSAndroid Build Coastguard Worker paint.setAntiAlias(!!y); 63*c8dee2aaSAndroid Build Coastguard Worker for (int x = 0; x < 2; x++) { 64*c8dee2aaSAndroid Build Coastguard Worker paint.setStrokeWidth(x * SkIntToScalar(3)); 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Worker SkAutoCanvasRestore acr(canvas, true); 67*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(SW * x, SH * y); 68*c8dee2aaSAndroid Build Coastguard Worker canvas->clipRect(SkRect::MakeLTRB( 69*c8dee2aaSAndroid Build Coastguard Worker SkIntToScalar(2), SkIntToScalar(2) 70*c8dee2aaSAndroid Build Coastguard Worker , SW - SkIntToScalar(2), SH - SkIntToScalar(2) 71*c8dee2aaSAndroid Build Coastguard Worker )); 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker SkRandom rand; 74*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < N; i++) { 75*c8dee2aaSAndroid Build Coastguard Worker SkRect r; 76*c8dee2aaSAndroid Build Coastguard Worker rnd_rect(&r, rand); 77*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRect(r, paint); 78*c8dee2aaSAndroid Build Coastguard Worker } 79*c8dee2aaSAndroid Build Coastguard Worker } 80*c8dee2aaSAndroid Build Coastguard Worker } 81*c8dee2aaSAndroid Build Coastguard Worker } 82*c8dee2aaSAndroid Build Coastguard Worker 83*c8dee2aaSAndroid Build Coastguard Worker private: 84*c8dee2aaSAndroid Build Coastguard Worker bool fRotated; 85*c8dee2aaSAndroid Build Coastguard Worker }; 86*c8dee2aaSAndroid Build Coastguard Worker 87*c8dee2aaSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 88*c8dee2aaSAndroid Build Coastguard Worker 89*c8dee2aaSAndroid Build Coastguard Worker DEF_GM( return new StrokeRectsGM(false); ) 90*c8dee2aaSAndroid Build Coastguard Worker DEF_GM( return new StrokeRectsGM(true); ) 91*c8dee2aaSAndroid Build Coastguard Worker 92*c8dee2aaSAndroid Build Coastguard Worker } // namespace skiagm 93