1 /* libs/graphics/animator/SkDisplayRandom.cpp 2 ** 3 ** Copyright 2006, The Android Open Source Project 4 ** 5 ** Licensed under the Apache License, Version 2.0 (the "License"); 6 ** you may not use this file except in compliance with the License. 7 ** You may obtain a copy of the License at 8 ** 9 ** http://www.apache.org/licenses/LICENSE-2.0 10 ** 11 ** Unless required by applicable law or agreed to in writing, software 12 ** distributed under the License is distributed on an "AS IS" BASIS, 13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 ** See the License for the specific language governing permissions and 15 ** limitations under the License. 16 */ 17 18 #include "SkDisplayRandom.h" 19 #include "SkInterpolator.h" 20 21 enum SkDisplayRandom_Properties { 22 SK_PROPERTY(random), 23 SK_PROPERTY(seed) 24 }; 25 26 #if SK_USE_CONDENSED_INFO == 0 27 28 const SkMemberInfo SkDisplayRandom::fInfo[] = { 29 SK_MEMBER(blend, Float), 30 SK_MEMBER(max, Float), 31 SK_MEMBER(min, Float), 32 SK_MEMBER_DYNAMIC_PROPERTY(random, Float), 33 SK_MEMBER_PROPERTY(seed, Int) 34 }; 35 36 #endif 37 38 DEFINE_GET_MEMBER(SkDisplayRandom); 39 40 SkDisplayRandom::SkDisplayRandom() : blend(0), min(0), max(SK_Scalar1) { 41 } 42 43 #ifdef SK_DUMP_ENABLED 44 void SkDisplayRandom::dump(SkAnimateMaker* maker) { 45 dumpBase(maker); 46 #ifdef SK_CAN_USE_FLOAT 47 SkDebugf("min=\"%g\" ", SkScalarToFloat(min)); 48 SkDebugf("max=\"%g\" ", SkScalarToFloat(max)); 49 SkDebugf("blend=\"%g\" ", SkScalarToFloat(blend)); 50 #else 51 SkDebugf("min=\"%x\" ", min); 52 SkDebugf("max=\"%x\" ", max); 53 SkDebugf("blend=\"%x\" ", blend); 54 #endif 55 SkDebugf("/>\n"); 56 } 57 #endif 58 59 bool SkDisplayRandom::getProperty(int index, SkScriptValue* value) const { 60 switch(index) { 61 case SK_PROPERTY(random): { 62 SkScalar random = fRandom.nextUScalar1(); 63 SkScalar relativeT = SkUnitCubicInterp(random, SK_Scalar1 - blend, 0, 0, SK_Scalar1 - blend); 64 value->fOperand.fScalar = min + SkScalarMul(max - min, relativeT); 65 value->fType = SkType_Float; 66 return true; 67 } 68 default: 69 SkASSERT(0); 70 } 71 return false; 72 } 73 74 bool SkDisplayRandom::setProperty(int index, SkScriptValue& value) { 75 SkASSERT(index == SK_PROPERTY(seed)); 76 SkASSERT(value.fType == SkType_Int); 77 fRandom.setSeed(value.fOperand.fS32); 78 return true; 79 } 80 81