Merge branch 'ui-userprofiles-and-misc' of https://git.ryujinx.app/neo/ryujinx into ui-userprofiles-and-misc

merge-requests/173/head
_Neo_ 2025-10-25 15:11:33 +03:00
commit c3c6f36fea
22 changed files with 272 additions and 361 deletions

View File

@ -3,25 +3,25 @@
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally> <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageVersion Include="Avalonia" Version="11.0.13" /> <PackageVersion Include="Avalonia" Version="11.3.6" />
<PackageVersion Include="Avalonia.Controls.DataGrid" Version="11.0.13" /> <PackageVersion Include="Avalonia.Controls.DataGrid" Version="11.3.6" />
<PackageVersion Include="Avalonia.Desktop" Version="11.0.13" /> <PackageVersion Include="Avalonia.Desktop" Version="11.3.6" />
<PackageVersion Include="Avalonia.Diagnostics" Version="11.0.13" /> <PackageVersion Include="Avalonia.Diagnostics" Version="11.3.6" />
<PackageVersion Include="Avalonia.Markup.Xaml.Loader" Version="11.0.13" /> <PackageVersion Include="Avalonia.Markup.Xaml.Loader" Version="11.3.6" />
<PackageVersion Include="Avalonia.Svg" Version="11.0.0.19" /> <PackageVersion Include="Svg.Controls.Avalonia" Version="11.3.6.2" />
<PackageVersion Include="Avalonia.Svg.Skia" Version="11.0.0.19" /> <PackageVersion Include="Svg.Controls.Skia.Avalonia" Version="11.3.6.2" />
<PackageVersion Include="Microsoft.Build.Framework" Version="17.11.4" /> <PackageVersion Include="Microsoft.Build.Framework" Version="17.11.4" />
<PackageVersion Include="Microsoft.Build.Utilities.Core" Version="17.12.6" /> <PackageVersion Include="Microsoft.Build.Utilities.Core" Version="17.12.6" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" /> <PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
<PackageVersion Include="Projektanker.Icons.Avalonia" Version="9.4.0" /> <PackageVersion Include="Projektanker.Icons.Avalonia" Version="9.6.2" />
<PackageVersion Include="Projektanker.Icons.Avalonia.FontAwesome" Version="9.4.0"/> <PackageVersion Include="Projektanker.Icons.Avalonia.FontAwesome" Version="9.6.2"/>
<PackageVersion Include="Projektanker.Icons.Avalonia.MaterialDesign" Version="9.4.0"/> <PackageVersion Include="Projektanker.Icons.Avalonia.MaterialDesign" Version="9.6.2"/>
<PackageVersion Include="CommandLineParser" Version="2.9.1" /> <PackageVersion Include="CommandLineParser" Version="2.9.1" />
<PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.0"/> <PackageVersion Include="CommunityToolkit.Mvvm" Version="8.4.0"/>
<PackageVersion Include="Concentus" Version="2.2.2" /> <PackageVersion Include="Concentus" Version="2.2.2" />
<PackageVersion Include="DiscordRichPresence" Version="1.6.1.70" /> <PackageVersion Include="DiscordRichPresence" Version="1.6.1.70" />
<PackageVersion Include="DynamicData" Version="9.4.1" /> <PackageVersion Include="DynamicData" Version="9.4.1" />
<PackageVersion Include="FluentAvaloniaUI" Version="2.0.5" /> <PackageVersion Include="FluentAvaloniaUI.NoAnim" Version="2.4.0-build3" />
<PackageVersion Include="Humanizer" Version="2.14.1" /> <PackageVersion Include="Humanizer" Version="2.14.1" />
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" /> <PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" /> <PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />

View File

@ -34,7 +34,7 @@ namespace Ryujinx.HLE.Debugger
case ThreadBreakMessage { Context: { } ctx }: case ThreadBreakMessage { Context: { } ctx }:
DebugProcess.DebugStop(); DebugProcess.DebugStop();
GThread = CThread = ctx.ThreadUid; GThreadId = CThreadId = ctx.ThreadUid;
_breakHandlerEvent.Set(); _breakHandlerEvent.Set();
_commands.Processor.Reply($"T05thread:{ctx.ThreadUid:x};"); _commands.Processor.Reply($"T05thread:{ctx.ThreadUid:x};");
break; break;

View File

