blob: 8db960cb872822c0ebbf9ba2f9ba359419d58754 [file] [log] [blame]
reed@android.comf76bacf2009-05-13 14:00:33 +00001#include "SampleCode.h"
2#include "SkCanvas.h"
3#include "SkPaint.h"
reed@android.comf76bacf2009-05-13 14:00:33 +00004#include "SkView.h"
5
6#include "SkRectShape.h"
7#include "SkGroupShape.h"
8
9static SkRect make_rect(int l, int t, int r, int b) {
10 SkRect rect;
11 rect.set(SkIntToScalar(l), SkIntToScalar(t),
12 SkIntToScalar(r), SkIntToScalar(b));
13 return rect;
14}
15
reed@android.comf48f2812009-05-18 04:20:55 +000016static SkShape* make_shape0(bool red) {
reed@android.comf76bacf2009-05-13 14:00:33 +000017 SkRectShape* s = new SkRectShape;
18 s->setRect(make_rect(10, 10, 90, 90));
reed@android.comf48f2812009-05-18 04:20:55 +000019 if (red) {
reed@android.comf76bacf2009-05-13 14:00:33 +000020 s->paint().setColor(SK_ColorRED);
21 }
22 return s;
23}
24
reed@android.comf48f2812009-05-18 04:20:55 +000025static SkShape* make_shape1() {
reed@android.comf76bacf2009-05-13 14:00:33 +000026 SkRectShape* s = new SkRectShape;
27 s->setOval(make_rect(10, 10, 90, 90));
reed@android.comf76bacf2009-05-13 14:00:33 +000028 s->paint().setColor(SK_ColorBLUE);
29 return s;
30}
31
reed@android.comf48f2812009-05-18 04:20:55 +000032static SkShape* make_shape2() {
reed@android.comf76bacf2009-05-13 14:00:33 +000033 SkRectShape* s = new SkRectShape;
34 s->setRRect(make_rect(10, 10, 90, 90),
35 SkIntToScalar(20), SkIntToScalar(20));
reed@android.comf76bacf2009-05-13 14:00:33 +000036 s->paint().setColor(SK_ColorGREEN);
37 return s;
38}
39
40///////////////////////////////////////////////////////////////////////////////
41
42class ShapesView : public SkView {
43 SkGroupShape fGroup;
reed@android.com88c2d8e2009-05-27 01:44:24 +000044 SkMatrixRef* fMatrixRefs[4];
reed@android.comf76bacf2009-05-13 14:00:33 +000045public:
46 ShapesView() {
47 SkMatrix m;
reed@android.comf48f2812009-05-18 04:20:55 +000048 fGroup.appendShape(make_shape0(false))->unref();
reed@android.comf76bacf2009-05-13 14:00:33 +000049 m.setRotate(SkIntToScalar(30), SkIntToScalar(50), SkIntToScalar(50));
50 m.postTranslate(0, SkIntToScalar(120));
reed@android.comf48f2812009-05-18 04:20:55 +000051 fGroup.appendShape(make_shape0(true), m)->unref();
reed@android.comf76bacf2009-05-13 14:00:33 +000052
53 m.setTranslate(SkIntToScalar(120), 0);
reed@android.comf48f2812009-05-18 04:20:55 +000054 fGroup.appendShape(make_shape1(), m)->unref();
reed@android.comf76bacf2009-05-13 14:00:33 +000055 m.postTranslate(0, SkIntToScalar(120));
reed@android.comf48f2812009-05-18 04:20:55 +000056 fGroup.appendShape(make_shape2(), m)->unref();
reed@android.com88c2d8e2009-05-27 01:44:24 +000057
58 for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrixRefs); i++) {
59 SkSafeRef(fMatrixRefs[i] = fGroup.getShapeMatrixRef(i));
60 }
61
62 fAngle = 0;
63 }
64
65 virtual ~ShapesView() {
66 for (size_t i = 0; i < SK_ARRAY_COUNT(fMatrixRefs); i++) {
67 SkSafeUnref(fMatrixRefs[i]);
68 }
reed@android.comf76bacf2009-05-13 14:00:33 +000069 }
70
71protected:
72 // overrides from SkEventSink
73 virtual bool onQuery(SkEvent* evt) {
74 if (SampleCode::TitleQ(*evt)) {
75 SampleCode::TitleR(evt, "Shapes");
76 return true;
77 }
78 return this->INHERITED::onQuery(evt);
79 }
80
81 void drawBG(SkCanvas* canvas) {
82 canvas->drawColor(0xFFDDDDDD);
83 }
84
reed@android.com88c2d8e2009-05-27 01:44:24 +000085 int fAngle;
86
reed@android.comf76bacf2009-05-13 14:00:33 +000087 virtual void onDraw(SkCanvas* canvas) {
88 this->drawBG(canvas);
89
reed@android.com88c2d8e2009-05-27 01:44:24 +000090 SkMatrix saveM = *fMatrixRefs[3];
91 fAngle = (fAngle + 5) % 360;
92 SkScalar c = SkIntToScalar(50);
93 fMatrixRefs[3]->preRotate(SkIntToScalar(fAngle), c, c);
94
reed@android.comf76bacf2009-05-13 14:00:33 +000095 SkMatrix matrix;
reed@android.comf48f2812009-05-18 04:20:55 +000096#if 1
97 SkGroupShape gs;
98 gs.appendShape(&fGroup);
reed@android.com88c2d8e2009-05-27 01:44:24 +000099 matrix.setScale(-SK_Scalar1, SK_Scalar1);
100 matrix.postTranslate(SkIntToScalar(220), SkIntToScalar(240));
reed@android.comf48f2812009-05-18 04:20:55 +0000101 gs.appendShape(&fGroup, matrix);
reed@android.comf76bacf2009-05-13 14:00:33 +0000102 matrix.setTranslate(SkIntToScalar(240), 0);
103 matrix.preScale(SK_Scalar1*2, SK_Scalar1*2);
reed@android.comf48f2812009-05-18 04:20:55 +0000104 gs.appendShape(&fGroup, matrix);
105 canvas->drawShape(&gs);
106#else
reed@android.comf76bacf2009-05-13 14:00:33 +0000107 fGroup.draw(canvas);
108 fGroup.drawXY(canvas, 0, SkIntToScalar(240));
109 fGroup.drawMatrix(canvas, matrix);
reed@android.comf48f2812009-05-18 04:20:55 +0000110#endif
reed@android.com88c2d8e2009-05-27 01:44:24 +0000111
112 *fMatrixRefs[3] = saveM;
113 this->inval(NULL);
114}
reed@android.comf76bacf2009-05-13 14:00:33 +0000115
116private:
117 typedef SkView INHERITED;
118};
119
120///////////////////////////////////////////////////////////////////////////////
121
122static SkView* MyFactory() { return new ShapesView; }
123static SkViewRegister reg(MyFactory);
124