| #include "SampleCode.h" |
| #include "SkCanvas.h" |
| #include "SkPaint.h" |
| #include "SkPorterDuff.h" |
| #include "SkView.h" |
| |
| #include "SkRectShape.h" |
| #include "SkGroupShape.h" |
| |
| static SkRect make_rect(int l, int t, int r, int b) { |
| SkRect rect; |
| rect.set(SkIntToScalar(l), SkIntToScalar(t), |
| SkIntToScalar(r), SkIntToScalar(b)); |
| return rect; |
| } |
| |
| static SkShape* make_shape0(const SkMatrix* matrix = NULL) { |
| SkRectShape* s = new SkRectShape; |
| s->setRect(make_rect(10, 10, 90, 90)); |
| if (matrix) { |
| s->setMatrix(*matrix); |
| s->paint().setColor(SK_ColorRED); |
| } |
| return s; |
| } |
| |
| static SkShape* make_shape1(const SkMatrix* matrix = NULL) { |
| SkRectShape* s = new SkRectShape; |
| s->setOval(make_rect(10, 10, 90, 90)); |
| if (matrix) { |
| s->setMatrix(*matrix); |
| } |
| s->paint().setColor(SK_ColorBLUE); |
| return s; |
| } |
| |
| static SkShape* make_shape2(const SkMatrix* matrix = NULL) { |
| SkRectShape* s = new SkRectShape; |
| s->setRRect(make_rect(10, 10, 90, 90), |
| SkIntToScalar(20), SkIntToScalar(20)); |
| if (matrix) { |
| s->setMatrix(*matrix); |
| } |
| s->paint().setColor(SK_ColorGREEN); |
| return s; |
| } |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| class ShapesView : public SkView { |
| SkGroupShape fGroup; |
| public: |
| ShapesView() { |
| SkMatrix m; |
| fGroup.appendShape(make_shape0())->unref(); |
| m.setRotate(SkIntToScalar(30), SkIntToScalar(50), SkIntToScalar(50)); |
| m.postTranslate(0, SkIntToScalar(120)); |
| fGroup.appendShape(make_shape0(&m))->unref(); |
| |
| m.setTranslate(SkIntToScalar(120), 0); |
| fGroup.appendShape(make_shape1(&m))->unref(); |
| m.postTranslate(0, SkIntToScalar(120)); |
| fGroup.appendShape(make_shape2(&m))->unref(); |
| } |
| |
| protected: |
| // overrides from SkEventSink |
| virtual bool onQuery(SkEvent* evt) { |
| if (SampleCode::TitleQ(*evt)) { |
| SampleCode::TitleR(evt, "Shapes"); |
| return true; |
| } |
| return this->INHERITED::onQuery(evt); |
| } |
| |
| void drawBG(SkCanvas* canvas) { |
| canvas->drawColor(0xFFDDDDDD); |
| } |
| |
| virtual void onDraw(SkCanvas* canvas) { |
| this->drawBG(canvas); |
| |
| SkMatrix matrix; |
| matrix.setTranslate(SkIntToScalar(240), 0); |
| matrix.preScale(SK_Scalar1*2, SK_Scalar1*2); |
| |
| fGroup.draw(canvas); |
| fGroup.drawXY(canvas, 0, SkIntToScalar(240)); |
| fGroup.drawMatrix(canvas, matrix); |
| } |
| |
| private: |
| typedef SkView INHERITED; |
| }; |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| static SkView* MyFactory() { return new ShapesView; } |
| static SkViewRegister reg(MyFactory); |
| |