bool SkAnimatorScript::EvalID(const char* token, size_t len, void* user, SkScriptValue* value) { SkAnimatorScript* engine = (SkAnimatorScript*) user; SkTDict<SkDisplayable*>* ids = &engine->fMaker.fIDs; SkDisplayable* displayable; bool success = ids->find(token, len, &displayable); if (success == false) { displayable = engine->fWorking; if (SK_LITERAL_STR_EQUAL("parent", token, len)) { SkDisplayable* parent = displayable->getParent(); if (parent == false) parent = engine->fParent; if (parent) { value->fOperand.fDisplayable = parent; value->fType = SkType_Displayable; return true; } } if (displayable && EvalMember(token, len, displayable, engine, value)) return true; value->fOperand.fString = NULL; value->fType = SkType_String; } else { SkDisplayable* working = engine->fWorking; value->fOperand.fDisplayable = displayable; value->fType = SkType_Displayable; if (displayable->canContainDependents() && working && working->isAnimate()) { SkAnimateBase* animator = (SkAnimateBase*) working; if (animator->isDynamic()) { SkDisplayDepend* depend = (SkDisplayDepend* ) displayable; depend->addDependent(working); } } } return true; }