11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
90910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimateBase.h"
110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimateMaker.h"
120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimateProperties.h"
130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkAnimatorScript.h"
140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDisplayApply.h"
150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkDrawable.h"
160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#if SK_USE_CONDENSED_INFO == 0
180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectconst SkMemberInfo SkAnimateBase::fInfo[] = {
200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER(begin, MSec),
210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER_ARRAY(blend, Float),
220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER(dur, MSec),
230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER_PROPERTY(dynamic, Boolean),
240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER(field, String),   // name of member info in target
250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER(formula, DynamicString),
260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER(from, DynamicString),
270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER(lval, DynamicString),
280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER_PROPERTY(mirror, Boolean),
290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER(repeat, Float),
300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER_PROPERTY(reset, Boolean),
310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER_PROPERTY(step, Int),
320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER(target, DynamicString),
330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER(to, DynamicString),
340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SK_MEMBER_PROPERTY(values, DynamicString)
350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project};
360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectDEFINE_GET_MEMBER(SkAnimateBase);
400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkAnimateBase::SkAnimateBase() : begin(0), dur(1), repeat(SK_Scalar1),
420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        fApply(NULL), fFieldInfo(NULL), fFieldOffset(0), fStart((SkMSec) -1), fTarget(NULL),
430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        fChanged(0), fDelayed(0), fDynamic(0), fHasEndEvent(0), fHasValues(0),
440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        fMirror(0), fReset(0), fResetPending(0), fTargetIsScope(0) {
450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    blend.setCount(1);
460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    blend[0] = SK_Scalar1;
470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkAnimateBase::~SkAnimateBase() {
500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkDisplayTypes type = fValues.getType();
510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (type == SkType_String || type == SkType_DynamicString) {
520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkASSERT(fValues.count() == 1);
530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        delete fValues[0].fString;
540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectint SkAnimateBase::components() {
580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return 1;
590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayable* SkAnimateBase::deepCopy(SkAnimateMaker* maker) {
620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkAnimateBase* result = (SkAnimateBase*) INHERITED::deepCopy(maker);
630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    result->fApply = fApply;
640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    result->fFieldInfo =fFieldInfo;
650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    result->fHasValues = false;
660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return result;
670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkAnimateBase::dirty() {
700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    fChanged = true;
710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DUMP_ENABLED
740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkAnimateBase::dump(SkAnimateMaker* maker) {
750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    dumpBase(maker);
760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (target.size() > 0)
770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDebugf("target=\"%s\" ", target.c_str());
780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    else if (fTarget && strcmp(fTarget->id, ""))
790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDebugf("target=\"%s\" ", fTarget->id);
800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (lval.size() > 0)
810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDebugf("lval=\"%s\" ", lval.c_str());
820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (field.size() > 0)
830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDebugf("field=\"%s\" ", field.c_str());
840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    else if (fFieldInfo)
850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDebugf("field=\"%s\" ", fFieldInfo->fName);
860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (formula.size() > 0)
870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDebugf("formula=\"%s\" ", formula.c_str());
880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    else {
890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (from.size() > 0)
900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            SkDebugf("from=\"%s\" ", from.c_str());
910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDebugf("to=\"%s\" ", to.c_str());
920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (begin != 0) {
940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_CAN_USE_FLOAT
950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDebugf("begin=\"%g\" ", SkScalarToFloat(SkScalarDiv(begin,1000)));
960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else
970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkDebugf("begin=\"%x\" ", SkScalarDiv(begin,1000));
980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
1000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif
1020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectSkDisplayable* SkAnimateBase::getParent() const {
1040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return (SkDisplayable*) fApply;
1050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkAnimateBase::getProperty(int index, SkScriptValue* value) const {
1080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    int boolResult;
1090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    switch (index) {
1100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SK_PROPERTY(dynamic):
1110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            boolResult = fDynamic;
1120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            goto returnBool;
1130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SK_PROPERTY(mirror):
1140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            boolResult = fMirror;
1150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            goto returnBool;
1160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SK_PROPERTY(reset):
1170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            boolResult = fReset;
1180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectreturnBool:
1190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            value->fOperand.fS32 = SkToBool(boolResult);
1200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            value->fType = SkType_Boolean;
1210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
1220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SK_PROPERTY(step):
1230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            if (fApply == NULL)
1240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                return false;    // !!! notify there's an error?
1250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            fApply->getStep(value);
1260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
1270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SK_PROPERTY(values):
1280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            value->fOperand.fString = (SkString*) &to;
1290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            value->fType = SkType_String;
1300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
1310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        default:
1320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            SkASSERT(0);
1330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return false;
1340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
1350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return true;
1360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkAnimateBase::hasExecute() const
1390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
1400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return false;
1410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkAnimateBase::onEndElement(SkAnimateMaker& maker) {
1440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    fChanged = false;
1450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    setTarget(maker);
1460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (field.size()) {
1470910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkASSERT(fTarget);
1480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        fFieldInfo = fTarget->getMember(field.c_str());
1490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        field.reset();
1500910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
1510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (lval.size()) {
1520910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        // lval must be of the form x[y]
1530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        const char* lvalStr = lval.c_str();
1540910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        const char* arrayEnd = strchr(lvalStr, '[');
1550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (arrayEnd == NULL)
1560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return; //should this return an error?
1570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        size_t arrayNameLen = arrayEnd - lvalStr;
1580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkString arrayStr(lvalStr, arrayNameLen);
1590910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkASSERT(fTarget);  //this return an error?
1600910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        fFieldInfo = fTarget->getMember(arrayStr.c_str());
1610910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkString scriptStr(arrayEnd + 1, lval.size() - arrayNameLen - 2);
1620910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkAnimatorScript::EvaluateInt(maker, this, scriptStr.c_str(), &fFieldOffset);
1630910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
1640910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1650910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1660910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkAnimateBase::packARGB(SkScalar array[], int count, SkTDOperandArray* converted)
1670910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project{
1680910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(count == 4);
1690910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    converted->setCount(1);
1700910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkColor color = SkColorSetARGB(SkScalarRound(array[0]), SkScalarRound(array[1]),
1710910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkScalarRound(array[2]), SkScalarRound(array[3]));
1720910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    (*converted)[0].fS32 = color;
1730910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1740910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1750910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1760910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1770910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkAnimateBase::refresh(SkAnimateMaker& ) {
1780910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1790910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1800910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkAnimateBase::setParent(SkDisplayable* apply) {
1810910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    SkASSERT(apply->isApply());
1820910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    fApply = (SkApply*) apply;
1830910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return false;
1840910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
1850910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
1860910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkAnimateBase::setProperty(int index, SkScriptValue& value) {
1870910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    bool boolValue = SkToBool(value.fOperand.fS32);
1880910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    switch (index) {
1890910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SK_PROPERTY(dynamic):
1900910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            fDynamic = boolValue;
1910910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            goto checkForBool;
1920910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SK_PROPERTY(values):
1930910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            fHasValues = true;
1940910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            SkASSERT(value.fType == SkType_String);
1950910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            to = *value.fOperand.fString;
1960910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
1970910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SK_PROPERTY(mirror):
1980910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            fMirror = boolValue;
1990910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            goto checkForBool;
2000910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        case SK_PROPERTY(reset):
2010910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            fReset = boolValue;
2020910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source ProjectcheckForBool:
2030910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            SkASSERT(value.fType == SkType_Boolean);
2040910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            break;
2050910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        default:
2060910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return false;
2070910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
2080910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return true;
2090910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
2100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectvoid SkAnimateBase::setTarget(SkAnimateMaker& maker) {
2120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    if (target.size()) {
2130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkAnimatorScript engine(maker, this, SkType_Displayable);
2140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        const char* script = target.c_str();
2150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        SkScriptValue scriptValue;
2160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        bool success = engine.evaluateScript(&script, &scriptValue);
2170910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (success && scriptValue.fType == SkType_Displayable)
2180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            fTarget = scriptValue.fOperand.fDrawable;
2190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        else if (maker.find(target.c_str(), (SkDisplayable**) &fTarget) == false) {
2200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            if (fApply->getMode() == SkApply::kMode_create)
2210910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                return; // may not be an error
2220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            if (engine.getError() != SkScriptEngine::kNoError)
2230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                maker.setScriptError(engine);
2240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            else {
2250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                maker.setErrorNoun(target);
2260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project                maker.setErrorCode(SkDisplayXMLParserError::kTargetIDNotFound);
2270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            }
2280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            return;
2290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        }
2300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project        if (fApply && fApply->getMode() != SkApply::kMode_create)
2310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project            target.reset();
2320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    }
2330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
2340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2350910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projectbool SkAnimateBase::targetNeedsInitialization() const {
2360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project    return false;
2370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project}
2380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
2390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project
240