@ -46,18 +46,18 @@ namespace Ryujinx.HLE.Debugger
public string GetStackTrace() public string GetStackTrace()
{ {
if (GThread == null) if (GThreadId == null)
return "No thread selected\n"; return "No thread selected\n";
return Process?.Debugger?.GetGuestStackTrace(DebugProcess.GetThread(GThread.Value)) ?? "No application process found\n"; return Process?.Debugger?.GetGuestStackTrace(DebugProcess.GetThread(GThreadId.Value)) ?? "No application process found\n";
} }
public string GetRegisters() public string GetRegisters()
{ {
if (GThread == null) if (GThreadId == null)
return "No thread selected\n"; return "No thread selected\n";
return Process?.Debugger?.GetCpuRegisterPrintout(DebugProcess.GetThread(GThread.Value)) ?? "No application process found\n"; return Process?.Debugger?.GetCpuRegisterPrintout(DebugProcess.GetThread(GThreadId.Value)) ?? "No application process found\n";
} }
public string GetMinidump() public string GetMinidump()
@ -66,9 +66,9 @@ namespace Ryujinx.HLE.Debugger
return "No application process found\n"; return "No application process found\n";
if (kProcess.Debugger is not { } debugger) if (kProcess.Debugger is not { } debugger)
return $"Error getting minidump: debugger is null\n"; return "Error getting minidump: debugger is null\n";
var response = debugger.GetMinidump(); string response = debugger.GetMinidump();
Logger.Info?.Print(LogClass.GdbStub, response); Logger.Info?.Print(LogClass.GdbStub, response);
return response; return response;
@ -81,10 +81,8 @@ namespace Ryujinx.HLE.Debugger
if (Process is not { } kProcess) if (Process is not { } kProcess)
return "No application process found\n"; return "No application process found\n";
if (kProcess.Debugger is not { } debugger) return kProcess.Debugger?.GetProcessInfoPrintout()
return $"Error getting process info: debugger is null\n"; ?? "Error getting process info: debugger is null\n";
return debugger.GetProcessInfoPrintout();
} }
catch (Exception e) catch (Exception e)
{ {

View File

@ -1,9 +1,11 @@
using Gommon;
using Ryujinx.Common.Logging; using Ryujinx.Common.Logging;
using Ryujinx.HLE.Debugger.Gdb; using Ryujinx.HLE.Debugger.Gdb;
using Ryujinx.HLE.HOS.Kernel.Process; using Ryujinx.HLE.HOS.Kernel.Process;
using Ryujinx.HLE.HOS.Kernel.Threading; using Ryujinx.HLE.HOS.Kernel.Threading;
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Net.Sockets; using System.Net.Sockets;
using System.Threading; using System.Threading;
@ -32,8 +34,12 @@ namespace Ryujinx.HLE.Debugger
private bool _shuttingDown; private bool _shuttingDown;
private readonly ManualResetEventSlim _breakHandlerEvent = new(false); private readonly ManualResetEventSlim _breakHandlerEvent = new(false);
internal ulong? CThread; internal ulong? CThreadId;
internal ulong? GThread; internal ulong? GThreadId;
internal KThread CThread => CThreadId?.Into(DebugProcess.GetThread);
internal KThread GThread => GThreadId?.Into(DebugProcess.GetThread);
public readonly BreakpointManager BreakpointManager; public readonly BreakpointManager BreakpointManager;
@ -56,7 +62,7 @@ namespace Ryujinx.HLE.Debugger
internal KThread[] GetThreads() => DebugProcess.ThreadUids.Select(DebugProcess.GetThread).ToArray(); internal KThread[] GetThreads() => DebugProcess.ThreadUids.Select(DebugProcess.GetThread).ToArray();
internal bool IsProcess32Bit => DebugProcess.GetThread(GThread ?? DebugProcess.ThreadUids.First()).Context.IsAarch32; internal bool IsProcess32Bit => DebugProcess.GetThread(GThreadId ?? DebugProcess.ThreadUids.First()).Context.IsAarch32;
internal bool WriteRegister(IExecutionContext ctx, int registerId, StringStream ss) => internal bool WriteRegister(IExecutionContext ctx, int registerId, StringStream ss) =>
IsProcess32Bit IsProcess32Bit

View File

@ -181,7 +181,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
if (ss.ConsumeRemaining("fThreadInfo")) if (ss.ConsumeRemaining("fThreadInfo"))
{ {
Reply( Reply(
$"m{Debugger.DebugProcess.ThreadUids.Select(x => $"{x:x}").JoinToString(",")}"); $"m{DebugProcess.ThreadUids.Select(x => $"{x:x}").JoinToString(",")}");
break; break;
} }

View File

@ -37,33 +37,33 @@ namespace Ryujinx.HLE.Debugger.Gdb
{ {
// GDB is performing initial contact. Stop everything. // GDB is performing initial contact. Stop everything.
Debugger.DebugProcess.DebugStop(); Debugger.DebugProcess.DebugStop();
Debugger.GThread = Debugger.CThread = Debugger.DebugProcess.ThreadUids.First(); Debugger.GThreadId = Debugger.CThreadId = Debugger.DebugProcess.ThreadUids.First();
Processor.Reply($"T05thread:{Debugger.CThread:x};"); Processor.Reply($"T05thread:{Debugger.CThreadId:x};");
} }
internal void Interrupt() internal void Interrupt()
{ {
// GDB is requesting an interrupt. Stop everything. // GDB is requesting an interrupt. Stop everything.
Debugger.DebugProcess.DebugStop(); Debugger.DebugProcess.DebugStop();
if (Debugger.GThread == null || Debugger.GetThreads().All(x => x.ThreadUid != Debugger.GThread.Value)) if (Debugger.GThreadId == null || Debugger.GetThreads().All(x => x.ThreadUid != Debugger.GThreadId.Value))
{ {
Debugger.GThread = Debugger.CThread = Debugger.DebugProcess.ThreadUids.First(); Debugger.GThreadId = Debugger.CThreadId = Debugger.DebugProcess.ThreadUids.First();
} }
Processor.Reply($"T02thread:{Debugger.GThread:x};"); Processor.Reply($"T02thread:{Debugger.GThreadId:x};");
} }
internal void Continue(ulong? newPc) internal void Continue(ulong? newPc)
{ {
if (newPc.HasValue) if (newPc.HasValue)
{ {
if (Debugger.CThread == null) if (Debugger.CThreadId == null)
{ {
Processor.ReplyError(); Processor.ReplyError();
return; return;
} }
Debugger.DebugProcess.GetThread(Debugger.CThread.Value).Context.DebugPc = newPc.Value; Debugger.CThread.Context.DebugPc = newPc.Value;
} }
Debugger.DebugProcess.DebugContinue(); Debugger.DebugProcess.DebugContinue();
@ -78,13 +78,13 @@ namespace Ryujinx.HLE.Debugger.Gdb
internal void ReadRegisters() internal void ReadRegisters()
{ {
if (Debugger.GThread == null) if (Debugger.GThreadId == null)
{ {
Processor.ReplyError(); Processor.ReplyError();
return; return;
} }
IExecutionContext ctx = Debugger.DebugProcess.GetThread(Debugger.GThread.Value).Context; IExecutionContext ctx = Debugger.GThread.Context;
string registers = string.Empty; string registers = string.Empty;
if (Debugger.IsProcess32Bit) if (Debugger.IsProcess32Bit)
{ {
@ -106,13 +106,13 @@ namespace Ryujinx.HLE.Debugger.Gdb
internal void WriteRegisters(StringStream ss) internal void WriteRegisters(StringStream ss)
{ {
if (Debugger.GThread == null) if (Debugger.GThreadId == null)
{ {
Processor.ReplyError(); Processor.ReplyError();
return; return;
} }
IExecutionContext ctx = Debugger.DebugProcess.GetThread(Debugger.GThread.Value).Context; IExecutionContext ctx = Debugger.GThread.Context;
if (Debugger.IsProcess32Bit) if (Debugger.IsProcess32Bit)
{ {
for (int i = 0; i < GdbRegisters.Count32; i++) for (int i = 0; i < GdbRegisters.Count32; i++)
@ -162,11 +162,11 @@ namespace Ryujinx.HLE.Debugger.Gdb
switch (op) switch (op)
{ {
case 'c': case 'c':
Debugger.CThread = threadId; Debugger.CThreadId = threadId;
Processor.ReplyOK(); Processor.ReplyOK();
return; return;
case 'g': case 'g':
Debugger.GThread = threadId; Debugger.GThreadId = threadId;
Processor.ReplyOK(); Processor.ReplyOK();
return; return;
default: default:
@ -214,13 +214,13 @@ namespace Ryujinx.HLE.Debugger.Gdb
internal void ReadRegister(int gdbRegId) internal void ReadRegister(int gdbRegId)
{ {
if (Debugger.GThread == null) if (Debugger.GThreadId == null)
{ {
Processor.ReplyError(); Processor.ReplyError();
return; return;
} }
IExecutionContext ctx = Debugger.DebugProcess.GetThread(Debugger.GThread.Value).Context; IExecutionContext ctx = Debugger.GThread.Context;
string result = Debugger.ReadRegister(ctx, gdbRegId); string result = Debugger.ReadRegister(ctx, gdbRegId);
Processor.Reply(result != null, result); Processor.Reply(result != null, result);
@ -228,26 +228,26 @@ namespace Ryujinx.HLE.Debugger.Gdb
internal void WriteRegister(int gdbRegId, StringStream ss) internal void WriteRegister(int gdbRegId, StringStream ss)
{ {
if (Debugger.GThread == null) if (Debugger.GThreadId == null)
{ {
Processor.ReplyError(); Processor.ReplyError();
return; return;
} }
IExecutionContext ctx = Debugger.DebugProcess.GetThread(Debugger.GThread.Value).Context; Processor.Reply(
success: Debugger.WriteRegister(Debugger.GThread.Context, gdbRegId, ss) && ss.IsEmpty
Processor.Reply(Debugger.WriteRegister(ctx, gdbRegId, ss) && ss.IsEmpty); );
} }
internal void Step(ulong? newPc) internal void Step(ulong? newPc)
{ {
if (Debugger.CThread == null) if (Debugger.CThreadId == null)
{ {
Processor.ReplyError(); Processor.ReplyError();
return; return;
} }
KThread thread = Debugger.DebugProcess.GetThread(Debugger.CThread.Value); KThread thread = Debugger.CThread;
if (newPc.HasValue) if (newPc.HasValue)
{ {
@ -260,7 +260,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
} }
else else
{ {
Debugger.GThread = Debugger.CThread = thread.ThreadUid; Debugger.GThreadId = Debugger.CThreadId = thread.ThreadUid;
Processor.Reply($"T05thread:{thread.ThreadUid:x};"); Processor.Reply($"T05thread:{thread.ThreadUid:x};");
} }
} }
@ -314,7 +314,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
_ => VContAction.None _ => VContAction.None
}; };
// Note: We don't support signals yet. // TODO: Note: We don't support signals yet.
//ushort? signal = null; //ushort? signal = null;
if (cmd is 'C' or 'S') if (cmd is 'C' or 'S')
{ {
@ -323,11 +323,9 @@ namespace Ryujinx.HLE.Debugger.Gdb
// since that method advances the underlying string position // since that method advances the underlying string position
} }
ulong? threadId = null; ulong? threadId = stream.ConsumePrefix(":")
if (stream.ConsumePrefix(":")) ? stream.ReadRemainingAsThreadUid()
{ : null;
threadId = stream.ReadRemainingAsThreadUid();
}
if (threadId.HasValue) if (threadId.HasValue)
{ {
@ -393,7 +391,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
{ {
if (action.Action == VContAction.Step) if (action.Action == VContAction.Step)
{ {
Debugger.GThread = Debugger.CThread = threadUid; Debugger.GThreadId = Debugger.CThreadId = threadUid;
Processor.Reply($"T05thread:{threadUid:x};"); Processor.Reply($"T05thread:{threadUid:x};");
} }
} }

View File

@ -16,6 +16,8 @@ namespace Ryujinx.HLE.Debugger.Gdb
*/ */
private const uint FpcrMask = 0xfc1fffff; private const uint FpcrMask = 0xfc1fffff;
#region 64-bit
public static string ReadRegister64(this IExecutionContext state, int registerId) => public static string ReadRegister64(this IExecutionContext state, int registerId) =>
registerId switch registerId switch
{ {
@ -74,6 +76,10 @@ namespace Ryujinx.HLE.Debugger.Gdb
} }
} }
#endregion
#region 32-bit
public static string ReadRegister32(this IExecutionContext state, int registerId) public static string ReadRegister32(this IExecutionContext state, int registerId)
{ {
switch (registerId) switch (registerId)
@ -149,5 +155,7 @@ namespace Ryujinx.HLE.Debugger.Gdb
return false; return false;
} }
} }
#endregion
} }
} }

View File

@ -26,9 +26,7 @@ namespace Ryujinx.HLE.Debugger
public readonly string Command; public readonly string Command;
public CommandMessage(string cmd) public CommandMessage(string cmd)
{ => Command = cmd;
Command = cmd;
}
} }
public class ThreadBreakMessage : Message.IMarker public class ThreadBreakMessage : Message.IMarker

View File

@ -3,7 +3,7 @@ using System.IO;
namespace Ryujinx.HLE.Debugger namespace Ryujinx.HLE.Debugger
{ {
class RegisterInformation static class RegisterInformation
{ {
public static readonly Dictionary<string, string> Features = new() public static readonly Dictionary<string, string> Features = new()
{ {

View File

@ -889,7 +889,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
[Svc(1)] [Svc(1)]
public Result SetHeapSize([PointerSized] out ulong address, [PointerSized] ulong size) public Result SetHeapSize([PointerSized] out ulong address, [PointerSized] ulong size)
{ {
if ((size & 0xfffffffd001fffff) != 0) if ((size & 0xfffffffc001fffff) != 0)
{ {
address = 0; address = 0;

View File

@ -221,10 +221,7 @@ namespace Ryujinx.Ava
} }
// When you first load the program, copy to remember the path for the global configuration // When you first load the program, copy to remember the path for the global configuration
if (GlobalConfigurationPath == null) GlobalConfigurationPath ??= ConfigurationPath;
{
GlobalConfigurationPath = ConfigurationPath;
}
UseHardwareAcceleration = ConfigurationState.Instance.EnableHardwareAcceleration; UseHardwareAcceleration = ConfigurationState.Instance.EnableHardwareAcceleration;

View File

@ -51,10 +51,10 @@
<PackageReference Include="Avalonia.Diagnostics" Condition="'$(Configuration)'=='Debug'" /> <PackageReference Include="Avalonia.Diagnostics" Condition="'$(Configuration)'=='Debug'" />
<PackageReference Include="Avalonia.Controls.DataGrid" /> <PackageReference Include="Avalonia.Controls.DataGrid" />
<PackageReference Include="Avalonia.Markup.Xaml.Loader" /> <PackageReference Include="Avalonia.Markup.Xaml.Loader" />
<PackageReference Include="Avalonia.Svg" /> <PackageReference Include="Svg.Controls.Avalonia" />
<PackageReference Include="Avalonia.Svg.Skia" /> <PackageReference Include="Svg.Controls.Skia.Avalonia" />
<PackageReference Include="DynamicData" /> <PackageReference Include="DynamicData" />
<PackageReference Include="FluentAvaloniaUI" /> <PackageReference Include="FluentAvaloniaUI.NoAnim" />
<PackageReference Include="CommandLineParser" /> <PackageReference Include="CommandLineParser" />
<PackageReference Include="CommunityToolkit.Mvvm" /> <PackageReference Include="CommunityToolkit.Mvvm" />
<PackageReference Include="DiscordRichPresence" /> <PackageReference Include="DiscordRichPresence" />

View File

@ -318,9 +318,9 @@ namespace Ryujinx.Ava.Systems.AppLibrary
} }
catch (HorizonResultException) catch (HorizonResultException)
{ {
foreach (DirectoryEntryEx entry in controlFs.EnumerateEntries("/", "*")) foreach (DirectoryEntryEx entry in controlFs.EnumerateEntries("/", "*", SearchOptions.Default))
{ {
if (entry.Name == "control.nacp") if (entry.Name == "control.nacp" || entry.Type == DirectoryEntryType.Directory)
{ {
continue; continue;
} }

View File

@ -56,6 +56,7 @@ namespace Ryujinx.Ava.Systems.Configuration
Logger.EnableFileLog.Value = cff.EnableFileLog; Logger.EnableFileLog.Value = cff.EnableFileLog;
Logger.EnableDebug.Value = cff.LoggingEnableDebug; Logger.EnableDebug.Value = cff.LoggingEnableDebug;
Logger.EnableAvaloniaLog.Value = cff.LoggingEnableAvalonia;
Logger.EnableStub.Value = cff.LoggingEnableStub; Logger.EnableStub.Value = cff.LoggingEnableStub;
Logger.EnableInfo.Value = cff.LoggingEnableInfo; Logger.EnableInfo.Value = cff.LoggingEnableInfo;
Logger.EnableWarn.Value = cff.LoggingEnableWarn; Logger.EnableWarn.Value = cff.LoggingEnableWarn;

View File

@ -35,18 +35,17 @@
Width="350" Width="350"
ToolTip.Tip="{ext:Locale AudioBackendTooltip}" ToolTip.Tip="{ext:Locale AudioBackendTooltip}"
HorizontalContentAlignment="Left"> HorizontalContentAlignment="Left">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemAudioBackendDummy}" /> Content="{ext:Locale SettingsTabSystemAudioBackendDummy}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem IsEnabled="{Binding IsOpenAlEnabled}"> IsEnabled="{Binding IsOpenAlEnabled}"
<TextBlock Text="{ext:Locale SettingsTabSystemAudioBackendOpenAL}" /> Content="{ext:Locale SettingsTabSystemAudioBackendOpenAL}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem IsEnabled="{Binding IsSoundIoEnabled}"> IsEnabled="{Binding IsSoundIoEnabled}"
<TextBlock Text="{ext:Locale SettingsTabSystemAudioBackendSoundIO}" /> Content="{ext:Locale SettingsTabSystemAudioBackendSoundIO}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem IsEnabled="{Binding IsSDL2Enabled}"> IsEnabled="{Binding IsSDL2Enabled}"
<TextBlock Text="{ext:Locale SettingsTabSystemAudioBackendSDL2}" /> Content="{ext:Locale SettingsTabSystemAudioBackendSDL2}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
<StackPanel Margin="10,0,0,0" Orientation="Horizontal"> <StackPanel Margin="10,0,0,0" Orientation="Horizontal">

View File

@ -55,19 +55,14 @@
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
Width="350"> Width="350">
<ComboBoxItem <ComboBoxItem
ToolTip.Tip="{ext:Locale MemoryManagerSoftwareTooltip}"> ToolTip.Tip="{ext:Locale MemoryManagerSoftwareTooltip}"
<TextBlock Content="{ext:Locale SettingsTabSystemMemoryManagerModeSoftware}" />
Text="{ext:Locale SettingsTabSystemMemoryManagerModeSoftware}" />
</ComboBoxItem>
<ComboBoxItem <ComboBoxItem
ToolTip.Tip="{ext:Locale MemoryManagerHostTooltip}"> ToolTip.Tip="{ext:Locale MemoryManagerHostTooltip}"
<TextBlock Text="{ext:Locale SettingsTabSystemMemoryManagerModeHost}" /> Content="{ext:Locale SettingsTabSystemMemoryManagerModeHost}" />
</ComboBoxItem>
<ComboBoxItem <ComboBoxItem
ToolTip.Tip="{ext:Locale MemoryManagerUnsafeTooltip}"> ToolTip.Tip="{ext:Locale MemoryManagerUnsafeTooltip}"
<TextBlock Content="{ext:Locale SettingsTabSystemMemoryManagerModeHostUnchecked}" />
Text="{ext:Locale SettingsTabSystemMemoryManagerModeHostUnchecked}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
<CheckBox IsChecked="{Binding UseHypervisor}" <CheckBox IsChecked="{Binding UseHypervisor}"

View File

@ -37,12 +37,12 @@
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
ToolTip.Tip="{ext:Locale SettingsTabGraphicsBackendTooltip}" ToolTip.Tip="{ext:Locale SettingsTabGraphicsBackendTooltip}"
SelectedIndex="{Binding GraphicsBackendIndex}"> SelectedIndex="{Binding GraphicsBackendIndex}">
<ComboBoxItem IsVisible="{Binding IsVulkanAvailable}"> <ComboBoxItem
<TextBlock Text="Vulkan" /> IsVisible="{Binding IsVulkanAvailable}"
</ComboBoxItem> Content="Vulkan" />
<ComboBoxItem IsEnabled="{Binding IsOpenGLAvailable}"> <ComboBoxItem
<TextBlock Text="OpenGL" /> IsEnabled="{Binding IsOpenGLAvailable}"
</ComboBoxItem> Content="OpenGL" />
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal" IsVisible="{Binding IsVulkanSelected}"> <StackPanel Orientation="Horizontal" IsVisible="{Binding IsVulkanSelected}">
@ -65,15 +65,12 @@
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
ToolTip.Tip="{ext:Locale GalThreadingTooltip}" ToolTip.Tip="{ext:Locale GalThreadingTooltip}"
SelectedIndex="{Binding GraphicsBackendMultithreadingIndex}"> SelectedIndex="{Binding GraphicsBackendMultithreadingIndex}">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale CommonAuto}" /> Content="{ext:Locale CommonAuto}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale CommonOff}" />
<TextBlock Text="{ext:Locale CommonOff}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale CommonOn}" />
<ComboBoxItem>
<TextBlock Text="{ext:Locale CommonOn}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
@ -108,21 +105,16 @@
Width="350" Width="350"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
ToolTip.Tip="{ext:Locale ResolutionScaleTooltip}"> ToolTip.Tip="{ext:Locale ResolutionScaleTooltip}">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabGraphicsResolutionScaleNative}" /> Content="{ext:Locale SettingsTabGraphicsResolutionScaleNative}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabGraphicsResolutionScale2x}" />
<TextBlock Text="{ext:Locale SettingsTabGraphicsResolutionScale2x}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabGraphicsResolutionScale3x}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabGraphicsResolutionScale3x}" /> Content="{ext:Locale SettingsTabGraphicsResolutionScale4x}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabGraphicsResolutionScaleCustom}" />
<TextBlock Text="{ext:Locale SettingsTabGraphicsResolutionScale4x}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabGraphicsResolutionScaleCustom}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
<ui:NumberBox <ui:NumberBox
Margin="10,0,0,0" Margin="10,0,0,0"
@ -150,24 +142,18 @@
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
ToolTip.Tip="{ext:Locale GraphicsAATooltip}" ToolTip.Tip="{ext:Locale GraphicsAATooltip}"
SelectedIndex="{Binding AntiAliasingEffect}"> SelectedIndex="{Binding AntiAliasingEffect}">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabLoggingGraphicsBackendLogLevelNone}" /> Content="{ext:Locale SettingsTabLoggingGraphicsBackendLogLevelNone}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="FXAA" />
<TextBlock Text="FXAA" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SmaaLow}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SmaaLow}" /> Content="{ext:Locale SmaaMedium}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SmaaHigh}" />
<TextBlock Text="{ext:Locale SmaaMedium}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SmaaUltra}" />
<ComboBoxItem>
<TextBlock Text="{ext:Locale SmaaHigh}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SmaaUltra}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
@ -184,18 +170,14 @@
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
ToolTip.Tip="{ext:Locale GraphicsScalingFilterTooltip}" ToolTip.Tip="{ext:Locale GraphicsScalingFilterTooltip}"
SelectedIndex="{Binding ScalingFilter}"> SelectedIndex="{Binding ScalingFilter}">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale GraphicsScalingFilterBilinear}" /> Content="{ext:Locale GraphicsScalingFilterBilinear}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale GraphicsScalingFilterNearest}" />
<TextBlock Text="{ext:Locale GraphicsScalingFilterNearest}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale GraphicsScalingFilterFsr}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale GraphicsScalingFilterFsr}" /> Content="{ext:Locale GraphicsScalingFilterArea}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale GraphicsScalingFilterArea}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
<controls:SliderScroll Value="{Binding ScalingFilterLevel}" <controls:SliderScroll Value="{Binding ScalingFilterLevel}"
ToolTip.Tip="{ext:Locale GraphicsScalingFilterLevelTooltip}" ToolTip.Tip="{ext:Locale GraphicsScalingFilterLevelTooltip}"
@ -226,23 +208,16 @@
Width="350" Width="350"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
ToolTip.Tip="{ext:Locale AnisotropyTooltip}"> ToolTip.Tip="{ext:Locale AnisotropyTooltip}">
<ComboBoxItem> <ComboBoxItem
<TextBlock Content="{ext:Locale SettingsTabGraphicsAnisotropicFilteringAuto}" />
Text="{ext:Locale SettingsTabGraphicsAnisotropicFilteringAuto}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabGraphicsAnisotropicFiltering2x}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabGraphicsAnisotropicFiltering2x}" /> Content="{ext:Locale SettingsTabGraphicsAnisotropicFiltering4x}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabGraphicsAnisotropicFiltering8x}" />
<TextBlock Text="{ext:Locale SettingsTabGraphicsAnisotropicFiltering4x}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabGraphicsAnisotropicFiltering16x}" />
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabGraphicsAnisotropicFiltering8x}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock
Text="{ext:Locale SettingsTabGraphicsAnisotropicFiltering16x}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
@ -254,24 +229,18 @@
Width="350" Width="350"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
ToolTip.Tip="{ext:Locale AspectRatioTooltip}"> ToolTip.Tip="{ext:Locale AspectRatioTooltip}">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabGraphicsAspectRatio4x3}" /> Content="{ext:Locale SettingsTabGraphicsAspectRatio4x3}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabGraphicsAspectRatio16x9}" />
<TextBlock Text="{ext:Locale SettingsTabGraphicsAspectRatio16x9}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabGraphicsAspectRatio16x10}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabGraphicsAspectRatio16x10}" /> Content="{ext:Locale SettingsTabGraphicsAspectRatio21x9}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabGraphicsAspectRatio32x9}" />
<TextBlock Text="{ext:Locale SettingsTabGraphicsAspectRatio21x9}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabGraphicsAspectRatioStretch}" />
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabGraphicsAspectRatio32x9}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabGraphicsAspectRatioStretch}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>

