diff options
author | mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-04-22 01:59:09 +0000 |
---|---|---|
committer | mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-04-22 01:59:09 +0000 |
commit | 2eb595292b9624371d1698ae9da7accb4c09c26c (patch) | |
tree | bf8293816a232a09dce3453a21eefd39e93547fc /samplecode | |
parent | 73d973e009748327791ffc5b681bef9ec4ce08e5 (diff) |
add 'f' toggle to trigger timer for sample. Must subclass SampleView instead
of SkView to opt-in. Then override onDrawContent() and optionally onDrawBackground.
git-svn-id: http://skia.googlecode.com/svn/trunk@1165 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'samplecode')
-rw-r--r-- | samplecode/SampleApp.cpp | 128 | ||||
-rw-r--r-- | samplecode/SampleCode.h | 26 | ||||
-rw-r--r-- | samplecode/SampleXfermodes.cpp | 12 |
3 files changed, 124 insertions, 42 deletions
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index 8ca095867f..78ec56fc79 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -24,10 +24,29 @@ extern SkView* create_overview(int, const SkViewFactory[]); #define ANIMATING_EVENTTYPE "nextSample" #define ANIMATING_DELAY 750 +#ifdef SK_DEBUG + #define FPS_REPEAT_COUNT 10 +#else + #define FPS_REPEAT_COUNT 100 +#endif + #ifdef SK_SUPPORT_GL #include "GrGLConfig.h" #endif +/////////////// +static const char view_inval_msg[] = "view-inval-msg"; + +static void postInvalDelay(SkEventSinkID sinkID) { + SkEvent* evt = new SkEvent(view_inval_msg); + evt->post(sinkID, 10); +} + +static bool isInvalEvent(const SkEvent& evt) { + return evt.isType(view_inval_msg); +} +////////////////// + SkViewRegister* SkViewRegister::gHead; SkViewRegister::SkViewRegister(SkViewFactory fact) : fFact(fact) { static bool gOnce; @@ -265,6 +284,8 @@ private: bool fRotate; bool fScale; bool fRequestGrabImage; + bool fMeasureFPS; + SkMSec fMeasureFPS_Time; // The following are for the 'fatbits' drawing // Latest position of the mouse. @@ -402,6 +423,7 @@ SampleWindow::SampleWindow(void* hwnd) : INHERITED(hwnd) { fRotate = false; fScale = false; fRequestGrabImage = false; + fMeasureFPS = false; fLCDState = kUnknown_SkTriState; fAAState = kUnknown_SkTriState; fFlipAxis = 0; @@ -802,7 +824,7 @@ void SampleWindow::afterChildren(SkCanvas* orig) { r.set(50, 50, 50+100, 50+100); bm.scrollRect(&r, dx, dy, &inval); paint_rgn(bm, r, inval); - } + } } void SampleWindow::beforeChild(SkView* child, SkCanvas* canvas) { @@ -826,10 +848,21 @@ void SampleWindow::beforeChild(SkView* child, SkCanvas* canvas) { kUnknown_SkTriState != fAAState) { canvas->setDrawFilter(new FlagsDrawFilter(fLCDState, fAAState))->unref(); } + + SampleView::SetRepeatDraw(child, fMeasureFPS ? FPS_REPEAT_COUNT : 1); + if (fMeasureFPS) { + fMeasureFPS_Time = SkTime::GetMSecs(); + } } void SampleWindow::afterChild(SkView* child, SkCanvas* canvas) { canvas->setDrawFilter(NULL); + + if (fMeasureFPS) { + fMeasureFPS_Time = SkTime::GetMSecs() - fMeasureFPS_Time; + this->updateTitle(); + postInvalDelay(this->getSinkID()); + } } static SkBitmap::Config gConfigCycle[] = { @@ -880,6 +913,10 @@ bool SampleWindow::onEvent(const SkEvent& evt) { this->loadView(fSamples[fCurrIndex]()); return true; } + if (isInvalEvent(evt)) { + this->inval(NULL); + return true; + } return this->INHERITED::onEvent(evt); } @@ -963,30 +1000,11 @@ bool SampleWindow::onHandleChar(SkUnichar uni) { this->postAnimatingEvent(); this->updateTitle(); return true; - case 'f': { - const char* title = this->getTitle(); - if (title[0] == 0) { - title = "sampleapp"; - } - SkString name(title); - cleanup_for_filename(&name); - name.append(".png"); - if (SkImageEncoder::EncodeFile(name.c_str(), this->getBitmap(), - SkImageEncoder::kPNG_Type, 100)) { - SkDebugf("Created %s\n", name.c_str()); - } - return true; - } - case 'r': - fRotate = !fRotate; - this->inval(NULL); + case 'b': + fAAState = cycle_tristate(fAAState); this->updateTitle(); - return true; - case 's': - fScale = !fScale; this->inval(NULL); - this->updateTitle(); - return true; + break; case 'c': fUseClip = !fUseClip; this->inval(NULL); @@ -995,26 +1013,35 @@ bool SampleWindow::onHandleChar(SkUnichar uni) { case 'd': SkGraphics::SetFontCacheUsed(0); return true; + case 'f': + fMeasureFPS = !fMeasureFPS; + this->inval(NULL); + break; case 'g': fRequestGrabImage = true; this->inval(NULL); break; + case 'i': + this->zoomIn(); + break; case 'l': fLCDState = cycle_tristate(fLCDState); this->updateTitle(); this->inval(NULL); break; - case 'b': - fAAState = cycle_tristate(fAAState); - this->updateTitle(); - this->inval(NULL); - break; - case 'i': - this->zoomIn(); - break; case 'o': this->zoomOut(); break; + case 'r': + fRotate = !fRotate; + this->inval(NULL); + this->updateTitle(); + return true; + case 's': + fScale = !fScale; + this->inval(NULL); + this->updateTitle(); + return true; case 'x': fFlipAxis ^= kFlipAxis_X; this->updateTitle(); @@ -1243,6 +1270,11 @@ void SampleWindow::updateTitle() { if (fZoomLevel) { title.prependf("{%d} ", fZoomLevel); } + + if (fMeasureFPS) { + title.appendf(" %4d ms", fMeasureFPS_Time); + } + this->setTitle(title.c_str()); } @@ -1280,6 +1312,40 @@ void SampleWindow::onSizeChange() { /////////////////////////////////////////////////////////////////////////////// +static const char repeat_count_tag[] = "sample-set-repeat-count"; + +void SampleView::SetRepeatDraw(SkView* view, int count) { + SkEvent evt(repeat_count_tag); + evt.setFast32(count); + (void)view->doEvent(evt); +} + +bool SampleView::onEvent(const SkEvent& evt) { + if (evt.isType(repeat_count_tag)) { + fRepeatCount = evt.getFast32(); + return true; + } + return this->INHERITED::onEvent(evt); +} + +bool SampleView::onQuery(SkEvent* evt) { + return this->INHERITED::onQuery(evt); +} + +void SampleView::onDraw(SkCanvas* canvas) { + this->onDrawBackground(canvas); + for (int i = 0; i < fRepeatCount; i++) { + SkAutoCanvasRestore acr(canvas, true); + this->onDrawContent(canvas); + } +} + +void SampleView::onDrawBackground(SkCanvas* canvas) { + canvas->drawColor(SK_ColorWHITE); +} + +/////////////////////////////////////////////////////////////////////////////// + template <typename T> void SkTBSort(T array[], int count) { for (int i = 1; i < count - 1; i++) { bool didSwap = false; diff --git a/samplecode/SampleCode.h b/samplecode/SampleCode.h index 058985a13f..2eb8bef262 100644 --- a/samplecode/SampleCode.h +++ b/samplecode/SampleCode.h @@ -3,6 +3,7 @@ #include "SkEvent.h" #include "SkKey.h" +#include "SkView.h" class SampleCode { public: @@ -25,8 +26,6 @@ public: ////////////////////////////////////////////////////////////////////////////// -class SkView; - typedef SkView* (*SkViewFactory)(); class SkViewRegister : SkNoncopyable { @@ -45,5 +44,28 @@ private: static SkViewRegister* gHead; }; +/////////////////////////////////////////////////////////////////////////////// + +class SampleView : public SkView { +public: + SampleView() : fRepeatCount(1) {} + + static void SetRepeatDraw(SkView*, int count); + +protected: + virtual void onDrawBackground(SkCanvas*); + virtual void onDrawContent(SkCanvas*) = 0; + + // overrides + virtual bool onEvent(const SkEvent& evt); + virtual bool onQuery(SkEvent* evt); + virtual void onDraw(SkCanvas*); + +private: + int fRepeatCount; + + typedef SkView INHERITED; +}; + #endif diff --git a/samplecode/SampleXfermodes.cpp b/samplecode/SampleXfermodes.cpp index b5361e35a6..0a3c4c721e 100644 --- a/samplecode/SampleXfermodes.cpp +++ b/samplecode/SampleXfermodes.cpp @@ -110,7 +110,7 @@ static void make_bitmaps(int w, int h, SkBitmap* src, SkBitmap* dst) { static uint16_t gBG[] = { 0xFFFF, 0xCCCF, 0xCCCF, 0xFFFF }; -class XfermodesView : public SkView { +class XfermodesView : public SampleView { SkBitmap fBG; SkBitmap fSrcB, fDstB; @@ -148,15 +148,9 @@ protected: return this->INHERITED::onQuery(evt); } - void drawBG(SkCanvas* canvas) { - canvas->drawColor(SK_ColorWHITE); - } - - virtual void onDraw(SkCanvas* canvas) { + virtual void onDrawContent(SkCanvas* canvas) { canvas->translate(SkIntToScalar(10), SkIntToScalar(20)); - this->drawBG(canvas); - const struct { SkXfermode::Mode fMode; const char* fLabel; @@ -246,7 +240,7 @@ protected: } private: - typedef SkView INHERITED; + typedef SampleView INHERITED; }; ////////////////////////////////////////////////////////////////////////////// |