diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java index 95d77d90..686cf213 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/PLaunchApp.java @@ -168,7 +168,7 @@ public class PLaunchApp { mAccount = acc; - UIKit.launchMinecraftSurface(); + UIKit.launchMinecraftSurface(mVersion.arguments != null); }).start(); } diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java index e5c8d53b..e70de797 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java @@ -61,5 +61,5 @@ public class UIKit { public static native void updateProgress(float progress, String message); // Start SurfaceViewController - public static native void launchMinecraftSurface(); + public static native void launchMinecraftSurface(boolean isUseStackQueueBool); } diff --git a/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java b/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java index 592edc36..abefda46 100644 --- a/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java +++ b/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java @@ -18,7 +18,8 @@ public class CallbackBridge { public static final int EVENT_TYPE_KEY = 1005; public static final int EVENT_TYPE_MOUSE_BUTTON = 1006; public static final int EVENT_TYPE_SCROLL = 1007; - public static final int EVENT_TYPE_WINDOW_SIZE = 1008; + public static final int EVENT_TYPE_WINDOW_POS = 1008; + public static final int EVENT_TYPE_WINDOW_SIZE = 1009; public static final int ANDROID_TYPE_GRAB_STATE = 0; @@ -70,6 +71,10 @@ public class CallbackBridge { PENDING_EVENT_LIST.add(new Integer[]{EVENT_TYPE_FRAMEBUFFER_SIZE, width, height, 0, 0}); PENDING_EVENT_LIST.add(new Integer[]{EVENT_TYPE_WINDOW_SIZE, width, height, 0, 0}); } + private static void nativeSendWindowPos(int x, int y) { + if (!inputReady) return; + PENDING_EVENT_LIST.add(new Integer[]{EVENT_TYPE_WINDOW_POS, x, y, 0, 0}); + } // volatile private static boolean isGrabbing = false; public static class PusherRunnable implements Runnable { diff --git a/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java b/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java index 7f4b2dda..706f29cf 100644 --- a/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java +++ b/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java @@ -572,6 +572,7 @@ public class GLFW private static native long nglfwSetKeyCallback(long window, long ptr); private static native long nglfwSetMouseButtonCallback(long window, long ptr); private static native long nglfwSetScrollCallback(long window, long ptr); + private static native long nglfwSetWindowPosCallback(long window, long ptr); private static native long nglfwSetWindowSizeCallback(long window, long ptr); // private static native void nglfwSetInputReady(); private static native void nglfwSetShowingWindow(long window); @@ -738,11 +739,7 @@ public class GLFW } public static GLFWWindowPosCallback glfwSetWindowPosCallback(@NativeType("GLFWwindow *") long window, @Nullable @NativeType("GLFWwindowposfun") GLFWWindowPosCallbackI cbfun) { - GLFWWindowPosCallback lastCallback = mGLFWWindowPosCallback; - if (cbfun == null) mGLFWWindowPosCallback = null; - else mGLFWWindowPosCallback = GLFWWindowPosCallback.create(cbfun); - - return lastCallback; + return mGLFWWindowPosCallback = GLFWWindowPosCallback.createSafe(nglfwSetWindowPosCallback(window, memAddressSafe(cbfun))); } public static GLFWWindowRefreshCallback glfwSetWindowRefreshCallback(@NativeType("GLFWwindow *") long window, @Nullable @NativeType("GLFWwindowrefreshfun") GLFWWindowRefreshCallbackI cbfun) { @@ -1090,6 +1087,9 @@ public class GLFW mGLFWScrollCallback.invoke(ptr, dataArr[1], dataArr[2]); } break; + case CallbackBridge.EVENT_TYPE_WINDOW_POS: + glfwSetWindowPos(ptr, dataArr[1], dataArr[2]); + break; case CallbackBridge.EVENT_TYPE_FRAMEBUFFER_SIZE: case CallbackBridge.EVENT_TYPE_WINDOW_SIZE: mGLFWWindowWidth = dataArr[1]; diff --git a/Natives/SurfaceViewController.m b/Natives/SurfaceViewController.m index 572f1599..387d479c 100644 --- a/Natives/SurfaceViewController.m +++ b/Natives/SurfaceViewController.m @@ -37,7 +37,7 @@ #define ADD_BUTTON_DEF_KEY(KEY, KEYCODE) \ ADD_BUTTON_DEF(KEY) { \ - sendData(EVENT_TYPE_KEY, KEYCODE, 0, held, 0); \ + Java_org_lwjgl_glfw_CallbackBridge_nativeSendKey(NULL, NULL, KEYCODE, 0, held, 0); \ } #define BTN_RECT 80.0, 30.0 @@ -101,6 +101,8 @@ UITextField *inputView; ADD_BUTTON_VISIBLE(@"⬛", space, CGRectMake(width - 5 * 2 - 50 * 2, height - 5 * 2 - 50 * 2, BTN_SQUARE)); ADD_BUTTON_VISIBLE(@"Esc", escape, CGRectMake(width - 5 - 80, height - 5 - 30, BTN_RECT)); + + ADD_BUTTON_VISIBLE(@"Resize", special_resize, CGRectMake(width - 5 - 80, 5, BTN_RECT)); // ADD_BUTTON_VISIBLE(@"Enter", enter, CGRectMake(5, 70.0, BTN_SQUARE)); @@ -156,14 +158,14 @@ ADD_BUTTON_DEF(special_togglebtn) { -(void)inputViewDidChange { if ([inputView.text length] <= 1) { - sendData(EVENT_TYPE_KEY, GLFW_KEY_BACKSPACE, 0, 1, 0); - sendData(EVENT_TYPE_KEY, GLFW_KEY_BACKSPACE, 0, 0, 0); + Java_org_lwjgl_glfw_CallbackBridge_nativeSendKey(NULL, NULL, GLFW_KEY_BACKSPACE, 0, 1, 0); + Java_org_lwjgl_glfw_CallbackBridge_nativeSendKey(NULL, NULL, GLFW_KEY_BACKSPACE, 0, 0, 0); } else { NSString *newText = [inputView.text substringFromIndex:2]; int charLength = [newText length]; char *charText = [newText UTF8String]; for (int i = 0; i < charLength; i++) { - sendData(EVENT_TYPE_CHAR_MODS, (unsigned int) charText[i], /* mods */ 0, 0, 0); + Java_org_lwjgl_glfw_CallbackBridge_nativeSendCharMods(NULL, NULL, (jchar) charText[i], /* mods */ 0); } } @@ -178,8 +180,8 @@ ADD_BUTTON_DEF(special_togglebtn) { } -(void)inputViewDidReturn { - sendData(EVENT_TYPE_KEY, GLFW_KEY_ENTER, 0, 1, 0); - sendData(EVENT_TYPE_KEY, GLFW_KEY_ENTER, 0, 0, 0); + Java_org_lwjgl_glfw_CallbackBridge_nativeSendKey(NULL, NULL, GLFW_KEY_ENTER, 0, 1, 0); + Java_org_lwjgl_glfw_CallbackBridge_nativeSendKey(NULL, NULL, GLFW_KEY_ENTER, 0, 0, 0); } ADD_BUTTON_DEF(special_keyboard) { @@ -191,11 +193,22 @@ ADD_BUTTON_DEF(special_keyboard) { } ADD_BUTTON_DEF(special_mouse_pri) { - sendData(EVENT_TYPE_MOUSE_BUTTON, GLFW_MOUSE_BUTTON_LEFT, held, 0, 0); + Java_org_lwjgl_glfw_CallbackBridge_nativeSendMouseButton(NULL, NULL, GLFW_MOUSE_BUTTON_LEFT, held, 0); } ADD_BUTTON_DEF(special_mouse_sec) { - sendData(EVENT_TYPE_MOUSE_BUTTON, GLFW_MOUSE_BUTTON_RIGHT, held, 0, 0); + Java_org_lwjgl_glfw_CallbackBridge_nativeSendMouseButton(NULL, NULL, GLFW_MOUSE_BUTTON_RIGHT, held, 0); +} + +ADD_BUTTON_DEF(special_resize) { + CGRect screenBounds = [[UIScreen mainScreen] bounds]; + CGFloat screenScale = [[UIScreen mainScreen] scale]; + + int width = (int) roundf(screenBounds.size.width); + int height = (int) roundf(screenBounds.size.height); + + Java_org_lwjgl_glfw_CallbackBridge_nativeSendScreenSize(NULL, NULL, width, height); + Java_org_lwjgl_glfw_CallbackBridge_nativeSendWindowPos(NULL, NULL, 0, 0); } ADD_BUTTON_DEF_KEY(f3, GLFW_KEY_F3) diff --git a/Natives/input_bridge_v3.c b/Natives/input_bridge_v3.c index a60bcc47..e7b35f36 100644 --- a/Natives/input_bridge_v3.c +++ b/Natives/input_bridge_v3.c @@ -30,6 +30,7 @@ typedef void GLFW_invoke_Key_func(void* window, int key, int scancode, int actio typedef void GLFW_invoke_MouseButton_func(void* window, int button, int action, int mods); typedef void GLFW_invoke_Scroll_func(void* window, double xoffset, double yoffset); typedef void GLFW_invoke_WindowSize_func(void* window, int width, int height); +typedef void GLFW_invoke_WindowPos_func(void* window, int x, int y); int grabCursorX, grabCursorY, lastCursorX, lastCursorY; @@ -48,9 +49,6 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved) { (*vm)->GetEnv(vm, (void**) &runtimeJNIEnvPtr_JRE, JNI_VERSION_1_4); isGrabbing = JNI_FALSE; - - // temporary only - isUseStackQueueCall = 1; return JNI_VERSION_1_4; } @@ -85,6 +83,7 @@ ADD_CALLBACK_WWIN(Key); ADD_CALLBACK_WWIN(MouseButton); ADD_CALLBACK_WWIN(Scroll); ADD_CALLBACK_WWIN(WindowSize); +ADD_CALLBACK_WWIN(WindowPos); #undef ADD_CALLBACK_WWIN @@ -218,7 +217,8 @@ JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_uikit_UIKit_updateProgress(JNIEn (*env)->ReleaseStringUTFChars(env, message, message_c); } -JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_uikit_UIKit_launchMinecraftSurface(JNIEnv* env, jclass clazz) { +JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_uikit_UIKit_launchMinecraftSurface(JNIEnv* env, jclass clazz, jboolean isUseStackQueueBool) { + isUseStackQueueCall = (int) isUseStackQueueBool; UIKit_launchMinecraftSurfaceVC(); } /* @@ -432,6 +432,16 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendScroll(JNIEn } } +JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendWindowPos(JNIEnv* env, jclass clazz, jint x, jint y) { + if (GLFW_invoke_WindowPos && isInputReady) { + if (isUseStackQueueCall) { + sendData(EVENT_TYPE_WINDOW_POS, x, y, 0, 0); + } else { + GLFW_invoke_WindowPos(showingWindow, c, y);; + } + } +} + JNIEXPORT void JNICALL Java_org_lwjgl_glfw_GLFW_nglfwSetShowingWindow(JNIEnv* env, jclass clazz, jlong window) { showingWindow = (long) window; } diff --git a/Natives/utils.h b/Natives/utils.h index b590ef3b..da5876d6 100644 --- a/Natives/utils.h +++ b/Natives/utils.h @@ -16,7 +16,8 @@ #define EVENT_TYPE_KEY 1005 #define EVENT_TYPE_MOUSE_BUTTON 1006 #define EVENT_TYPE_SCROLL 1007 -#define EVENT_TYPE_WINDOW_SIZE 1008 +#define EVENT_TYPE_WINDOW_POS 1008 +#define EVENT_TYPE_WINDOW_SIZE 1009 void* GL4ES_HANDLE;