diff --git a/app_pojavlauncher/src/main/assets/components/lwjgl3/version b/app_pojavlauncher/src/main/assets/components/lwjgl3/version index b26355318..92042ee01 100644 --- a/app_pojavlauncher/src/main/assets/components/lwjgl3/version +++ b/app_pojavlauncher/src/main/assets/components/lwjgl3/version @@ -1 +1 @@ -1677906502154 \ No newline at end of file +1678189863424 \ No newline at end of file diff --git a/app_pojavlauncher/src/main/jni/environ/environ.h b/app_pojavlauncher/src/main/jni/environ/environ.h index 56814a406..5b1981e1c 100644 --- a/app_pojavlauncher/src/main/jni/environ/environ.h +++ b/app_pojavlauncher/src/main/jni/environ/environ.h @@ -43,6 +43,7 @@ struct pojav_environ_s { jclass vmGlfwClass; jboolean isGrabbing; jbyte* keyDownBuffer; + jbyte* mouseDownBuffer; JavaVM* runtimeJavaVMPtr; JNIEnv* runtimeJNIEnvPtr_JRE; JavaVM* dalvikJavaVMPtr; diff --git a/app_pojavlauncher/src/main/jni/input_bridge_v3.c b/app_pojavlauncher/src/main/jni/input_bridge_v3.c index f35647f6d..56f82c117 100644 --- a/app_pojavlauncher/src/main/jni/input_bridge_v3.c +++ b/app_pojavlauncher/src/main/jni/input_bridge_v3.c @@ -54,6 +54,9 @@ jint JNI_OnLoad(JavaVM* vm, __attribute__((unused)) void* reserved) { jfieldID field_keyDownBuffer = (*pojav_environ->runtimeJNIEnvPtr_JRE)->GetStaticFieldID(pojav_environ->runtimeJNIEnvPtr_JRE, pojav_environ->vmGlfwClass, "keyDownBuffer", "Ljava/nio/ByteBuffer;"); jobject keyDownBufferJ = (*pojav_environ->runtimeJNIEnvPtr_JRE)->GetStaticObjectField(pojav_environ->runtimeJNIEnvPtr_JRE, pojav_environ->vmGlfwClass, field_keyDownBuffer); pojav_environ->keyDownBuffer = (*pojav_environ->runtimeJNIEnvPtr_JRE)->GetDirectBufferAddress(pojav_environ->runtimeJNIEnvPtr_JRE, keyDownBufferJ); + jfieldID field_mouseDownBuffer = (*pojav_environ->runtimeJNIEnvPtr_JRE)->GetStaticFieldID(pojav_environ->runtimeJNIEnvPtr_JRE, pojav_environ->vmGlfwClass, "mouseDownBuffer", "Ljava/nio/ByteBuffer;"); + jobject mouseDownBufferJ = (*pojav_environ->runtimeJNIEnvPtr_JRE)->GetStaticObjectField(pojav_environ->runtimeJNIEnvPtr_JRE, pojav_environ->vmGlfwClass, field_mouseDownBuffer); + pojav_environ->mouseDownBuffer = (*pojav_environ->runtimeJNIEnvPtr_JRE)->GetDirectBufferAddress(pojav_environ->runtimeJNIEnvPtr_JRE, mouseDownBufferJ); hookExec(); } @@ -316,7 +319,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendCursorPos(__ _a > _b ? _a : _b; }) JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendKey(__attribute__((unused)) JNIEnv* env, __attribute__((unused)) jclass clazz, jint key, jint scancode, jint action, jint mods) { if (pojav_environ->GLFW_invoke_Key && pojav_environ->isInputReady) { - pojav_environ->keyDownBuffer[max(0, key-31)]=(jbyte)action; + pojav_environ->keyDownBuffer[max(0, key-31)] = (jbyte) action; if (pojav_environ->isUseStackQueueCall) { sendData(EVENT_TYPE_KEY, key, scancode, action, mods); } else { @@ -328,14 +331,12 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendKey(__attrib JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendMouseButton(__attribute__((unused)) JNIEnv* env, __attribute__((unused)) jclass clazz, jint button, jint action, jint mods) { - if (pojav_environ->isInputReady) { - if (button == -1) { - } else if (pojav_environ->GLFW_invoke_MouseButton) { - if (pojav_environ->isUseStackQueueCall) { - sendData(EVENT_TYPE_MOUSE_BUTTON, button, action, mods, 0); - } else { - pojav_environ->GLFW_invoke_MouseButton((void*) pojav_environ->showingWindow, button, action, mods); - } + if (pojav_environ->GLFW_invoke_MouseButton && pojav_environ->isInputReady) { + pojav_environ->mouseDownBuffer[max(0, button)] = (jbyte) action; + if (pojav_environ->isUseStackQueueCall) { + sendData(EVENT_TYPE_MOUSE_BUTTON, button, action, mods, 0); + } else { + pojav_environ->GLFW_invoke_MouseButton((void*) pojav_environ->showingWindow, button, action, mods); } } } diff --git a/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java b/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java index 4e932dcf2..22350666a 100644 --- a/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java +++ b/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/GLFW.java @@ -498,6 +498,8 @@ public class GLFW private static ArrayMap mGLFWWindowMap; public static boolean mGLFWIsInputReady; public static final ByteBuffer keyDownBuffer = ByteBuffer.allocateDirect(317); + public static final ByteBuffer mouseDownBuffer = ByteBuffer.allocateDirect(8); + private static final String PROP_WINDOW_WIDTH = "glfwstub.windowWidth"; private static final String PROP_WINDOW_HEIGHT= "glfwstub.windowHeight"; public static long mainContext = 0; @@ -1116,7 +1118,7 @@ public class GLFW } public static int glfwGetMouseButton(@NativeType("GLFWwindow *") long window, int button) { - return 0; + return mouseDownBuffer.get(button); } public static void glfwGetCursorPos(@NativeType("GLFWwindow *") long window, @Nullable @NativeType("double *") DoubleBuffer xpos, @Nullable @NativeType("double *") DoubleBuffer ypos) { if (CHECKS) {