blob: b572604f3f83f97e75f7b7ca77efce926303212e [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001#include "jni.h"
Andreas Gampeed6b9df2014-11-20 22:02:20 -08002#include "core_jni_helpers.h"
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08003
4#include "SkCamera.h"
5
Derek Sollenberger8872b382014-06-23 14:13:53 -04006#include "Canvas.h"
Florin Malita5c3d9272014-05-08 10:35:36 -04007#include "GraphicsJNI.h"
8
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08009static jfieldID gNativeInstanceFieldID;
10
11static void Camera_constructor(JNIEnv* env, jobject obj) {
12 Sk3DView* view = new Sk3DView;
Ashok Bhat36bef0b2014-01-20 20:08:01 +000013 env->SetLongField(obj, gNativeInstanceFieldID, reinterpret_cast<jlong>(view));
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080014}
15
16static void Camera_destructor(JNIEnv* env, jobject obj) {
Ashok Bhat36bef0b2014-01-20 20:08:01 +000017 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
18 Sk3DView* view = reinterpret_cast<Sk3DView*>(viewHandle);
19 delete view;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080020}
21
22static void Camera_save(JNIEnv* env, jobject obj) {
Ashok Bhat36bef0b2014-01-20 20:08:01 +000023 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
24 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080025 v->save();
26}
27
28static void Camera_restore(JNIEnv* env, jobject obj) {
Ashok Bhat36bef0b2014-01-20 20:08:01 +000029 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
30 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080031 v->restore();
32}
33
34static void Camera_translate(JNIEnv* env, jobject obj,
Ashok Bhat36bef0b2014-01-20 20:08:01 +000035 jfloat dx, jfloat dy, jfloat dz) {
36 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
37 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
Leon Scroggins III2e0103e2014-04-04 17:05:24 -040038 v->translate(dx, dy, dz);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080039}
40
Ashok Bhat36bef0b2014-01-20 20:08:01 +000041static void Camera_rotateX(JNIEnv* env, jobject obj, jfloat degrees) {
42 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
43 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
Leon Scroggins III2e0103e2014-04-04 17:05:24 -040044 v->rotateX(degrees);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080045}
46
Ashok Bhat36bef0b2014-01-20 20:08:01 +000047static void Camera_rotateY(JNIEnv* env, jobject obj, jfloat degrees) {
48 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
49 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
Leon Scroggins III2e0103e2014-04-04 17:05:24 -040050 v->rotateY(degrees);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080051}
52
Ashok Bhat36bef0b2014-01-20 20:08:01 +000053static void Camera_rotateZ(JNIEnv* env, jobject obj, jfloat degrees) {
54 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
55 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
Leon Scroggins III2e0103e2014-04-04 17:05:24 -040056 v->rotateZ(degrees);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080057}
58
Romain Guy47b8ade2011-02-23 19:46:33 -080059static void Camera_rotate(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) {
Ashok Bhat36bef0b2014-01-20 20:08:01 +000060 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
61 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
Leon Scroggins III2e0103e2014-04-04 17:05:24 -040062 v->rotateX(x);
63 v->rotateY(y);
64 v->rotateZ(z);
Romain Guy47b8ade2011-02-23 19:46:33 -080065}
66
67static void Camera_setLocation(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) {
Ashok Bhat36bef0b2014-01-20 20:08:01 +000068 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
69 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
Leon Scroggins III2e0103e2014-04-04 17:05:24 -040070 v->setCameraLocation(x, y, z);
Romain Guy47b8ade2011-02-23 19:46:33 -080071}
72
Chet Haasea1cff502012-02-21 13:43:44 -080073static jfloat Camera_getLocationX(JNIEnv* env, jobject obj) {
Ashok Bhat36bef0b2014-01-20 20:08:01 +000074 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
75 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
Chet Haasea1cff502012-02-21 13:43:44 -080076 return SkScalarToFloat(v->getCameraLocationX());
77}
78
79static jfloat Camera_getLocationY(JNIEnv* env, jobject obj) {
Ashok Bhat36bef0b2014-01-20 20:08:01 +000080 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
81 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
Chet Haasea1cff502012-02-21 13:43:44 -080082 return SkScalarToFloat(v->getCameraLocationY());
83}
84
85static jfloat Camera_getLocationZ(JNIEnv* env, jobject obj) {
Ashok Bhat36bef0b2014-01-20 20:08:01 +000086 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
87 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
Chet Haasea1cff502012-02-21 13:43:44 -080088 return SkScalarToFloat(v->getCameraLocationZ());
89}
90
Ashok Bhat36bef0b2014-01-20 20:08:01 +000091static void Camera_getMatrix(JNIEnv* env, jobject obj, jlong matrixHandle) {
92 SkMatrix* native_matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
93 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
94 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
95 v->getMatrix(native_matrix);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080096}
97
Ashok Bhat36bef0b2014-01-20 20:08:01 +000098static void Camera_applyToCanvas(JNIEnv* env, jobject obj, jlong canvasHandle) {
Derek Sollenberger8872b382014-06-23 14:13:53 -040099 SkCanvas* canvas = reinterpret_cast<android::Canvas*>(canvasHandle)->getSkCanvas();
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000100 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
101 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
Derek Sollenberger8872b382014-06-23 14:13:53 -0400102 v->applyToCanvas(canvas);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800103}
104
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000105static jfloat Camera_dotWithNormal(JNIEnv* env, jobject obj,
106 jfloat x, jfloat y, jfloat z) {
107 jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
108 Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
Leon Scroggins III2e0103e2014-04-04 17:05:24 -0400109 SkScalar dot = v->dotWithNormal(x, y, z);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800110 return SkScalarToFloat(dot);
111}
112
113// ----------------------------------------------------------------------------
114
115/*
116 * JNI registration.
117 */
118static JNINativeMethod gCameraMethods[] = {
119 /* name, signature, funcPtr */
120
121 { "nativeConstructor", "()V", (void*)Camera_constructor },
122 { "nativeDestructor", "()V", (void*)Camera_destructor },
123 { "save", "()V", (void*)Camera_save },
124 { "restore", "()V", (void*)Camera_restore },
125 { "translate", "(FFF)V", (void*)Camera_translate },
126 { "rotateX", "(F)V", (void*)Camera_rotateX },
127 { "rotateY", "(F)V", (void*)Camera_rotateY },
128 { "rotateZ", "(F)V", (void*)Camera_rotateZ },
Romain Guy47b8ade2011-02-23 19:46:33 -0800129 { "rotate", "(FFF)V", (void*)Camera_rotate },
130 { "setLocation", "(FFF)V", (void*)Camera_setLocation },
Chet Haasea1cff502012-02-21 13:43:44 -0800131 { "getLocationX", "()F", (void*)Camera_getLocationX },
132 { "getLocationY", "()F", (void*)Camera_getLocationY },
133 { "getLocationZ", "()F", (void*)Camera_getLocationZ },
Ashok Bhat36bef0b2014-01-20 20:08:01 +0000134 { "nativeGetMatrix", "(J)V", (void*)Camera_getMatrix },
135 { "nativeApplyToCanvas", "(J)V", (void*)Camera_applyToCanvas },
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800136 { "dotWithNormal", "(FFF)F", (void*)Camera_dotWithNormal }
137};
138
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800139int register_android_graphics_Camera(JNIEnv* env) {
Andreas Gampeed6b9df2014-11-20 22:02:20 -0800140 jclass clazz = android::FindClassOrDie(env, "android/graphics/Camera");
141 gNativeInstanceFieldID = android::GetFieldIDOrDie(env, clazz, "native_instance", "J");
142 return android::RegisterMethodsOrDie(env, "android/graphics/Camera", gCameraMethods,
143 NELEM(gCameraMethods));
The Android Open Source Project9066cfe2009-03-03 19:31:44 -0800144}