1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/skia/trunk/src/animator/SkDisplayRandom.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,65 @@ 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 "SkDisplayRandom.h" 1.14 +#include "SkInterpolator.h" 1.15 + 1.16 +enum SkDisplayRandom_Properties { 1.17 + SK_PROPERTY(random), 1.18 + SK_PROPERTY(seed) 1.19 +}; 1.20 + 1.21 +#if SK_USE_CONDENSED_INFO == 0 1.22 + 1.23 +const SkMemberInfo SkDisplayRandom::fInfo[] = { 1.24 + SK_MEMBER(blend, Float), 1.25 + SK_MEMBER(max, Float), 1.26 + SK_MEMBER(min, Float), 1.27 + SK_MEMBER_DYNAMIC_PROPERTY(random, Float), 1.28 + SK_MEMBER_PROPERTY(seed, Int) 1.29 +}; 1.30 + 1.31 +#endif 1.32 + 1.33 +DEFINE_GET_MEMBER(SkDisplayRandom); 1.34 + 1.35 +SkDisplayRandom::SkDisplayRandom() : blend(0), min(0), max(SK_Scalar1) { 1.36 +} 1.37 + 1.38 +#ifdef SK_DUMP_ENABLED 1.39 +void SkDisplayRandom::dump(SkAnimateMaker* maker) { 1.40 + dumpBase(maker); 1.41 + SkDebugf("min=\"%g\" ", SkScalarToFloat(min)); 1.42 + SkDebugf("max=\"%g\" ", SkScalarToFloat(max)); 1.43 + SkDebugf("blend=\"%g\" ", SkScalarToFloat(blend)); 1.44 + SkDebugf("/>\n"); 1.45 +} 1.46 +#endif 1.47 + 1.48 +bool SkDisplayRandom::getProperty(int index, SkScriptValue* value) const { 1.49 + switch(index) { 1.50 + case SK_PROPERTY(random): { 1.51 + SkScalar random = fRandom.nextUScalar1(); 1.52 + SkScalar relativeT = SkUnitCubicInterp(random, SK_Scalar1 - blend, 0, 0, SK_Scalar1 - blend); 1.53 + value->fOperand.fScalar = min + SkScalarMul(max - min, relativeT); 1.54 + value->fType = SkType_Float; 1.55 + return true; 1.56 + } 1.57 + default: 1.58 + SkASSERT(0); 1.59 + } 1.60 + return false; 1.61 +} 1.62 + 1.63 +bool SkDisplayRandom::setProperty(int index, SkScriptValue& value) { 1.64 + SkASSERT(index == SK_PROPERTY(seed)); 1.65 + SkASSERT(value.fType == SkType_Int); 1.66 + fRandom.setSeed(value.fOperand.fS32); 1.67 + return true; 1.68 +}