1315c329544d7c593d1072b071cbb92d9afe74021John Reck/* 2315c329544d7c593d1072b071cbb92d9afe74021John Reck * Copyright (C) 2014 The Android Open Source Project 3315c329544d7c593d1072b071cbb92d9afe74021John Reck * 4315c329544d7c593d1072b071cbb92d9afe74021John Reck * Licensed under the Apache License, Version 2.0 (the "License"); 5315c329544d7c593d1072b071cbb92d9afe74021John Reck * you may not use this file except in compliance with the License. 6315c329544d7c593d1072b071cbb92d9afe74021John Reck * You may obtain a copy of the License at 7315c329544d7c593d1072b071cbb92d9afe74021John Reck * 8315c329544d7c593d1072b071cbb92d9afe74021John Reck * http://www.apache.org/licenses/LICENSE-2.0 9315c329544d7c593d1072b071cbb92d9afe74021John Reck * 10315c329544d7c593d1072b071cbb92d9afe74021John Reck * Unless required by applicable law or agreed to in writing, software 11315c329544d7c593d1072b071cbb92d9afe74021John Reck * distributed under the License is distributed on an "AS IS" BASIS, 12315c329544d7c593d1072b071cbb92d9afe74021John Reck * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13315c329544d7c593d1072b071cbb92d9afe74021John Reck * See the License for the specific language governing permissions and 14315c329544d7c593d1072b071cbb92d9afe74021John Reck * limitations under the License. 15315c329544d7c593d1072b071cbb92d9afe74021John Reck */ 16315c329544d7c593d1072b071cbb92d9afe74021John Reck 17315c329544d7c593d1072b071cbb92d9afe74021John Reck#define LOG_TAG "OpenGLRenderer" 18315c329544d7c593d1072b071cbb92d9afe74021John Reck 19315c329544d7c593d1072b071cbb92d9afe74021John Reck#include "jni.h" 20315c329544d7c593d1072b071cbb92d9afe74021John Reck#include <nativehelper/JNIHelp.h> 219e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu#include <cutils/log.h> 22ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe#include "core_jni_helpers.h" 23315c329544d7c593d1072b071cbb92d9afe74021John Reck 24315c329544d7c593d1072b071cbb92d9afe74021John Reck#include <Interpolator.h> 25315c329544d7c593d1072b071cbb92d9afe74021John Reck 26315c329544d7c593d1072b071cbb92d9afe74021John Recknamespace android { 27315c329544d7c593d1072b071cbb92d9afe74021John Reck 28315c329544d7c593d1072b071cbb92d9afe74021John Reckusing namespace uirenderer; 29315c329544d7c593d1072b071cbb92d9afe74021John Reck 30315c329544d7c593d1072b071cbb92d9afe74021John Reckstatic jlong createAccelerateDecelerateInterpolator(JNIEnv* env, jobject clazz) { 31315c329544d7c593d1072b071cbb92d9afe74021John Reck return reinterpret_cast<jlong>(new AccelerateDecelerateInterpolator()); 32315c329544d7c593d1072b071cbb92d9afe74021John Reck} 33315c329544d7c593d1072b071cbb92d9afe74021John Reck 34c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckstatic jlong createAccelerateInterpolator(JNIEnv* env, jobject clazz, jfloat factor) { 35c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck return reinterpret_cast<jlong>(new AccelerateInterpolator(factor)); 36c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck} 37c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 38c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckstatic jlong createAnticipateInterpolator(JNIEnv* env, jobject clazz, jfloat tension) { 39c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck return reinterpret_cast<jlong>(new AnticipateInterpolator(tension)); 40c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck} 41c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 42c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckstatic jlong createAnticipateOvershootInterpolator(JNIEnv* env, jobject clazz, jfloat tension) { 43c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck return reinterpret_cast<jlong>(new AnticipateOvershootInterpolator(tension)); 44c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck} 45c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 46c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckstatic jlong createBounceInterpolator(JNIEnv* env, jobject clazz) { 47c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck return reinterpret_cast<jlong>(new BounceInterpolator()); 48c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck} 49c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 50c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckstatic jlong createCycleInterpolator(JNIEnv* env, jobject clazz, jfloat cycles) { 51c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck return reinterpret_cast<jlong>(new CycleInterpolator(cycles)); 52c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck} 53c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 54c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckstatic jlong createDecelerateInterpolator(JNIEnv* env, jobject clazz, jfloat factor) { 55c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck return reinterpret_cast<jlong>(new DecelerateInterpolator(factor)); 56c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck} 57c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 58c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckstatic jlong createLinearInterpolator(JNIEnv* env, jobject clazz) { 59c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck return reinterpret_cast<jlong>(new LinearInterpolator()); 60c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck} 61c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 62c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckstatic jlong createOvershootInterpolator(JNIEnv* env, jobject clazz, jfloat tension) { 63c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck return reinterpret_cast<jlong>(new OvershootInterpolator(tension)); 64c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck} 65c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 669e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liustatic jlong createPathInterpolator(JNIEnv* env, jobject clazz, jfloatArray jX, jfloatArray jY) { 679e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu jsize lenX = env->GetArrayLength(jX); 689e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu jsize lenY = env->GetArrayLength(jY); 699e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu LOG_ALWAYS_FATAL_IF(lenX != lenY || lenX <= 0, "Invalid path interpolator, x size: %d," 709e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu " y size: %d", lenX, lenY); 719e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu std::vector<float> x(lenX); 729e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu std::vector<float> y(lenY); 739e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu env->GetFloatArrayRegion(jX, 0, lenX, x.data()); 749e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu env->GetFloatArrayRegion(jY, 0, lenX, y.data()); 759e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu 769e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu return reinterpret_cast<jlong>(new PathInterpolator(std::move(x), std::move(y))); 779e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu} 789e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu 79315c329544d7c593d1072b071cbb92d9afe74021John Reckstatic jlong createLutInterpolator(JNIEnv* env, jobject clazz, jfloatArray jlut) { 80315c329544d7c593d1072b071cbb92d9afe74021John Reck jsize len = env->GetArrayLength(jlut); 81315c329544d7c593d1072b071cbb92d9afe74021John Reck if (len <= 0) { 82315c329544d7c593d1072b071cbb92d9afe74021John Reck return 0; 83315c329544d7c593d1072b071cbb92d9afe74021John Reck } 84315c329544d7c593d1072b071cbb92d9afe74021John Reck float* lut = new float[len]; 85315c329544d7c593d1072b071cbb92d9afe74021John Reck env->GetFloatArrayRegion(jlut, 0, len, lut); 86315c329544d7c593d1072b071cbb92d9afe74021John Reck return reinterpret_cast<jlong>(new LUTInterpolator(lut, len)); 87315c329544d7c593d1072b071cbb92d9afe74021John Reck} 88315c329544d7c593d1072b071cbb92d9afe74021John Reck 89315c329544d7c593d1072b071cbb92d9afe74021John Reck// ---------------------------------------------------------------------------- 90315c329544d7c593d1072b071cbb92d9afe74021John Reck// JNI Glue 91315c329544d7c593d1072b071cbb92d9afe74021John Reck// ---------------------------------------------------------------------------- 92315c329544d7c593d1072b071cbb92d9afe74021John Reck 93315c329544d7c593d1072b071cbb92d9afe74021John Reckconst char* const kClassPathName = "com/android/internal/view/animation/NativeInterpolatorFactoryHelper"; 94315c329544d7c593d1072b071cbb92d9afe74021John Reck 9576f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod gMethods[] = { 96315c329544d7c593d1072b071cbb92d9afe74021John Reck { "createAccelerateDecelerateInterpolator", "()J", (void*) createAccelerateDecelerateInterpolator }, 97c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck { "createAccelerateInterpolator", "(F)J", (void*) createAccelerateInterpolator }, 98c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck { "createAnticipateInterpolator", "(F)J", (void*) createAnticipateInterpolator }, 99c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck { "createAnticipateOvershootInterpolator", "(F)J", (void*) createAnticipateOvershootInterpolator }, 100c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck { "createBounceInterpolator", "()J", (void*) createBounceInterpolator }, 101c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck { "createCycleInterpolator", "(F)J", (void*) createCycleInterpolator }, 102c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck { "createDecelerateInterpolator", "(F)J", (void*) createDecelerateInterpolator }, 103c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck { "createLinearInterpolator", "()J", (void*) createLinearInterpolator }, 104c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck { "createOvershootInterpolator", "(F)J", (void*) createOvershootInterpolator }, 1059e9eeeeb78d94804cda00c2b36e56fdaca5552d6Doris Liu { "createPathInterpolator", "([F[F)J", (void*) createPathInterpolator }, 106315c329544d7c593d1072b071cbb92d9afe74021John Reck { "createLutInterpolator", "([F)J", (void*) createLutInterpolator }, 107315c329544d7c593d1072b071cbb92d9afe74021John Reck}; 108315c329544d7c593d1072b071cbb92d9afe74021John Reck 109315c329544d7c593d1072b071cbb92d9afe74021John Reckint register_com_android_internal_view_animation_NativeInterpolatorFactoryHelper(JNIEnv* env) { 110ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe return RegisterMethodsOrDie(env, kClassPathName, gMethods, NELEM(gMethods)); 111315c329544d7c593d1072b071cbb92d9afe74021John Reck} 112315c329544d7c593d1072b071cbb92d9afe74021John Reck 113315c329544d7c593d1072b071cbb92d9afe74021John Reck 114315c329544d7c593d1072b071cbb92d9afe74021John Reck} // namespace android 115