diff options
author | 2009-11-03 04:00:48 +0000 | |
---|---|---|
committer | 2009-11-03 04:00:48 +0000 | |
commit | 34245c7871f6339de8cc2be8fb1090ca3cba54ef (patch) | |
tree | 4ba53bc9e263ba52d9e4fed4bf97917b6cd452bd /samplecode | |
parent | e16a9223fd2a09fb7ba72e20c957bef99cbef4fc (diff) |
add OVerView slide to samplecode
change inline functions in SkColorPriv.h to static inline
git-svn-id: http://skia.googlecode.com/svn/trunk@415 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode')
-rw-r--r-- | samplecode/OverView.cpp | 91 | ||||
-rw-r--r-- | samplecode/SampleApp.cpp | 40 |
2 files changed, 119 insertions, 12 deletions
diff --git a/samplecode/OverView.cpp b/samplecode/OverView.cpp new file mode 100644 index 0000000000..e2abec220f --- /dev/null +++ b/samplecode/OverView.cpp @@ -0,0 +1,91 @@ +#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 SkView::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; +} + + diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index 263b898639..4000ed7e6c 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -10,6 +10,8 @@ #include "SampleCode.h" +SkView* create_overview(int, const SkViewFactory*); + //#define SK_SUPPORT_GL #ifdef SK_SUPPORT_GL @@ -122,6 +124,7 @@ void SampleCode::PrefSizeR(SkEvent* evt, SkScalar width, SkScalar height) { ////////////////////////////////////////////////////////////////////////////// class SampleWindow : public SkOSWindow { + SkTDArray<SkViewFactory> fSamples; public: SampleWindow(void* hwnd); virtual ~SampleWindow(); @@ -150,7 +153,7 @@ protected: virtual bool onHandleKeyUp(SkKey key); #endif private: - const SkViewRegister* fCurr; + int fCurrIndex; SkPicture* fPicture; SkGLCanvas* fGLCanvas; @@ -218,8 +221,15 @@ SampleWindow::SampleWindow(void* hwnd) : INHERITED(hwnd) { this->setConfig(SkBitmap::kARGB_8888_Config); this->setVisibleP(true); - fCurr = SkViewRegister::Head(); - this->loadView(fCurr->factory()()); + { + const SkViewRegister* reg = SkViewRegister::Head(); + while (reg) { + *fSamples.append() = reg->factory(); + reg = reg->next(); + } + } + fCurrIndex = 0; + this->loadView(NULL); } SampleWindow::~SampleWindow() { @@ -386,15 +396,9 @@ static SkBitmap::Config cycle_configs(SkBitmap::Config c) { } bool SampleWindow::nextSample() { - if (fCurr) { - fCurr = fCurr->next(); - if (NULL == fCurr) { - fCurr = SkViewRegister::Head(); - } - this->loadView(fCurr->factory()()); - return true; - } - return false; + fCurrIndex = (fCurrIndex + 1) % fSamples.count(); + this->loadView(fSamples[fCurrIndex]()); + return true; } bool SampleWindow::onEvent(const SkEvent& evt) { @@ -405,6 +409,11 @@ bool SampleWindow::onEvent(const SkEvent& evt) { } return true; } + if (evt.isType("set-curr-index")) { + fCurrIndex = evt.getFast32() % fSamples.count(); + this->loadView(fSamples[fCurrIndex]()); + return true; + } return this->INHERITED::onEvent(evt); } @@ -522,6 +531,9 @@ bool SampleWindow::onHandleKey(SkKey key) { } } return true; + case kBack_SkKey: + this->loadView(NULL); + return true; default: break; } @@ -534,6 +546,10 @@ void SampleWindow::loadView(SkView* view) { if (prev) { prev->detachFromParent(); } + + if (NULL == view) { + view = create_overview(fSamples.count(), fSamples.begin()); + } view->setVisibleP(true); this->attachChildToFront(view)->unref(); view->setSize(this->width(), this->height()); |