• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "gm.h"
2 #include "SkPicture.h"
3 #include "SkRectShape.h"
4 #include "SkGroupShape.h"
5 
6 namespace skiagm {
7 
make_rect(int l,int t,int r,int b)8 static SkRect make_rect(int l, int t, int r, int b) {
9     SkRect rect;
10     rect.set(SkIntToScalar(l), SkIntToScalar(t),
11              SkIntToScalar(r), SkIntToScalar(b));
12     return rect;
13 }
14 
make_shape0(bool red)15 static SkShape* make_shape0(bool red) {
16     SkRectShape* s = new SkRectShape;
17     s->setRect(make_rect(10, 10, 90, 90));
18     if (red) {
19         s->paint().setColor(SK_ColorRED);
20     }
21     return s;
22 }
23 
make_shape1()24 static SkShape* make_shape1() {
25     SkRectShape* s = new SkRectShape;
26     s->setOval(make_rect(10, 10, 90, 90));
27     s->paint().setColor(SK_ColorBLUE);
28     return s;
29 }
30 
make_shape2()31 static SkShape* make_shape2() {
32     SkRectShape* s = new SkRectShape;
33     s->setRRect(make_rect(10, 10, 90, 90),
34                 SkIntToScalar(20), SkIntToScalar(20));
35     s->paint().setColor(SK_ColorGREEN);
36     return s;
37 }
38 
39 ///////////////////////////////////////////////////////////////////////////////
40 
41 class ShapesGM : public GM {
42     SkGroupShape fGroup;
43     SkMatrixRef*    fMatrixRefs[4];
44 public:
ShapesGM()45 	ShapesGM() {
46         SkMatrix m;
47         fGroup.appendShape(make_shape0(false))->unref();
48         m.setRotate(SkIntToScalar(30), SkIntToScalar(50), SkIntToScalar(50));
49         m.postTranslate(0, SkIntToScalar(120));
50         fGroup.appendShape(make_shape0(true), m)->unref();
51 
52         m.setTranslate(SkIntToScalar(120), 0);
53         fGroup.appendShape(make_shape1(), m)->unref();
54         m.postTranslate(0, SkIntToScalar(120));
55         fGroup.appendShape(make_shape2(), m)->unref();
56 
57         for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrixRefs); i++) {
58             SkSafeRef(fMatrixRefs[i] = fGroup.getShapeMatrixRef(i));
59         }
60         SkScalar c = SkIntToScalar(50);
61         fMatrixRefs[3]->preRotate(SkIntToScalar(30), c, c);
62     }
63 
~ShapesGM()64     virtual ~ShapesGM() {
65         for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrixRefs); i++) {
66             SkSafeUnref(fMatrixRefs[i]);
67         }
68     }
69 
70 protected:
onShortName()71     virtual SkString onShortName() {
72         return SkString("shapes");
73     }
74 
onISize()75 	virtual SkISize onISize() {
76         return make_isize(380, 480);
77     }
78 
drawBG(SkCanvas * canvas)79     void drawBG(SkCanvas* canvas) {
80         canvas->drawColor(0xFFDDDDDD);
81     }
82 
onDraw(SkCanvas * canvas)83     virtual void onDraw(SkCanvas* canvas) {
84         this->drawBG(canvas);
85 
86         SkMatrix matrix;
87 
88         SkGroupShape* gs = new SkGroupShape;
89         SkAutoUnref aur(gs);
90         gs->appendShape(&fGroup);
91         matrix.setScale(-SK_Scalar1, SK_Scalar1);
92         matrix.postTranslate(SkIntToScalar(220), SkIntToScalar(240));
93         gs->appendShape(&fGroup, matrix);
94         matrix.setTranslate(SkIntToScalar(240), 0);
95         matrix.preScale(SK_Scalar1*2, SK_Scalar1*2);
96         gs->appendShape(&fGroup, matrix);
97 
98 #if 0
99         canvas->drawShape(gs);
100 #else
101         SkPicture* pict = new SkPicture;
102         SkCanvas* cv = pict->beginRecording(1000, 1000);
103         cv->scale(SK_ScalarHalf, SK_ScalarHalf);
104         cv->drawShape(gs);
105         cv->translate(SkIntToScalar(680), SkIntToScalar(480));
106         cv->scale(-SK_Scalar1, SK_Scalar1);
107         cv->drawShape(gs);
108         pict->endRecording();
109         canvas->drawPicture(*pict);
110         pict->unref();
111 #endif
112 }
113 
114 private:
115     typedef GM INHERITED;
116 };
117 
118 ///////////////////////////////////////////////////////////////////////////////
119 
MyFactory(void *)120 static GM* MyFactory(void*) { return new ShapesGM; }
121 static GMRegistry reg(MyFactory);
122 
123 }
124