blob: 77283fe72dfb5eb6d57a30610858cf2e46bbaf21 [file] [log] [blame]
reed@android.comf76bacf2009-05-13 14:00:33 +00001#include "SampleCode.h"
2#include "SkCanvas.h"
3#include "SkPaint.h"
4#include "SkPorterDuff.h"
5#include "SkView.h"
6
7#include "SkRectShape.h"
8#include "SkGroupShape.h"
9
10static SkRect make_rect(int l, int t, int r, int b) {
11 SkRect rect;
12 rect.set(SkIntToScalar(l), SkIntToScalar(t),
13 SkIntToScalar(r), SkIntToScalar(b));
14 return rect;
15}
16
reed@android.comf48f2812009-05-18 04:20:55 +000017static SkShape* make_shape0(bool red) {
reed@android.comf76bacf2009-05-13 14:00:33 +000018 SkRectShape* s = new SkRectShape;
19 s->setRect(make_rect(10, 10, 90, 90));
reed@android.comf48f2812009-05-18 04:20:55 +000020 if (red) {
reed@android.comf76bacf2009-05-13 14:00:33 +000021 s->paint().setColor(SK_ColorRED);
22 }
23 return s;
24}
25
reed@android.comf48f2812009-05-18 04:20:55 +000026static SkShape* make_shape1() {
reed@android.comf76bacf2009-05-13 14:00:33 +000027 SkRectShape* s = new SkRectShape;
28 s->setOval(make_rect(10, 10, 90, 90));
reed@android.comf76bacf2009-05-13 14:00:33 +000029 s->paint().setColor(SK_ColorBLUE);
30 return s;
31}
32
reed@android.comf48f2812009-05-18 04:20:55 +000033static SkShape* make_shape2() {
reed@android.comf76bacf2009-05-13 14:00:33 +000034 SkRectShape* s = new SkRectShape;
35 s->setRRect(make_rect(10, 10, 90, 90),
36 SkIntToScalar(20), SkIntToScalar(20));
reed@android.comf76bacf2009-05-13 14:00:33 +000037 s->paint().setColor(SK_ColorGREEN);
38 return s;
39}
40
41///////////////////////////////////////////////////////////////////////////////
42
43class ShapesView : public SkView {
44 SkGroupShape fGroup;
45public:
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.comf76bacf2009-05-13 14:00:33 +000057 }
58
59protected:
60 // overrides from SkEventSink
61 virtual bool onQuery(SkEvent* evt) {
62 if (SampleCode::TitleQ(*evt)) {
63 SampleCode::TitleR(evt, "Shapes");
64 return true;
65 }
66 return this->INHERITED::onQuery(evt);
67 }
68
69 void drawBG(SkCanvas* canvas) {
70 canvas->drawColor(0xFFDDDDDD);
71 }
72
73 virtual void onDraw(SkCanvas* canvas) {
74 this->drawBG(canvas);
75
76 SkMatrix matrix;
reed@android.comf48f2812009-05-18 04:20:55 +000077#if 1
78 SkGroupShape gs;
79 gs.appendShape(&fGroup);
80 matrix.setTranslate(0, SkIntToScalar(240));
81 gs.appendShape(&fGroup, matrix);
reed@android.comf76bacf2009-05-13 14:00:33 +000082 matrix.setTranslate(SkIntToScalar(240), 0);
83 matrix.preScale(SK_Scalar1*2, SK_Scalar1*2);
reed@android.comf48f2812009-05-18 04:20:55 +000084 gs.appendShape(&fGroup, matrix);
85 canvas->drawShape(&gs);
86#else
reed@android.comf76bacf2009-05-13 14:00:33 +000087 fGroup.draw(canvas);
88 fGroup.drawXY(canvas, 0, SkIntToScalar(240));
89 fGroup.drawMatrix(canvas, matrix);
reed@android.comf48f2812009-05-18 04:20:55 +000090#endif
reed@android.comf76bacf2009-05-13 14:00:33 +000091 }
92
93private:
94 typedef SkView INHERITED;
95};
96
97///////////////////////////////////////////////////////////////////////////////
98
99static SkView* MyFactory() { return new ShapesView; }
100static SkViewRegister reg(MyFactory);
101