77 lines
1.8 KiB
C
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 ... */
|
|
|