diff -r 000000000000 -r 6474c204b198 gfx/skia/trunk/src/animator/SkAnimateSet.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/skia/trunk/src/animator/SkAnimateSet.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,87 @@ + +/* + * 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(); +}