xref: /aosp_15_r20/external/skia/tools/viewer/ManyRectsSlide.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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