diff options
Diffstat (limited to 'libs/graphics/animator/SkDisplayRandom.cpp')
-rw-r--r-- | libs/graphics/animator/SkDisplayRandom.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/libs/graphics/animator/SkDisplayRandom.cpp b/libs/graphics/animator/SkDisplayRandom.cpp new file mode 100644 index 0000000000..53775d30d8 --- /dev/null +++ b/libs/graphics/animator/SkDisplayRandom.cpp @@ -0,0 +1,63 @@ +#include "SkDisplayRandom.h" +#include "SkInterpolator.h" + +enum SkDisplayRandom_Properties { + SK_PROPERTY(random), + SK_PROPERTY(seed) +}; + +#if SK_USE_CONDENSED_INFO == 0 + +const SkMemberInfo SkDisplayRandom::fInfo[] = { + SK_MEMBER(blend, Float), + SK_MEMBER(max, Float), + SK_MEMBER(min, Float), + SK_MEMBER_DYNAMIC_PROPERTY(random, Float), + SK_MEMBER_PROPERTY(seed, Int) +}; + +#endif + +DEFINE_GET_MEMBER(SkDisplayRandom); + +SkDisplayRandom::SkDisplayRandom() : blend(0), min(0), max(SK_Scalar1) { +} + +#ifdef SK_DUMP_ENABLED +void SkDisplayRandom::dump(SkAnimateMaker* maker) { + dumpBase(maker); +#ifdef SK_CAN_USE_FLOAT + SkDebugf("min=\"%g\" ", SkScalarToFloat(min)); + SkDebugf("max=\"%g\" ", SkScalarToFloat(max)); + SkDebugf("blend=\"%g\" ", SkScalarToFloat(blend)); +#else + SkDebugf("min=\"%x\" ", min); + SkDebugf("max=\"%x\" ", max); + SkDebugf("blend=\"%x\" ", blend); +#endif + SkDebugf("/>\n"); +} +#endif + +bool SkDisplayRandom::getProperty(int index, SkScriptValue* value) const { + switch(index) { + case SK_PROPERTY(random): { + SkScalar random = fRandom.nextUScalar1(); + SkScalar relativeT = SkInterpolatorBase::Blend(random, blend); + value->fOperand.fScalar = min + SkScalarMul(max - min, relativeT); + value->fType = SkType_Float; + return true; + } + default: + SkASSERT(0); + } + return false; +} + +bool SkDisplayRandom::setProperty(int index, SkScriptValue& value) { + SkASSERT(index == SK_PROPERTY(seed)); + SkASSERT(value.fType == SkType_Int); + fRandom.setSeed(value.fOperand.fS32); + return true; +} + |