From 66bee901db380798ca5518f15eddac2eae128484 Mon Sep 17 00:00:00 2001 From: Duy Tran Khanh Date: Sat, 7 Aug 2021 10:17:52 +0700 Subject: [PATCH] Layout converter v1 -> unfinished v2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "i want new keyboard for pojavluancher" x20 by @𝙵𝚊𝚔ȇ̈_A𝕣ᴄᴀᴅᴇ#7200 --- .../src/main/java/org/lwjgl/glfw/GLFW.java | 8 +- Natives/CustomControlsViewController.m | 3 + Natives/SurfaceViewController.m | 94 ++++++++++--------- Natives/customcontrols/ControlButton.m | 4 +- Natives/customcontrols/CustomControlsUtils.m | 55 ++++++++++- 5 files changed, 111 insertions(+), 53 deletions(-) diff --git a/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java b/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java index 09b3b414..5c74ff2e 100644 --- a/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java +++ b/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java @@ -483,7 +483,7 @@ public class GLFW /* volatile */ public static GLFWWindowPosCallback mGLFWWindowPosCallback; /* volatile */ public static GLFWWindowRefreshCallback mGLFWWindowRefreshCallback; /* volatile */ public static GLFWWindowSizeCallback mGLFWWindowSizeCallback; - + volatile public static int mGLFWWindowWidth, mGLFWWindowHeight; volatile public static double mGLFWCursorX, mGLFWCursorY, mGLFWCursorLastX, mGLFWCursorLastY; @@ -497,7 +497,7 @@ public class GLFW private static ArrayMap mGLFWWindowMap; public static boolean mGLFWIsGrabbing, mGLFWIsInputReady, mGLFWIsUseStackQueue = false; - public static final byte[] keyDownBuffer = new byte[316]; + public static final byte[] keyDownBuffer = new byte[317]; public static long mainContext = 0; static { try { @@ -1091,7 +1091,7 @@ public class GLFW break; case CallbackBridge.EVENT_TYPE_KEY: if (mGLFWKeyCallback != null) { - keyDownBuffer[dataArr[1]-32]=(byte)(int)dataArr[3]; + keyDownBuffer[Math.max(0, dataArr[1]-31)]=(byte)(int)dataArr[3]; mGLFWKeyCallback.invoke(ptr, dataArr[1], dataArr[2], dataArr[3], dataArr[4]); } break; @@ -1178,7 +1178,7 @@ public class GLFW } public static int glfwGetKey(@NativeType("GLFWwindow *") long window, int key) { - return keyDownBuffer[key-32]; + return keyDownBuffer[Math.max(0, key-31)]; } public static int glfwGetMouseButton(@NativeType("GLFWwindow *") long window, int button) { diff --git a/Natives/CustomControlsViewController.m b/Natives/CustomControlsViewController.m index 21dfc9b5..60b1c1d7 100644 --- a/Natives/CustomControlsViewController.m +++ b/Natives/CustomControlsViewController.m @@ -2,6 +2,8 @@ #import "LauncherPreferences.h" #import "ios_uikit_bridge.h" +#import "customcontrols/CustomControlsUtils.h" + #include "glfw_keycodes.h" #include "utils.h" @@ -79,6 +81,7 @@ int width; if (cc_error != nil) { showDialog(self, @"Error parsing JSON", cc_error.localizedDescription); } else { + convertV1ToV2(self.cc_dictionary); NSMutableArray *cc_controlDataList = self.cc_dictionary[@"mControlDataList"]; CGFloat currentScale = ((NSNumber *)self.cc_dictionary[@"scaledAt"]).floatValue; CGFloat savedScale = ((NSNumber *)getPreference(@"button_scale")).floatValue; diff --git a/Natives/SurfaceViewController.m b/Natives/SurfaceViewController.m index ffff618d..a6356ba6 100644 --- a/Natives/SurfaceViewController.m +++ b/Natives/SurfaceViewController.m @@ -4,6 +4,7 @@ #import "ios_uikit_bridge.h" #import "customcontrols/ControlButton.h" +#import "customcontrols/CustomControlsUtils.h" #include "glfw_keycodes.h" #include "utils.h" @@ -156,17 +157,13 @@ int notchOffset; if (cc_error != nil) { showDialog(self, @"Error parsing JSON", cc_error.localizedDescription); } else { + convertV1ToV2(self.cc_dictionary); NSMutableArray *cc_controlDataList = self.cc_dictionary[@"mControlDataList"]; CGFloat currentScale = ((NSNumber *)self.cc_dictionary[@"scaledAt"]).floatValue; CGFloat savedScale = ((NSNumber *)getPreference(@"button_scale")).floatValue; int cc_version = ((NSNumber *)self.cc_dictionary[@"version"]).intValue; for (int i = 0; i < (int) cc_controlDataList.count; i++) { NSMutableDictionary *cc_buttonDict = cc_controlDataList[i]; - if (cc_version < 2) { - showDialog(self, @"Notice", @"Custom controls v1 to v2 was not implemented!"); - return; - //convertV1ToV2(cc_buttonDict); - } APPLY_SCALE(cc_buttonDict[@"width"]); APPLY_SCALE(cc_buttonDict[@"height"]); APPLY_SCALE(cc_buttonDict[@"strokeWidth"]); @@ -176,12 +173,14 @@ int notchOffset; [button addTarget:self action:@selector(executebtn_up:) forControlEvents:UIControlEventTouchUpInside | UIControlEventTouchUpOutside]; [self.view addSubview:button]; - int firstKeycode = ((NSNumber *)cc_buttonDict[@"keycodes"][0]).intValue; - if (firstKeycode == SPECIALBTN_KEYBOARD) { - inputView.frame = button.frame; - } - if (firstKeycode != SPECIALBTN_TOGGLECTRL) { - togglableVisibleButtons[++togglableVisibleButtonIndex] = button; + for (int i = 0; i < 4; i++) { + int keycodeInt = ((NSNumber *)cc_buttonDict[@"keycodes"][i]).intValue; + if (keycodeInt == SPECIALBTN_KEYBOARD) { + inputView.frame = button.frame; + } + if (keycodeInt != SPECIALBTN_TOGGLECTRL) { + togglableVisibleButtons[++togglableVisibleButtonIndex] = button; + } } } self.cc_dictionary[@"scaledAt"] = @(savedScale); @@ -478,8 +477,7 @@ NSString* inputStringBefore; NSString *newText = [inputView.text substringFromIndex:INPUT_SPACE_LENGTH]; int charLength = (int) [newText length]; for (int i = 0; i < charLength; i++) { - // LWJGL2: convert to UTF-8 - // LWJGL3: Directly convert unichar to jchar since both are in UTF-16 encoding. + // Directly convert unichar to jchar since both are in UTF-16 encoding. /* jchar theChar = (jchar) @@ -568,45 +566,51 @@ int currentVisibility = 1; ControlButton *button = (ControlButton *)sender; int held = action == ACTION_DOWN; // TODO v2: mulitple keys support - int keycode = ((NSNumber *)button.properties[@"keycodes"][0]).intValue; - if (keycode < 0) { - switch (keycode) { - case SPECIALBTN_KEYBOARD: - if (held == 0) { - [inputView resignFirstResponder]; - inputView.alpha = 1.0f; - inputView.text = @""; - } - break; + for (int i = 0; i < 4; i++) { + int keycode = ((NSNumber *)cc_buttonDict[@"keycodes"][i]).intValue; + if (keycode < 0) { + switch (keycode) { + case SPECIALBTN_KEYBOARD: + if (held == 0) { + [inputView resignFirstResponder]; + inputView.alpha = 1.0f; + inputView.text = @""; + } + break; - case SPECIALBTN_MOUSEPRI: - Java_org_lwjgl_glfw_CallbackBridge_nativeSendMouseButton(NULL, NULL, GLFW_MOUSE_BUTTON_LEFT, held, 0); - break; + case SPECIALBTN_MOUSEPRI: + Java_org_lwjgl_glfw_CallbackBridge_nativeSendMouseButton(NULL, NULL, GLFW_MOUSE_BUTTON_LEFT, held, 0); + break; - case SPECIALBTN_MOUSESEC: - Java_org_lwjgl_glfw_CallbackBridge_nativeSendMouseButton(NULL, NULL, GLFW_MOUSE_BUTTON_RIGHT, held, 0); - break; + case SPECIALBTN_MOUSESEC: + Java_org_lwjgl_glfw_CallbackBridge_nativeSendMouseButton(NULL, NULL, GLFW_MOUSE_BUTTON_RIGHT, held, 0); + break; - case SPECIALBTN_MOUSEMID: - Java_org_lwjgl_glfw_CallbackBridge_nativeSendMouseButton(NULL, NULL, GLFW_MOUSE_BUTTON_MIDDLE, held, 0); - break; + case SPECIALBTN_MOUSEMID: + Java_org_lwjgl_glfw_CallbackBridge_nativeSendMouseButton(NULL, NULL, GLFW_MOUSE_BUTTON_MIDDLE, held, 0); + break; - case SPECIALBTN_TOGGLECTRL: - [self executebtn_special_togglebtn:held]; - break; + case SPECIALBTN_TOGGLECTRL: + [self executebtn_special_togglebtn:held]; + break; - case SPECIALBTN_VIRTUALMOUSE: - case SPECIALBTN_SCROLLUP: - case SPECIALBTN_SCROLLDOWN: - NSLog(@"Warning: button %@ sent unimplemented special keycode: %d", button.titleLabel.text, keycode); - break; + case SPECIALBTN_VIRTUALMOUSE: + case SPECIALBTN_SCROLLUP: + case SPECIALBTN_SCROLLDOWN: + NSLog(@"Warning: button %@ sent unimplemented special keycode: %d", button.titleLabel.text, keycode); + break; - default: - NSLog(@"Warning: button %@ sent unknown special keycode: %d", button.titleLabel.text, keycode); - break; + default: + NSLog(@"Warning: button %@ sent unknown special keycode: %d", button.titleLabel.text, keycode); + break; + } + } else { + // there's no key id 0, but we accidentally used -1 as a special key id, so we had to do that + // if (keycode == 0) { keycode = -1; } + // at the moment, send unknown keycode does nothing, may even cause performance issue, so ignore it + if (keycode == 0) continue; + Java_org_lwjgl_glfw_CallbackBridge_nativeSendKey(NULL, NULL, keycode, 0, held, 0); } - } else { - Java_org_lwjgl_glfw_CallbackBridge_nativeSendKey(NULL, NULL, keycode, 0, held, 0); } } diff --git a/Natives/customcontrols/ControlButton.m b/Natives/customcontrols/ControlButton.m index 02fb2283..58c2f8d0 100644 --- a/Natives/customcontrols/ControlButton.m +++ b/Natives/customcontrols/ControlButton.m @@ -126,10 +126,10 @@ self.layer.borderColor = [convertARGB2UIColor(propStrokeColor) CGColor]; if (propCornerRadius > 0) { - self.layer.cornerRadius = self.frame.size.width / 200 * propCornerRadius; + self.layer.cornerRadius = MIN(self.frame.size.width, self.frame.size.height) / 200.0 * propCornerRadius; } if (propStrokeWidth > 0) { - self.layer.borderWidth = self.frame.size.width / propStrokeWidth; + self.layer.borderWidth = MAX(self.frame.size.width, self.frame.size.height) / 200.0 * propStrokeWidth; } self.clipsToBounds = YES; } diff --git a/Natives/customcontrols/CustomControlsUtils.m b/Natives/customcontrols/CustomControlsUtils.m index 6aa532f8..7b2eb910 100644 --- a/Natives/customcontrols/CustomControlsUtils.m +++ b/Natives/customcontrols/CustomControlsUtils.m @@ -18,7 +18,7 @@ NSMutableDictionary* createButton(NSString* name, int* keycodes, NSString* dynam dict[@"height"] = @(height); dict[@"opacity"] = @(100); dict[@"cornerRadius"] = @(0); - dict[@"bgColor"] = @(convertUIColor2ARGB([UIColor colorWithRed:0 green:0 blue:0 alpha:0.3])); + dict[@"bgColor"] = @(0x4d000000); return dict; } @@ -43,7 +43,58 @@ int convertUIColor2ARGB(UIColor* color) { } void convertV1ToV2(NSMutableDictionary* dict) { - dict[@"opacity"] = @(100 - ((NSNumber *)dict[@"transparency"]).intValue); + if (((NSNumber *)dict[@"version"]).intValue >= 2) { + return; + } + dict[@"scaledAt"] = @(100); + dict[@"version"] = @(2); + for (NSMutableDictionary *btnDict in (NSMutableArray *)dict[@"mControlDataList"]) { + NSMutableArray *keycodes = [NSMutableArray arrayWithCapacity:4]; + CGFloat scale = ((NSNumber *)dict[@"scaledAt"]).floatValue; + + // default values + btnDict[@"bgColor"] = @(0x4d000000); + btnDict[@"strokeWidth"] = @(0); + + // opacity -> reverse transparency + btnDict[@"opacity"] = @(100 - ((NSNumber *)btnDict[@"transparency"]).intValue); + [btnDict removeObjectForKey:@"transparency"]; + + // pixel of width, height -> dp + btnDict[@"width"] = @(((NSNumber *)btnDict[@"width"]).floatValue / scale * 50.0); + btnDict[@"height"] = @(((NSNumber *)btnDict[@"height"]).floatValue / scale * 50.0); + + // isRound -> cornerRadius 35% + if (((NSNumber *)btnDict[@"isRound"]).boolValue == YES) { + btnDict[@"cornerRadius"] = @(35.0f); + } + [btnDict removeObjectForKey:@"isRound"]; + + // keycode -> keycodes[0] + [keycodes addObject:btnDict[@"keycode"]]; + [btnDict removeObjectForKey:@"keycode"]; + + // alt -> keycodes[i++] + if (((NSNumber *)dict[@"holdAlt"]).boolValue == YES) { + [keycodes addObject:@(GLFW_KEY_LEFT_ALT)]; + } + [btnDict removeObjectForKey:@"holdAlt"]; + + // ctrl -> keycodes[i++] + if (((NSNumber *)dict[@"holdCtrl"]).boolValue == YES) { + [keycodes addObject:@(GLFW_KEY_LEFT_CONTROL)]; + } + [btnDict removeObjectForKey:@"holdCtrl"]; + + // shift -> keycodes[i++] + if (((NSNumber *)dict[@"holdShift"]).boolValue == YES) { + [keycodes addObject:@(GLFW_KEY_LEFT_SHIFT)]; + } + [btnDict removeObjectForKey:@"holdShift"]; + + // set final keycode array + btnDict[@"keycodes"] = keycodes; + } } void generateAndSaveDefaultControl() {