SkDisplayMath.cpp revision f8cacf6b11e35785df8efb613b0c3592d535f603
1f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 2f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger/* 3f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Copyright 2006 The Android Open Source Project 4f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * 5f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 6f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger * found in the LICENSE file. 7f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger */ 8f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 9f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 10f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#include "SkDisplayMath.h" 11f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 12f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerenum SkDisplayMath_Properties { 13f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_PROPERTY(E), 14f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_PROPERTY(LN10), 15f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_PROPERTY(LN2), 16f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_PROPERTY(LOG10E), 17f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_PROPERTY(LOG2E), 18f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_PROPERTY(PI), 19f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_PROPERTY(SQRT1_2), 20f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_PROPERTY(SQRT2) 21f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger}; 22f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 23f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerconst SkScalar SkDisplayMath::gConstants[] = { 24f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#ifdef SK_SCALAR_IS_FLOAT 25f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 2.718281828f, // E 26f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 2.302585093f, // LN10 27f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 0.693147181f, // LN2 28f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 0.434294482f, // LOG10E 29f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 1.442695041f, // LOG2E 30f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 3.141592654f, // PI 31f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 0.707106781f, // SQRT1_2 32f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 1.414213562f // SQRT2 33f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#else 34f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 0x2B7E1, // E 35f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 0x24D76, // LN10 36f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 0xB172, // LN2 37f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 0x6F2E, // LOG10E 38f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 0x17154, // LOG2E 39f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 0x3243F, // PI 40f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 0xB505, // SQRT1_2 41f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 0x16A0A // SQRT2 42f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif 43f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger}; 44f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 45f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerenum SkDisplayMath_Functions { 46f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(abs), 47f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(acos), 48f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(asin), 49f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(atan), 50f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(atan2), 51f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(ceil), 52f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(cos), 53f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(exp), 54f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(floor), 55f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(log), 56f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(max), 57f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(min), 58f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(pow), 59f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(random), 60f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(round), 61f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(sin), 62f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(sqrt), 63f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_FUNCTION(tan) 64f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger}; 65f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 66f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerconst SkFunctionParamType SkDisplayMath::fFunctionParameters[] = { 67f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // abs 68f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 69f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // acos 70f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 71f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // asin 72f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 73f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // atan 74f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 75f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // atan2 76f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, 77f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 78f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // ceil 79f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 80f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // cos 81f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 82f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // exp 83f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 84f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // floor 85f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 86f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // log 87f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 88f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Array, // max 89f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 90f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Array, // min 91f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 92f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // pow 93f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, 94f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 95f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // random 96f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 97f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // round 98f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 99f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // sin 100f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 101f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // sqrt 102f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0, 103f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) SkType_Float, // tan 104f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger (SkFunctionParamType) 0 105f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger}; 106f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 107f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#if SK_USE_CONDENSED_INFO == 0 108f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 109f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerconst SkMemberInfo SkDisplayMath::fInfo[] = { 110f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_PROPERTY(E, Float), 111f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_PROPERTY(LN10, Float), 112f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_PROPERTY(LN2, Float), 113f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_PROPERTY(LOG10E, Float), 114f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_PROPERTY(LOG2E, Float), 115f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_PROPERTY(PI, Float), 116f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_PROPERTY(SQRT1_2, Float), 117f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_PROPERTY(SQRT2, Float), 118f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(abs, Float), 119f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(acos, Float), 120f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(asin, Float), 121f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(atan, Float), 122f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(atan2, Float), 123f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(ceil, Float), 124f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(cos, Float), 125f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(exp, Float), 126f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(floor, Float), 127f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(log, Float), 128f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(max, Float), 129f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(min, Float), 130f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(pow, Float), 131f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(random, Float), 132f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(round, Float), 133f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(sin, Float), 134f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(sqrt, Float), 135f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SK_MEMBER_FUNCTION(tan, Float) 136f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger}; 137f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 138f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger#endif 139f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 140f8cacf6b11e35785df8efb613b0c3592d535f603Derek SollenbergerDEFINE_GET_MEMBER(SkDisplayMath); 141f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 142f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergervoid SkDisplayMath::executeFunction(SkDisplayable* target, int index, 143f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkTDArray<SkScriptValue>& parameters, SkDisplayTypes type, 144f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkScriptValue* scriptValue) { 145f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger if (scriptValue == NULL) 146f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return; 147f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkASSERT(target == this); 148f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkScriptValue* array = parameters.begin(); 149f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkScriptValue* end = parameters.end(); 150f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkScalar input = parameters[0].fOperand.fScalar; 151f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkScalar scalarResult; 152f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger switch (index) { 153f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(abs): 154f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarAbs(input); 155f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 156f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(acos): 157f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarACos(input); 158f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 159f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(asin): 160f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarASin(input); 161f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 162f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(atan): 163f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarATan2(input, SK_Scalar1); 164f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 165f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(atan2): 166f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarATan2(input, parameters[1].fOperand.fScalar); 167f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 168f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(ceil): 169f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkIntToScalar(SkScalarCeil(input)); 170f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 171f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(cos): 172f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarCos(input); 173f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 174f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(exp): 175f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarExp(input); 176f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 177f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(floor): 178f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkIntToScalar(SkScalarFloor(input)); 179f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 180f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(log): 181f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarLog(input); 182f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 183f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(max): 184f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = -SK_ScalarMax; 185f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger while (array < end) { 186f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkMaxScalar(scalarResult, array->fOperand.fScalar); 187f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger array++; 188f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } 189f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 190f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(min): 191f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SK_ScalarMax; 192f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger while (array < end) { 193f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkMinScalar(scalarResult, array->fOperand.fScalar); 194f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger array++; 195f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } 196f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 197f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(pow): 198f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger // not the greatest -- but use x^y = e^(y * ln(x)) 199f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarLog(input); 200f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarMul(parameters[1].fOperand.fScalar, scalarResult); 201f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarExp(scalarResult); 202f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 203f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(random): 204f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = fRandom.nextUScalar1(); 205f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 206f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(round): 207f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkIntToScalar(SkScalarRound(input)); 208f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 209f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(sin): 210f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarSin(input); 211f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 212f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(sqrt): { 213f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkASSERT(parameters.count() == 1); 214f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkASSERT(type == SkType_Float); 215f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarSqrt(input); 216f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } break; 217f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger case SK_FUNCTION(tan): 218f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SkScalarTan(input); 219f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger break; 220f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger default: 221f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkASSERT(0); 222f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scalarResult = SK_ScalarNaN; 223f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } 224f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scriptValue->fOperand.fScalar = scalarResult; 225f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger scriptValue->fType = SkType_Float; 226f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger} 227f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 228f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerconst SkFunctionParamType* SkDisplayMath::getFunctionsParameters() { 229f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return fFunctionParameters; 230f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger} 231f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger 232f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenbergerbool SkDisplayMath::getProperty(int index, SkScriptValue* value) const { 233f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger if ((unsigned)index < SK_ARRAY_COUNT(gConstants)) { 234f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger value->fOperand.fScalar = gConstants[index]; 235f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger value->fType = SkType_Float; 236f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return true; 237f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger } 238f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger SkASSERT(0); 239f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger return false; 240f8cacf6b11e35785df8efb613b0c3592d535f603Derek Sollenberger} 241