View File

@ -101,19 +101,14 @@
Width="150" Width="150"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
ToolTip.Tip="{ext:Locale OpenGlLogLevel}"> ToolTip.Tip="{ext:Locale OpenGlLogLevel}">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabLoggingGraphicsBackendLogLevelNone}" /> Content="{ext:Locale SettingsTabLoggingGraphicsBackendLogLevelNone}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabLoggingGraphicsBackendLogLevelError}" />
<TextBlock Text="{ext:Locale SettingsTabLoggingGraphicsBackendLogLevelError}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabLoggingGraphicsBackendLogLevelPerformance}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Content="{ext:Locale SettingsTabLoggingGraphicsBackendLogLevelAll}" />
Text="{ext:Locale SettingsTabLoggingGraphicsBackendLogLevelPerformance}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabLoggingGraphicsBackendLogLevelAll}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>

View File

@ -33,15 +33,12 @@
ToolTip.Tip="{ext:Locale MultiplayerModeTooltip}" ToolTip.Tip="{ext:Locale MultiplayerModeTooltip}"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
Width="250"> Width="250">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale MultiplayerModeDisabled}" /> Content="{ext:Locale MultiplayerModeDisabled}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale MultiplayerModeLdnRyu}" />
<TextBlock Text="{ext:Locale MultiplayerModeLdnRyu}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale MultiplayerModeLdnMitm}" />
<ComboBoxItem>
<TextBlock Text="{ext:Locale MultiplayerModeLdnMitm}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
<CheckBox Margin="10,0,0,0" IsChecked="{Binding DisableP2P}"> <CheckBox Margin="10,0,0,0" IsChecked="{Binding DisableP2P}">
<TextBlock Text="{ext:Locale MultiplayerDisableP2P}" <TextBlock Text="{ext:Locale MultiplayerDisableP2P}"

