Move UIKit stuff to separate java class
This commit is contained in:
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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
#pragma once
|
||||
#include "jni.h"
|
||||
|
||||
void UIKit_runOnUIThread(jobject callback);
|
||||
@@ -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
|
||||
);
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user