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; |
} |