View File

@ -42,27 +42,20 @@
SelectedIndex="{Binding Region}" SelectedIndex="{Binding Region}"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
Width="350"> Width="350">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemSystemRegionJapan}" /> Content="{ext:Locale SettingsTabSystemSystemRegionJapan}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemRegionUSA}" />
<TextBlock Text="{ext:Locale SettingsTabSystemSystemRegionUSA}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemRegionEurope}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemSystemRegionEurope}" /> Content="{ext:Locale SettingsTabSystemSystemRegionAustralia}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemRegionChina}" />
<TextBlock Text="{ext:Locale SettingsTabSystemSystemRegionAustralia}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemRegionKorea}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemSystemRegionChina}" /> Content="{ext:Locale SettingsTabSystemSystemRegionTaiwan}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabSystemSystemRegionKorea}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabSystemSystemRegionTaiwan}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
<StackPanel <StackPanel
@ -76,60 +69,42 @@
SelectedIndex="{Binding Language}" SelectedIndex="{Binding Language}"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
Width="350"> Width="350">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageJapanese}" /> Content="{ext:Locale SettingsTabSystemSystemLanguageJapanese}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemLanguageAmericanEnglish}" />
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageAmericanEnglish}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemLanguageFrench}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageFrench}" /> Content="{ext:Locale SettingsTabSystemSystemLanguageGerman}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemLanguageItalian}" />
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageGerman}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemLanguageSpanish}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageItalian}" /> Content="{ext:Locale SettingsTabSystemSystemLanguageChinese}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemLanguageKorean}" />
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageSpanish}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemLanguageDutch}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageChinese}" /> Content="{ext:Locale SettingsTabSystemSystemLanguagePortuguese}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemLanguageRussian}" />
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageKorean}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemLanguageTaiwanese}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageDutch}" /> Content="{ext:Locale SettingsTabSystemSystemLanguageBritishEnglish}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemLanguageCanadianFrench}" />
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguagePortuguese}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemLanguageLatinAmericanSpanish}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageRussian}" /> Content="{ext:Locale SettingsTabSystemSystemLanguageSimplifiedChinese}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemLanguageTraditionalChinese}" />
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageTaiwanese}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabSystemSystemLanguageBrazilianPortuguese}" />
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageBritishEnglish}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageCanadianFrench}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageLatinAmericanSpanish}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageSimplifiedChinese}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageTraditionalChinese}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabSystemSystemLanguageBrazilianPortuguese}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
<StackPanel <StackPanel
@ -208,15 +183,12 @@
ToolTip.Tip="{ext:Locale SettingsTabSystemVSyncModeTooltipCustom}" ToolTip.Tip="{ext:Locale SettingsTabSystemVSyncModeTooltipCustom}"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
Width="350"> Width="350">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemVSyncModeSwitch}" /> Content="{ext:Locale SettingsTabSystemVSyncModeSwitch}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabSystemVSyncModeUnbounded}" />
<TextBlock Text="{ext:Locale SettingsTabSystemVSyncModeUnbounded}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabSystemVSyncModeCustom}" />
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabSystemVSyncModeCustom}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
<ComboBox <ComboBox
IsVisible="{Binding !EnableCustomVSyncInterval}" IsVisible="{Binding !EnableCustomVSyncInterval}"
@ -224,12 +196,10 @@
ToolTip.Tip="{ext:Locale SettingsTabSystemVSyncModeTooltip}" ToolTip.Tip="{ext:Locale SettingsTabSystemVSyncModeTooltip}"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
Width="350"> Width="350">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemVSyncModeSwitch}" /> Content="{ext:Locale SettingsTabSystemVSyncModeSwitch}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabSystemVSyncModeUnbounded}" />
<TextBlock Text="{ext:Locale SettingsTabSystemVSyncModeUnbounded}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
<StackPanel IsVisible="{Binding EnableCustomVSyncInterval}" <StackPanel IsVisible="{Binding EnableCustomVSyncInterval}"
@ -288,18 +258,14 @@
ToolTip.Tip="{ext:Locale DRamTooltip}" ToolTip.Tip="{ext:Locale DRamTooltip}"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
Width="350"> Width="350">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemDramSize4GiB}" /> Content="{ext:Locale SettingsTabSystemDramSize4GiB}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabSystemDramSize6GiB}" />
<TextBlock Text="{ext:Locale SettingsTabSystemDramSize6GiB}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabSystemDramSize8GiB}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabSystemDramSize8GiB}" /> Content="{ext:Locale SettingsTabSystemDramSize12GiB}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabSystemDramSize12GiB}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
<StackPanel <StackPanel

