#include "SampleCode.h" #include "SkCanvas.h" #include "SkView.h" static const int N = 8; const SkScalar W = SkIntToScalar(640); const SkScalar H = SkIntToScalar(480); class OverView : public SkView { public: OverView(int count, const SkViewFactory factories[]); virtual ~OverView(); protected: virtual bool onEvent(const SkEvent&); virtual void onSizeChange(); virtual void onDraw(SkCanvas* canvas) { canvas->drawColor(SK_ColorLTGRAY); } virtual SkCanvas* beforeChildren(SkCanvas*); virtual bool onQuery(SkEvent* evt) { if (SampleCode::TitleQ(*evt)) { SampleCode::TitleR(evt, "Overview"); return true; } return this->INHERITED::onQuery(evt); } virtual bool onSendClickToChildren(SkScalar x, SkScalar y) { return false; } virtual Click* onFindClickHandler(SkScalar x, SkScalar y) { int ix = (int)(SkScalarDiv(x * N, W)); int iy = (int)(SkScalarDiv(y * N, H)); if (ix >= 0 && iy >= 0) { SkEvent evt("set-curr-index"); evt.setFast32(iy * N + ix); this->sendEventToParents(evt); } return NULL; } private: int fCount; const SkViewFactory* fFactories; typedef SkView INHERITED; }; SkView* create_overview(int count, const SkViewFactory factories[]); SkView* create_overview(int count, const SkViewFactory factories[]) { return SkNEW_ARGS(OverView, (count, factories)); }; OverView::OverView(int count, const SkViewFactory factories[]) { fCount = count; fFactories = factories; } OverView::~OverView() { } bool OverView::onEvent(const SkEvent& evt) { return this->INHERITED::onEvent(evt); } void OverView::onSizeChange() { this->detachAllChildren(); SkScalar locX = 0; SkScalar locY = 0; for (int i = 0; i < fCount; i++) { SkView* view = fFactories[i](); view->setVisibleP(true); this->attachChildToBack(view)->unref(); view->setLoc(locX, locY); view->setSize(W, H); locX += W; if ((i % N) == N - 1) { locY += H; locX = 0; } } } SkCanvas* OverView::beforeChildren(SkCanvas* canvas) { canvas->scale(SK_Scalar1 / N, SK_Scalar1 / N); return canvas; }