blob: 0d715fd92045a98626dd38b08a950a8576f87441 [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001#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->SetIntField(obj, gNativeInstanceFieldID, (int)view);
11}
12
13static void Camera_destructor(JNIEnv* env, jobject obj) {
14 delete (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
15}
16
17static void Camera_save(JNIEnv* env, jobject obj) {
18 Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
19 v->save();
20}
21
22static void Camera_restore(JNIEnv* env, jobject obj) {
23 Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
24 v->restore();
25}
26
27static 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
33static void Camera_rotateX(JNIEnv* env, jobject obj, float degrees) {
34 Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
35 v->rotateX(SkFloatToScalar(degrees));
36}
37
38static void Camera_rotateY(JNIEnv* env, jobject obj, float degrees) {
39 Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
40 v->rotateY(SkFloatToScalar(degrees));
41}
42
43static void Camera_rotateZ(JNIEnv* env, jobject obj, float degrees) {
44 Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
45 v->rotateZ(SkFloatToScalar(degrees));
46}
47
Romain Guy47b8ade2011-02-23 19:46:33 -080048static 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
55static 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
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080060static void Camera_getMatrix(JNIEnv* env, jobject obj, int native_matrix) {
61 Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
62 v->getMatrix((SkMatrix*)native_matrix);
63}
64
65static void Camera_applyToCanvas(JNIEnv* env, jobject obj, int native_canvas) {
66 Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
67 v->applyToCanvas((SkCanvas*)native_canvas);
68}
69
70static float Camera_dotWithNormal(JNIEnv* env, jobject obj,
71 float x, float y, float z) {
72 Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
73 SkScalar dot = v->dotWithNormal(SkFloatToScalar(x), SkFloatToScalar(y),
74 SkFloatToScalar(z));
75 return SkScalarToFloat(dot);
76}
77
78// ----------------------------------------------------------------------------
79
80/*
81 * JNI registration.
82 */
83static JNINativeMethod gCameraMethods[] = {
84 /* name, signature, funcPtr */
85
86 { "nativeConstructor", "()V", (void*)Camera_constructor },
87 { "nativeDestructor", "()V", (void*)Camera_destructor },
88 { "save", "()V", (void*)Camera_save },
89 { "restore", "()V", (void*)Camera_restore },
90 { "translate", "(FFF)V", (void*)Camera_translate },
91 { "rotateX", "(F)V", (void*)Camera_rotateX },
92 { "rotateY", "(F)V", (void*)Camera_rotateY },
93 { "rotateZ", "(F)V", (void*)Camera_rotateZ },
Romain Guy47b8ade2011-02-23 19:46:33 -080094 { "rotate", "(FFF)V", (void*)Camera_rotate },
95 { "setLocation", "(FFF)V", (void*)Camera_setLocation },
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080096 { "nativeGetMatrix", "(I)V", (void*)Camera_getMatrix },
97 { "nativeApplyToCanvas", "(I)V", (void*)Camera_applyToCanvas },
98 { "dotWithNormal", "(FFF)F", (void*)Camera_dotWithNormal }
99};
100
101int register_android_graphics_Camera(JNIEnv* env);
102int register_android_graphics_Camera(JNIEnv* env) {
103 jclass clazz = env->FindClass("android/graphics/Camera");
104 if (clazz == 0) {
105 return -1;
106 }
107 gNativeInstanceFieldID = env->GetFieldID(clazz, "native_instance", "I");
108 if (gNativeInstanceFieldID == 0) {
109 return -1;
110 }
111 return android::AndroidRuntime::registerNativeMethods(env,
112 "android/graphics/Camera",
113 gCameraMethods,
114 SK_ARRAY_COUNT(gCameraMethods));
115}
116