1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2006 The Android Open Source Project 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkAnimateBase.h" 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkAnimateMaker.h" 128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkAnimateProperties.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkAnimatorScript.h" 148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDisplayApply.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkDrawable.h" 168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#if SK_USE_CONDENSED_INFO == 0 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comconst SkMemberInfo SkAnimateBase::fInfo[] = { 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(begin, MSec), 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_ARRAY(blend, Float), 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(dur, MSec), 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_PROPERTY(dynamic, Boolean), 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(field, String), // name of member info in target 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(formula, DynamicString), 268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(from, DynamicString), 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(lval, DynamicString), 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_PROPERTY(mirror, Boolean), 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(repeat, Float), 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_PROPERTY(reset, Boolean), 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_PROPERTY(step, Int), 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(target, DynamicString), 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER(to, DynamicString), 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SK_MEMBER_PROPERTY(values, DynamicString) 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comDEFINE_GET_MEMBER(SkAnimateBase); 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkAnimateBase::SkAnimateBase() : begin(0), dur(1), repeat(SK_Scalar1), 42d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com fApply(NULL), fFieldInfo(NULL), fFieldOffset(0), fStart((SkMSec) -1), fTarget(NULL), 43d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com fChanged(0), fDelayed(0), fDynamic(0), fHasEndEvent(0), fHasValues(0), 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fMirror(0), fReset(0), fResetPending(0), fTargetIsScope(0) { 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com blend.setCount(1); 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com blend[0] = SK_Scalar1; 478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkAnimateBase::~SkAnimateBase() { 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDisplayTypes type = fValues.getType(); 518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (type == SkType_String || type == SkType_DynamicString) { 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(fValues.count() == 1); 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com delete fValues[0].fString; 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 57d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.comint SkAnimateBase::components() { 58d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com return 1; 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDisplayable* SkAnimateBase::deepCopy(SkAnimateMaker* maker) { 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAnimateBase* result = (SkAnimateBase*) INHERITED::deepCopy(maker); 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com result->fApply = fApply; 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com result->fFieldInfo =fFieldInfo; 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com result->fHasValues = false; 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return result; 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkAnimateBase::dirty() { 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fChanged = true; 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifdef SK_DUMP_ENABLED 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkAnimateBase::dump(SkAnimateMaker* maker) { 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com dumpBase(maker); 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (target.size() > 0) 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("target=\"%s\" ", target.c_str()); 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (fTarget && strcmp(fTarget->id, "")) 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("target=\"%s\" ", fTarget->id); 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (lval.size() > 0) 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("lval=\"%s\" ", lval.c_str()); 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (field.size() > 0) 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("field=\"%s\" ", field.c_str()); 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (fFieldInfo) 858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("field=\"%s\" ", fFieldInfo->fName); 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (formula.size() > 0) 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("formula=\"%s\" ", formula.c_str()); 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else { 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (from.size() > 0) 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("from=\"%s\" ", from.c_str()); 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("to=\"%s\" ", to.c_str()); 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (begin != 0) { 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkDebugf("begin=\"%g\" ", SkScalarToFloat(SkScalarDiv(begin,1000))); 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comSkDisplayable* SkAnimateBase::getParent() const { 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return (SkDisplayable*) fApply; 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool SkAnimateBase::getProperty(int index, SkScriptValue* value) const { 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com int boolResult; 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com switch (index) { 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SK_PROPERTY(dynamic): 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com boolResult = fDynamic; 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com goto returnBool; 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SK_PROPERTY(mirror): 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com boolResult = fMirror; 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com goto returnBool; 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SK_PROPERTY(reset): 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com boolResult = fReset; 1148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comreturnBool: 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fOperand.fS32 = SkToBool(boolResult); 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fType = SkType_Boolean; 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 1188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SK_PROPERTY(step): 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (fApply == NULL) 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return false; // !!! notify there's an error? 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fApply->getStep(value); 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SK_PROPERTY(values): 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fOperand.fString = (SkString*) &to; 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com value->fType = SkType_String; 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com default: 1288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(0); 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return false; 1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 134d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.combool SkAnimateBase::hasExecute() const 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com{ 136d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com return false; 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkAnimateBase::onEndElement(SkAnimateMaker& maker) { 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fChanged = false; 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com setTarget(maker); 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (field.size()) { 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(fTarget); 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fFieldInfo = fTarget->getMember(field.c_str()); 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com field.reset(); 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (lval.size()) { 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // lval must be of the form x[y] 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char* lvalStr = lval.c_str(); 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char* arrayEnd = strchr(lvalStr, '['); 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (arrayEnd == NULL) 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return; //should this return an error? 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com size_t arrayNameLen = arrayEnd - lvalStr; 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkString arrayStr(lvalStr, arrayNameLen); 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(fTarget); //this return an error? 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fFieldInfo = fTarget->getMember(arrayStr.c_str()); 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkString scriptStr(arrayEnd + 1, lval.size() - arrayNameLen - 2); 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAnimatorScript::EvaluateInt(maker, this, scriptStr.c_str(), &fFieldOffset); 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 162d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.comvoid SkAnimateBase::packARGB(SkScalar array[], int count, SkTDOperandArray* converted) 163d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com{ 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(count == 4); 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com converted->setCount(1); 166e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com SkColor color = SkColorSetARGB(SkScalarRoundToInt(array[0]), 167e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com SkScalarRoundToInt(array[1]), 168e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com SkScalarRoundToInt(array[2]), 169e1ca705cac4b946993f6cbf798e2a0ba27e739f3reed@google.com SkScalarRoundToInt(array[3])); 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com (*converted)[0].fS32 = color; 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkAnimateBase::refresh(SkAnimateMaker& ) { 1768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool SkAnimateBase::setParent(SkDisplayable* apply) { 1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(apply->isApply()); 1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fApply = (SkApply*) apply; 1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return false; 1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.combool SkAnimateBase::setProperty(int index, SkScriptValue& value) { 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool boolValue = SkToBool(value.fOperand.fS32); 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com switch (index) { 1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SK_PROPERTY(dynamic): 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fDynamic = boolValue; 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com goto checkForBool; 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SK_PROPERTY(values): 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fHasValues = true; 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(value.fType == SkType_String); 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com to = *value.fOperand.fString; 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 1958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SK_PROPERTY(mirror): 1968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fMirror = boolValue; 1978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com goto checkForBool; 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com case SK_PROPERTY(reset): 1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fReset = boolValue; 2008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comcheckForBool: 2018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkASSERT(value.fType == SkType_Boolean); 2028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com break; 2038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com default: 2048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return false; 2058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return true; 2078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comvoid SkAnimateBase::setTarget(SkAnimateMaker& maker) { 2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (target.size()) { 2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkAnimatorScript engine(maker, this, SkType_Displayable); 2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const char* script = target.c_str(); 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com SkScriptValue scriptValue; 2148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com bool success = engine.evaluateScript(&script, &scriptValue); 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (success && scriptValue.fType == SkType_Displayable) 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com fTarget = scriptValue.fOperand.fDrawable; 2178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else if (maker.find(target.c_str(), (SkDisplayable**) &fTarget) == false) { 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (fApply->getMode() == SkApply::kMode_create) 2198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return; // may not be an error 2208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (engine.getError() != SkScriptEngine::kNoError) 2218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com maker.setScriptError(engine); 2228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com else { 2238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com maker.setErrorNoun(target); 2248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com maker.setErrorCode(SkDisplayXMLParserError::kTargetIDNotFound); 2258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com return; 2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (fApply && fApply->getMode() != SkApply::kMode_create) 2298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com target.reset(); 2308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 2318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 233d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.combool SkAnimateBase::targetNeedsInitialization() const { 234d6176b0dcacb124539e0cfd051e6d93a9782f020rmistry@google.com return false; 2358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 236