• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2014 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #include "gm.h"
9 #include "SkCanvas.h"
10 #include "SkRRect.h"
11 #include "SkPath.h"
12 
13 class DRRectGM : public skiagm::GM {
14 public:
DRRectGM()15     DRRectGM() {}
16 
17 protected:
18 
onShortName()19     SkString onShortName() override {
20         return SkString("drrect");
21     }
22 
onISize()23     SkISize onISize() override {
24         return SkISize::Make(640, 480);
25     }
26 
onDraw(SkCanvas * canvas)27     void onDraw(SkCanvas* canvas) override {
28         SkPaint paint;
29         paint.setAntiAlias(true);
30 
31         SkRRect outers[4];
32         // like squares/circles, to exercise fast-cases in GPU
33         SkRect r = { 0, 0, 100, 100 };
34         SkVector radii[4] = {
35             { 0, 0 }, { 30, 1 }, { 10, 40 }, { 40, 40 }
36         };
37 
38         const SkScalar dx = r.width() + 16;
39         const SkScalar dy = r.height() + 16;
40 
41         outers[0].setRect(r);
42         outers[1].setOval(r);
43         outers[2].setRectXY(r, 20, 20);
44         outers[3].setRectRadii(r, radii);
45 
46         SkRRect inners[5];
47         r.inset(25, 25);
48 
49         inners[0].setEmpty();
50         inners[1].setRect(r);
51         inners[2].setOval(r);
52         inners[3].setRectXY(r, 20, 20);
53         inners[4].setRectRadii(r, radii);
54 
55         canvas->translate(16, 16);
56         for (size_t j = 0; j < SK_ARRAY_COUNT(inners); ++j) {
57             for (size_t i = 0; i < SK_ARRAY_COUNT(outers); ++i) {
58                 canvas->save();
59                 canvas->translate(dx * j, dy * i);
60                 canvas->drawDRRect(outers[i], inners[j], paint);
61                 canvas->restore();
62             }
63         }
64     }
65 
66 private:
67     typedef GM INHERITED;
68 };
69 
70 DEF_GM( return new DRRectGM; )
71