• 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     }
61 
~ShapesGM()62     virtual ~ShapesGM() {
63         for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrixRefs); i++) {
64             SkSafeUnref(fMatrixRefs[i]);
65         }
66     }
67 
68 protected:
onShortName()69     virtual SkString onShortName() {
70         return SkString("shapes");
71     }
72 
onISize()73 	virtual SkISize onISize() {
74         return make_isize(380, 480);
75     }
76 
drawBG(SkCanvas * canvas)77     void drawBG(SkCanvas* canvas) {
78         canvas->drawColor(0xFFDDDDDD);
79     }
80 
onDraw(SkCanvas * canvas)81     virtual void onDraw(SkCanvas* canvas) {
82         this->drawBG(canvas);
83 
84         SkMatrix saveM = *fMatrixRefs[3];
85         SkScalar c = SkIntToScalar(50);
86         fMatrixRefs[3]->preRotate(SkIntToScalar(30), c, c);
87 
88         SkMatrix matrix;
89 
90         SkGroupShape* gs = new SkGroupShape;
91         SkAutoUnref aur(gs);
92         gs->appendShape(&fGroup);
93         matrix.setScale(-SK_Scalar1, SK_Scalar1);
94         matrix.postTranslate(SkIntToScalar(220), SkIntToScalar(240));
95         gs->appendShape(&fGroup, matrix);
96         matrix.setTranslate(SkIntToScalar(240), 0);
97         matrix.preScale(SK_Scalar1*2, SK_Scalar1*2);
98         gs->appendShape(&fGroup, matrix);
99 
100 #if 0
101         canvas->drawShape(gs);
102 #else
103         SkPicture pict;
104         SkCanvas* cv = pict.beginRecording(1000, 1000);
105         cv->scale(SK_ScalarHalf, SK_ScalarHalf);
106         cv->drawShape(gs);
107         cv->translate(SkIntToScalar(680), SkIntToScalar(480));
108         cv->scale(-SK_Scalar1, SK_Scalar1);
109         cv->drawShape(gs);
110         pict.endRecording();
111         canvas->drawPicture(pict);
112 #endif
113 
114         *fMatrixRefs[3] = saveM;
115 }
116 
117 private:
118     typedef GM INHERITED;
119 };
120 
121 ///////////////////////////////////////////////////////////////////////////////
122 
MyFactory(void *)123 static GM* MyFactory(void*) { return new ShapesGM; }
124 static GMRegistry reg(MyFactory);
125 
126 }
127