diff --git a/src/java/org/lwjgl/input/Mouse.java b/src/java/org/lwjgl/input/Mouse.java index e6a6a860..962b7317 100644 --- a/src/java/org/lwjgl/input/Mouse.java +++ b/src/java/org/lwjgl/input/Mouse.java @@ -211,13 +211,19 @@ public class Mouse { return; } nCreate(); + hasWheel = nHasWheel(); created = true; currentCursor = null; // set mouse buttons + buttonCount = nGetButtonCount(); buttons = new boolean[buttonCount]; } + private static native boolean nHasWheel(); + + private static native int nGetButtonCount(); + /** * Native method to create the mouse. * diff --git a/src/native/common/org_lwjgl_input_Mouse.h b/src/native/common/org_lwjgl_input_Mouse.h index 30d9846c..0d0c09fe 100644 --- a/src/native/common/org_lwjgl_input_Mouse.h +++ b/src/native/common/org_lwjgl_input_Mouse.h @@ -66,6 +66,22 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_input_Mouse_nGetMaxCursorSize JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_initIDs (JNIEnv *, jclass); +/* + * Class: org_lwjgl_input_Mouse + * Method: nHasWheel + * Signature: ()Z + */ +JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nHasWheel + (JNIEnv *, jclass); + +/* + * Class: org_lwjgl_input_Mouse + * Method: nGetButtonCount + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_org_lwjgl_input_Mouse_nGetButtonCount + (JNIEnv *, jclass); + /* * Class: org_lwjgl_input_Mouse * Method: nCreate diff --git a/src/native/linux/org_lwjgl_input_Mouse.cpp b/src/native/linux/org_lwjgl_input_Mouse.cpp index a62588ad..4e2e8d44 100644 --- a/src/native/linux/org_lwjgl_input_Mouse.cpp +++ b/src/native/linux/org_lwjgl_input_Mouse.cpp @@ -61,8 +61,6 @@ static bool created = false; static bool should_grab = false; static bool native_cursor = false; -static jfieldID fid_has_wheel = NULL; -static jfieldID fid_button_count = NULL; static jfieldID fid_buttons = NULL; static jfieldID fid_dx = NULL; static jfieldID fid_dy = NULL; @@ -102,10 +100,6 @@ static void setCursorPos(int x, int y) { JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_initIDs (JNIEnv * env, jclass clazz) { - if (fid_has_wheel == NULL) - fid_has_wheel = env->GetStaticFieldID(clazz, "hasWheel", "Z"); - if (fid_button_count == NULL) - fid_button_count = env->GetStaticFieldID(clazz, "buttonCount", "I"); if (fid_buttons == NULL) fid_buttons = env->GetStaticFieldID(clazz, "buttons", "[Z"); if (fid_dx == NULL) @@ -260,6 +254,14 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_input_Mouse_nGetMaxCursorSize return width_return > height_return ? height_return : width_return; } +JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nHasWheel(JNIEnv *, jclass) { + return JNI_TRUE; +} + +JNIEXPORT jint JNICALL Java_org_lwjgl_input_Mouse_nGetButtonCount(JNIEnv *, jclass) { + return NUM_BUTTONS; +} + /* * Class: org_lwjgl_input_Mouse * Method: nCreate @@ -269,8 +271,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nCreate (JNIEnv * env, jclass clazz) { int i; - env->SetStaticIntField(clazz, fid_button_count, NUM_BUTTONS); - env->SetStaticBooleanField(clazz, fid_has_wheel, JNI_TRUE); setCursorPos(0, 0); current_z = last_x = last_y = last_z = 0; for (i = 0; i < NUM_BUTTONS; i++) diff --git a/src/native/win32/org_lwjgl_input_Mouse.cpp b/src/native/win32/org_lwjgl_input_Mouse.cpp index e39a7737..6a1cc3ea 100644 --- a/src/native/win32/org_lwjgl_input_Mouse.cpp +++ b/src/native/win32/org_lwjgl_input_Mouse.cpp @@ -56,12 +56,10 @@ static bool mFirstTimeInitialization = true; // boolean to determine first time // Cached fields of Mouse.java static jclass clsMouse; -static jfieldID fidMButtonCount; static jfieldID fidMButtons; static jfieldID fidMDX; static jfieldID fidMDY; static jfieldID fidMDWheel; -static jfieldID fidMHasWheel; static POINT cursorPos; static RECT windowRect; @@ -76,7 +74,6 @@ void SetupMouse(); void InitializeMouseFields(); void CacheMouseFields(); void UpdateMouseFields(); -void SetMouseCapabilities(); static void getScreenClientRect(RECT* clientRect, RECT* windowRect) { @@ -99,6 +96,14 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_initIDs(JNIEnv * env, jclass c CacheMouseFields(); } +JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nHasWheel(JNIEnv *, jclass) { + return mHasWheel; +} + +JNIEXPORT jint JNICALL Java_org_lwjgl_input_Mouse_nGetButtonCount(JNIEnv *, jclass) { + return mButtonCount +} + /** * Called when the Mouse instance is to be created */ @@ -126,9 +131,6 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nCreate(JNIEnv *env, jclass cl } /* Do setup of Mouse */ SetupMouse(); - - /* Set capabilities */ - SetMouseCapabilities(); } else { if(mCreate_success) { /* Do setup of Mouse */ @@ -431,23 +433,10 @@ void UpdateMouseFields() { mEnvironment->SetBooleanArrayRegion(mButtonsArray, 0, mButtoncount, diMouseState.rgbButtons); } -/** - * Sets the capabilities of the Mouse - */ -void SetMouseCapabilities() { - //set buttoncount - mEnvironment->SetStaticIntField(clsMouse, fidMButtonCount, mButtoncount); - - //set wheel - mEnvironment->SetStaticBooleanField(clsMouse, fidMHasWheel, mHaswheel); -} - /** * Caches the field ids for quicker access */ void CacheMouseFields() { - fidMButtonCount = mEnvironment->GetStaticFieldID(clsMouse, "buttonCount", "I"); - fidMHasWheel = mEnvironment->GetStaticFieldID(clsMouse, "hasWheel", "Z"); fidMButtons = mEnvironment->GetStaticFieldID(clsMouse, "buttons", "[Z"); fidMDX = mEnvironment->GetStaticFieldID(clsMouse, "dx", "I"); fidMDY = mEnvironment->GetStaticFieldID(clsMouse, "dy", "I");