singe/thirdparty/manymouse/contrib/java/ManyMouseJava.c
2023-10-23 19:38:18 -05:00

77 lines
1.8 KiB
C

/*
* Java bindings to the ManyMouse C code, via JNI.
*
* Please see the file LICENSE.txt in the source's root directory.
*
* This file written by Ryan C. Gordon.
*/
/* The C interface... */
#include "manymouse.h"
/* The JNI interface... */
#include "ManyMouseJava.h"
/* The JNI implementation... */
JNIEXPORT jint JNICALL Java_ManyMouse_Init
(JNIEnv *env, jclass obj)
{
return ManyMouse_Init();
} /* JNI org.icculus.ManyMouse.Init */
JNIEXPORT void JNICALL Java_ManyMouse_Quit
(JNIEnv *env, jclass obj)
{
ManyMouse_Quit();
} /* JNI org.icculus.ManyMouse.Quit */
JNIEXPORT jstring JNICALL Java_ManyMouse_DeviceName
(JNIEnv *env, jclass obj, jint mouse)
{
const char *str = ManyMouse_DeviceName(mouse);
return (*env)->NewStringUTF(env, str);
} /* JNI org.icculus.ManyMouse.DeviceName */
static jboolean setInt
(JNIEnv *env, jobject jevent, jclass cls, const char *fieldname, int val)
{
jfieldID fid = (*env)->GetFieldID(env, cls, fieldname, "I");
if (fid == 0)
return JNI_FALSE;
(*env)->SetIntField(env, jevent, fid, val);
return JNI_TRUE;
} /* setInt */
JNIEXPORT jboolean JNICALL Java_ManyMouse_PollEvent
(JNIEnv *env, jclass obj, jobject jevent)
{
ManyMouseEvent event;
jclass cls = (*env)->GetObjectClass(env, jevent);
if (cls == 0)
return JNI_FALSE; /* !!! FIXME: throw an exception? */
if (ManyMouse_PollEvent(&event) == 0)
return JNI_FALSE; /* no new events. */
#define SETINT(field) \
if (!setInt(env, jevent, cls, #field, event.field)) return JNI_FALSE;
SETINT(type);
SETINT(device);
SETINT(item);
SETINT(value);
SETINT(minval);
SETINT(maxval);
#undef SETINT
return JNI_TRUE;
} /* JNI org.icculus.ManyMouse.PollEvent */
/* end of ManyMouseJava.c ... */