/* * Copyright 2006 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "SkAnimateSet.h" #include "SkAnimateMaker.h" #include "SkAnimateProperties.h" #include "SkParse.h" #if SK_USE_CONDENSED_INFO == 0 const SkMemberInfo SkSet::fInfo[] = { SK_MEMBER(begin, MSec), SK_MEMBER(dur, MSec), SK_MEMBER_PROPERTY(dynamic, Boolean), SK_MEMBER(field, String), // SK_MEMBER(formula, DynamicString), SK_MEMBER(lval, DynamicString), // SK_MEMBER_PROPERTY(reset, Boolean), SK_MEMBER_PROPERTY(step, Int), SK_MEMBER(target, DynamicString), SK_MEMBER(to, DynamicString) }; #endif DEFINE_GET_MEMBER(SkSet); SkSet::SkSet() { dur = 1; } #ifdef SK_DUMP_ENABLED void SkSet::dump(SkAnimateMaker* maker) { INHERITED::dump(maker); if (dur != 1) { SkDebugf("dur=\"%g\" ", SkScalarToFloat(SkScalarDiv(dur,1000))); } //don't want double />\n's SkDebugf("/>\n"); } #endif void SkSet::refresh(SkAnimateMaker& maker) { fFieldInfo->setValue(maker, &fValues, 0, fFieldInfo->fCount, NULL, fFieldInfo->getType(), to); } void SkSet::onEndElement(SkAnimateMaker& maker) { if (resolveCommon(maker) == false) return; if (fFieldInfo == NULL) { maker.setErrorCode(SkDisplayXMLParserError::kFieldNotInTarget); return; } fReset = dur != 1; SkDisplayTypes outType = fFieldInfo->getType(); int comps = outType == SkType_String || outType == SkType_DynamicString ? 1 : fFieldInfo->getSize((const SkDisplayable*) fTarget) / sizeof(int); if (fValues.getType() == SkType_Unknown) { fValues.setType(outType); fValues.setCount(comps); if (outType == SkType_String || outType == SkType_DynamicString) fValues[0].fString = SkNEW(SkString); else memset(fValues.begin(), 0, fValues.count() * sizeof(fValues.begin()[0])); } else { SkASSERT(fValues.getType() == outType); if (fFieldInfo->fType == SkType_Array) comps = fValues.count(); else { SkASSERT(fValues.count() == comps); } } if (formula.size() > 0) { comps = 1; outType = SkType_MSec; } fFieldInfo->setValue(maker, &fValues, fFieldOffset, comps, this, outType, formula.size() > 0 ? formula : to); fComponents = fValues.count(); }