1 
2 /*
3  * Copyright 2006 The Android Open Source Project
4  *
5  * Use of this source code is governed by a BSD-style license that can be
6  * found in the LICENSE file.
7  */
8 
9 
10 #ifndef SkAnimatorScript_DEFINED
11 #define SkAnimatorScript_DEFINED
12 
13 #include "SkDisplayable.h"
14 #include "SkScript.h"
15 #include "SkTypedArray.h"
16 
17 class SkAnimateMaker;
18 struct SkMemberInfo;
19 
20 struct SkDisplayEnumMap {
21     SkDisplayTypes fType;
22     const char* fValues;
23 };
24 
25 class SkAnimatorScript : public SkScriptEngine {
26 public:
27     SkAnimatorScript(SkAnimateMaker& , SkDisplayable* , SkDisplayTypes type);
28     ~SkAnimatorScript();
29     bool evaluate(const char* script, SkScriptValue* , SkDisplayTypes type);
track(SkDisplayable * displayable)30     void track(SkDisplayable* displayable) {
31         SkASSERT(fTrackDisplayable.find(displayable) < 0);
32         *fTrackDisplayable.append() = displayable; }
33     static bool EvaluateDisplayable(SkAnimateMaker& , SkDisplayable* , const char* script, SkDisplayable** );
34     static bool EvaluateFloat(SkAnimateMaker& , SkDisplayable* , const char* script, SkScalar* );
35     static bool EvaluateInt(SkAnimateMaker& , SkDisplayable* , const char* script, int32_t* );
36     static bool EvaluateString(SkAnimateMaker& , SkDisplayable* , const char* script, SkString* );
37     static bool EvaluateString(SkAnimateMaker& , SkDisplayable* , SkDisplayable* parent, const char* script, SkString* );
38     static bool MapEnums(const char* ptr, const char* match, size_t len, int* value);
39 protected:
40     static bool Box(void* user, SkScriptValue* );
41     static bool Eval(const char* function, size_t len, SkTDArray<SkScriptValue>& params,
42         void* callBack, SkScriptValue* );
43     static bool EvalEnum(const char* token, size_t len, void* callBack, SkScriptValue* );
44     static bool EvalID(const char* token, size_t len, void* callBack, SkScriptValue* );
45     static bool EvalMember(const char* member, size_t len, void* object, void* eng,
46         SkScriptValue* value);
47     static bool EvalMemberCommon(SkScriptEngine* , const SkMemberInfo* info,
48         SkDisplayable* displayable, SkScriptValue* value);
49     static bool EvalMemberFunction(const char* member, size_t len, void* object,
50         SkTDArray<SkScriptValue>& params, void* user, SkScriptValue* value);
51     static bool EvalNamedColor(const char* token, size_t len, void* callBack, SkScriptValue* );
52     static bool EvalRGB(const char* function, size_t len, SkTDArray<SkScriptValue>& params,
53         void* callBack, SkScriptValue* );
54     static const SkDisplayEnumMap& GetEnumValues(SkDisplayTypes type);
55     static bool Infinity(const char* token, size_t len, void* callBack, SkScriptValue* );
56     static bool IsFinite(const char* function, size_t len, SkTDArray<SkScriptValue>& params,
57         void* callBack, SkScriptValue* );
58     static bool IsNaN(const char* function, size_t len, SkTDArray<SkScriptValue>& params,
59         void* callBack, SkScriptValue* );
60     static bool NaN(const char* token, size_t len, void* callBack, SkScriptValue* );
61     static bool Unbox(void* , SkScriptValue* scriptValue);
62     SkTDDisplayableArray fTrackDisplayable;
63     SkAnimateMaker& fMaker;
64     SkDisplayable* fParent;
65     SkDisplayable* fWorking;
66 private:
67     friend class SkDump;
68     friend struct SkScriptNAnswer;
69 #ifdef SK_SUPPORT_UNITTEST
70 public:
71     static void UnitTest();
72 #endif
73 };
74 
75 #endif // SkAnimatorScript_DEFINED
76