blob: 980003e27efb8a51e67ae0dda6b41b0b6381037b [file] [log] [blame]
#include "jni.h"
#include <android_runtime/AndroidRuntime.h>
#include "SkCamera.h"
static jfieldID gNativeInstanceFieldID;
static void Camera_constructor(JNIEnv* env, jobject obj) {
Sk3DView* view = new Sk3DView;
env->SetIntField(obj, gNativeInstanceFieldID, (int)view);
}
static void Camera_destructor(JNIEnv* env, jobject obj) {
delete (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
}
static void Camera_save(JNIEnv* env, jobject obj) {
Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
v->save();
}
static void Camera_restore(JNIEnv* env, jobject obj) {
Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
v->restore();
}
static void Camera_translate(JNIEnv* env, jobject obj,
float dx, float dy, float dz) {
Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
v->translate(SkFloatToScalar(dx), SkFloatToScalar(dy), SkFloatToScalar(dz));
}
static void Camera_rotateX(JNIEnv* env, jobject obj, float degrees) {
Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
v->rotateX(SkFloatToScalar(degrees));
}
static void Camera_rotateY(JNIEnv* env, jobject obj, float degrees) {
Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
v->rotateY(SkFloatToScalar(degrees));
}
static void Camera_rotateZ(JNIEnv* env, jobject obj, float degrees) {
Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
v->rotateZ(SkFloatToScalar(degrees));
}
static void Camera_getMatrix(JNIEnv* env, jobject obj, int native_matrix) {
Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
v->getMatrix((SkMatrix*)native_matrix);
}
static void Camera_applyToCanvas(JNIEnv* env, jobject obj, int native_canvas) {
Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
v->applyToCanvas((SkCanvas*)native_canvas);
}
static float Camera_dotWithNormal(JNIEnv* env, jobject obj,
float x, float y, float z) {
Sk3DView* v = (Sk3DView*)env->GetIntField(obj, gNativeInstanceFieldID);
SkScalar dot = v->dotWithNormal(SkFloatToScalar(x), SkFloatToScalar(y),
SkFloatToScalar(z));
return SkScalarToFloat(dot);
}
// ----------------------------------------------------------------------------
/*
* JNI registration.
*/
static JNINativeMethod gCameraMethods[] = {
/* name, signature, funcPtr */
{ "nativeConstructor", "()V", (void*)Camera_constructor },
{ "nativeDestructor", "()V", (void*)Camera_destructor },
{ "save", "()V", (void*)Camera_save },
{ "restore", "()V", (void*)Camera_restore },
{ "translate", "(FFF)V", (void*)Camera_translate },
{ "rotateX", "(F)V", (void*)Camera_rotateX },
{ "rotateY", "(F)V", (void*)Camera_rotateY },
{ "rotateZ", "(F)V", (void*)Camera_rotateZ },
{ "nativeGetMatrix", "(I)V", (void*)Camera_getMatrix },
{ "nativeApplyToCanvas", "(I)V", (void*)Camera_applyToCanvas },
{ "dotWithNormal", "(FFF)F", (void*)Camera_dotWithNormal }
};
int register_android_graphics_Camera(JNIEnv* env);
int register_android_graphics_Camera(JNIEnv* env) {
jclass clazz = env->FindClass("android/graphics/Camera");
if (clazz == 0) {
return -1;
}
gNativeInstanceFieldID = env->GetFieldID(clazz, "native_instance", "I");
if (gNativeInstanceFieldID == 0) {
return -1;
}
return android::AndroidRuntime::registerNativeMethods(env,
"android/graphics/Camera",
gCameraMethods,
SK_ARRAY_COUNT(gCameraMethods));
}