aboutsummaryrefslogtreecommitdiffhomepage
path: root/samplecode
diff options
context:
space:
mode:
authorGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-11-03 04:00:48 +0000
committerGravatar reed@android.com <reed@android.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2009-11-03 04:00:48 +0000
commit34245c7871f6339de8cc2be8fb1090ca3cba54ef (patch)
tree4ba53bc9e263ba52d9e4fed4bf97917b6cd452bd /samplecode
parente16a9223fd2a09fb7ba72e20c957bef99cbef4fc (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.cpp91
-rw-r--r--samplecode/SampleApp.cpp40
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());