blob: a5278dcd2dbbb7ac5226fdc68b8b8893d2c7cdb8 [file] [log] [blame]
reed@android.comda6fb322010-02-19 21:41:30 +00001#include "SampleCode.h"
2#include "SkCanvas.h"
3#include "SkPaint.h"
4#include "SkView.h"
5#include "SkLayer.h"
6
7///////////////////////////////////////////////////////////////////////////////
8
9class TestLayer : public SkLayer {
10public:
11 TestLayer(SkColor c) : fColor(c) {}
12
13protected:
14 virtual void onDraw(SkCanvas* canvas, SkScalar opacity) {
15 SkRect r;
16 r.set(0, 0, this->getWidth(), this->getHeight());
17
18 SkPaint paint;
19 paint.setColor(fColor);
20 paint.setAlpha(SkScalarRound(opacity * 255));
21
22 canvas->drawRect(r, paint);
23 }
24
25private:
26 SkColor fColor;
27};
28
29class SkLayerView : public SkView {
30private:
31 SkLayer* fRootLayer;
32
33public:
34 SkLayerView() {
reed@android.com2bd703b2010-02-24 02:01:23 +000035 static const int W = 600;
36 static const int H = 440;
reed@android.comda6fb322010-02-19 21:41:30 +000037 static const struct {
38 int fWidth;
39 int fHeight;
40 SkColor fColor;
41 int fPosX;
42 int fPosY;
43 } gData[] = {
44 { 120, 80, SK_ColorRED, 0, 0 },
45 { 120, 80, SK_ColorGREEN, W - 120, 0 },
46 { 120, 80, SK_ColorBLUE, 0, H - 80 },
47 { 120, 80, SK_ColorMAGENTA, W - 120, H - 80 },
48 };
49
reed@android.com2bd703b2010-02-24 02:01:23 +000050 fRootLayer = new TestLayer(0xFFDDDDDD);
reed@android.comda6fb322010-02-19 21:41:30 +000051 fRootLayer->setSize(W, H);
52 for (size_t i = 0; i < SK_ARRAY_COUNT(gData); i++) {
53 SkLayer* child = new TestLayer(gData[i].fColor);
54 child->setSize(gData[i].fWidth, gData[i].fHeight);
55 child->setPosition(gData[i].fPosX, gData[i].fPosY);
56 fRootLayer->addChild(child)->unref();
57 }
reed@android.com2bd703b2010-02-24 02:01:23 +000058
59 SkLayer* child = new TestLayer(0xFFDD8844);
60 child->setSize(120, 80);
61 child->setPosition(fRootLayer->getWidth()/2 - child->getWidth()/2,
62 fRootLayer->getHeight()/2 - child->getHeight()/2);
63 child->setAnchorPoint(SK_ScalarHalf, SK_ScalarHalf);
64 {
65 SkMatrix m;
66 m.setRotate(SkIntToScalar(30));
67 child->setMatrix(m);
68 }
69 fRootLayer->addChild(child)->unref();
reed@android.comda6fb322010-02-19 21:41:30 +000070 }
71
72 virtual ~SkLayerView() {
73 SkSafeUnref(fRootLayer);
74 }
75
76protected:
77 // overrides from SkEventSink
78 virtual bool onQuery(SkEvent* evt) {
79 if (SampleCode::TitleQ(*evt)) {
80 SampleCode::TitleR(evt, "SkLayer");
81 return true;
82 }
83 return this->INHERITED::onQuery(evt);
84 }
85
86 void drawBG(SkCanvas* canvas) {
reed@android.com2bd703b2010-02-24 02:01:23 +000087 canvas->drawColor(SK_ColorWHITE);
reed@android.comda6fb322010-02-19 21:41:30 +000088
reed@android.com2bd703b2010-02-24 02:01:23 +000089 canvas->translate(20, 20);
reed@android.comda6fb322010-02-19 21:41:30 +000090 fRootLayer->draw(canvas);
91 }
92
93 virtual void onDraw(SkCanvas* canvas) {
94 this->drawBG(canvas);
95}
96
97private:
98 typedef SkView INHERITED;
99};
100
101///////////////////////////////////////////////////////////////////////////////
102
103static SkView* MyFactory() { return new SkLayerView; }
104static SkViewRegister reg(MyFactory);
105