View File

@ -71,22 +71,16 @@
<ComboBox SelectedIndex="{Binding FocusLostActionType}" <ComboBox SelectedIndex="{Binding FocusLostActionType}"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
MinWidth="100"> MinWidth="100">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabGeneralFocusLossTypeDoNothing}" /> Content="{ext:Locale SettingsTabGeneralFocusLossTypeDoNothing}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabGeneralFocusLossTypeBlockInput}" />
<TextBlock Text="{ext:Locale SettingsTabGeneralFocusLossTypeBlockInput}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabGeneralFocusLossTypeMuteAudio}" />
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale SettingsTabGeneralFocusLossTypeMuteAudio}" /> Content="{ext:Locale SettingsTabGeneralFocusLossTypeBlockInputAndMuteAudio}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabGeneralFocusLossTypePauseEmulation}" />
<TextBlock
Text="{ext:Locale SettingsTabGeneralFocusLossTypeBlockInputAndMuteAudio}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabGeneralFocusLossTypePauseEmulation}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
<StackPanel <StackPanel
@ -100,16 +94,12 @@
<ComboBox SelectedIndex="{Binding UpdateCheckerType}" <ComboBox SelectedIndex="{Binding UpdateCheckerType}"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
MinWidth="100"> MinWidth="100">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale CommonOff}" /> Content="{ext:Locale CommonOff}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabGeneralCheckUpdatesOnLaunchPromptAtStartup}" />
<TextBlock <ComboBoxItem
Text="{ext:Locale SettingsTabGeneralCheckUpdatesOnLaunchPromptAtStartup}" /> Content="{ext:Locale SettingsTabGeneralCheckUpdatesOnLaunchBackground}" />
</ComboBoxItem>
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabGeneralCheckUpdatesOnLaunchBackground}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
<TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}" /> <TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}" />
</StackPanel> </StackPanel>
@ -122,15 +112,12 @@
<ComboBox SelectedIndex="{Binding HideCursor}" <ComboBox SelectedIndex="{Binding HideCursor}"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
MinWidth="100"> MinWidth="100">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale Never}" /> Content="{ext:Locale Never}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabGeneralHideCursorOnIdle}" />
<TextBlock Text="{ext:Locale SettingsTabGeneralHideCursorOnIdle}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabGeneralHideCursorAlways}" />
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabGeneralHideCursorAlways}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
</StackPanel> </StackPanel>
<StackPanel <StackPanel
@ -145,15 +132,12 @@
<ComboBox SelectedIndex="{Binding BaseStyleIndex}" <ComboBox SelectedIndex="{Binding BaseStyleIndex}"
HorizontalContentAlignment="Left" HorizontalContentAlignment="Left"
MinWidth="100"> MinWidth="100">
<ComboBoxItem> <ComboBoxItem
<TextBlock Text="{ext:Locale CommonAuto}" /> Content="{ext:Locale CommonAuto}" />
</ComboBoxItem> <ComboBoxItem
<ComboBoxItem> Content="{ext:Locale SettingsTabGeneralThemeLight}" />
<TextBlock Text="{ext:Locale SettingsTabGeneralThemeLight}" /> <ComboBoxItem
</ComboBoxItem> Content="{ext:Locale SettingsTabGeneralThemeDark}" />
<ComboBoxItem>
<TextBlock Text="{ext:Locale SettingsTabGeneralThemeDark}" />
</ComboBoxItem>
</ComboBox> </ComboBox>
<TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}" /> <TextBlock Classes="globalConfigMarker" IsVisible="{Binding IsGameTitleNotNull}" />
</StackPanel> </StackPanel>