static void Interpolator_setKeyFrame(JNIEnv* env, jobject clazz, jlong interpHandle, jint index, jint msec, jfloatArray valueArray, jfloatArray blendArray) { SkInterpolator* interp = reinterpret_cast<SkInterpolator*>(interpHandle); SkScalar blendStorage[4]; SkScalar* blend = NULL; AutoJavaFloatArray autoValues(env, valueArray); float* values = autoValues.ptr(); int i, n = autoValues.length(); SkAutoSTMalloc<16, SkScalar> storage(n); SkScalar* scalars = storage.get(); for (i = 0; i < n; i++) scalars[i] = SkFloatToScalar(values[i]); if (blendArray != NULL) { AutoJavaFloatArray autoBlend(env, blendArray, 4); values = autoBlend.ptr(); for (i = 0; i < 4; i++) blendStorage[i] = SkFloatToScalar(values[i]); blend = blendStorage; } interp->setKeyFrame(index, msec, scalars, blend); }
FilterQualityView() : fImage(make_image()), fTrans(2, 2), fShowFatBits(true) { fCell.set(256, 256); fScale.set(1, SK_Scalar1 / 8, 1); fAngle.setMod(0, 360); SkScalar values[2]; fTrans.setMirror(true); fTrans.setReset(true); fCurrTime = 0; fTrans.setRepeatCount(999); values[0] = values[1] = 0; fTrans.setKeyFrame(0, fCurrTime, values); values[0] = values[1] = 1; fTrans.setKeyFrame(1, fCurrTime + 2000, values); }
void spawnAnimation(SkMSec now) { this->setTime(now); delete fInterp; fInterp = new SkInterpolator(5, 3); SkScalar values[5]; color_to_floats(fColor, values); values[4] = 0; fInterp->setKeyFrame(0, now, values); values[0] = 0; values[4] = 180; fInterp->setKeyFrame(1, now + 1000, values); color_to_floats(rand_opaque_color(fColor), values); values[4] = 360; fInterp->setKeyFrame(2, now + 2000, values); fInterp->setMirror(true); fInterp->setRepeatCount(3); this->notifyDrawingChanged(); }