19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "jni.h" 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <android_runtime/AndroidRuntime.h> 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkCamera.h" 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jfieldID gNativeInstanceFieldID; 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_constructor(JNIEnv* env, jobject obj) { 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Sk3DView* view = new Sk3DView; 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project env->SetIntField(obj, gNativeInstanceFieldID, (int)view); 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_destructor(JNIEnv* env, jobject obj) { 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project delete (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_save(JNIEnv* env, jobject obj) { 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v->save(); 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_restore(JNIEnv* env, jobject obj) { 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v->restore(); 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_translate(JNIEnv* env, jobject obj, 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float dx, float dy, float dz) { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v->translate(SkFloatToScalar(dx), SkFloatToScalar(dy), SkFloatToScalar(dz)); 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_rotateX(JNIEnv* env, jobject obj, float degrees) { 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v->rotateX(SkFloatToScalar(degrees)); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_rotateY(JNIEnv* env, jobject obj, float degrees) { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v->rotateY(SkFloatToScalar(degrees)); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_rotateZ(JNIEnv* env, jobject obj, float degrees) { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v->rotateZ(SkFloatToScalar(degrees)); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4847b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guystatic void Camera_rotate(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) { 4947b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 5047b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy v->rotateX(SkFloatToScalar(x)); 5147b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy v->rotateY(SkFloatToScalar(y)); 5247b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy v->rotateZ(SkFloatToScalar(z)); 5347b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy} 5447b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy 5547b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guystatic void Camera_setLocation(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) { 5647b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 5747b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy v->setCameraLocation(SkFloatToScalar(x), SkFloatToScalar(y), SkFloatToScalar(z)); 5847b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy} 5947b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy 60a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasestatic jfloat Camera_getLocationX(JNIEnv* env, jobject obj) { 61a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 62a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase return SkScalarToFloat(v->getCameraLocationX()); 63a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 64a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 65a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasestatic jfloat Camera_getLocationY(JNIEnv* env, jobject obj) { 66a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 67a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase return SkScalarToFloat(v->getCameraLocationY()); 68a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 69a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 70a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasestatic jfloat Camera_getLocationZ(JNIEnv* env, jobject obj) { 71a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 72a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase return SkScalarToFloat(v->getCameraLocationZ()); 73a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 74a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_getMatrix(JNIEnv* env, jobject obj, int native_matrix) { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v->getMatrix((SkMatrix*)native_matrix); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_applyToCanvas(JNIEnv* env, jobject obj, int native_canvas) { 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v->applyToCanvas((SkCanvas*)native_canvas); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic float Camera_dotWithNormal(JNIEnv* env, jobject obj, 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float x, float y, float z) { 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkScalar dot = v->dotWithNormal(SkFloatToScalar(x), SkFloatToScalar(y), 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkFloatToScalar(z)); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SkScalarToFloat(dot); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * JNI registration. 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gCameraMethods[] = { 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* name, signature, funcPtr */ 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeConstructor", "()V", (void*)Camera_constructor }, 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeDestructor", "()V", (void*)Camera_destructor }, 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "save", "()V", (void*)Camera_save }, 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "restore", "()V", (void*)Camera_restore }, 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "translate", "(FFF)V", (void*)Camera_translate }, 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "rotateX", "(F)V", (void*)Camera_rotateX }, 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "rotateY", "(F)V", (void*)Camera_rotateY }, 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "rotateZ", "(F)V", (void*)Camera_rotateZ }, 10947b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy { "rotate", "(FFF)V", (void*)Camera_rotate }, 11047b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy { "setLocation", "(FFF)V", (void*)Camera_setLocation }, 111a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase { "getLocationX", "()F", (void*)Camera_getLocationX }, 112a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase { "getLocationY", "()F", (void*)Camera_getLocationY }, 113a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase { "getLocationZ", "()F", (void*)Camera_getLocationZ }, 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeGetMatrix", "(I)V", (void*)Camera_getMatrix }, 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeApplyToCanvas", "(I)V", (void*)Camera_applyToCanvas }, 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "dotWithNormal", "(FFF)F", (void*)Camera_dotWithNormal } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_graphics_Camera(JNIEnv* env) { 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jclass clazz = env->FindClass("android/graphics/Camera"); 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (clazz == 0) { 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gNativeInstanceFieldID = env->GetFieldID(clazz, "native_instance", "I"); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (gNativeInstanceFieldID == 0) { 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return android::AndroidRuntime::registerNativeMethods(env, 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "android/graphics/Camera", 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gCameraMethods, 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SK_ARRAY_COUNT(gCameraMethods)); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 133