- emulated controller type tip

- HDR switch fixes
This commit is contained in:
TrueZhuanjia committed 2025-07-24 16:02:30 +08:00
1 parent a707b21446
commit a7fc2a65e0
3 files changed
+87 -15

No files matched your search

+62 -4
View File
@@ -1451,6 +1451,64 @@
} }
} }
}, },
"emulatedControllerTypeStackDoc" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "https://voidlink.yuque.com/org-wiki-voidlink-znirha/fa3tgr/uscwmv3vz8g30rmk?singleDoc#"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "https://voidlink.yuque.com/org-wiki-voidlink-znirha/fa3tgr/bz6ggagp0ly4loq3?singleDoc#"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "https://voidlink.yuque.com/org-wiki-voidlink-znirha/fa3tgr/bz6ggagp0ly4loq3?singleDoc#"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "needs_review",
"value" : "https://voidlink.yuque.com/org-wiki-voidlink-znirha/fa3tgr/bz6ggagp0ly4loq3?singleDoc#"
}
}
}
},
"emulatedControllerTypeStackTip" : {
"extractionState" : "manual",
"localizations" : {
"en" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sunshine emulates game controller via VigemBus, which support DS4 & Xbox360. \n\n- Xbox360 does not support gyro.\n\n- When “both” is selected, the app will map built-in gyro as player0 & external game controller as player1"
}
},
"zh-Hans" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sunshine 通过 VigemBus 模拟游戏手柄,支持 DS4 和 Xbox 360。\n\n- Xbox 360 不支持陀螺仪。\n\n- 当选择“同时映射”时,app会将内置陀螺仪映射为玩家0,外接手柄映射为玩家1。"
}
},
"zh-Hant" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sunshine 透過 VigemBus 模擬遊戲控制器,支援 DS4 和 Xbox 360。\n\n- Xbox 360 不支援陀螺儀。\n\n- 當選擇「同時映射」時,app 會將內建陀螺儀對應為玩家0,外接控制器對應為玩家1。"
}
},
"zh-HK" : {
"stringUnit" : {
"state" : "translated",
"value" : "Sunshine 透過 VigemBus 模擬遊戲控制器,支援 DS4 和 Xbox 360。\n\n- Xbox 360 不支援陀螺儀。\n\n- 當選擇「同時映射」時,app 會將內建陀螺儀對應為玩家0,外接控制器對應為玩家1。"
}
}
}
},
"Enter a new command and alias" : { "Enter a new command and alias" : {
"extractionState" : "manual", "extractionState" : "manual",
"localizations" : { "localizations" : {
@@ -2972,25 +3030,25 @@
"en" : { "en" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "VoidLink supports rich, powerful custom on screen widgets including keyboard buttons, gamepad button & joysticks, mouse touchpad & button. Check online document for detail." "value" : "- VoidLink supports rich, powerful custom on screen widgets including keyboard buttons, gamepad button & joysticks, mouse touchpad & button. Check online document for detail.\n\n- Multi-finger tap gesture is available for launching widget layout tool during streaming."
} }
}, },
"zh-Hans" : { "zh-Hans" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "VoidLink具备丰富而强大的自定义屏显控件,类型包括:键盘按键、手柄按键和摇杆、鼠标触摸板和按键等。详见在线文档。 " "value" : "- VoidLink具备丰富而强大的自定义屏显控件,类型包括:键盘按键、手柄按键和摇杆、鼠标触摸板和按键等。详见在线文档。 \n\n- 可通过多指轻按手势在串流时打开控件布局工具。"
} }
}, },
"zh-Hant" : { "zh-Hant" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "VoidLink 提供豐富且強大的自訂螢幕顯示元件,類型包含:鍵盤按鍵、手把按鍵與搖桿、滑鼠觸控板及按鍵等。詳細資訊請參考線上說明文件。" "value" : "- VoidLink 提供豐富且強大的自訂螢幕顯示元件,類型包含:鍵盤按鍵、手把按鍵與搖桿、滑鼠觸控板及按鍵等。詳細資訊請參考線上說明文件。\n\n- 可透過多指輕點手勢,在串流時開啟控制元件佈局工具。"
} }
}, },
"zh-HK" : { "zh-HK" : {
"stringUnit" : { "stringUnit" : {
"state" : "translated", "state" : "translated",
"value" : "VoidLink 提供豐富且強大的自訂螢幕顯示元件,類型包含:鍵盤按鍵、手把按鍵與搖桿、滑鼠觸控板及按鍵等。詳細資訊請參考線上說明文件。" "value" : "- VoidLink 提供豐富且強大的自訂螢幕顯示元件,類型包含:鍵盤按鍵、手把按鍵與搖桿、滑鼠觸控板及按鍵等。詳細資訊請參考線上說明文件。\n\n- 可透過多指輕點手勢,在串流時開啟控制元件佈局工具。"
} }
} }
} }
@@ -125,7 +125,7 @@
- (void)saveSettings; - (void)saveSettings;
+ (bool)isLandscapeNow; + (bool)isLandscapeNow;
- (void)updateResolutionTable; - (void)updateResolutionTable;
- (void)widget:(UISlider*)widget setEnabled:(bool)enabled; - (void)widget:(UIView*)widget setEnabled:(bool)enabled;
- (void)updateTheme; - (void)updateTheme;
- (void)hideDynamicLabelsWhenOverlapped:(UIView* )view; - (void)hideDynamicLabelsWhenOverlapped:(UIView* )view;
- (void)setHidden:(BOOL)hidden forStack:(UIStackView* )stack; - (void)setHidden:(BOOL)hidden forStack:(UIStackView* )stack;
@@ -514,7 +514,7 @@ BOOL isCustomResolution(CGSize res) {
if (@available(iOS 13.0, *)) { if (@available(iOS 13.0, *)) {
[videoSection setSectionWithIcon:[UIImage systemImageNamed:@"waveform"] andSize:20]; [videoSection setSectionWithIcon:[UIImage systemImageNamed:@"waveform"] andSize:20];
} }
[self addSetting:self.resolutionStack ofId:@"resolutionStack" withInfoTag:YES withDynamicLabel:YES to:videoSection]; [self addSetting:self.resolutionStack ofId:@"resolutionStack" withInfoTag:NO withDynamicLabel:YES to:videoSection];
[self addSetting:self.fpsStack ofId:@"fpsStack" withInfoTag:NO withDynamicLabel:NO to:videoSection]; [self addSetting:self.fpsStack ofId:@"fpsStack" withInfoTag:NO withDynamicLabel:NO to:videoSection];
[self addSetting:self.bitrateStack ofId:@"bitrateStack" withInfoTag:YES withDynamicLabel:YES to:videoSection]; [self addSetting:self.bitrateStack ofId:@"bitrateStack" withInfoTag:YES withDynamicLabel:YES to:videoSection];
[self addSetting:self.framepacingStack ofId:@"framepacingStack" withInfoTag:NO withDynamicLabel:NO to:videoSection]; [self addSetting:self.framepacingStack ofId:@"framepacingStack" withInfoTag:NO withDynamicLabel:NO to:videoSection];
@@ -522,6 +522,7 @@ BOOL isCustomResolution(CGSize res) {
[self addSetting:self.hdrStack ofId:@"hdrStack" withInfoTag:![self hdrSupported] withDynamicLabel:NO to:videoSection]; [self addSetting:self.hdrStack ofId:@"hdrStack" withInfoTag:![self hdrSupported] withDynamicLabel:NO to:videoSection];
[self addSetting:self.yuv444Stack ofId:@"yuv444Stack" withInfoTag:YES withDynamicLabel:NO to:videoSection]; [self addSetting:self.yuv444Stack ofId:@"yuv444Stack" withInfoTag:YES withDynamicLabel:NO to:videoSection];
[self addSetting:self.pipStack ofId:@"pipStack" withInfoTag:YES withDynamicLabel:NO to:videoSection]; [self addSetting:self.pipStack ofId:@"pipStack" withInfoTag:YES withDynamicLabel:NO to:videoSection];
[self addSetting:self.pipStack ofId:@"pipStack" withInfoTag:YES withDynamicLabel:NO to:videoSection];
[videoSection addToParentStack:_parentStack]; [videoSection addToParentStack:_parentStack];
[videoSection setExpanded:YES]; [videoSection setExpanded:YES];
@@ -1014,6 +1015,11 @@ BOOL isCustomResolution(CGSize res) {
showOnlineDocAction = true; showOnlineDocAction = true;
onlineDocLink = [LocalizationHelper localizedStringForKey:@"externalDisplayModeStackDoc"]; onlineDocLink = [LocalizationHelper localizedStringForKey:@"externalDisplayModeStackDoc"];
} }
if([sender.superview.accessibilityIdentifier isEqualToString: @"emulatedControllerTypeStack"]){
tipText = [LocalizationHelper localizedStringForKey:@"emulatedControllerTypeStackTip"];
showOnlineDocAction = true;
onlineDocLink = [LocalizationHelper localizedStringForKey:@"emulatedControllerTypeStackDoc"];
}
UIAlertController *tipsAlertController = [UIAlertController alertControllerWithTitle: [LocalizationHelper localizedStringForKey:@"Tips"] message: [LocalizationHelper localizedStringForKey:@"%@", tipText] preferredStyle:UIAlertControllerStyleAlert]; UIAlertController *tipsAlertController = [UIAlertController alertControllerWithTitle: [LocalizationHelper localizedStringForKey:@"Tips"] message: [LocalizationHelper localizedStringForKey:@"%@", tipText] preferredStyle:UIAlertControllerStyleAlert];
@@ -1311,9 +1317,9 @@ BOOL isCustomResolution(CGSize res) {
break; break;
} }
if ([self hdrSupported]) { if (![self hdrSupported]) {
[self.hdrSwitch setOn:NO]; [self.hdrSwitch setOn:NO];
[self.hdrSwitch setEnabled:NO]; [self widget:self.hdrSwitch setEnabled:NO];
} }
else { else {
[self.hdrSwitch setOn:currentSettings.enableHdr]; [self.hdrSwitch setOn:currentSettings.enableHdr];
@@ -1654,13 +1660,21 @@ BOOL isCustomResolution(CGSize res) {
return 0; return 0;
} }
- (void) widget:(UISlider*)widget setEnabled:(bool)enabled{ - (void) widget:(UIView*)widget setEnabled:(bool)enabled{
[widget setEnabled:enabled]; if([widget isKindOfClass:[UISlider class]]){
if(enabled){ UISlider* widgetPtr = (UISlider* )widget;
widget.alpha = 1.0; [widgetPtr setEnabled:enabled];
[widget setValue:widget.value + 0.0001]; // this is for low iOS version (like iOS14), only setting this minor value change is able to make widget visibility clear if(enabled){
widgetPtr.alpha = 1.0;
[widgetPtr setValue:widgetPtr.value + 0.0001]; // this is for low iOS version (like iOS14), only setting this minor value change is able to make widget visibility clear
}
else widgetPtr.alpha = 0.5; // this is for updating widget visibility on low iOS version like mini5 ios14
}
if([widget isKindOfClass:[UISwitch class]]){
widget.userInteractionEnabled = enabled;
widget.alpha = enabled ? 1 : 0.5;
} }
else widget.alpha = 0.5; // this is for updating widget visibility on low iOS version like mini5 ios14
} }
/* /*
@@ -1903,7 +1917,7 @@ BOOL isCustomResolution(CGSize res) {
} }
- (bool)hdrSupported{ - (bool)hdrSupported{
return !VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC) || !(AVPlayer.availableHDRModes & AVPlayerHDRModeHDR10); return VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC) && (AVPlayer.availableHDRModes & AVPlayerHDRModeHDR10);
} }
- (void) updateBitrateText { - (void) updateBitrateText {