From fd436d9f88838082d0ffef83ea1341ea5a5f1393 Mon Sep 17 00:00:00 2001 From: Duy Tran Khanh Date: Mon, 30 Jan 2023 09:57:15 +0700 Subject: [PATCH] Fix: issues with legacy versions This picks up the following commits from Android repo: * https://github.com/PojavLauncherTeam/PojavLauncher/commit/4716e99df12ab 5bfcaade881774e3b07e8e35450: Don't call Display.create in AWTGLCanvas constructor (fixes Minecraft 1.2.1-1.2.4) * https://github.com/PojavLauncherTeam/PojavLauncher/commit/693cff45b09b3 ca09784a3038a3f9c89cacd391f: Infdev cursor grab: the Pojav part + Window resize on first key even poll (actual on iOS is on grab state changes because Android's approach does not work) * https://github.com/PojavLauncherTeam/PojavLauncher/commit/ee39334bf31ed 0687c750f37229cf6bea8919b4c (Comment out unnecessary calls to resize) --- .../cacio-androidnw-1.10-SNAPSHOT.jar | Bin 35516 -> 39122 bytes .../src/main/java/org/lwjgl/glfw/GLFW.java | 4 +- .../src/main/java/org/lwjgl/input/Cursor.java | 21 +++++++++-- .../java/org/lwjgl/input/InfdevMouse.java | 25 +++++++++++++ .../src/main/java/org/lwjgl/input/Mouse.java | 35 +++++++++++++++++- .../java/org/lwjgl/opengl/AWTGLCanvas.java | 3 +- Natives/input_bridge_v3.m | 1 + 7 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 JavaApp/src/main/java/org/lwjgl/input/InfdevMouse.java diff --git a/JavaApp/libs_caciocavallo/cacio-androidnw-1.10-SNAPSHOT.jar b/JavaApp/libs_caciocavallo/cacio-androidnw-1.10-SNAPSHOT.jar index d9313f7761f8f4c6784e6ae1547c9229025f5a49..4fdaa9c7c45c32833c810546ab5557448d7680ab 100644 GIT binary patch delta 9315 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 diff --git a/JavaApp/src/main/java/org/lwjgl/input/Cursor.java b/JavaApp/src/main/java/org/lwjgl/input/Cursor.java index 9604aea4..b59e322d 100644 --- a/JavaApp/src/main/java/org/lwjgl/input/Cursor.java +++ b/JavaApp/src/main/java/org/lwjgl/input/Cursor.java @@ -29,6 +29,9 @@ public class Cursor { /** Flag set when the cursor has been destroyed */ private boolean destroyed; + /** Flag set if the cursor is empty */ + private boolean isEmpty; + /** * Constructs a new Cursor, with the given parameters. Mouse must have been * created before you can create Cursor objects. Cursor images are in ARGB @@ -59,14 +62,19 @@ public class Cursor { */ public Cursor(int width, int height, int xHotspot, int yHotspot, int numImages, IntBuffer images, IntBuffer delays) throws LWJGLException { - cursors = new CursorElement[numImages]; IntBuffer flippedImages = BufferUtils.createIntBuffer(images.limit()); flipImages(width, height, numImages, images, flippedImages); ByteBuffer pixels = convertARGBIntBuffertoRGBAByteBuffer(width, height, flippedImages); - + if(numImages == 1) { + isEmpty = true; + for(int i = 0; i < width*height; i++) if(pixels.get(i) != 0) { + System.out.println("Encountered non-zero byte at "+i+", custom cursor is not empty!"); + isEmpty = false; + } + } for (int i = 0; i < numImages; i++) { int size = width * height; ByteBuffer image = BufferUtils.createByteBuffer(size); @@ -248,6 +256,14 @@ public class Cursor { index = ++index % cursors.length; } + /** + /* Returns wheteher the cursor image is empty or not + */ + + /*package-private*/ boolean isEmpty() { + return isEmpty; + } + /** * A single cursor element, used when animating */ @@ -266,5 +282,4 @@ public class Cursor { throw new RuntimeException("Error creating GLFW cursor"); } } - } diff --git a/JavaApp/src/main/java/org/lwjgl/input/InfdevMouse.java b/JavaApp/src/main/java/org/lwjgl/input/InfdevMouse.java new file mode 100644 index 00000000..51ad9f7c --- /dev/null +++ b/JavaApp/src/main/java/org/lwjgl/input/InfdevMouse.java @@ -0,0 +1,25 @@ +package org.lwjgl.input; + +import net.java.openjdk.cacio.ctc.ExternalMouseReader; +import net.java.openjdk.cacio.ctc.InfdevGrabHandler; + +public class InfdevMouse implements ExternalMouseReader, Mouse.EmptyCursorGrabListener { + static { + InfdevGrabHandler.setMouseReader(new InfdevMouse()); + } + + @Override + public int getX() { + return Mouse.getAbsoluteX(); + } + + @Override + public int getY() { + return Mouse.getAbsoluteY(); + } + + @Override + public void onGrab(boolean grabbing) { + InfdevGrabHandler.setGrabbed(grabbing); + } +} diff --git a/JavaApp/src/main/java/org/lwjgl/input/Mouse.java b/JavaApp/src/main/java/org/lwjgl/input/Mouse.java index b933a3f6..2cfd05a7 100644 --- a/JavaApp/src/main/java/org/lwjgl/input/Mouse.java +++ b/JavaApp/src/main/java/org/lwjgl/input/Mouse.java @@ -31,6 +31,7 @@ */ package org.lwjgl.input; +import java.lang.reflect.Constructor; import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.security.AccessController; @@ -144,6 +145,7 @@ public class Mouse { private static boolean isGrabbed; private static InputImplementation implementation; + private static EmptyCursorGrabListener grabListener = null; /** Whether we need cursor animation emulation */ private static final boolean emulateCursorAnimation = LWJGLUtil.getPlatform() == LWJGLUtil.PLATFORM_WINDOWS || @@ -151,6 +153,16 @@ public class Mouse { private static boolean clipMouseCoordinatesToWindow = !getPrivilegedBoolean("org.lwjgl.input.Mouse.allowNegativeMouseCoords"); + static { + try { + Class infdevMouse = Class.forName("org.lwjgl.input.InfdevMouse"); + Constructor constructor = infdevMouse.getConstructor(); + grabListener = (EmptyCursorGrabListener) constructor.newInstance(); + }catch (Throwable e) { + e.printStackTrace(); + } + } + /** * Mouse cannot be constructed. */ @@ -164,7 +176,6 @@ public class Mouse { */ public static Cursor getNativeCursor() { return currentCursor; - } /** @@ -181,6 +192,14 @@ public class Mouse { */ public static Cursor setNativeCursor(Cursor cursor) throws LWJGLException { //dummy + if(cursor == null && currentCursor.isEmpty()) { + Mouse.setGrabbed(false); + if(grabListener != null) grabListener.onGrab(false); + } + if(cursor != null && cursor.isEmpty()) { + Mouse.setGrabbed(true); + if(grabListener != null) grabListener.onGrab(true); + } currentCursor = cursor; return currentCursor; } @@ -625,4 +644,18 @@ public class Mouse { public static boolean isInsideWindow() { return implementation.isInsideWindow(); } + + /* + * Package private methods to get the absolute unclipped X/Y coordiates + */ + /*package-private*/ static int getAbsoluteX() { + return absolute_x; + } + /*package-private*/ static int getAbsoluteY() { + return absolute_y; + } + + interface EmptyCursorGrabListener { + void onGrab(boolean grabbing); + } } \ No newline at end of file diff --git a/JavaApp/src/main/java/org/lwjgl/opengl/AWTGLCanvas.java b/JavaApp/src/main/java/org/lwjgl/opengl/AWTGLCanvas.java index e97e97de..797b6821 100644 --- a/JavaApp/src/main/java/org/lwjgl/opengl/AWTGLCanvas.java +++ b/JavaApp/src/main/java/org/lwjgl/opengl/AWTGLCanvas.java @@ -79,7 +79,8 @@ public class AWTGLCanvas extends Canvas implements Drawable, ComponentListener, } public AWTGLCanvas() throws LWJGLException { - Display.create(); + System.out.println("AWTGLCanvas constructor called on thread:"+Thread.currentThread().getName()); + //Display.create(); } public AWTGLCanvas(PixelFormat pixel_format) throws LWJGLException { diff --git a/Natives/input_bridge_v3.m b/Natives/input_bridge_v3.m index e466c17b..54b6ba50 100644 --- a/Natives/input_bridge_v3.m +++ b/Natives/input_bridge_v3.m @@ -277,6 +277,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSetInputRead } JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSetGrabbing(JNIEnv* env, jclass clazz, jboolean grabbing, jfloat xset, jfloat yset) { + CallbackBridge_nativeSendScreenSize(windowWidth, windowHeight); isGrabbing = grabbing; if (isGrabbing == JNI_TRUE) { grabCursorX = xset; // savedWidth / 2;