blob: 42f0a604980f85761784d00b0ae6ddaeabbb2c88 [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() {
35 static const int W = 640;
36 static const int H = 480;
37 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
50 fRootLayer = new SkLayer;
51 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 }
58 }
59
60 virtual ~SkLayerView() {
61 SkSafeUnref(fRootLayer);
62 }
63
64protected:
65 // overrides from SkEventSink
66 virtual bool onQuery(SkEvent* evt) {
67 if (SampleCode::TitleQ(*evt)) {
68 SampleCode::TitleR(evt, "SkLayer");
69 return true;
70 }
71 return this->INHERITED::onQuery(evt);
72 }
73
74 void drawBG(SkCanvas* canvas) {
75 canvas->drawColor(0xFFDDDDDD);
76
77 fRootLayer->draw(canvas);
78 }
79
80 virtual void onDraw(SkCanvas* canvas) {
81 this->drawBG(canvas);
82}
83
84private:
85 typedef SkView INHERITED;
86};
87
88///////////////////////////////////////////////////////////////////////////////
89
90static SkView* MyFactory() { return new SkLayerView; }
91static SkViewRegister reg(MyFactory);
92