1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2013 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 #include "include/core/SkCanvas.h" 8*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPaint.h" 9*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkShader.h" 10*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkRandom.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "tools/viewer/Slide.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker /** 14*c8dee2aaSAndroid Build Coastguard Worker * Animated sample used to develop a predecessor of GrDrawOp combining. 15*c8dee2aaSAndroid Build Coastguard Worker */ 16*c8dee2aaSAndroid Build Coastguard Worker class ManyRectsSlide : public Slide { 17*c8dee2aaSAndroid Build Coastguard Worker private: 18*c8dee2aaSAndroid Build Coastguard Worker enum { 19*c8dee2aaSAndroid Build Coastguard Worker N = 1000, 20*c8dee2aaSAndroid Build Coastguard Worker }; 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker public: ManyRectsSlide()23*c8dee2aaSAndroid Build Coastguard Worker ManyRectsSlide() { fName = "ManyRects"; } 24*c8dee2aaSAndroid Build Coastguard Worker draw(SkCanvas * canvas)25*c8dee2aaSAndroid Build Coastguard Worker void draw(SkCanvas* canvas) override { 26*c8dee2aaSAndroid Build Coastguard Worker SkISize dsize = canvas->getBaseLayerSize(); 27*c8dee2aaSAndroid Build Coastguard Worker canvas->clear(0xFFF0E0F0); 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker for (int i = 0; i < N; ++i) { 30*c8dee2aaSAndroid Build Coastguard Worker SkRect rect = SkRect::MakeWH(SkIntToScalar(fRandom.nextRangeU(10, 100)), 31*c8dee2aaSAndroid Build Coastguard Worker SkIntToScalar(fRandom.nextRangeU(10, 100))); 32*c8dee2aaSAndroid Build Coastguard Worker int x = fRandom.nextRangeU(0, dsize.fWidth); 33*c8dee2aaSAndroid Build Coastguard Worker int y = fRandom.nextRangeU(0, dsize.fHeight); 34*c8dee2aaSAndroid Build Coastguard Worker canvas->save(); 35*c8dee2aaSAndroid Build Coastguard Worker 36*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(SkIntToScalar(x), SkIntToScalar(y)); 37*c8dee2aaSAndroid Build Coastguard Worker // Uncomment to test rotated rect draw combining. 38*c8dee2aaSAndroid Build Coastguard Worker if ((false)) { 39*c8dee2aaSAndroid Build Coastguard Worker SkMatrix rotate; 40*c8dee2aaSAndroid Build Coastguard Worker rotate.setRotate(fRandom.nextUScalar1() * 360, 41*c8dee2aaSAndroid Build Coastguard Worker SkIntToScalar(x) + SkScalarHalf(rect.fRight), 42*c8dee2aaSAndroid Build Coastguard Worker SkIntToScalar(y) + SkScalarHalf(rect.fBottom)); 43*c8dee2aaSAndroid Build Coastguard Worker canvas->concat(rotate); 44*c8dee2aaSAndroid Build Coastguard Worker } 45*c8dee2aaSAndroid Build Coastguard Worker SkRect clipRect = rect; 46*c8dee2aaSAndroid Build Coastguard Worker // This clip will always contain the entire rect. It's here to give the GPU op combining 47*c8dee2aaSAndroid Build Coastguard Worker // code a little more challenge. 48*c8dee2aaSAndroid Build Coastguard Worker clipRect.outset(10, 10); 49*c8dee2aaSAndroid Build Coastguard Worker canvas->clipRect(clipRect); 50*c8dee2aaSAndroid Build Coastguard Worker SkPaint paint; 51*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(fRandom.nextU()); 52*c8dee2aaSAndroid Build Coastguard Worker canvas->drawRect(rect, paint); 53*c8dee2aaSAndroid Build Coastguard Worker canvas->restore(); 54*c8dee2aaSAndroid Build Coastguard Worker } 55*c8dee2aaSAndroid Build Coastguard Worker } 56*c8dee2aaSAndroid Build Coastguard Worker 57*c8dee2aaSAndroid Build Coastguard Worker private: 58*c8dee2aaSAndroid Build Coastguard Worker SkRandom fRandom; 59*c8dee2aaSAndroid Build Coastguard Worker }; 60*c8dee2aaSAndroid Build Coastguard Worker 61*c8dee2aaSAndroid Build Coastguard Worker ////////////////////////////////////////////////////////////////////////////// 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker DEF_SLIDE(return new ManyRectsSlide();) 64