| Index: samplecode/SampleAnimator.cpp
|
| ===================================================================
|
| --- samplecode/SampleAnimator.cpp (revision 10872)
|
| +++ samplecode/SampleAnimator.cpp (working copy)
|
| @@ -12,7 +12,10 @@
|
| #include "SkAnimator.h"
|
| #include "SkStream.h"
|
| #include "SkDOM.h"
|
| +#include "SkXMLParser.h"
|
|
|
| +#include "gm.h"
|
| +
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| class SkAnimatorView : public SkView {
|
| @@ -29,14 +32,16 @@
|
| bool decodeStream(SkStream* stream);
|
|
|
| protected:
|
| - // overrides
|
| - virtual void onDraw(SkCanvas*);
|
| - virtual bool onQuery(SkEvent* evt);
|
| + virtual bool onEvent(const SkEvent&) SK_OVERRIDE;
|
| + virtual void onDraw(SkCanvas*) SK_OVERRIDE;
|
| + virtual bool onQuery(SkEvent* evt) SK_OVERRIDE;
|
|
|
| + virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) SK_OVERRIDE;
|
| + virtual bool onClick(Click* click) SK_OVERRIDE;
|
| +
|
| private:
|
| SkString fBaseURI;
|
| SkAnimator* fAnimator;
|
| -
|
| typedef SkView INHERITED;
|
| };
|
|
|
| @@ -62,33 +67,15 @@
|
| return this->decodeStream(is);
|
| }
|
|
|
| -static const SkDOMNode* find_nodeID(const SkDOM& dom,
|
| - const SkDOMNode* node, const char name[]) {
|
| - if (NULL == node) {
|
| - node = dom.getRootNode();
|
| - }
|
| - do {
|
| - const char* idval = dom.findAttr(node, "id");
|
| - if (idval && !strcmp(idval, name)) {
|
| - return node;
|
| - }
|
| - const SkDOMNode* child = dom.getFirstChild(node);
|
| - if (child) {
|
| - const SkDOMNode* found = find_nodeID(dom, child, name);
|
| - if (found) {
|
| - return found;
|
| - }
|
| - }
|
| - } while ((node = dom.getNextSibling(node)) != NULL);
|
| - return NULL;
|
| -}
|
| -
|
| bool SkAnimatorView::decodeStream(SkStream* stream) {
|
| delete fAnimator;
|
| fAnimator = new SkAnimator;
|
| fAnimator->setURIBase(fBaseURI.c_str());
|
| -#if 0
|
| +#if 1
|
| if (!fAnimator->decodeStream(stream)) {
|
| + if (fAnimator->getParserError()->hasError()) {
|
| + SkDebugf("%s\n", fAnimator->getParserErrorString());
|
| + }
|
| delete fAnimator;
|
| fAnimator = NULL;
|
| return false;
|
| @@ -103,71 +90,78 @@
|
| return false;
|
| }
|
| if (!fAnimator->decodeDOM(dom, root)) {
|
| + if (fAnimator->getParserError()->hasError()) {
|
| + SkDebugf("%s\n", fAnimator->getParserErrorString());
|
| + }
|
| delete fAnimator;
|
| fAnimator = NULL;
|
| return false;
|
| }
|
| - for (int i = 0; i <= 10; i++) {
|
| - SkString name("glyph");
|
| - name.appendS32(i);
|
| - const SkDOM::Node* node = find_nodeID(dom, NULL, name.c_str());
|
| - SkASSERT(node);
|
| - SkRect r;
|
| - dom.findScalar(node, "left", &r.fLeft);
|
| - dom.findScalar(node, "top", &r.fTop);
|
| - dom.findScalar(node, "width", &r.fRight); r.fRight += r.fLeft;
|
| - dom.findScalar(node, "height", &r.fBottom); r.fBottom += r.fTop;
|
| - SkDebugf("--- %s [%g %g %g %g]\n", name.c_str(),
|
| - r.fLeft, r.fTop, r.fRight, r.fBottom);
|
| - }
|
| #endif
|
| return true;
|
| }
|
|
|
| #include "SkTime.h"
|
|
|
| +bool SkAnimatorView::onEvent(const SkEvent& event) {
|
| + if (fAnimator) {
|
| + if (fAnimator->doEvent(event)) {
|
| + return true;
|
| + }
|
| + }
|
| + return this->INHERITED::onEvent(event);
|
| +}
|
| +
|
| void SkAnimatorView::onDraw(SkCanvas* canvas) {
|
| canvas->drawColor(SK_ColorWHITE);
|
| if (fAnimator) {
|
| - fAnimator->draw(canvas, 0);
|
| -#if 0
|
| - canvas->save();
|
| - canvas->translate(120, 30);
|
| - canvas->scale(0.5, 0.5);
|
| - fAnimator->draw(canvas, 0);
|
| - canvas->restore();
|
| -
|
| - canvas->save();
|
| - canvas->translate(190, 40);
|
| - canvas->scale(0.25, 0.25);
|
| - fAnimator->draw(canvas, 0);
|
| - canvas->restore();
|
| -
|
| + fAnimator->draw(canvas, SkTime::GetMSecs());
|
| this->inval(NULL);
|
| -#endif
|
| }
|
| }
|
|
|
| -bool SkAnimatorView::onQuery(SkEvent* evt) {
|
| - if (SampleCode::TitleQ(*evt)) {
|
| - SampleCode::TitleR(evt, "Animator");
|
| +bool SkAnimatorView::onQuery(SkEvent* event) {
|
| + if (SampleCode::TitleQ(*event)) {
|
| + SampleCode::TitleR(event, "Animator");
|
| return true;
|
| }
|
| - return this->INHERITED::onQuery(evt);
|
| +
|
| + if (fAnimator) {
|
| + SkUnichar uni;
|
| + if (SampleCode::CharQ(*event, &uni)) {
|
| + if (fAnimator->doCharEvent(uni)) {
|
| + return true;
|
| + }
|
| + }
|
| +
|
| + SkKey key;
|
| + if (SampleCode::KeyQ(*event, &key)) {
|
| + if (fAnimator->doKeyEvent(key)) {
|
| + return true;
|
| + }
|
| + }
|
| + }
|
| + return this->INHERITED::onQuery(event);
|
| }
|
|
|
| +SkView::Click* SkAnimatorView::onFindClickHandler(SkScalar x, SkScalar y) {
|
| + return new Click(this);
|
| +}
|
| +
|
| +bool SkAnimatorView::onClick(Click* click) {
|
| + return fAnimator->doClickEvent(click->fState, click->fCurr.fX, click->fCurr.fY);
|
| +}
|
| +
|
| //////////////////////////////////////////////////////////////////////////////
|
|
|
| static SkView* MyFactory() {
|
| SkAnimatorView* av = new SkAnimatorView;
|
| -// av->decodeFile("/skimages/test.xml");
|
| -#if 0
|
| - av->setURIBase("/skia/trunk/animations/");
|
| - av->decodeFile("/skia/trunk/animations/checkbox.xml");
|
| -#else
|
| av->setURIBase("/");
|
| - av->decodeFile("/testanim.txt");
|
| -#endif
|
| + SkString animation = skiagm::GM::GetResourcePath();
|
| + animation.append("/news.xml");
|
| + if (!av->decodeFile(animation.c_str())) {
|
| + SkDebugf("Could not load: %s", animation.c_str());
|
| + }
|
| return av;
|
| }
|
|
|
|
|