blob: e2abec220f8bdfee9df9d7f0b8b217d245ff9357 [file] [log] [blame]
reed@android.com34245c72009-11-03 04:00:48 +00001#include "SampleCode.h"
2#include "SkCanvas.h"
3#include "SkView.h"
4
5static const int N = 8;
6const SkScalar W = SkIntToScalar(640);
7const SkScalar H = SkIntToScalar(480);
8
9class OverView : public SkView {
10public:
11 OverView(int count, const SkViewFactory factories[]);
12 virtual ~OverView();
13
14protected:
15 virtual bool onEvent(const SkEvent&);
16 virtual void onSizeChange();
17
18 virtual void onDraw(SkCanvas* canvas) {
19 canvas->drawColor(SK_ColorLTGRAY);
20 }
21
22 virtual SkCanvas* beforeChildren(SkCanvas*);
23
24 virtual bool onQuery(SkEvent* evt) {
25 if (SampleCode::TitleQ(*evt)) {
26 SampleCode::TitleR(evt, "Overview");
27 return true;
28 }
29 return this->INHERITED::onQuery(evt);
30 }
31
32 virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
33 int ix = (int)(SkScalarDiv(x * N, W));
34 int iy = (int)(SkScalarDiv(y * N, H));
35 if (ix >= 0 && iy >= 0) {
36 SkEvent evt("set-curr-index");
37 evt.setFast32(iy * N + ix);
38 this->sendEventToParents(evt);
39 }
40 return NULL;
41 }
42
43private:
44 int fCount;
45 const SkViewFactory* fFactories;
46
47 typedef SkView INHERITED;
48};
49
50SkView* create_overview(int count, const SkViewFactory factories[]);
51SkView* create_overview(int count, const SkViewFactory factories[]) {
52 return SkNEW_ARGS(OverView, (count, factories));
53};
54
55OverView::OverView(int count, const SkViewFactory factories[]) {
56 fCount = count;
57 fFactories = factories;
58}
59
60OverView::~OverView() {
61}
62
63bool OverView::onEvent(const SkEvent& evt) {
64 return this->INHERITED::onEvent(evt);
65}
66
67void OverView::onSizeChange() {
68 this->detachAllChildren();
69
70 SkScalar locX = 0;
71 SkScalar locY = 0;
72 for (int i = 0; i < fCount; i++) {
73 SkView* view = fFactories[i]();
74 view->setVisibleP(true);
75 this->attachChildToBack(view)->unref();
76 view->setLoc(locX, locY);
77 view->setSize(W, H);
78 locX += W;
79 if ((i % N) == N - 1) {
80 locY += H;
81 locX = 0;
82 }
83 }
84}
85
86SkCanvas* OverView::beforeChildren(SkCanvas* canvas) {
87 canvas->scale(SK_Scalar1 / N, SK_Scalar1 / N);
88 return canvas;
89}
90
91