| #include "SampleCode.h" |
| #include "SkView.h" |
| #include "SkCanvas.h" |
| |
| #include "gm.h" |
| |
| using namespace skiagm; |
| |
| // need to explicitly declare this, or we get some weird infinite loop llist |
| template GMRegistry* GMRegistry::gHead; |
| |
| class Iter { |
| public: |
| Iter() { |
| fReg = GMRegistry::Head(); |
| } |
| |
| void reset() { |
| fReg = GMRegistry::Head(); |
| } |
| |
| GM* next() { |
| if (fReg) { |
| GMRegistry::Factory fact = fReg->factory(); |
| fReg = fReg->next(); |
| return fact(0); |
| } |
| return NULL; |
| } |
| |
| static int Count() { |
| const GMRegistry* reg = GMRegistry::Head(); |
| int count = 0; |
| while (reg) { |
| count += 1; |
| reg = reg->next(); |
| } |
| return count; |
| } |
| |
| private: |
| const GMRegistry* fReg; |
| }; |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| class GMView : public SkView { |
| Iter fIter; |
| GM* fGM; |
| public: |
| GMView() { |
| fGM = fIter.next(); |
| this->postNextGM(); |
| } |
| |
| protected: |
| // overrides from SkEventSink |
| virtual bool onQuery(SkEvent* evt) { |
| if (SampleCode::TitleQ(*evt)) { |
| SampleCode::TitleR(evt, "GM"); |
| return true; |
| } |
| return this->INHERITED::onQuery(evt); |
| } |
| |
| virtual bool onEvent(const SkEvent& evt) { |
| if (evt.isType("next-gm")) { |
| delete fGM; |
| if (!(fGM = fIter.next())) { |
| fIter.reset(); |
| fGM = fIter.next(); |
| } |
| this->inval(NULL); |
| this->postNextGM(); |
| return true; |
| } |
| return this->INHERITED::onEvent(evt); |
| } |
| |
| void drawBG(SkCanvas* canvas) { |
| canvas->drawColor(0xFFDDDDDD); |
| } |
| |
| virtual void onDraw(SkCanvas* canvas) { |
| fGM->draw(canvas); |
| } |
| |
| private: |
| void postNextGM() { |
| (new SkEvent("next-gm"))->post(this->getSinkID(), 1500); |
| } |
| |
| typedef SkView INHERITED; |
| }; |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| static SkView* MyFactory() { return new GMView; } |
| static SkViewRegister reg(MyFactory); |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| using namespace skiagm; |
| |
| GM::GM() {} |
| GM::~GM() {} |
| |
| void GM::draw(SkCanvas* canvas) { |
| this->onDraw(canvas); |
| } |
| |
| |