00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef SkAnimator_DEFINED
00018 #define SkAnimator_DEFINED
00019
00020 #include "SkScalar.h"
00021 #include "SkKey.h"
00022 #include "SkEventSink.h"
00023
00024 class SkAnimateMaker;
00025 class SkCanvas;
00026 class SkDisplayable;
00027 class SkEvent;
00028 class SkExtras;
00029 struct SkMemberInfo;
00030 class SkPaint;
00031 struct SkRect;
00032 class SkStream;
00033 class SkTypedArray;
00034 class SkXMLParserError;
00035 class SkDOM;
00036 struct SkDOMNode;
00037
00040 enum SkElementType {
00041 kElementDummyType
00042 };
00045 enum SkFieldType {
00046 kFieldDummyType
00047 };
00048
00089 class SkAnimator : public SkEventSink {
00090 public:
00091 SkAnimator();
00092 virtual ~SkAnimator();
00093
00097 void addExtras(SkExtras* extras);
00098
00105 bool appendStream(SkStream* stream);
00106
00114 bool decodeMemory(const void* buffer, size_t size);
00115
00122 virtual bool decodeStream(SkStream* stream);
00123
00129 virtual bool decodeDOM(const SkDOM&, const SkDOMNode*);
00130
00137 bool decodeURI(const char uri[]);
00138
00145 bool doCharEvent(SkUnichar ch);
00146
00157 bool doClickEvent(int state, SkScalar x, SkScalar y);
00158
00165 bool doKeyEvent(SkKey code);
00166 bool doKeyUpEvent(SkKey code);
00167
00172 bool doUserEvent(const SkEvent& evt);
00173
00176 enum DifferenceType {
00177 kNotDifferent,
00178 kDifferent,
00179 kPartiallyDifferent
00180 };
00192 DifferenceType draw(SkCanvas* canvas, SkPaint* paint, SkMSec time);
00193
00205 DifferenceType draw(SkCanvas* canvas, SkMSec time);
00206
00213 bool findClickEvent(SkScalar x, SkScalar y);
00214
00215
00221 const SkAnimator* getAnimator(const SkDisplayable* element) const;
00222
00229 int32_t getArrayInt(const SkDisplayable* element, const SkMemberInfo* field, int index);
00230
00237 int32_t getArrayInt(const char* elementID, const char* fieldName, int index);
00238
00245 SkScalar getArrayScalar(const SkDisplayable* element, const SkMemberInfo* field, int index);
00246
00253 SkScalar getArrayScalar(const char* elementID, const char* fieldName, int index);
00254
00261 const char* getArrayString(const SkDisplayable* element, const SkMemberInfo* field, int index);
00262
00269 const char* getArrayString(const char* elementID, const char* fieldName, int index);
00270
00275 const SkDisplayable* getElement(const char* elementID);
00276
00282 SkElementType getElementType(const SkDisplayable* element);
00283
00288 SkElementType getElementType(const char* elementID);
00289
00295 const SkMemberInfo* getField(const SkDisplayable* element, const char* fieldName);
00296
00302 const SkMemberInfo* getField(const char* elementID, const char* fieldName);
00303
00309 SkFieldType getFieldType(const SkMemberInfo* field);
00310
00316 SkFieldType getFieldType(const char* elementID, const char* fieldName);
00317
00321 SkMSec getInterval();
00322
00325 void getInvalBounds(SkRect* inval);
00326
00329 const SkXMLParserError* getParserError();
00330
00333 const char* getParserErrorString();
00334
00340 int32_t getInt(const SkDisplayable* element, const SkMemberInfo* field);
00341
00347 int32_t getInt(const char* elementID, const char* fieldName);
00348
00354 SkScalar getScalar(const SkDisplayable* element, const SkMemberInfo* field);
00355
00361 SkScalar getScalar(const char* elementID, const char* fieldName);
00362
00368 const char* getString(const SkDisplayable* element, const SkMemberInfo* field);
00369
00375 const char* getString(const char* elementID, const char* fieldName);
00376
00378 const char* getURIBase();
00379
00381 void initialize();
00382
00385 void reset();
00386
00394 bool setArrayInt(const char* elementID, const char* fieldName, const int* array, int count);
00395
00403 bool setArrayString(const char* elementID, const char* fieldName, const char** array, int count);
00404
00411 bool setInt(const char* elementID, const char* fieldName, int32_t data);
00412
00419 bool setScalar(const char* elementID, const char* fieldName, SkScalar data);
00420
00427 bool setString(const char* elementID, const char* fieldName, const char* data);
00428
00432 void setURIBase(const char* path);
00433
00434 typedef void* Handler;
00435
00436 void setHostHandler(Handler handler) {
00437 this->onSetHostHandler(handler);
00438 }
00439
00444 class Timeline {
00445 public:
00446 virtual ~Timeline() {}
00447
00449 virtual SkMSec getMSecs() const = 0;
00450 };
00451
00456 void setTimeline(const Timeline& );
00457
00458 static void Init(bool runUnitTests);
00459 static void Term();
00460
00466 void setHostEventSinkID(SkEventSinkID hostID);
00467 SkEventSinkID getHostEventSinkID() const;
00468
00469
00470 void setHostEventSink(SkEventSink* sink) {
00471 this->setHostEventSinkID(sink ? sink->getSinkID() : 0);
00472 }
00473
00474 virtual void setJavaOwner(Handler owner);
00475
00476 #ifdef SK_DEBUG
00477 virtual void eventDone(const SkEvent& evt);
00478 virtual bool isTrackingEvents();
00479 static bool NoLeaks();
00480 #endif
00481
00482 protected:
00483 virtual void onSetHostHandler(Handler handler);
00484 virtual void onEventPost(SkEvent*, SkEventSinkID);
00485 virtual void onEventPostTime(SkEvent*, SkEventSinkID, SkMSec time);
00486
00487 private:
00488
00489 bool setArray(SkDisplayable* element, const SkMemberInfo* field, SkTypedArray array);
00490 bool setArray(const char* elementID, const char* fieldName, SkTypedArray array);
00491 bool setInt(SkDisplayable* element, const SkMemberInfo* field, int32_t data);
00492 bool setScalar(SkDisplayable* element, const SkMemberInfo* field, SkScalar data);
00493 bool setString(SkDisplayable* element, const SkMemberInfo* field, const char* data);
00494
00495 virtual bool onEvent(const SkEvent&);
00496 SkAnimateMaker* fMaker;
00497 friend class SkAnimateMaker;
00498 friend class SkAnimatorScript;
00499 friend class SkAnimatorScript2;
00500 friend class SkApply;
00501 friend class SkDisplayMovie;
00502 friend class SkDisplayType;
00503 friend class SkPost;
00504 friend class SkXMLAnimatorWriter;
00505 };
00506
00507 #endif
00508