Move UIKit stuff to separate java class

This commit is contained in:
Duy Tran Khanh committed 2021-01-30 05:23:09 +07:00
1 parent 7eef602fae
commit e96db799c4
11 files changed
+99 -50

No files matched your search

@@ -8,6 +8,7 @@ import javafx.application.Application;
import org.lwjgl.glfw.CallbackBridge;
import net.kdt.pojavlaunch.prefs.*;
import net.kdt.pojavlaunch.uikit.*;
import net.kdt.pojavlaunch.utils.*;
import net.kdt.pojavlaunch.value.*;
@@ -29,7 +30,7 @@ public class PLaunchApp {
if (args[0].startsWith("/Applications/")) {
System.out.println("We are on java now! Starting UI...");
org.lwjgl.glfw.CallbackBridge.nativeLaunchUI(args);
UIKit.launchUI(args);
} else {
launchMinecraft();
}
@@ -0,0 +1,46 @@
package net.kdt.pojavlaunch.uikit;
import org.lwjgl.glfw.*;
public class UIKit {
static {
System.loadLibrary("pojavexec");
}
public static native int launchUI(String[] uiArgs);
public static native void runOnUIThread(UIKitCallback callback);
public static void callback_AppDelegate_didFinishLaunching(int width, int height) {
GLFW.mGLFWWindowWidth = CallbackBridge.width;
GLFW.mGLFWWindowHeight = CallbackBridge.height;
CallbackBridge.mouseX = CallbackBridge.width / 2;
CallbackBridge.mouseY = height / 2;
net.kdt.pojavlaunch.PLaunchApp.applicationDidFinishLaunching();
}
public static void callback_SurfaceViewController_onTouch(int event, int x, int y) {
switch (event) {
case ACTION_DOWN:
case ACTION_UP:
CallbackBridge.mouseLastX = x;
CallbackBridge.mouseLastY = y;
break;
case ACTION_MOVE:
if (GLFW.mGLFWIsGrabbing) {
CallbackBridge.mouseX += x - CallbackBridge.mouseLastX;
CallbackBridge.mouseY += y - CallbackBridge.mouseLastY;
CallbackBridge.mouseLastX = CallbackBridge.x;
CallbackBridge.mouseLastY = CallbackBridge.y;
} else {
CallbackBridge.mouseX = CallbackBridge.x;
CallbackBridge.mouseY = CallbackBridge.y;
}
break;
}
sendCursorPos(CallbackBridge.mouseX, CallbackBridge.mouseY);
}
}
@@ -0,0 +1,5 @@
package net.kdt.pojavlaunch.uikit;
public interface UIKitCallback {
public void onCallback();
}
@@ -47,41 +47,6 @@ public class CallbackBridge {
public static boolean mouseLeft;
public static StringBuilder DEBUG_STRING = new StringBuilder();
public static native void nativeLaunchUI(String[] uiArgs);
public static void callback_AppDelegate_didFinishLaunching(int width, int height) {
GLFW.mGLFWWindowWidth = width;
GLFW.mGLFWWindowHeight = height;
mouseX = width / 2;
mouseY = height / 2;
net.kdt.pojavlaunch.PLaunchApp.applicationDidFinishLaunching();
}
public static void callback_SurfaceViewController_onTouch(int event, int x, int y) {
switch (event) {
case ACTION_DOWN:
case ACTION_UP:
mouseLastX = x;
mouseLastY = y;
break;
case ACTION_MOVE:
if (GLFW.mGLFWIsGrabbing) {
mouseX += x - mouseLastX;
mouseY += y - mouseLastY;
mouseLastX = x;
mouseLastY = y;
} else {
mouseX = x;
mouseY = y;
}
break;
}
sendCursorPos(mouseX, mouseY);
}
public static boolean nativeIsGrabbing() {
return GLFW.mGLFWIsGrabbing;
}
+2 -1
View File
@@ -9,7 +9,8 @@
self.window = window;
[self.window setWindowLevel:3000.0];
[self.window makeKeyAndVisible];
self.window.backgroundColor = [UIColor blackColor];
self.window.backgroundColor = [UIColor whiteColor];
LauncherViewController *vc = [[LauncherViewController alloc] init];
self.window.rootViewController = vc;
+1 -1
View File
@@ -13,7 +13,7 @@ set_target_properties(PojavLauncher PROPERTIES
MACOSX_FRAMEWORK_IDENTIFIER org.cmake.ExecutableTarget
MACOSX_BUNDLE_INFO_PLIST "../Info.plist")
add_library(pojavexec SHARED log.m AppDelegate.m UILauncher.m LauncherViewController.m SurfaceViewController.m egl_bridge_ios.m egl_bridge.c input_bridge_v3.c utils.c)
add_library(pojavexec SHARED log.m AppDelegate.m UILauncher.m LauncherViewController.m SurfaceViewController.m egl_bridge_ios.m ios_uikit_bridge.m egl_bridge.c input_bridge_v3.c utils.c)
target_link_libraries(pojavexec
"-Fresources/Frameworks"
"-framework UIKit"
+5 -1
View File
@@ -19,8 +19,12 @@
CGRect screenBounds = [[UIScreen mainScreen] bounds];
CGFloat screenScale = [[UIScreen mainScreen] scale];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0, 0.0, screenBounds.size.width, screenBounds.size.height)];
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, screenBounds.size.width, screenBounds.size.height)];
scrollView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
UIProgressView *progress = [[UIProgressView alloc] initWithFrame:CGRectMake(4.0, 4.0, screenBounds.size.width - 8.0, 40.0)];
progress.progress = 0.5;
[scrollView addSubview:progress];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth;
+1 -1
View File
@@ -5,7 +5,7 @@ set -e
CFLAGS="-fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -Wno-trigraphs -fpascal-strings -O3 -Wno-missing-field-initializers -Wno-missing-prototypes -Wno-return-type -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wno-empty-body -Wno-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wno-constant-conversion -Wno-int-conversion -Wno-bool-conversion -Wno-enum-conversion -Wno-float-conversion -Wno-non-literal-null-conversion -Wno-objc-literal-conversion -Wshorten-64-to-32 -Wpointer-sign -Wno-newline-eof"
clang -Wl,-rpath,/Applications/PojavLauncher.app/Frameworks -fobjc-arc -x objective-c -Fresources/Frameworks -framework UIKit -framework MetalANGLE -Iresources/Frameworks/MetalANGLE.framework/Headers -dynamiclib -isysroot /var/mobile/theos/sdks/iPhoneOS11.2.sdk $CFLAGS -o libpojavexec.dylib log.m AppDelegate.m UILauncher.m LauncherViewController.m SurfaceViewController.m egl_bridge_ios.m egl_bridge.c input_bridge_v3.c utils.c -DGLES_TESTZ -DUSE_EGLZ
clang -Wl,-rpath,/Applications/PojavLauncher.app/Frameworks -fobjc-arc -x objective-c -Fresources/Frameworks -framework UIKit -framework MetalANGLE -Iresources/Frameworks/MetalANGLE.framework/Headers -dynamiclib -isysroot /var/mobile/theos/sdks/iPhoneOS11.2.sdk $CFLAGS -o libpojavexec.dylib log.m AppDelegate.m UILauncher.m LauncherViewController.m SurfaceViewController.m egl_bridge_ios.m ios_uikit_bridge.m egl_bridge.c input_bridge_v3.c utils.c -DGLES_TESTZ -DUSE_EGLZ
ldid -S../entitlements.xml libpojavexec.dylib
+17 -10
View File
@@ -14,6 +14,8 @@
#include <assert.h>
#include <stdlib.h>
#include "ios_uikit_bridge.h"
#include "log.h"
#include "utils.h"
@@ -44,7 +46,8 @@ int grabCursorX, grabCursorY, lastCursorX, lastCursorY;
jclass inputBridgeClass_ANDROID, inputBridgeClass_JRE;
jmethodID inputBridgeMethod_ANDROID, inputBridgeMethod_JRE;
jmethodID touchBridgeMethod;
jclass uikitBridgeClass;
jmethodID uikitBridgeTouchMethod;
jboolean isGrabbing;
@@ -161,7 +164,7 @@ void callback_AppDelegate_didFinishLaunching(int width, int height) {
// Because UI init after JVM init, this should not be null
assert(runtimeJNIEnvPtr_JRE != NULL);
jclass clazz = (*runtimeJNIEnvPtr_JRE)->FindClass(runtimeJNIEnvPtr_JRE, "org/lwjgl/glfw/CallbackBridge");
jclass clazz = (*runtimeJNIEnvPtr_JRE)->FindClass(runtimeJNIEnvPtr_JRE, "net/kdt/pojavlaunch/uikit/UIKit");
assert(clazz != NULL);
jmethodID method = (*runtimeJNIEnvPtr_JRE)->GetStaticMethodID(runtimeJNIEnvPtr_JRE, clazz, "callback_AppDelegate_didFinishLaunching", "(II)V");
@@ -178,24 +181,28 @@ void callback_SurfaceViewController_onTouch(int event, int x, int y) {
// Because UI init after JVM init, this should not be null
assert (runtimeJNIEnvPtr_JRE != NULL);
if (!inputBridgeClass_ANDROID) {
inputBridgeClass_ANDROID = (*runtimeJNIEnvPtr_JRE)->FindClass(runtimeJNIEnvPtr_JRE, "org/lwjgl/glfw/CallbackBridge");
assert(inputBridgeClass_ANDROID != NULL);
if (!uikitBridgeClass) {
uikitBridgeClass = (*runtimeJNIEnvPtr_JRE)->FindClass(runtimeJNIEnvPtr_JRE, "net/kdt/pojavlaunch/uikit/UIKit");
assert(uikitBridgeClass != NULL);
}
if (!touchBridgeMethod) {
touchBridgeMethod = (*runtimeJNIEnvPtr_JRE)->GetStaticMethodID(runtimeJNIEnvPtr_JRE, inputBridgeClass_ANDROID, "callback_SurfaceViewController_onTouch", "(III)V");
assert(touchBridgeMethod != NULL);
if (!uikitBridgeTouchMethod) {
uikitBridgeTouchMethod = (*runtimeJNIEnvPtr_JRE)->GetStaticMethodID(uikitBridgeClass, inputBridgeClass_ANDROID, "callback_SurfaceViewController_onTouch", "(III)V");
assert(uikitBridgeTouchMethod != NULL);
}
(*runtimeJNIEnvPtr_JRE)->CallStaticVoidMethod(
runtimeJNIEnvPtr_JRE,
inputBridgeClass_ANDROID, touchBridgeMethod,
uikitBridgeClass, uikitBridgeTouchMethod,
event, x, y
);
}
JNIEXPORT jint JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeLaunchUI(JNIEnv* env, jclass clazz, jobjectArray args) {
JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_uikit_UIKit_runOnUIThread(JNIEnv* env, jclass clazz, jobject callback) {
UIKit_runOnUIThread(callback);
}
JNIEXPORT jint JNICALL Java_net_kdt_pojavlaunch_uikit_UIKit_launchUI(JNIEnv* env, jclass clazz, jobjectArray args) {
int argc = (*env)->GetArrayLength(env, args);
char **argv = convert_to_char_array(env, args);
return launchUI(argc, argv);
+4
View File
@@ -0,0 +1,4 @@
#pragma once
#include "jni.h"
void UIKit_runOnUIThread(jobject callback);
+16
View File
@@ -0,0 +1,16 @@
#import <UIKit/UIKit.h>
#include "ios_uikit_bridge.h"
#include "utils.h"
void UIKit_runOnUIThread(jobject callback) {
dispatch_async(dispatch_get_main_queue(), ^{
JNIEnv *env;
(*runtimeJavaVMPtr)->GetEnv(runtimeJavaVMPtr, &env, JNI_VERSION_1_4);
jclass clazz = (*env)->GetObjectClass(env, object);
jmethodID method = (*env)->GetStaticMethodID(env, clazz, "onCallback", "()V");
(*env)->CallStaticVoidMethod(
env, callback, method
);
});
}