1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/skia/trunk/src/animator/SkAnimateSet.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,87 @@ 1.4 + 1.5 +/* 1.6 + * Copyright 2006 The Android Open Source Project 1.7 + * 1.8 + * Use of this source code is governed by a BSD-style license that can be 1.9 + * found in the LICENSE file. 1.10 + */ 1.11 + 1.12 + 1.13 +#include "SkAnimateSet.h" 1.14 +#include "SkAnimateMaker.h" 1.15 +#include "SkAnimateProperties.h" 1.16 +#include "SkParse.h" 1.17 + 1.18 +#if SK_USE_CONDENSED_INFO == 0 1.19 + 1.20 +const SkMemberInfo SkSet::fInfo[] = { 1.21 + SK_MEMBER(begin, MSec), 1.22 + SK_MEMBER(dur, MSec), 1.23 + SK_MEMBER_PROPERTY(dynamic, Boolean), 1.24 + SK_MEMBER(field, String), 1.25 +// SK_MEMBER(formula, DynamicString), 1.26 + SK_MEMBER(lval, DynamicString), 1.27 +// SK_MEMBER_PROPERTY(reset, Boolean), 1.28 + SK_MEMBER_PROPERTY(step, Int), 1.29 + SK_MEMBER(target, DynamicString), 1.30 + SK_MEMBER(to, DynamicString) 1.31 +}; 1.32 + 1.33 +#endif 1.34 + 1.35 +DEFINE_GET_MEMBER(SkSet); 1.36 + 1.37 +SkSet::SkSet() { 1.38 + dur = 1; 1.39 +} 1.40 + 1.41 +#ifdef SK_DUMP_ENABLED 1.42 +void SkSet::dump(SkAnimateMaker* maker) { 1.43 + INHERITED::dump(maker); 1.44 + if (dur != 1) { 1.45 + SkDebugf("dur=\"%g\" ", SkScalarToFloat(SkScalarDiv(dur,1000))); 1.46 + } 1.47 + //don't want double />\n's 1.48 + SkDebugf("/>\n"); 1.49 + 1.50 +} 1.51 +#endif 1.52 + 1.53 +void SkSet::refresh(SkAnimateMaker& maker) { 1.54 + fFieldInfo->setValue(maker, &fValues, 0, fFieldInfo->fCount, NULL, 1.55 + fFieldInfo->getType(), to); 1.56 +} 1.57 + 1.58 +void SkSet::onEndElement(SkAnimateMaker& maker) { 1.59 + if (resolveCommon(maker) == false) 1.60 + return; 1.61 + if (fFieldInfo == NULL) { 1.62 + maker.setErrorCode(SkDisplayXMLParserError::kFieldNotInTarget); 1.63 + return; 1.64 + } 1.65 + fReset = dur != 1; 1.66 + SkDisplayTypes outType = fFieldInfo->getType(); 1.67 + int comps = outType == SkType_String || outType == SkType_DynamicString ? 1 : 1.68 + fFieldInfo->getSize((const SkDisplayable*) fTarget) / sizeof(int); 1.69 + if (fValues.getType() == SkType_Unknown) { 1.70 + fValues.setType(outType); 1.71 + fValues.setCount(comps); 1.72 + if (outType == SkType_String || outType == SkType_DynamicString) 1.73 + fValues[0].fString = SkNEW(SkString); 1.74 + else 1.75 + memset(fValues.begin(), 0, fValues.count() * sizeof(fValues.begin()[0])); 1.76 + } else { 1.77 + SkASSERT(fValues.getType() == outType); 1.78 + if (fFieldInfo->fType == SkType_Array) 1.79 + comps = fValues.count(); 1.80 + else { 1.81 + SkASSERT(fValues.count() == comps); 1.82 + } 1.83 + } 1.84 + if (formula.size() > 0) { 1.85 + comps = 1; 1.86 + outType = SkType_MSec; 1.87 + } 1.88 + fFieldInfo->setValue(maker, &fValues, fFieldOffset, comps, this, outType, formula.size() > 0 ? formula : to); 1.89 + fComponents = fValues.count(); 1.90 +}