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 68872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger#include "Canvas.h" 75c3d927e17e98e8fd4a9f3c86f7f4def0bcfa816Florin Malita#include "GraphicsJNI.h" 85c3d927e17e98e8fd4a9f3c86f7f4def0bcfa816Florin Malita 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic jfieldID gNativeInstanceFieldID; 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_constructor(JNIEnv* env, jobject obj) { 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Sk3DView* view = new Sk3DView; 1336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat env->SetLongField(obj, gNativeInstanceFieldID, reinterpret_cast<jlong>(view)); 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_destructor(JNIEnv* env, jobject obj) { 1736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 1836bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* view = reinterpret_cast<Sk3DView*>(viewHandle); 1936bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat delete view; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_save(JNIEnv* env, jobject obj) { 2336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 2436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v->save(); 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_restore(JNIEnv* env, jobject obj) { 2936bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 3036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v->restore(); 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void Camera_translate(JNIEnv* env, jobject obj, 3536bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jfloat dx, jfloat dy, jfloat dz) { 3636bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 3736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 382e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III v->translate(dx, dy, dz); 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhatstatic void Camera_rotateX(JNIEnv* env, jobject obj, jfloat degrees) { 4236bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 4336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 442e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III v->rotateX(degrees); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhatstatic void Camera_rotateY(JNIEnv* env, jobject obj, jfloat degrees) { 4836bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 4936bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 502e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III v->rotateY(degrees); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhatstatic void Camera_rotateZ(JNIEnv* env, jobject obj, jfloat degrees) { 5436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 5536bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 562e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III v->rotateZ(degrees); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5947b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guystatic void Camera_rotate(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) { 6036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 6136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 622e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III v->rotateX(x); 632e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III v->rotateY(y); 642e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III v->rotateZ(z); 6547b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy} 6647b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy 6747b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guystatic void Camera_setLocation(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) { 6836bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 6936bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 702e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III v->setCameraLocation(x, y, z); 7147b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy} 7247b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy 73a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasestatic jfloat Camera_getLocationX(JNIEnv* env, jobject obj) { 7436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 7536bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 76a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase return SkScalarToFloat(v->getCameraLocationX()); 77a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 78a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 79a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasestatic jfloat Camera_getLocationY(JNIEnv* env, jobject obj) { 8036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 8136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 82a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase return SkScalarToFloat(v->getCameraLocationY()); 83a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 84a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 85a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haasestatic jfloat Camera_getLocationZ(JNIEnv* env, jobject obj) { 8636bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 8736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 88a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase return SkScalarToFloat(v->getCameraLocationZ()); 89a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase} 90a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase 9136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhatstatic void Camera_getMatrix(JNIEnv* env, jobject obj, jlong matrixHandle) { 9236bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat SkMatrix* native_matrix = reinterpret_cast<SkMatrix*>(matrixHandle); 9336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 9436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 9536bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat v->getMatrix(native_matrix); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9836bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhatstatic void Camera_applyToCanvas(JNIEnv* env, jobject obj, jlong canvasHandle) { 998872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger SkCanvas* canvas = reinterpret_cast<android::Canvas*>(canvasHandle)->getSkCanvas(); 10036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 10136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 1028872b38ef403cc2c44aca07d392f5e9426fd7f54Derek Sollenberger v->applyToCanvas(canvas); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 10536bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhatstatic jfloat Camera_dotWithNormal(JNIEnv* env, jobject obj, 10636bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jfloat x, jfloat y, jfloat z) { 10736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 10836bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 1092e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III SkScalar dot = v->dotWithNormal(x, y, z); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return SkScalarToFloat(dot); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * JNI registration. 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gCameraMethods[] = { 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* name, signature, funcPtr */ 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeConstructor", "()V", (void*)Camera_constructor }, 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeDestructor", "()V", (void*)Camera_destructor }, 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "save", "()V", (void*)Camera_save }, 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "restore", "()V", (void*)Camera_restore }, 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "translate", "(FFF)V", (void*)Camera_translate }, 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "rotateX", "(F)V", (void*)Camera_rotateX }, 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "rotateY", "(F)V", (void*)Camera_rotateY }, 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "rotateZ", "(F)V", (void*)Camera_rotateZ }, 12947b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy { "rotate", "(FFF)V", (void*)Camera_rotate }, 13047b8adec3904535c8d8ce2b6e42ecd736f2d90ceRomain Guy { "setLocation", "(FFF)V", (void*)Camera_setLocation }, 131a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase { "getLocationX", "()F", (void*)Camera_getLocationX }, 132a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase { "getLocationY", "()F", (void*)Camera_getLocationY }, 133a1cff5043d0fbd78fcf9c48e7658e56a5b0c2de3Chet Haase { "getLocationZ", "()F", (void*)Camera_getLocationZ }, 13436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat { "nativeGetMatrix", "(J)V", (void*)Camera_getMatrix }, 13536bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat { "nativeApplyToCanvas", "(J)V", (void*)Camera_applyToCanvas }, 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "dotWithNormal", "(FFF)F", (void*)Camera_dotWithNormal } 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_graphics_Camera(JNIEnv* env) { 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jclass clazz = env->FindClass("android/graphics/Camera"); 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (clazz == 0) { 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 14436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat gNativeInstanceFieldID = env->GetFieldID(clazz, "native_instance", "J"); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (gNativeInstanceFieldID == 0) { 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return -1; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return android::AndroidRuntime::registerNativeMethods(env, 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "android/graphics/Camera", 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gCameraMethods, 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SK_ARRAY_COUNT(gCameraMethods)); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 153