diff --git a/VoidLink/Images.xcassets/apple.terminal.imageset/Contents.json b/VoidLink/Images.xcassets/apple.terminal.imageset/Contents.json new file mode 100644 index 00000000..50159f24 --- /dev/null +++ b/VoidLink/Images.xcassets/apple.terminal.imageset/Contents.json @@ -0,0 +1,24 @@ +{ + "images" : [ + { + "filename" : "apple.terminal.svg", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/VoidLink/Images.xcassets/apple.terminal.imageset/apple.terminal.svg b/VoidLink/Images.xcassets/apple.terminal.imageset/apple.terminal.svg new file mode 100644 index 00000000..6eefb07f --- /dev/null +++ b/VoidLink/Images.xcassets/apple.terminal.imageset/apple.terminal.svg @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git a/VoidLink/Input/ControllerNavigator.swift b/VoidLink/Input/ControllerNavigator.swift index 5eea5ddd..13ebe096 100644 --- a/VoidLink/Input/ControllerNavigator.swift +++ b/VoidLink/Input/ControllerNavigator.swift @@ -609,8 +609,8 @@ final class ControllerNavigator: NSObject { RadialMenuOverlayView.menuSectors.removeAll() if radialMenuState == .disconnectAndQuit { - RadialMenuOverlayView.menuSectors.append(RadialMenuSector(title: "Disconnect".localized, subtitle: "", symbol: PublicUtils.disconnectSymbol(), item: .disconnect)) RadialMenuOverlayView.menuSectors.append(RadialMenuSector(title: "Quit App".localized, subtitle: "", symbol: PublicUtils.quitSymbol(), item: .quitApp)) + RadialMenuOverlayView.menuSectors.append(RadialMenuSector(title: "Disconnect".localized, subtitle: "", symbol: PublicUtils.disconnectSymbol(), item: .disconnect)) radialMenuView = RadialMenuOverlayView.presentInKeyWindow() listenToRadialMenuStick() return @@ -651,7 +651,7 @@ final class ControllerNavigator: NSObject { } } - if !mainFrameVC.settingsViewExpanded {RadialMenuOverlayView.menuSectors.append(RadialMenuSector(title: "More".localized, subtitle: "", symbol: "ellipsis.circle", item: .more))} + if !mainFrameVC.settingsViewExpanded {RadialMenuOverlayView.menuSectors.append(RadialMenuSector(title: "=more".localized, subtitle: "", symbol: "ellipsis.circle", item: .more))} if !mainFrameVC.isStreaming() || radialMenuState == .moreOptions { RadialMenuOverlayView.menuSectors.appendIfNotContains(gameProfileItem) } @@ -1029,7 +1029,7 @@ extension SettingsViewController: ControllerUINavigationDelegate { }) } controllerMouseCurvePreviewDismissWorkItem = workItem - DispatchQueue.main.asyncAfter(deadline: .now() + 2, execute: workItem) + DispatchQueue.main.asyncAfter(deadline: .now() + 1, execute: workItem) } @objc func restoreControllerNavigationHighlight() { diff --git a/VoidLink/Input/OnScreenWidgetView.swift b/VoidLink/Input/OnScreenWidgetView.swift index f531a525..f3f8b50b 100644 --- a/VoidLink/Input/OnScreenWidgetView.swift +++ b/VoidLink/Input/OnScreenWidgetView.swift @@ -1828,7 +1828,7 @@ import ObjectiveC.runtime autoReleaseComboButtons.removeAll{ Set(CommandManager.pencilProButtonCmds).contains($0) } - CommandManager.shared.sendAutoReleaseComboCommand(cmdStrings: autoReleaseComboButtons) // send multi-key command + CommandManager.shared.sendAutoReleaseComboCommand(cmdStrings: autoReleaseComboButtons, delay: 0.1) // send multi-key command } DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { self.buttonUpVisualEffect() diff --git a/VoidLink/Localization/Localizable.xcstrings b/VoidLink/Localization/Localizable.xcstrings index 91282d16..2918d9f5 100644 --- a/VoidLink/Localization/Localizable.xcstrings +++ b/VoidLink/Localization/Localizable.xcstrings @@ -2513,6 +2513,35 @@ } } }, + "=more" : { + "extractionState" : "manual", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "More" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "其他" + } + }, + "zh-Hant" : { + "stringUnit" : { + "state" : "translated", + "value" : "其他" + } + }, + "zh-HK" : { + "stringUnit" : { + "state" : "translated", + "value" : "其他" + } + } + } + }, "=mouseM" : { "extractionState" : "manual", "localizations" : { diff --git a/VoidLink/Utility/PublicUtils.swift b/VoidLink/Utility/PublicUtils.swift index a59952ff..be9557d2 100644 --- a/VoidLink/Utility/PublicUtils.swift +++ b/VoidLink/Utility/PublicUtils.swift @@ -209,6 +209,11 @@ import UIKit return rootViewController } + @objc public static func hasNoPresentedVC(_ vc: UIViewController) -> Bool { + let hasNoPresentedVC = vc.presentedViewController == nil && vc.view.window != nil + return hasNoPresentedVC + } + public static func runOnMain(_ work: @escaping () -> Void) { if Thread.isMainThread { work() diff --git a/VoidLink/ViewControllers/MainFrameViewController.m b/VoidLink/ViewControllers/MainFrameViewController.m index 99e6e7a4..b3072b55 100644 --- a/VoidLink/ViewControllers/MainFrameViewController.m +++ b/VoidLink/ViewControllers/MainFrameViewController.m @@ -1016,6 +1016,7 @@ static NSMutableSet* hostList; - (void)quitApp:(TemporaryApp* )app{ if(!app) return; + if(![PublicUtils hasNoPresentedVC:self]) return; [self showLoadingFrame: ^{ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ HttpResponse* quitResponse = [self requestToQuitApp:app]; diff --git a/VoidLink/ViewControllers/SettingsViewController.m b/VoidLink/ViewControllers/SettingsViewController.m index d63e7144..90cc25da 100644 --- a/VoidLink/ViewControllers/SettingsViewController.m +++ b/VoidLink/ViewControllers/SettingsViewController.m @@ -633,8 +633,9 @@ BOOL isCustomResolution(int resolutionSelected) { if(!settingsViewAlreadyAppeared) { if(![self contentOffsetRestored]) _scrollView.contentOffset = CGPointMake(_scrollView.contentOffset.x, tempSettings.settingsMenuOffset.floatValue); - if(@available(iOS 13.0, *)) if(ControllerUtil.primaryGCController) [self restoreControllerNavigationHighlight]; } + if(@available(iOS 13.0, *)) if(ControllerUtil.primaryGCController) [self restoreControllerNavigationHighlight]; + _scrollView.hidden = false; settingsViewJustExpanded = false; diff --git a/VoidLink/ViewControllers/StreamFrameViewController.m b/VoidLink/ViewControllers/StreamFrameViewController.m index cf17e992..32bdf002 100644 --- a/VoidLink/ViewControllers/StreamFrameViewController.m +++ b/VoidLink/ViewControllers/StreamFrameViewController.m @@ -1374,7 +1374,13 @@ static __weak StreamFrameViewController *VLSharedStreamFrameViewController = nil dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.15 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ if(ControllerNavigator.radialMenuView) [ControllerNavigator updateRadialMenu]; }); - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [ControllerNavigator restoreUINavigationHighlight]; + }); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [ControllerNavigator restoreUINavigationHighlight]; + }); + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [ControllerNavigator restoreUINavigationHighlight]; }); } diff --git a/VoidLinkPreview/RadialMenuView.swift b/VoidLinkPreview/RadialMenuView.swift index 5a55ae6c..bd3dcd97 100644 --- a/VoidLinkPreview/RadialMenuView.swift +++ b/VoidLinkPreview/RadialMenuView.swift @@ -377,7 +377,7 @@ private struct RadialMenuCenterView: View { .padding(.bottom, centerIconTitleSpacing) Text(item?.title ?? "") - .font(.system(size: max(diameter * 0.047, 13), weight: .medium)) + .font(.system(size: max(diameter * 0.047, 13), weight: .semibold)) .foregroundColor(style.titleColor) .lineLimit(1) .minimumScaleFactor(0.62) @@ -400,7 +400,7 @@ private struct RadialMenuCenterView: View { } private var centerTextSpacing: CGFloat { - max(diameter * 0.018, 4) + max(diameter * 0.013, 3.3) } private var centerIconTitleSpacing: CGFloat { @@ -408,7 +408,7 @@ private struct RadialMenuCenterView: View { return centerTextSpacing } - return max(diameter * 0.034, 8) + return 3.6 } }