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