Camera.cpp revision 2e0103eb340822f9d580c1aa8492bae8394b8243
1#include "jni.h" 2#include <android_runtime/AndroidRuntime.h> 3 4#include "SkCamera.h" 5 6static jfieldID gNativeInstanceFieldID; 7 8static void Camera_constructor(JNIEnv* env, jobject obj) { 9 Sk3DView* view = new Sk3DView; 10 env->SetLongField(obj, gNativeInstanceFieldID, reinterpret_cast<jlong>(view)); 11} 12 13static void Camera_destructor(JNIEnv* env, jobject obj) { 14 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 15 Sk3DView* view = reinterpret_cast<Sk3DView*>(viewHandle); 16 delete view; 17} 18 19static void Camera_save(JNIEnv* env, jobject obj) { 20 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 21 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 22 v->save(); 23} 24 25static void Camera_restore(JNIEnv* env, jobject obj) { 26 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 27 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 28 v->restore(); 29} 30 31static void Camera_translate(JNIEnv* env, jobject obj, 32 jfloat dx, jfloat dy, jfloat dz) { 33 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 34 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 35 v->translate(dx, dy, dz); 36} 37 38static void Camera_rotateX(JNIEnv* env, jobject obj, jfloat degrees) { 39 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 40 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 41 v->rotateX(degrees); 42} 43 44static void Camera_rotateY(JNIEnv* env, jobject obj, jfloat degrees) { 45 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 46 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 47 v->rotateY(degrees); 48} 49 50static void Camera_rotateZ(JNIEnv* env, jobject obj, jfloat degrees) { 51 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 52 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 53 v->rotateZ(degrees); 54} 55 56static void Camera_rotate(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) { 57 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 58 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 59 v->rotateX(x); 60 v->rotateY(y); 61 v->rotateZ(z); 62} 63 64static void Camera_setLocation(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) { 65 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 66 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 67 v->setCameraLocation(x, y, z); 68} 69 70static jfloat Camera_getLocationX(JNIEnv* env, jobject obj) { 71 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 72 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 73 return SkScalarToFloat(v->getCameraLocationX()); 74} 75 76static jfloat Camera_getLocationY(JNIEnv* env, jobject obj) { 77 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 78 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 79 return SkScalarToFloat(v->getCameraLocationY()); 80} 81 82static jfloat Camera_getLocationZ(JNIEnv* env, jobject obj) { 83 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 84 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 85 return SkScalarToFloat(v->getCameraLocationZ()); 86} 87 88static void Camera_getMatrix(JNIEnv* env, jobject obj, jlong matrixHandle) { 89 SkMatrix* native_matrix = reinterpret_cast<SkMatrix*>(matrixHandle); 90 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 91 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 92 v->getMatrix(native_matrix); 93} 94 95static void Camera_applyToCanvas(JNIEnv* env, jobject obj, jlong canvasHandle) { 96 SkCanvas* native_canvas = reinterpret_cast<SkCanvas*>(canvasHandle); 97 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 98 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 99 v->applyToCanvas((SkCanvas*)native_canvas); 100} 101 102static jfloat Camera_dotWithNormal(JNIEnv* env, jobject obj, 103 jfloat x, jfloat y, jfloat z) { 104 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID); 105 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle); 106 SkScalar dot = v->dotWithNormal(x, y, z); 107 return SkScalarToFloat(dot); 108} 109 110// ---------------------------------------------------------------------------- 111 112/* 113 * JNI registration. 114 */ 115static JNINativeMethod gCameraMethods[] = { 116 /* name, signature, funcPtr */ 117 118 { "nativeConstructor", "()V", (void*)Camera_constructor }, 119 { "nativeDestructor", "()V", (void*)Camera_destructor }, 120 { "save", "()V", (void*)Camera_save }, 121 { "restore", "()V", (void*)Camera_restore }, 122 { "translate", "(FFF)V", (void*)Camera_translate }, 123 { "rotateX", "(F)V", (void*)Camera_rotateX }, 124 { "rotateY", "(F)V", (void*)Camera_rotateY }, 125 { "rotateZ", "(F)V", (void*)Camera_rotateZ }, 126 { "rotate", "(FFF)V", (void*)Camera_rotate }, 127 { "setLocation", "(FFF)V", (void*)Camera_setLocation }, 128 { "getLocationX", "()F", (void*)Camera_getLocationX }, 129 { "getLocationY", "()F", (void*)Camera_getLocationY }, 130 { "getLocationZ", "()F", (void*)Camera_getLocationZ }, 131 { "nativeGetMatrix", "(J)V", (void*)Camera_getMatrix }, 132 { "nativeApplyToCanvas", "(J)V", (void*)Camera_applyToCanvas }, 133 { "dotWithNormal", "(FFF)F", (void*)Camera_dotWithNormal } 134}; 135 136int register_android_graphics_Camera(JNIEnv* env) { 137 jclass clazz = env->FindClass("android/graphics/Camera"); 138 if (clazz == 0) { 139 return -1; 140 } 141 gNativeInstanceFieldID = env->GetFieldID(clazz, "native_instance", "J"); 142 if (gNativeInstanceFieldID == 0) { 143 return -1; 144 } 145 return android::AndroidRuntime::registerNativeMethods(env, 146 "android/graphics/Camera", 147 gCameraMethods, 148 SK_ARRAY_COUNT(gCameraMethods)); 149} 150