aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Ryujinx/Input/GTK3/GTK3Keyboard.cs5
-rw-r--r--src/Ryujinx/Input/GTK3/GTK3KeyboardDriver.cs7
-rw-r--r--src/Ryujinx/Input/GTK3/GTK3Mouse.cs3
-rw-r--r--src/Ryujinx/Input/GTK3/GTK3MouseDriver.cs26
-rw-r--r--src/Ryujinx/Modules/Updater/UpdateDialog.cs28
-rw-r--r--src/Ryujinx/Modules/Updater/Updater.cs192
-rw-r--r--src/Ryujinx/Program.cs35
-rw-r--r--src/Ryujinx/Ui/Applet/ErrorAppletDialog.cs4
-rw-r--r--src/Ryujinx/Ui/Applet/GtkDynamicTextInputHandler.cs16
-rw-r--r--src/Ryujinx/Ui/Applet/GtkHostUiHandler.cs52
-rw-r--r--src/Ryujinx/Ui/Applet/GtkHostUiTheme.cs12
-rw-r--r--src/Ryujinx/Ui/Applet/SwkbdAppletDialog.cs18
-rw-r--r--src/Ryujinx/Ui/Helper/MetalHelper.cs31
-rw-r--r--src/Ryujinx/Ui/Helper/ThemeHelper.cs6
-rw-r--r--src/Ryujinx/Ui/MainWindow.cs539
-rw-r--r--src/Ryujinx/Ui/OpenGLRenderer.cs (renamed from src/Ryujinx/Ui/GLRenderer.cs)11
-rw-r--r--src/Ryujinx/Ui/OpenToolkitBindingsContext.cs2
-rw-r--r--src/Ryujinx/Ui/RendererWidgetBase.cs57
-rw-r--r--src/Ryujinx/Ui/SPBOpenGLContext.cs4
-rw-r--r--src/Ryujinx/Ui/StatusUpdatedEventArgs.cs20
-rw-r--r--src/Ryujinx/Ui/VulkanRenderer.cs (renamed from src/Ryujinx/Ui/VKRenderer.cs)4
-rw-r--r--src/Ryujinx/Ui/Widgets/GameTableContextMenu.Designer.cs38
-rw-r--r--src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs289
-rw-r--r--src/Ryujinx/Ui/Widgets/GtkDialog.cs20
-rw-r--r--src/Ryujinx/Ui/Widgets/GtkInputDialog.cs16
-rw-r--r--src/Ryujinx/Ui/Widgets/ProfileDialog.cs4
-rw-r--r--src/Ryujinx/Ui/Widgets/UserErrorDialog.cs48
-rw-r--r--src/Ryujinx/Ui/Windows/AboutWindow.Designer.cs216
-rw-r--r--src/Ryujinx/Ui/Windows/AboutWindow.cs4
-rw-r--r--src/Ryujinx/Ui/Windows/AmiiboWindow.Designer.cs78
-rw-r--r--src/Ryujinx/Ui/Windows/AmiiboWindow.cs60
-rw-r--r--src/Ryujinx/Ui/Windows/AvatarWindow.cs241
-rw-r--r--src/Ryujinx/Ui/Windows/CheatWindow.cs17
-rw-r--r--src/Ryujinx/Ui/Windows/ControllerWindow.cs788
-rw-r--r--src/Ryujinx/Ui/Windows/DlcWindow.cs117
-rw-r--r--src/Ryujinx/Ui/Windows/SettingsWindow.cs388
-rw-r--r--src/Ryujinx/Ui/Windows/TitleUpdateWindow.cs107
-rw-r--r--src/Ryujinx/Ui/Windows/UserProfilesManagerWindow.Designer.cs135
-rw-r--r--src/Ryujinx/Ui/Windows/UserProfilesManagerWindow.cs61
39 files changed, 1880 insertions, 1819 deletions
diff --git a/src/Ryujinx/Input/GTK3/GTK3Keyboard.cs b/src/Ryujinx/Input/GTK3/GTK3Keyboard.cs
index ca3ff32f..16bef39b 100644
--- a/src/Ryujinx/Input/GTK3/GTK3Keyboard.cs
+++ b/src/Ryujinx/Input/GTK3/GTK3Keyboard.cs
@@ -25,7 +25,7 @@ namespace Ryujinx.Input.GTK3
private readonly GTK3KeyboardDriver _driver;
private StandardKeyboardInputConfig _configuration;
- private List<ButtonMappingEntry> _buttonsUserMapping;
+ private readonly List<ButtonMappingEntry> _buttonsUserMapping;
public GTK3Keyboard(GTK3KeyboardDriver driver, string id, string name)
{
@@ -48,6 +48,7 @@ namespace Ryujinx.Input.GTK3
public void Dispose()
{
// No operations
+ GC.SuppressFinalize(this);
}
public KeyboardStateSnapshot GetKeyboardStateSnapshot()
@@ -87,7 +88,7 @@ namespace Ryujinx.Input.GTK3
stickX -= 1;
}
- OpenTK.Mathematics.Vector2 stick = new OpenTK.Mathematics.Vector2(stickX, stickY);
+ OpenTK.Mathematics.Vector2 stick = new(stickX, stickY);
stick.NormalizeFast();
diff --git a/src/Ryujinx/Input/GTK3/GTK3KeyboardDriver.cs b/src/Ryujinx/Input/GTK3/GTK3KeyboardDriver.cs
index 10c092fe..ae249c27 100644
--- a/src/Ryujinx/Input/GTK3/GTK3KeyboardDriver.cs
+++ b/src/Ryujinx/Input/GTK3/GTK3KeyboardDriver.cs
@@ -9,7 +9,7 @@ namespace Ryujinx.Input.GTK3
public class GTK3KeyboardDriver : IGamepadDriver
{
private readonly Widget _widget;
- private HashSet<GtkKey> _pressedKeys;
+ private readonly HashSet<GtkKey> _pressedKeys;
public GTK3KeyboardDriver(Widget widget)
{
@@ -28,13 +28,13 @@ namespace Ryujinx.Input.GTK3
public event Action<string> OnGamepadConnected
{
- add { }
+ add { }
remove { }
}
public event Action<string> OnGamepadDisconnected
{
- add { }
+ add { }
remove { }
}
@@ -49,6 +49,7 @@ namespace Ryujinx.Input.GTK3
public void Dispose()
{
+ GC.SuppressFinalize(this);
Dispose(true);
}
diff --git a/src/Ryujinx/Input/GTK3/GTK3Mouse.cs b/src/Ryujinx/Input/GTK3/GTK3Mouse.cs
index 836c2bf4..0ab817ec 100644
--- a/src/Ryujinx/Input/GTK3/GTK3Mouse.cs
+++ b/src/Ryujinx/Input/GTK3/GTK3Mouse.cs
@@ -83,7 +83,8 @@ namespace Ryujinx.Input.GTK3
public void Dispose()
{
+ GC.SuppressFinalize(this);
_driver = null;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Input/GTK3/GTK3MouseDriver.cs b/src/Ryujinx/Input/GTK3/GTK3MouseDriver.cs
index df37e4f4..5962bcb2 100644
--- a/src/Ryujinx/Input/GTK3/GTK3MouseDriver.cs
+++ b/src/Ryujinx/Input/GTK3/GTK3MouseDriver.cs
@@ -12,18 +12,18 @@ namespace Ryujinx.Input.GTK3
private bool _isDisposed;
public bool[] PressedButtons { get; }
-
+
public Vector2 CurrentPosition { get; private set; }
- public Vector2 Scroll{ get; private set; }
+ public Vector2 Scroll { get; private set; }
public GTK3MouseDriver(Widget parent)
{
_widget = parent;
- _widget.MotionNotifyEvent += Parent_MotionNotifyEvent;
- _widget.ButtonPressEvent += Parent_ButtonPressEvent;
+ _widget.MotionNotifyEvent += Parent_MotionNotifyEvent;
+ _widget.ButtonPressEvent += Parent_ButtonPressEvent;
_widget.ButtonReleaseEvent += Parent_ButtonReleaseEvent;
- _widget.ScrollEvent += Parent_ScrollEvent;
+ _widget.ScrollEvent += Parent_ScrollEvent;
PressedButtons = new bool[(int)MouseButton.Count];
}
@@ -58,7 +58,7 @@ namespace Ryujinx.Input.GTK3
public bool IsButtonPressed(MouseButton button)
{
- return PressedButtons[(int) button];
+ return PressedButtons[(int)button];
}
public Size GetClientSize()
@@ -67,21 +67,21 @@ namespace Ryujinx.Input.GTK3
}
public string DriverName => "GTK3";
-
+
public event Action<string> OnGamepadConnected
{
- add { }
+ add { }
remove { }
}
public event Action<string> OnGamepadDisconnected
{
- add { }
+ add { }
remove { }
}
- public ReadOnlySpan<string> GamepadsIds => new[] {"0"};
-
+ public ReadOnlySpan<string> GamepadsIds => new[] { "0" };
+
public IGamepad GetGamepad(string id)
{
return new GTK3Mouse(this);
@@ -94,6 +94,8 @@ namespace Ryujinx.Input.GTK3
return;
}
+ GC.SuppressFinalize(this);
+
_isDisposed = true;
_widget.MotionNotifyEvent -= Parent_MotionNotifyEvent;
@@ -103,4 +105,4 @@ namespace Ryujinx.Input.GTK3
_widget = null;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Modules/Updater/UpdateDialog.cs b/src/Ryujinx/Modules/Updater/UpdateDialog.cs
index e0a257fd..69563437 100644
--- a/src/Ryujinx/Modules/Updater/UpdateDialog.cs
+++ b/src/Ryujinx/Modules/Updater/UpdateDialog.cs
@@ -12,17 +12,17 @@ namespace Ryujinx.Modules
{
public class UpdateDialog : Gtk.Window
{
-#pragma warning disable CS0649, IDE0044
- [Builder.Object] public Label MainText;
- [Builder.Object] public Label SecondaryText;
+#pragma warning disable CS0649, IDE0044 // Field is never assigned to, Add readonly modifier
+ [Builder.Object] public Label MainText;
+ [Builder.Object] public Label SecondaryText;
[Builder.Object] public LevelBar ProgressBar;
- [Builder.Object] public Button YesButton;
- [Builder.Object] public Button NoButton;
+ [Builder.Object] public Button YesButton;
+ [Builder.Object] public Button NoButton;
#pragma warning restore CS0649, IDE0044
private readonly MainWindow _mainWindow;
- private readonly string _buildUrl;
- private bool _restartQuery;
+ private readonly string _buildUrl;
+ private bool _restartQuery;
public UpdateDialog(MainWindow mainWindow, Version newVersion, string buildUrl) : this(new Builder("Ryujinx.Modules.Updater.UpdateDialog.glade"), mainWindow, newVersion, buildUrl) { }
@@ -31,16 +31,16 @@ namespace Ryujinx.Modules
builder.Autoconnect(this);
_mainWindow = mainWindow;
- _buildUrl = buildUrl;
+ _buildUrl = buildUrl;
Icon = new Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png");
- MainText.Text = "Do you want to update Ryujinx to the latest version?";
+ MainText.Text = "Do you want to update Ryujinx to the latest version?";
SecondaryText.Text = $"{Program.Version} -> {newVersion}";
ProgressBar.Hide();
YesButton.Clicked += YesButton_Clicked;
- NoButton.Clicked += NoButton_Clicked;
+ NoButton.Clicked += NoButton_Clicked;
}
private void YesButton_Clicked(object sender, EventArgs args)
@@ -52,7 +52,7 @@ namespace Ryujinx.Modules
ProcessStartInfo processStart = new(ryuName)
{
UseShellExecute = true,
- WorkingDirectory = ReleaseInformation.GetBaseApplicationDirectory()
+ WorkingDirectory = ReleaseInformation.GetBaseApplicationDirectory(),
};
foreach (string argument in CommandLineState.Arguments)
@@ -74,7 +74,7 @@ namespace Ryujinx.Modules
ProgressBar.Show();
SecondaryText.Text = "";
- _restartQuery = true;
+ _restartQuery = true;
Updater.UpdateRyujinx(this, _buildUrl);
}
@@ -85,10 +85,10 @@ namespace Ryujinx.Modules
Updater.Running = false;
_mainWindow.Window.Functions = WMFunction.All;
- _mainWindow.ExitMenuItem.Sensitive = true;
+ _mainWindow.ExitMenuItem.Sensitive = true;
_mainWindow.UpdateMenuItem.Sensitive = true;
Dispose();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Modules/Updater/Updater.cs b/src/Ryujinx/Modules/Updater/Updater.cs
index 344edf9e..f8ce4c0b 100644
--- a/src/Ryujinx/Modules/Updater/Updater.cs
+++ b/src/Ryujinx/Modules/Updater/Updater.cs
@@ -24,28 +24,28 @@ namespace Ryujinx.Modules
{
public static class Updater
{
- private const string GitHubApiURL = "https://api.github.com";
+ private const string GitHubApiUrl = "https://api.github.com";
private const int ConnectionCount = 4;
internal static bool Running;
- private static readonly string HomeDir = AppDomain.CurrentDomain.BaseDirectory;
- private static readonly string UpdateDir = Path.Combine(Path.GetTempPath(), "Ryujinx", "update");
- private static readonly string UpdatePublishDir = Path.Combine(UpdateDir, "publish");
+ private static readonly string _homeDir = AppDomain.CurrentDomain.BaseDirectory;
+ private static readonly string _updateDir = Path.Combine(Path.GetTempPath(), "Ryujinx", "update");
+ private static readonly string _updatePublishDir = Path.Combine(_updateDir, "publish");
private static string _buildVer;
private static string _platformExt;
private static string _buildUrl;
- private static long _buildSize;
+ private static long _buildSize;
- private static readonly GithubReleasesJsonSerializerContext SerializerContext = new(JsonHelper.GetDefaultSerializerOptions());
+ private static readonly GithubReleasesJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions());
// On Windows, GtkSharp.Dependencies adds these extra dirs that must be cleaned during updates.
- private static readonly string[] WindowsDependencyDirs = new string[] { "bin", "etc", "lib", "share" };
+ private static readonly string[] _windowsDependencyDirs = { "bin", "etc", "lib", "share" };
private static HttpClient ConstructHttpClient()
{
- HttpClient result = new HttpClient();
+ HttpClient result = new();
// Required by GitHub to interact with APIs.
result.DefaultRequestHeaders.Add("User-Agent", "Ryujinx-Updater/1.0.0");
@@ -55,7 +55,10 @@ namespace Ryujinx.Modules
public static async Task BeginParse(MainWindow mainWindow, bool showVersionUpToDate)
{
- if (Running) return;
+ if (Running)
+ {
+ return;
+ }
Running = true;
mainWindow.UpdateMenuItem.Sensitive = false;
@@ -65,17 +68,17 @@ namespace Ryujinx.Modules
// Detect current platform
if (OperatingSystem.IsMacOS())
{
- _platformExt = "osx_x64.zip";
+ _platformExt = "osx_x64.zip";
artifactIndex = 1;
}
else if (OperatingSystem.IsWindows())
{
- _platformExt = "win_x64.zip";
+ _platformExt = "win_x64.zip";
artifactIndex = 2;
}
else if (OperatingSystem.IsLinux())
{
- _platformExt = "linux_x64.tar.gz";
+ _platformExt = "linux_x64.tar.gz";
artifactIndex = 0;
}
@@ -105,11 +108,11 @@ namespace Ryujinx.Modules
try
{
using HttpClient jsonClient = ConstructHttpClient();
- string buildInfoURL = $"{GitHubApiURL}/repos/{ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}/releases/latest";
+ string buildInfoUrl = $"{GitHubApiUrl}/repos/{ReleaseInformation.ReleaseChannelOwner}/{ReleaseInformation.ReleaseChannelRepo}/releases/latest";
// Fetch latest build information
- string fetchedJson = await jsonClient.GetStringAsync(buildInfoURL);
- var fetched = JsonHelper.Deserialize(fetchedJson, SerializerContext.GithubReleasesJsonResponse);
+ string fetchedJson = await jsonClient.GetStringAsync(buildInfoUrl);
+ var fetched = JsonHelper.Deserialize(fetchedJson, _serializerContext.GithubReleasesJsonResponse);
_buildVer = fetched.Name;
foreach (var asset in fetched.Assets)
@@ -176,45 +179,43 @@ namespace Ryujinx.Modules
}
// Fetch build size information to learn chunk sizes.
- using (HttpClient buildSizeClient = ConstructHttpClient())
+ using HttpClient buildSizeClient = ConstructHttpClient();
+ try
{
- try
- {
- buildSizeClient.DefaultRequestHeaders.Add("Range", "bytes=0-0");
+ buildSizeClient.DefaultRequestHeaders.Add("Range", "bytes=0-0");
- HttpResponseMessage message = await buildSizeClient.GetAsync(new Uri(_buildUrl), HttpCompletionOption.ResponseHeadersRead);
+ HttpResponseMessage message = await buildSizeClient.GetAsync(new Uri(_buildUrl), HttpCompletionOption.ResponseHeadersRead);
- _buildSize = message.Content.Headers.ContentRange.Length.Value;
- }
- catch (Exception ex)
- {
- Logger.Warning?.Print(LogClass.Application, ex.Message);
- Logger.Warning?.Print(LogClass.Application, "Couldn't determine build size for update, using single-threaded updater");
+ _buildSize = message.Content.Headers.ContentRange.Length.Value;
+ }
+ catch (Exception ex)
+ {
+ Logger.Warning?.Print(LogClass.Application, ex.Message);
+ Logger.Warning?.Print(LogClass.Application, "Couldn't determine build size for update, using single-threaded updater");
- _buildSize = -1;
- }
+ _buildSize = -1;
}
// Show a message asking the user if they want to update
- UpdateDialog updateDialog = new UpdateDialog(mainWindow, newVersion, _buildUrl);
+ UpdateDialog updateDialog = new(mainWindow, newVersion, _buildUrl);
updateDialog.Show();
}
public static void UpdateRyujinx(UpdateDialog updateDialog, string downloadUrl)
{
// Empty update dir, although it shouldn't ever have anything inside it
- if (Directory.Exists(UpdateDir))
+ if (Directory.Exists(_updateDir))
{
- Directory.Delete(UpdateDir, true);
+ Directory.Delete(_updateDir, true);
}
- Directory.CreateDirectory(UpdateDir);
+ Directory.CreateDirectory(_updateDir);
- string updateFile = Path.Combine(UpdateDir, "update.bin");
+ string updateFile = Path.Combine(_updateDir, "update.bin");
// Download the update .zip
- updateDialog.MainText.Text = "Downloading Update...";
- updateDialog.ProgressBar.Value = 0;
+ updateDialog.MainText.Text = "Downloading Update...";
+ updateDialog.ProgressBar.Value = 0;
updateDialog.ProgressBar.MaxValue = 100;
if (_buildSize >= 0)
@@ -237,8 +238,8 @@ namespace Ryujinx.Modules
int totalProgressPercentage = 0;
int[] progressPercentage = new int[ConnectionCount];
- List<byte[]> list = new List<byte[]>(ConnectionCount);
- List<WebClient> webClients = new List<WebClient>(ConnectionCount);
+ List<byte[]> list = new(ConnectionCount);
+ List<WebClient> webClients = new(ConnectionCount);
for (int i = 0; i < ConnectionCount; i++)
{
@@ -249,7 +250,7 @@ namespace Ryujinx.Modules
{
#pragma warning disable SYSLIB0014
// TODO: WebClient is obsolete and need to be replaced with a more complex logic using HttpClient.
- using WebClient client = new WebClient();
+ using WebClient client = new();
#pragma warning restore SYSLIB0014
webClients.Add(client);
@@ -337,35 +338,32 @@ namespace Ryujinx.Modules
private static void DoUpdateWithSingleThreadWorker(UpdateDialog updateDialog, string downloadUrl, string updateFile)
{
- using HttpClient client = new HttpClient();
+ using HttpClient client = new();
// We do not want to timeout while downloading
client.Timeout = TimeSpan.FromDays(1);
- using (HttpResponseMessage response = client.GetAsync(downloadUrl, HttpCompletionOption.ResponseHeadersRead).Result)
- using (Stream remoteFileStream = response.Content.ReadAsStreamAsync().Result)
- {
- using (Stream updateFileStream = File.Open(updateFile, FileMode.Create))
- {
- long totalBytes = response.Content.Headers.ContentLength.Value;
- long byteWritten = 0;
-
- byte[] buffer = new byte[32 * 1024];
+ using HttpResponseMessage response = client.GetAsync(downloadUrl, HttpCompletionOption.ResponseHeadersRead).Result;
+ using Stream remoteFileStream = response.Content.ReadAsStreamAsync().Result;
+ using Stream updateFileStream = File.Open(updateFile, FileMode.Create);
- while (true)
- {
- int readSize = remoteFileStream.Read(buffer);
+ long totalBytes = response.Content.Headers.ContentLength.Value;
+ long byteWritten = 0;
- if (readSize == 0)
- {
- break;
- }
+ byte[] buffer = new byte[32 * 1024];
- byteWritten += readSize;
+ while (true)
+ {
+ int readSize = remoteFileStream.Read(buffer);
- updateDialog.ProgressBar.Value = ((double)byteWritten / totalBytes) * 100;
- updateFileStream.Write(buffer, 0, readSize);
- }
+ if (readSize == 0)
+ {
+ break;
}
+
+ byteWritten += readSize;
+
+ updateDialog.ProgressBar.Value = ((double)byteWritten / totalBytes) * 100;
+ updateFileStream.Write(buffer, 0, readSize);
}
InstallUpdate(updateDialog, updateFile);
@@ -373,9 +371,9 @@ namespace Ryujinx.Modules
private static void DoUpdateWithSingleThread(UpdateDialog updateDialog, string downloadUrl, string updateFile)
{
- Thread worker = new Thread(() => DoUpdateWithSingleThreadWorker(updateDialog, downloadUrl, updateFile))
+ Thread worker = new(() => DoUpdateWithSingleThreadWorker(updateDialog, downloadUrl, updateFile))
{
- Name = "Updater.SingleThreadWorker"
+ Name = "Updater.SingleThreadWorker",
};
worker.Start();
}
@@ -383,14 +381,14 @@ namespace Ryujinx.Modules
private static async void InstallUpdate(UpdateDialog updateDialog, string updateFile)
{
// Extract Update
- updateDialog.MainText.Text = "Extracting Update...";
+ updateDialog.MainText.Text = "Extracting Update...";
updateDialog.ProgressBar.Value = 0;
if (OperatingSystem.IsLinux())
{
- using Stream inStream = File.OpenRead(updateFile);
- using Stream gzipStream = new GZipInputStream(inStream);
- using TarInputStream tarStream = new TarInputStream(gzipStream, Encoding.ASCII);
+ using Stream inStream = File.OpenRead(updateFile);
+ using Stream gzipStream = new GZipInputStream(inStream);
+ using TarInputStream tarStream = new(gzipStream, Encoding.ASCII);
updateDialog.ProgressBar.MaxValue = inStream.Length;
await Task.Run(() =>
@@ -401,16 +399,17 @@ namespace Ryujinx.Modules
{
while ((tarEntry = tarStream.GetNextEntry()) != null)
{
- if (tarEntry.IsDirectory) continue;
+ if (tarEntry.IsDirectory)
+ {
+ continue;
+ }
- string outPath = Path.Combine(UpdateDir, tarEntry.Name);
+ string outPath = Path.Combine(_updateDir, tarEntry.Name);
Directory.CreateDirectory(Path.GetDirectoryName(outPath));
- using (FileStream outStream = File.OpenWrite(outPath))
- {
- tarStream.CopyEntryContents(outStream);
- }
+ using FileStream outStream = File.OpenWrite(outPath);
+ tarStream.CopyEntryContents(outStream);
File.SetUnixFileMode(outPath, (UnixFileMode)tarEntry.TarHeader.Mode);
File.SetLastWriteTime(outPath, DateTime.SpecifyKind(tarEntry.ModTime, DateTimeKind.Utc));
@@ -429,25 +428,26 @@ namespace Ryujinx.Modules
}
else
{
- using Stream inStream = File.OpenRead(updateFile);
- using ZipFile zipFile = new ZipFile(inStream);
+ using Stream inStream = File.OpenRead(updateFile);
+ using ZipFile zipFile = new(inStream);
updateDialog.ProgressBar.MaxValue = zipFile.Count;
await Task.Run(() =>
{
foreach (ZipEntry zipEntry in zipFile)
{
- if (zipEntry.IsDirectory) continue;
+ if (zipEntry.IsDirectory)
+ {
+ continue;
+ }
- string outPath = Path.Combine(UpdateDir, zipEntry.Name);
+ string outPath = Path.Combine(_updateDir, zipEntry.Name);
Directory.CreateDirectory(Path.GetDirectoryName(outPath));
- using (Stream zipStream = zipFile.GetInputStream(zipEntry))
- using (FileStream outStream = File.OpenWrite(outPath))
- {
- zipStream.CopyTo(outStream);
- }
+ using Stream zipStream = zipFile.GetInputStream(zipEntry);
+ using FileStream outStream = File.OpenWrite(outPath);
+ zipStream.CopyTo(outStream);
File.SetLastWriteTime(outPath, DateTime.SpecifyKind(zipEntry.DateTime, DateTimeKind.Utc));
@@ -464,8 +464,8 @@ namespace Ryujinx.Modules
List<string> allFiles = EnumerateFilesToDelete().ToList();
- updateDialog.MainText.Text = "Renaming Old Files...";
- updateDialog.ProgressBar.Value = 0;
+ updateDialog.MainText.Text = "Renaming Old Files...";
+ updateDialog.ProgressBar.Value = 0;
updateDialog.ProgressBar.MaxValue = allFiles.Count;
// Replace old files
@@ -490,19 +490,19 @@ namespace Ryujinx.Modules
Application.Invoke(delegate
{
- updateDialog.MainText.Text = "Adding New Files...";
- updateDialog.ProgressBar.Value = 0;
- updateDialog.ProgressBar.MaxValue = Directory.GetFiles(UpdatePublishDir, "*", SearchOption.AllDirectories).Length;
+ updateDialog.MainText.Text = "Adding New Files...";
+ updateDialog.ProgressBar.Value = 0;
+ updateDialog.ProgressBar.MaxValue = Directory.GetFiles(_updatePublishDir, "*", SearchOption.AllDirectories).Length;
});
- MoveAllFilesOver(UpdatePublishDir, HomeDir, updateDialog);
+ MoveAllFilesOver(_updatePublishDir, _homeDir, updateDialog);
});
- Directory.Delete(UpdateDir, true);
+ Directory.Delete(_updateDir, true);
- updateDialog.MainText.Text = "Update Complete!";
+ updateDialog.MainText.Text = "Update Complete!";
updateDialog.SecondaryText.Text = "Do you want to restart Ryujinx now?";
- updateDialog.Modal = true;
+ updateDialog.Modal = true;
updateDialog.ProgressBar.Hide();
updateDialog.YesButton.Show();
@@ -563,15 +563,15 @@ namespace Ryujinx.Modules
// NOTE: This method should always reflect the latest build layout.
private static IEnumerable<string> EnumerateFilesToDelete()
{
- var files = Directory.EnumerateFiles(HomeDir); // All files directly in base dir.
+ var files = Directory.EnumerateFiles(_homeDir); // All files directly in base dir.
// Determine and exclude user files only when the updater is running, not when cleaning old files
if (Running)
{
// Compare the loose files in base directory against the loose files from the incoming update, and store foreign ones in a user list.
- var oldFiles = Directory.EnumerateFiles(HomeDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName);
- var newFiles = Directory.EnumerateFiles(UpdatePublishDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName);
- var userFiles = oldFiles.Except(newFiles).Select(filename => Path.Combine(HomeDir, filename));
+ var oldFiles = Directory.EnumerateFiles(_homeDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName);
+ var newFiles = Directory.EnumerateFiles(_updatePublishDir, "*", SearchOption.TopDirectoryOnly).Select(Path.GetFileName);
+ var userFiles = oldFiles.Except(newFiles).Select(filename => Path.Combine(_homeDir, filename));
// Remove user files from the paths in files.
files = files.Except(userFiles);
@@ -579,9 +579,9 @@ namespace Ryujinx.Modules
if (OperatingSystem.IsWindows())
{
- foreach (string dir in WindowsDependencyDirs)
+ foreach (string dir in _windowsDependencyDirs)
{
- string dirPath = Path.Combine(HomeDir, dir);
+ string dirPath = Path.Combine(_homeDir, dir);
if (Directory.Exists(dirPath))
{
files = files.Concat(Directory.EnumerateFiles(dirPath, "*", SearchOption.AllDirectories));
@@ -628,4 +628,4 @@ namespace Ryujinx.Modules
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs
index 96024548..50151d73 100644
--- a/src/Ryujinx/Program.cs
+++ b/src/Ryujinx/Program.cs
@@ -43,10 +43,7 @@ namespace Ryujinx
[LibraryImport("libc", SetLastError = true)]
private static partial int setenv([MarshalAs(UnmanagedType.LPStr)] string name, [MarshalAs(UnmanagedType.LPStr)] string value, int overwrite);
- [LibraryImport("libc")]
- private static partial IntPtr getenv([MarshalAs(UnmanagedType.LPStr)] string name);
-
- private const uint MB_ICONWARNING = 0x30;
+ private const uint MbIconWarning = 0x30;
static Program()
{
@@ -78,16 +75,16 @@ namespace Ryujinx
if (OperatingSystem.IsWindows() && !OperatingSystem.IsWindowsVersionAtLeast(10, 0, 17134))
{
- MessageBoxA(IntPtr.Zero, "You are running an outdated version of Windows.\n\nStarting on June 1st 2022, Ryujinx will only support Windows 10 1803 and newer.\n", $"Ryujinx {Version}", MB_ICONWARNING);
+ MessageBoxA(IntPtr.Zero, "You are running an outdated version of Windows.\n\nStarting on June 1st 2022, Ryujinx will only support Windows 10 1803 and newer.\n", $"Ryujinx {Version}", MbIconWarning);
}
// Parse arguments
CommandLineState.ParseArguments(args);
// Hook unhandled exception and process exit events.
- GLib.ExceptionManager.UnhandledException += (GLib.UnhandledExceptionArgs e) => ProcessUnhandledException(e.ExceptionObject as Exception, e.IsTerminating);
+ GLib.ExceptionManager.UnhandledException += (GLib.UnhandledExceptionArgs e) => ProcessUnhandledException(e.ExceptionObject as Exception, e.IsTerminating);
AppDomain.CurrentDomain.UnhandledException += (object sender, UnhandledExceptionEventArgs e) => ProcessUnhandledException(e.ExceptionObject as Exception, e.IsTerminating);
- AppDomain.CurrentDomain.ProcessExit += (object sender, EventArgs e) => Exit();
+ AppDomain.CurrentDomain.ProcessExit += (object sender, EventArgs e) => Exit();
// Make process DPI aware for proper window sizing on high-res screens.
ForceDpiAware.Windows();
@@ -102,7 +99,11 @@ namespace Ryujinx
// This ends up causing race condition and abort of XCB when a context is created by SPB (even if SPB do call XInitThreads).
if (OperatingSystem.IsLinux())
{
- XInitThreads();
+ if (XInitThreads() == 0)
+ {
+ throw new NotSupportedException("Failed to initialize multi-threading support.");
+ }
+
Environment.SetEnvironmentVariable("GDK_BACKEND", "x11");
setenv("GDK_BACKEND", "x11", 1);
}
@@ -121,7 +122,7 @@ namespace Ryujinx
resourcesDataDir = baseDirectory;
}
- void SetEnvironmentVariableNoCaching(string key, string value)
+ static void SetEnvironmentVariableNoCaching(string key, string value)
{
int res = setenv(key, value, 1);
Debug.Assert(res != -1);
@@ -163,11 +164,11 @@ namespace Ryujinx
// Sets ImageSharp Jpeg Encoder Quality.
SixLabors.ImageSharp.Configuration.Default.ImageFormatsManager.SetEncoder(JpegFormat.Instance, new JpegEncoder()
{
- Quality = 100
+ Quality = 100,
});
- string localConfigurationPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config.json");
- string appDataConfigurationPath = Path.Combine(AppDataManager.BaseDirPath, "Config.json");
+ string localConfigurationPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config.json");
+ string appDataConfigurationPath = Path.Combine(AppDataManager.BaseDirPath, "Config.json");
// Now load the configuration as the other subsystems are now registered
ConfigurationPath = File.Exists(localConfigurationPath)
@@ -232,7 +233,7 @@ namespace Ryujinx
"never" => HideCursorMode.Never,
"onidle" => HideCursorMode.OnIdle,
"always" => HideCursorMode.Always,
- _ => ConfigurationState.Instance.HideCursor.Value
+ _ => ConfigurationState.Instance.HideCursor.Value,
};
}
@@ -261,7 +262,7 @@ namespace Ryujinx
}
// Show the main window UI.
- MainWindow mainWindow = new MainWindow();
+ MainWindow mainWindow = new();
mainWindow.Show();
if (OperatingSystem.IsLinux())
@@ -278,7 +279,7 @@ namespace Ryujinx
{
{ 0, "Yes, until the next restart" },
{ 1, "Yes, permanently" },
- { 2, "No" }
+ { 2, "No" },
};
ResponseType response = GtkDialog.CreateCustomDialog(
@@ -347,7 +348,7 @@ namespace Ryujinx
var buttonTexts = new Dictionary<int, string>()
{
{ 0, "Yes (Vulkan)" },
- { 1, "No (OpenGL)" }
+ { 1, "No (OpenGL)" },
};
ResponseType response = GtkDialog.CreateCustomDialog(
@@ -416,4 +417,4 @@ namespace Ryujinx
Logger.Shutdown();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Applet/ErrorAppletDialog.cs b/src/Ryujinx/Ui/Applet/ErrorAppletDialog.cs
index d4cc7ccc..cd3530f3 100644
--- a/src/Ryujinx/Ui/Applet/ErrorAppletDialog.cs
+++ b/src/Ryujinx/Ui/Applet/ErrorAppletDialog.cs
@@ -24,8 +24,8 @@ namespace Ryujinx.Ui.Applet
{
AddButton("OK", 0);
}
-
+
ShowAll();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Applet/GtkDynamicTextInputHandler.cs b/src/Ryujinx/Ui/Applet/GtkDynamicTextInputHandler.cs
index 79df3cc7..3a3da465 100644
--- a/src/Ryujinx/Ui/Applet/GtkDynamicTextInputHandler.cs
+++ b/src/Ryujinx/Ui/Applet/GtkDynamicTextInputHandler.cs
@@ -11,15 +11,15 @@ namespace Ryujinx.Ui.Applet
/// </summary>
internal class GtkDynamicTextInputHandler : IDynamicTextInputHandler
{
- private readonly Window _parent;
- private readonly OffscreenWindow _inputToTextWindow = new OffscreenWindow();
- private readonly RawInputToTextEntry _inputToTextEntry = new RawInputToTextEntry();
+ private readonly Window _parent;
+ private readonly OffscreenWindow _inputToTextWindow = new();
+ private readonly RawInputToTextEntry _inputToTextEntry = new();
private bool _canProcessInput;
public event DynamicTextChangedHandler TextChangedEvent;
- public event KeyPressedHandler KeyPressedEvent;
- public event KeyReleasedHandler KeyReleasedEvent;
+ public event KeyPressedHandler KeyPressedEvent;
+ public event KeyReleasedHandler KeyReleasedEvent;
public bool TextProcessingEnabled
{
@@ -37,7 +37,7 @@ namespace Ryujinx.Ui.Applet
public GtkDynamicTextInputHandler(Window parent)
{
_parent = parent;
- _parent.KeyPressEvent += HandleKeyPressEvent;
+ _parent.KeyPressEvent += HandleKeyPressEvent;
_parent.KeyReleaseEvent += HandleKeyReleaseEvent;
_inputToTextWindow.Add(_inputToTextEntry);
@@ -101,8 +101,8 @@ namespace Ryujinx.Ui.Applet
public void Dispose()
{
- _parent.KeyPressEvent -= HandleKeyPressEvent;
+ _parent.KeyPressEvent -= HandleKeyPressEvent;
_parent.KeyReleaseEvent -= HandleKeyReleaseEvent;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Applet/GtkHostUiHandler.cs b/src/Ryujinx/Ui/Applet/GtkHostUiHandler.cs
index b7577b85..241e5e6c 100644
--- a/src/Ryujinx/Ui/Applet/GtkHostUiHandler.cs
+++ b/src/Ryujinx/Ui/Applet/GtkHostUiHandler.cs
@@ -5,7 +5,6 @@ using Ryujinx.HLE.Ui;
using Ryujinx.Ui.Widgets;
using System;
using System.Threading;
-using Action = System.Action;
namespace Ryujinx.Ui.Applet
{
@@ -37,7 +36,7 @@ namespace Ryujinx.Ui.Applet
public bool DisplayMessageDialog(string title, string message)
{
- ManualResetEvent dialogCloseEvent = new ManualResetEvent(false);
+ ManualResetEvent dialogCloseEvent = new(false);
bool okPressed = false;
@@ -49,9 +48,9 @@ namespace Ryujinx.Ui.Applet
{
msgDialog = new MessageDialog(_parent, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Ok, null)
{
- Title = title,
- Text = message,
- UseMarkup = true
+ Title = title,
+ Text = message,
+ UseMarkup = true,
};
msgDialog.SetDefaultSize(400, 0);
@@ -84,10 +83,10 @@ namespace Ryujinx.Ui.Applet
public bool DisplayInputDialog(SoftwareKeyboardUiArgs args, out string userText)
{
- ManualResetEvent dialogCloseEvent = new ManualResetEvent(false);
+ ManualResetEvent dialogCloseEvent = new(false);
- bool okPressed = false;
- bool error = false;
+ bool okPressed = false;
+ bool error = false;
string inputText = args.InitialText ?? "";
Application.Invoke(delegate
@@ -96,14 +95,14 @@ namespace Ryujinx.Ui.Applet
{
var swkbdDialog = new SwkbdAppletDialog(_parent)
{
- Title = "Software Keyboard",
- Text = args.HeaderText,
- SecondaryText = args.SubtitleText
+ Title = "Software Keyboard",
+ Text = args.HeaderText,
+ SecondaryText = args.SubtitleText,
};
- swkbdDialog.InputEntry.Text = inputText;
+ swkbdDialog.InputEntry.Text = inputText;
swkbdDialog.InputEntry.PlaceholderText = args.GuideText;
- swkbdDialog.OkButton.Label = args.SubmitText;
+ swkbdDialog.OkButton.Label = args.SubmitText;
swkbdDialog.SetInputLengthValidation(args.StringLengthMin, args.StringLengthMax);
swkbdDialog.SetInputValidation(args.KeyboardMode);
@@ -143,7 +142,7 @@ namespace Ryujinx.Ui.Applet
public bool DisplayErrorAppletDialog(string title, string message, string[] buttons)
{
- ManualResetEvent dialogCloseEvent = new ManualResetEvent(false);
+ ManualResetEvent dialogCloseEvent = new(false);
bool showDetails = false;
@@ -151,12 +150,12 @@ namespace Ryujinx.Ui.Applet
{
try
{
- ErrorAppletDialog msgDialog = new ErrorAppletDialog(_parent, DialogFlags.DestroyWithParent, MessageType.Error, buttons)
+ ErrorAppletDialog msgDialog = new(_parent, DialogFlags.DestroyWithParent, MessageType.Error, buttons)
{
- Title = title,
- Text = message,
- UseMarkup = true,
- WindowPosition = WindowPosition.CenterAlways
+ Title = title,
+ Text = message,
+ UseMarkup = true,
+ WindowPosition = WindowPosition.CenterAlways,
};
msgDialog.SetDefaultSize(400, 0);
@@ -193,22 +192,9 @@ namespace Ryujinx.Ui.Applet
return showDetails;
}
- private void SynchronousGtkInvoke(Action action)
- {
- var waitHandle = new ManualResetEventSlim();
-
- Application.Invoke(delegate
- {
- action();
- waitHandle.Set();
- });
-
- waitHandle.Wait();
- }
-
public IDynamicTextInputHandler CreateDynamicTextInputHandler()
{
return new GtkDynamicTextInputHandler(_parent);
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Applet/GtkHostUiTheme.cs b/src/Ryujinx/Ui/Applet/GtkHostUiTheme.cs
index f25da47c..df810332 100644
--- a/src/Ryujinx/Ui/Applet/GtkHostUiTheme.cs
+++ b/src/Ryujinx/Ui/Applet/GtkHostUiTheme.cs
@@ -6,7 +6,7 @@ namespace Ryujinx.Ui.Applet
{
internal class GtkHostUiTheme : IHostUiTheme
{
- private const int RenderSurfaceWidth = 32;
+ private const int RenderSurfaceWidth = 32;
private const int RenderSurfaceHeight = 32;
public string FontFamily { get; private set; }
@@ -19,7 +19,7 @@ namespace Ryujinx.Ui.Applet
public GtkHostUiTheme(Window parent)
{
- Entry entry = new Entry();
+ Entry entry = new();
entry.SetStateFlags(StateFlags.Selected, true);
// Get the font and some colors directly from GTK.
@@ -30,10 +30,10 @@ namespace Ryujinx.Ui.Applet
var defaultForegroundColor = entry.StyleContext.GetColor(StateFlags.Normal);
var selectedForegroundColor = entry.StyleContext.GetColor(StateFlags.Selected);
- DefaultForegroundColor = new ThemeColor((float) defaultForegroundColor.Alpha, (float) defaultForegroundColor.Red, (float) defaultForegroundColor.Green, (float) defaultForegroundColor.Blue);
+ DefaultForegroundColor = new ThemeColor((float)defaultForegroundColor.Alpha, (float)defaultForegroundColor.Red, (float)defaultForegroundColor.Green, (float)defaultForegroundColor.Blue);
SelectionForegroundColor = new ThemeColor((float)selectedForegroundColor.Alpha, (float)selectedForegroundColor.Red, (float)selectedForegroundColor.Green, (float)selectedForegroundColor.Blue);
- ListBoxRow row = new ListBoxRow();
+ ListBoxRow row = new();
row.SetStateFlags(StateFlags.Selected, true);
// Request the main thread to render some UI elements to an image to get an approximation for the color.
@@ -67,7 +67,7 @@ namespace Ryujinx.Ui.Applet
SelectionBackgroundColor = DefaultBorderColor;
}
- private ThemeColor ToThemeColor(byte[] data)
+ private static ThemeColor ToThemeColor(byte[] data)
{
Debug.Assert(data.Length == 4 * RenderSurfaceWidth * RenderSurfaceHeight);
@@ -87,4 +87,4 @@ namespace Ryujinx.Ui.Applet
return new ThemeColor(a, r, g, b);
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Applet/SwkbdAppletDialog.cs b/src/Ryujinx/Ui/Applet/SwkbdAppletDialog.cs
index 13d30f6c..1ed08250 100644
--- a/src/Ryujinx/Ui/Applet/SwkbdAppletDialog.cs
+++ b/src/Ryujinx/Ui/Applet/SwkbdAppletDialog.cs
@@ -9,7 +9,9 @@ namespace Ryujinx.Ui.Applet
{
private int _inputMin;
private int _inputMax;
+#pragma warning disable IDE0052 // Remove unread private member
private KeyboardMode _mode;
+#pragma warning restore IDE0052
private string _validationInfoText = "";
@@ -18,8 +20,8 @@ namespace Ryujinx.Ui.Applet
private readonly Label _validationInfo;
- public Entry InputEntry { get; }
- public Button OkButton { get; }
+ public Entry InputEntry { get; }
+ public Button OkButton { get; }
public Button CancelButton { get; }
public SwkbdAppletDialog(Window parent) : base(parent, DialogFlags.Modal | DialogFlags.DestroyWithParent, MessageType.Question, ButtonsType.None, null)
@@ -28,22 +30,22 @@ namespace Ryujinx.Ui.Applet
_validationInfo = new Label()
{
- Visible = false
+ Visible = false,
};
InputEntry = new Entry()
{
- Visible = true
+ Visible = true,
};
InputEntry.Activated += OnInputActivated;
- InputEntry.Changed += OnInputChanged;
+ InputEntry.Changed += OnInputChanged;
- OkButton = (Button)AddButton("OK", ResponseType.Ok);
+ OkButton = (Button)AddButton("OK", ResponseType.Ok);
CancelButton = (Button)AddButton("Cancel", ResponseType.Cancel);
((Box)MessageArea).PackEnd(_validationInfo, true, true, 0);
- ((Box)MessageArea).PackEnd(InputEntry, true, true, 4);
+ ((Box)MessageArea).PackEnd(InputEntry, true, true, 4);
}
private void ApplyValidationInfo()
@@ -122,4 +124,4 @@ namespace Ryujinx.Ui.Applet
OkButton.Sensitive = _checkLength(InputEntry.Text.Length) && _checkInput(InputEntry.Text);
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Helper/MetalHelper.cs b/src/Ryujinx/Ui/Helper/MetalHelper.cs
index c2d4893e..a7af2aed 100644
--- a/src/Ryujinx/Ui/Helper/MetalHelper.cs
+++ b/src/Ryujinx/Ui/Helper/MetalHelper.cs
@@ -12,7 +12,7 @@ namespace Ryujinx.Ui.Helper
{
private const string LibObjCImport = "/usr/lib/libobjc.A.dylib";
- private struct Selector
+ private readonly struct Selector
{
public readonly IntPtr NativePtr;
@@ -29,7 +29,7 @@ namespace Ryujinx.Ui.Helper
NativePtr = sel_registerName(data);
}
- public static implicit operator Selector(string value) => new Selector(value);
+ public static implicit operator Selector(string value) => new(value);
}
private static unsafe IntPtr GetClass(string value)
@@ -45,27 +45,27 @@ namespace Ryujinx.Ui.Helper
return objc_getClass(data);
}
- private struct NSPoint
+ private struct NsPoint
{
public double X;
public double Y;
- public NSPoint(double x, double y)
+ public NsPoint(double x, double y)
{
X = x;
Y = y;
}
}
- private struct NSRect
+ private struct NsRect
{
- public NSPoint Pos;
- public NSPoint Size;
+ public NsPoint Pos;
+ public NsPoint Size;
- public NSRect(double x, double y, double width, double height)
+ public NsRect(double x, double y, double width, double height)
{
- Pos = new NSPoint(x, y);
- Size = new NSPoint(width, height);
+ Pos = new NsPoint(x, y);
+ Size = new NsPoint(width, height);
}
}
@@ -81,7 +81,7 @@ namespace Ryujinx.Ui.Helper
// Create a child NSView to render into.
IntPtr nsViewClass = GetClass("NSView");
IntPtr child = IntPtr_objc_msgSend(nsViewClass, "alloc");
- objc_msgSend(child, "init", new NSRect());
+ objc_msgSend(child, "init", new NsRect());
// Add it as a child.
objc_msgSend(nsView, "addSubview:", child);
@@ -92,11 +92,12 @@ namespace Ryujinx.Ui.Helper
objc_msgSend(metalLayer, "setContentsScale:", (double)display.GetMonitorAtWindow(window).ScaleFactor);
// Set the frame position/location.
- updateBounds = (Window window) => {
+ updateBounds = (Window window) =>
+ {
window.GetPosition(out int x, out int y);
int width = window.Width;
int height = window.Height;
- objc_msgSend(child, "setFrame:", new NSRect(x, y, width, height));
+ objc_msgSend(child, "setFrame:", new NsRect(x, y, width, height));
};
updateBounds(window);
@@ -120,7 +121,7 @@ namespace Ryujinx.Ui.Helper
private static partial void objc_msgSend(IntPtr receiver, Selector selector, IntPtr value);
[LibraryImport(LibObjCImport)]
- private static partial void objc_msgSend(IntPtr receiver, Selector selector, NSRect point);
+ private static partial void objc_msgSend(IntPtr receiver, Selector selector, NsRect point);
[LibraryImport(LibObjCImport)]
private static partial void objc_msgSend(IntPtr receiver, Selector selector, double value);
@@ -131,4 +132,4 @@ namespace Ryujinx.Ui.Helper
[LibraryImport("libgdk-3.0.dylib")]
private static partial IntPtr gdk_quartz_window_get_nsview(IntPtr gdkWindow);
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Helper/ThemeHelper.cs b/src/Ryujinx/Ui/Helper/ThemeHelper.cs
index 448afcc9..5289ebc5 100644
--- a/src/Ryujinx/Ui/Helper/ThemeHelper.cs
+++ b/src/Ryujinx/Ui/Helper/ThemeHelper.cs
@@ -16,7 +16,7 @@ namespace Ryujinx.Ui.Helper
if (File.Exists(ConfigurationState.Instance.Ui.CustomThemePath) && (Path.GetExtension(ConfigurationState.Instance.Ui.CustomThemePath) == ".css"))
{
- CssProvider cssProvider = new CssProvider();
+ CssProvider cssProvider = new();
cssProvider.LoadFromPath(ConfigurationState.Instance.Ui.CustomThemePath);
@@ -26,10 +26,10 @@ namespace Ryujinx.Ui.Helper
{
Logger.Warning?.Print(LogClass.Application, $"The \"custom_theme_path\" section in \"Config.json\" contains an invalid path: \"{ConfigurationState.Instance.Ui.CustomThemePath}\".");
- ConfigurationState.Instance.Ui.CustomThemePath.Value = "";
+ ConfigurationState.Instance.Ui.CustomThemePath.Value = "";
ConfigurationState.Instance.Ui.EnableCustomTheme.Value = false;
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/MainWindow.cs b/src/Ryujinx/Ui/MainWindow.cs
index 628bcff4..7625e9e6 100644
--- a/src/Ryujinx/Ui/MainWindow.cs
+++ b/src/Ryujinx/Ui/MainWindow.cs
@@ -18,8 +18,6 @@ using Ryujinx.Common.SystemInterop;
using Ryujinx.Cpu;
using Ryujinx.Graphics.GAL;
using Ryujinx.Graphics.GAL.Multithreading;
-using Ryujinx.Graphics.OpenGL;
-using Ryujinx.Graphics.Vulkan;
using Ryujinx.HLE.FileSystem;
using Ryujinx.HLE.HOS;
using Ryujinx.HLE.HOS.Services.Account.Acc;
@@ -51,9 +49,9 @@ namespace Ryujinx.Ui
{
public class MainWindow : Window
{
- private readonly VirtualFileSystem _virtualFileSystem;
- private readonly ContentManager _contentManager;
- private readonly AccountManager _accountManager;
+ private readonly VirtualFileSystem _virtualFileSystem;
+ private readonly ContentManager _contentManager;
+ private readonly AccountManager _accountManager;
private readonly LibHacHorizonManager _libHacHorizonManager;
private UserChannelPersistence _userChannelPersistence;
@@ -63,9 +61,9 @@ namespace Ryujinx.Ui
private WindowsMultimediaTimerResolution _windowsMultimediaTimerResolution;
private readonly ApplicationLibrary _applicationLibrary;
- private readonly GtkHostUiHandler _uiHandler;
- private readonly AutoResetEvent _deviceExitStatus;
- private readonly ListStore _tableStore;
+ private readonly GtkHostUiHandler _uiHandler;
+ private readonly AutoResetEvent _deviceExitStatus;
+ private readonly ListStore _tableStore;
private bool _updatingGameTable;
private bool _gameLoaded;
@@ -74,76 +72,76 @@ namespace Ryujinx.Ui
private string _currentEmulatedGamePath = null;
private string _lastScannedAmiiboId = "";
- private bool _lastScannedAmiiboShowAll = false;
+ private bool _lastScannedAmiiboShowAll = false;
public RendererWidgetBase RendererWidget;
public InputManager InputManager;
public bool IsFocused;
-#pragma warning disable CS0169, CS0649, IDE0044
+#pragma warning disable CS0169, CS0649, IDE0044, IDE0051 // Field is never assigned to, Add readonly modifier, Remove unused private member
[GUI] public MenuItem ExitMenuItem;
[GUI] public MenuItem UpdateMenuItem;
- [GUI] MenuBar _menuBar;
- [GUI] Box _footerBox;
- [GUI] Box _statusBar;
- [GUI] MenuItem _optionMenu;
- [GUI] MenuItem _manageUserProfiles;
- [GUI] MenuItem _fileMenu;
- [GUI] MenuItem _loadApplicationFile;
- [GUI] MenuItem _loadApplicationFolder;
- [GUI] MenuItem _appletMenu;
- [GUI] MenuItem _actionMenu;
- [GUI] MenuItem _pauseEmulation;
- [GUI] MenuItem _resumeEmulation;
- [GUI] MenuItem _stopEmulation;
- [GUI] MenuItem _simulateWakeUpMessage;
- [GUI] MenuItem _scanAmiibo;
- [GUI] MenuItem _takeScreenshot;
- [GUI] MenuItem _hideUi;
- [GUI] MenuItem _fullScreen;
- [GUI] CheckMenuItem _startFullScreen;
- [GUI] CheckMenuItem _showConsole;
- [GUI] CheckMenuItem _favToggle;
- [GUI] MenuItem _firmwareInstallDirectory;
- [GUI] MenuItem _firmwareInstallFile;
- [GUI] MenuItem _fileTypesSubMenu;
- [GUI] Label _fifoStatus;
- [GUI] CheckMenuItem _iconToggle;
- [GUI] CheckMenuItem _developerToggle;
- [GUI] CheckMenuItem _appToggle;
- [GUI] CheckMenuItem _timePlayedToggle;
- [GUI] CheckMenuItem _versionToggle;
- [GUI] CheckMenuItem _lastPlayedToggle;
- [GUI] CheckMenuItem _fileExtToggle;
- [GUI] CheckMenuItem _pathToggle;
- [GUI] CheckMenuItem _fileSizeToggle;
- [GUI] CheckMenuItem _nspShown;
- [GUI] CheckMenuItem _pfs0Shown;
- [GUI] CheckMenuItem _xciShown;
- [GUI] CheckMenuItem _ncaShown;
- [GUI] CheckMenuItem _nroShown;
- [GUI] CheckMenuItem _nsoShown;
- [GUI] Label _gpuBackend;
- [GUI] Label _dockedMode;
- [GUI] Label _aspectRatio;
- [GUI] Label _gameStatus;
- [GUI] TreeView _gameTable;
- [GUI] TreeSelection _gameTableSelection;
- [GUI] ScrolledWindow _gameTableWindow;
- [GUI] Label _gpuName;
- [GUI] Label _progressLabel;
- [GUI] Label _firmwareVersionLabel;
+ [GUI] MenuBar _menuBar;
+ [GUI] Box _footerBox;
+ [GUI] Box _statusBar;
+ [GUI] MenuItem _optionMenu;
+ [GUI] MenuItem _manageUserProfiles;
+ [GUI] MenuItem _fileMenu;
+ [GUI] MenuItem _loadApplicationFile;
+ [GUI] MenuItem _loadApplicationFolder;
+ [GUI] MenuItem _appletMenu;
+ [GUI] MenuItem _actionMenu;
+ [GUI] MenuItem _pauseEmulation;
+ [GUI] MenuItem _resumeEmulation;
+ [GUI] MenuItem _stopEmulation;
+ [GUI] MenuItem _simulateWakeUpMessage;
+ [GUI] MenuItem _scanAmiibo;
+ [GUI] MenuItem _takeScreenshot;
+ [GUI] MenuItem _hideUi;
+ [GUI] MenuItem _fullScreen;
+ [GUI] CheckMenuItem _startFullScreen;
+ [GUI] CheckMenuItem _showConsole;
+ [GUI] CheckMenuItem _favToggle;
+ [GUI] MenuItem _firmwareInstallDirectory;
+ [GUI] MenuItem _firmwareInstallFile;
+ [GUI] MenuItem _fileTypesSubMenu;
+ [GUI] Label _fifoStatus;
+ [GUI] CheckMenuItem _iconToggle;
+ [GUI] CheckMenuItem _developerToggle;
+ [GUI] CheckMenuItem _appToggle;
+ [GUI] CheckMenuItem _timePlayedToggle;
+ [GUI] CheckMenuItem _versionToggle;
+ [GUI] CheckMenuItem _lastPlayedToggle;
+ [GUI] CheckMenuItem _fileExtToggle;
+ [GUI] CheckMenuItem _pathToggle;
+ [GUI] CheckMenuItem _fileSizeToggle;
+ [GUI] CheckMenuItem _nspShown;
+ [GUI] CheckMenuItem _pfs0Shown;
+ [GUI] CheckMenuItem _xciShown;
+ [GUI] CheckMenuItem _ncaShown;
+ [GUI] CheckMenuItem _nroShown;
+ [GUI] CheckMenuItem _nsoShown;
+ [GUI] Label _gpuBackend;
+ [GUI] Label _dockedMode;
+ [GUI] Label _aspectRatio;
+ [GUI] Label _gameStatus;
+ [GUI] TreeView _gameTable;
+ [GUI] TreeSelection _gameTableSelection;
+ [GUI] ScrolledWindow _gameTableWindow;
+ [GUI] Label _gpuName;
+ [GUI] Label _progressLabel;
+ [GUI] Label _firmwareVersionLabel;
[GUI] Gtk.ProgressBar _progressBar;
- [GUI] Box _viewBox;
- [GUI] Label _vSyncStatus;
- [GUI] Label _volumeStatus;
- [GUI] Box _listStatusBox;
- [GUI] Label _loadingStatusLabel;
+ [GUI] Box _viewBox;
+ [GUI] Label _vSyncStatus;
+ [GUI] Label _volumeStatus;
+ [GUI] Box _listStatusBox;
+ [GUI] Label _loadingStatusLabel;
[GUI] Gtk.ProgressBar _loadingStatusBar;
-#pragma warning restore CS0649, IDE0044, CS0169
+#pragma warning restore CS0649, IDE0044, CS0169, IDE0051
public MainWindow() : this(new Builder("Ryujinx.Ui.MainWindow.glade")) { }
@@ -156,14 +154,14 @@ namespace Ryujinx.Ui
SetWindowSizePosition();
- Icon = new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png");
+ Icon = new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png");
Title = $"Ryujinx {Program.Version}";
// Hide emulation context status bar.
_statusBar.Hide();
// Instantiate HLE objects.
- _virtualFileSystem = VirtualFileSystem.CreateInstance();
+ _virtualFileSystem = VirtualFileSystem.CreateInstance();
_libHacHorizonManager = new LibHacHorizonManager();
_libHacHorizonManager.InitializeFsServer(_virtualFileSystem);
@@ -178,36 +176,36 @@ namespace Ryujinx.Ui
// Consider removing this at some point in the future when we don't need to worry about old saves.
VirtualFileSystem.FixExtraData(_libHacHorizonManager.RyujinxClient);
- _contentManager = new ContentManager(_virtualFileSystem);
- _accountManager = new AccountManager(_libHacHorizonManager.RyujinxClient, CommandLineState.Profile);
+ _contentManager = new ContentManager(_virtualFileSystem);
+ _accountManager = new AccountManager(_libHacHorizonManager.RyujinxClient, CommandLineState.Profile);
_userChannelPersistence = new UserChannelPersistence();
// Instantiate GUI objects.
_applicationLibrary = new ApplicationLibrary(_virtualFileSystem);
- _uiHandler = new GtkHostUiHandler(this);
- _deviceExitStatus = new AutoResetEvent(false);
+ _uiHandler = new GtkHostUiHandler(this);
+ _deviceExitStatus = new AutoResetEvent(false);
WindowStateEvent += WindowStateEvent_Changed;
- DeleteEvent += Window_Close;
- FocusInEvent += MainWindow_FocusInEvent;
- FocusOutEvent += MainWindow_FocusOutEvent;
+ DeleteEvent += Window_Close;
+ FocusInEvent += MainWindow_FocusInEvent;
+ FocusOutEvent += MainWindow_FocusOutEvent;
- _applicationLibrary.ApplicationAdded += Application_Added;
+ _applicationLibrary.ApplicationAdded += Application_Added;
_applicationLibrary.ApplicationCountUpdated += ApplicationCount_Updated;
- _fileMenu.StateChanged += FileMenu_StateChanged;
+ _fileMenu.StateChanged += FileMenu_StateChanged;
_actionMenu.StateChanged += ActionMenu_StateChanged;
_optionMenu.StateChanged += OptionMenu_StateChanged;
_gameTable.ButtonReleaseEvent += Row_Clicked;
- _fullScreen.Activated += FullScreen_Toggled;
+ _fullScreen.Activated += FullScreen_Toggled;
RendererWidgetBase.StatusUpdatedEvent += Update_StatusBar;
ConfigurationState.Instance.System.IgnoreMissingServices.Event += UpdateIgnoreMissingServicesState;
- ConfigurationState.Instance.Graphics.AspectRatio.Event += UpdateAspectRatioState;
- ConfigurationState.Instance.System.EnableDockedMode.Event += UpdateDockedModeState;
- ConfigurationState.Instance.System.AudioVolume.Event += UpdateAudioVolumeState;
+ ConfigurationState.Instance.Graphics.AspectRatio.Event += UpdateAspectRatioState;
+ ConfigurationState.Instance.System.EnableDockedMode.Event += UpdateDockedModeState;
+ ConfigurationState.Instance.System.AudioVolume.Event += UpdateAudioVolumeState;
if (ConfigurationState.Instance.Ui.StartFullscreen)
{
@@ -221,43 +219,73 @@ namespace Ryujinx.Ui
_pauseEmulation.Sensitive = false;
_resumeEmulation.Sensitive = false;
- _nspShown.Active = ConfigurationState.Instance.Ui.ShownFileTypes.NSP.Value;
+ _nspShown.Active = ConfigurationState.Instance.Ui.ShownFileTypes.NSP.Value;
_pfs0Shown.Active = ConfigurationState.Instance.Ui.ShownFileTypes.PFS0.Value;
- _xciShown.Active = ConfigurationState.Instance.Ui.ShownFileTypes.XCI.Value;
- _ncaShown.Active = ConfigurationState.Instance.Ui.ShownFileTypes.NCA.Value;
- _nroShown.Active = ConfigurationState.Instance.Ui.ShownFileTypes.NRO.Value;
- _nsoShown.Active = ConfigurationState.Instance.Ui.ShownFileTypes.NSO.Value;
+ _xciShown.Active = ConfigurationState.Instance.Ui.ShownFileTypes.XCI.Value;
+ _ncaShown.Active = ConfigurationState.Instance.Ui.ShownFileTypes.NCA.Value;
+ _nroShown.Active = ConfigurationState.Instance.Ui.ShownFileTypes.NRO.Value;
+ _nsoShown.Active = ConfigurationState.Instance.Ui.ShownFileTypes.NSO.Value;
- _nspShown.Toggled += NSP_Shown_Toggled;
+ _nspShown.Toggled += NSP_Shown_Toggled;
_pfs0Shown.Toggled += PFS0_Shown_Toggled;
- _xciShown.Toggled += XCI_Shown_Toggled;
- _ncaShown.Toggled += NCA_Shown_Toggled;
- _nroShown.Toggled += NRO_Shown_Toggled;
- _nsoShown.Toggled += NSO_Shown_Toggled;
+ _xciShown.Toggled += XCI_Shown_Toggled;
+ _ncaShown.Toggled += NCA_Shown_Toggled;
+ _nroShown.Toggled += NRO_Shown_Toggled;
+ _nsoShown.Toggled += NSO_Shown_Toggled;
_fileTypesSubMenu.Visible = FileAssociationHelper.IsTypeAssociationSupported;
- if (ConfigurationState.Instance.Ui.GuiColumns.FavColumn) _favToggle.Active = true;
- if (ConfigurationState.Instance.Ui.GuiColumns.IconColumn) _iconToggle.Active = true;
- if (ConfigurationState.Instance.Ui.GuiColumns.AppColumn) _appToggle.Active = true;
- if (ConfigurationState.Instance.Ui.GuiColumns.DevColumn) _developerToggle.Active = true;
- if (ConfigurationState.Instance.Ui.GuiColumns.VersionColumn) _versionToggle.Active = true;
- if (ConfigurationState.Instance.Ui.GuiColumns.TimePlayedColumn) _timePlayedToggle.Active = true;
- if (ConfigurationState.Instance.Ui.GuiColumns.LastPlayedColumn) _lastPlayedToggle.Active = true;
- if (ConfigurationState.Instance.Ui.GuiColumns.FileExtColumn) _fileExtToggle.Active = true;
- if (ConfigurationState.Instance.Ui.GuiColumns.FileSizeColumn) _fileSizeToggle.Active = true;
- if (ConfigurationState.Instance.Ui.GuiColumns.PathColumn) _pathToggle.Active = true;
-
- _favToggle.Toggled += Fav_Toggled;
- _iconToggle.Toggled += Icon_Toggled;
- _appToggle.Toggled += App_Toggled;
- _developerToggle.Toggled += Developer_Toggled;
- _versionToggle.Toggled += Version_Toggled;
+ if (ConfigurationState.Instance.Ui.GuiColumns.FavColumn)
+ {
+ _favToggle.Active = true;
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.IconColumn)
+ {
+ _iconToggle.Active = true;
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.AppColumn)
+ {
+ _appToggle.Active = true;
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.DevColumn)
+ {
+ _developerToggle.Active = true;
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.VersionColumn)
+ {
+ _versionToggle.Active = true;
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.TimePlayedColumn)
+ {
+ _timePlayedToggle.Active = true;
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.LastPlayedColumn)
+ {
+ _lastPlayedToggle.Active = true;
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.FileExtColumn)
+ {
+ _fileExtToggle.Active = true;
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.FileSizeColumn)
+ {
+ _fileSizeToggle.Active = true;
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.PathColumn)
+ {
+ _pathToggle.Active = true;
+ }
+
+ _favToggle.Toggled += Fav_Toggled;
+ _iconToggle.Toggled += Icon_Toggled;
+ _appToggle.Toggled += App_Toggled;
+ _developerToggle.Toggled += Developer_Toggled;
+ _versionToggle.Toggled += Version_Toggled;
_timePlayedToggle.Toggled += TimePlayed_Toggled;
_lastPlayedToggle.Toggled += LastPlayed_Toggled;
- _fileExtToggle.Toggled += FileExt_Toggled;
- _fileSizeToggle.Toggled += FileSize_Toggled;
- _pathToggle.Toggled += Path_Toggled;
+ _fileExtToggle.Toggled += FileExt_Toggled;
+ _fileSizeToggle.Toggled += FileSize_Toggled;
+ _pathToggle.Toggled += Path_Toggled;
_gameTable.Model = _tableStore = new ListStore(
typeof(bool),
@@ -276,7 +304,7 @@ namespace Ryujinx.Ui
_tableStore.SetSortFunc(6, SortHelper.LastPlayedSort);
_tableStore.SetSortFunc(8, SortHelper.FileSizeSort);
- int columnId = ConfigurationState.Instance.Ui.ColumnSort.SortColumnId;
+ int columnId = ConfigurationState.Instance.Ui.ColumnSort.SortColumnId;
bool ascending = ConfigurationState.Instance.Ui.ColumnSort.SortAscending;
_tableStore.SetSortColumnId(columnId, ascending ? SortType.Ascending : SortType.Descending);
@@ -321,10 +349,7 @@ namespace Ryujinx.Ui
private void UpdateDockedModeState(object sender, ReactiveEventArgs<bool> e)
{
- if (_emulationContext != null)
- {
- _emulationContext.System.ChangeDockedModeState(e.NewValue);
- }
+ _emulationContext?.System.ChangeDockedModeState(e.NewValue);
}
private void UpdateAudioVolumeState(object sender, ReactiveEventArgs<float> e)
@@ -354,19 +379,49 @@ namespace Ryujinx.Ui
_gameTable.RemoveColumn(column);
}
- CellRendererToggle favToggle = new CellRendererToggle();
+ CellRendererToggle favToggle = new();
favToggle.Toggled += FavToggle_Toggled;
- if (ConfigurationState.Instance.Ui.GuiColumns.FavColumn) _gameTable.AppendColumn("Fav", favToggle, "active", 0);
- if (ConfigurationState.Instance.Ui.GuiColumns.IconColumn) _gameTable.AppendColumn("Icon", new CellRendererPixbuf(), "pixbuf", 1);
- if (ConfigurationState.Instance.Ui.GuiColumns.AppColumn) _gameTable.AppendColumn("Application", new CellRendererText(), "text", 2);
- if (ConfigurationState.Instance.Ui.GuiColumns.DevColumn) _gameTable.AppendColumn("Developer", new CellRendererText(), "text", 3);
- if (ConfigurationState.Instance.Ui.GuiColumns.VersionColumn) _gameTable.AppendColumn("Version", new CellRendererText(), "text", 4);
- if (ConfigurationState.Instance.Ui.GuiColumns.TimePlayedColumn) _gameTable.AppendColumn("Time Played", new CellRendererText(), "text", 5);
- if (ConfigurationState.Instance.Ui.GuiColumns.LastPlayedColumn) _gameTable.AppendColumn("Last Played", new CellRendererText(), "text", 6);
- if (ConfigurationState.Instance.Ui.GuiColumns.FileExtColumn) _gameTable.AppendColumn("File Ext", new CellRendererText(), "text", 7);
- if (ConfigurationState.Instance.Ui.GuiColumns.FileSizeColumn) _gameTable.AppendColumn("File Size", new CellRendererText(), "text", 8);
- if (ConfigurationState.Instance.Ui.GuiColumns.PathColumn) _gameTable.AppendColumn("Path", new CellRendererText(), "text", 9);
+ if (ConfigurationState.Instance.Ui.GuiColumns.FavColumn)
+ {
+ _gameTable.AppendColumn("Fav", favToggle, "active", 0);
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.IconColumn)
+ {
+ _gameTable.AppendColumn("Icon", new CellRendererPixbuf(), "pixbuf", 1);
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.AppColumn)
+ {
+ _gameTable.AppendColumn("Application", new CellRendererText(), "text", 2);
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.DevColumn)
+ {
+ _gameTable.AppendColumn("Developer", new CellRendererText(), "text", 3);
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.VersionColumn)
+ {
+ _gameTable.AppendColumn("Version", new CellRendererText(), "text", 4);
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.TimePlayedColumn)
+ {
+ _gameTable.AppendColumn("Time Played", new CellRendererText(), "text", 5);
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.LastPlayedColumn)
+ {
+ _gameTable.AppendColumn("Last Played", new CellRendererText(), "text", 6);
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.FileExtColumn)
+ {
+ _gameTable.AppendColumn("File Ext", new CellRendererText(), "text", 7);
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.FileSizeColumn)
+ {
+ _gameTable.AppendColumn("File Size", new CellRendererText(), "text", 8);
+ }
+ if (ConfigurationState.Instance.Ui.GuiColumns.PathColumn)
+ {
+ _gameTable.AppendColumn("Path", new CellRendererText(), "text", 9);
+ }
foreach (TreeViewColumn column in _gameTable.Columns)
{
@@ -426,11 +481,11 @@ namespace Ryujinx.Ui
if (ConfigurationState.Instance.Graphics.GraphicsBackend == GraphicsBackend.Vulkan)
{
string preferredGpu = ConfigurationState.Instance.Graphics.PreferredGpu.Value;
- renderer = new VulkanRenderer(Vk.GetApi(), CreateVulkanSurface, VulkanHelper.GetRequiredInstanceExtensions, preferredGpu);
+ renderer = new Graphics.Vulkan.VulkanRenderer(Vk.GetApi(), CreateVulkanSurface, VulkanHelper.GetRequiredInstanceExtensions, preferredGpu);
}
else
{
- renderer = new OpenGLRenderer();
+ renderer = new Graphics.OpenGL.OpenGLRenderer();
}
BackendThreading threadingMode = ConfigurationState.Instance.Graphics.BackendThreading;
@@ -570,38 +625,38 @@ namespace Ryujinx.Ui
IntegrityCheckLevel fsIntegrityCheckLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None;
- HLE.HLEConfiguration configuration = new HLE.HLEConfiguration(_virtualFileSystem,
- _libHacHorizonManager,
- _contentManager,
- _accountManager,
- _userChannelPersistence,
- renderer,
- deviceDriver,
- memoryConfiguration,
- _uiHandler,
- (SystemLanguage)ConfigurationState.Instance.System.Language.Value,
- (RegionCode)ConfigurationState.Instance.System.Region.Value,
- ConfigurationState.Instance.Graphics.EnableVsync,
- ConfigurationState.Instance.System.EnableDockedMode,
- ConfigurationState.Instance.System.EnablePtc,
- ConfigurationState.Instance.System.EnableInternetAccess,
- fsIntegrityCheckLevel,
- ConfigurationState.Instance.System.FsGlobalAccessLogMode,
- ConfigurationState.Instance.System.SystemTimeOffset,
- ConfigurationState.Instance.System.TimeZone,
- ConfigurationState.Instance.System.MemoryManagerMode,
- ConfigurationState.Instance.System.IgnoreMissingServices,
- ConfigurationState.Instance.Graphics.AspectRatio,
- ConfigurationState.Instance.System.AudioVolume,
- ConfigurationState.Instance.System.UseHypervisor,
- ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value);
+ HLE.HLEConfiguration configuration = new(_virtualFileSystem,
+ _libHacHorizonManager,
+ _contentManager,
+ _accountManager,
+ _userChannelPersistence,
+ renderer,
+ deviceDriver,
+ memoryConfiguration,
+ _uiHandler,
+ (SystemLanguage)ConfigurationState.Instance.System.Language.Value,
+ (RegionCode)ConfigurationState.Instance.System.Region.Value,
+ ConfigurationState.Instance.Graphics.EnableVsync,
+ ConfigurationState.Instance.System.EnableDockedMode,
+ ConfigurationState.Instance.System.EnablePtc,
+ ConfigurationState.Instance.System.EnableInternetAccess,
+ fsIntegrityCheckLevel,
+ ConfigurationState.Instance.System.FsGlobalAccessLogMode,
+ ConfigurationState.Instance.System.SystemTimeOffset,
+ ConfigurationState.Instance.System.TimeZone,
+ ConfigurationState.Instance.System.MemoryManagerMode,
+ ConfigurationState.Instance.System.IgnoreMissingServices,
+ ConfigurationState.Instance.Graphics.AspectRatio,
+ ConfigurationState.Instance.System.AudioVolume,
+ ConfigurationState.Instance.System.UseHypervisor,
+ ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value);
_emulationContext = new HLE.Switch(configuration);
}
private SurfaceKHR CreateVulkanSurface(Instance instance, Vk vk)
{
- return new SurfaceKHR((ulong)((VKRenderer)RendererWidget).CreateWindowSurface(instance.Handle));
+ return new SurfaceKHR((ulong)((VulkanRenderer)RendererWidget).CreateWindowSurface(instance.Handle));
}
private void SetupProgressUiHandlers()
@@ -655,14 +710,16 @@ namespace Ryujinx.Ui
_tableStore.Clear();
- Thread applicationLibraryThread = new Thread(() =>
+ Thread applicationLibraryThread = new(() =>
{
_applicationLibrary.LoadApplications(ConfigurationState.Instance.Ui.GameDirs, ConfigurationState.Instance.System.Language);
_updatingGameTable = false;
- });
- applicationLibraryThread.Name = "GUI.ApplicationLibraryThread";
- applicationLibraryThread.IsBackground = true;
+ })
+ {
+ Name = "GUI.ApplicationLibraryThread",
+ IsBackground = true,
+ };
applicationLibraryThread.Start();
}
@@ -671,11 +728,11 @@ namespace Ryujinx.Ui
{
if (ConfigurationState.Instance.Logger.EnableTrace.Value)
{
- MessageDialog debugWarningDialog = new MessageDialog(this, DialogFlags.Modal, MessageType.Warning, ButtonsType.YesNo, null)
+ MessageDialog debugWarningDialog = new(this, DialogFlags.Modal, MessageType.Warning, ButtonsType.YesNo, null)
{
- Title = "Ryujinx - Warning",
- Text = "You have trace logging enabled, which is designed to be used by developers only.",
- SecondaryText = "For optimal performance, it's recommended to disable trace logging. Would you like to disable trace logging now?"
+ Title = "Ryujinx - Warning",
+ Text = "You have trace logging enabled, which is designed to be used by developers only.",
+ SecondaryText = "For optimal performance, it's recommended to disable trace logging. Would you like to disable trace logging now?",
};
if (debugWarningDialog.Run() == (int)ResponseType.Yes)
@@ -689,11 +746,11 @@ namespace Ryujinx.Ui
if (!string.IsNullOrWhiteSpace(ConfigurationState.Instance.Graphics.ShadersDumpPath.Value))
{
- MessageDialog shadersDumpWarningDialog = new MessageDialog(this, DialogFlags.Modal, MessageType.Warning, ButtonsType.YesNo, null)
+ MessageDialog shadersDumpWarningDialog = new(this, DialogFlags.Modal, MessageType.Warning, ButtonsType.YesNo, null)
{
- Title = "Ryujinx - Warning",
- Text = "You have shader dumping enabled, which is designed to be used by developers only.",
- SecondaryText = "For optimal performance, it's recommended to disable shader dumping. Would you like to disable shader dumping now?"
+ Title = "Ryujinx - Warning",
+ Text = "You have shader dumping enabled, which is designed to be used by developers only.",
+ SecondaryText = "For optimal performance, it's recommended to disable shader dumping. Would you like to disable shader dumping now?",
};
if (shadersDumpWarningDialog.Run() == (int)ResponseType.Yes)
@@ -857,18 +914,18 @@ namespace Ryujinx.Ui
Thread windowThread = new(CreateGameWindow)
{
- Name = "GUI.WindowThread"
+ Name = "GUI.WindowThread",
};
windowThread.Start();
- _gameLoaded = true;
+ _gameLoaded = true;
_actionMenu.Sensitive = true;
UpdateMenuItem.Sensitive = false;
_lastScannedAmiiboId = "";
- _firmwareInstallFile.Sensitive = false;
+ _firmwareInstallFile.Sensitive = false;
_firmwareInstallDirectory.Sensitive = false;
DiscordIntegrationModule.SwitchToPlayingState(_emulationContext.Processes.ActiveApplication.ProgramIdText,
@@ -885,11 +942,11 @@ namespace Ryujinx.Ui
{
if (ConfigurationState.Instance.Graphics.GraphicsBackend == GraphicsBackend.Vulkan)
{
- return new VKRenderer(InputManager, ConfigurationState.Instance.Logger.GraphicsDebugLevel);
+ return new VulkanRenderer(InputManager, ConfigurationState.Instance.Logger.GraphicsDebugLevel);
}
else
{
- return new GlRenderer(InputManager, ConfigurationState.Instance.Logger.GraphicsDebugLevel);
+ return new OpenGLRenderer(InputManager, ConfigurationState.Instance.Logger.GraphicsDebugLevel);
}
}
@@ -1030,20 +1087,20 @@ namespace Ryujinx.Ui
}
}
- public void UpdateGraphicsConfig()
+ public static void UpdateGraphicsConfig()
{
- int resScale = ConfigurationState.Instance.Graphics.ResScale;
+ int resScale = ConfigurationState.Instance.Graphics.ResScale;
float resScaleCustom = ConfigurationState.Instance.Graphics.ResScaleCustom;
- Graphics.Gpu.GraphicsConfig.ResScale = (resScale == -1) ? resScaleCustom : resScale;
- Graphics.Gpu.GraphicsConfig.MaxAnisotropy = ConfigurationState.Instance.Graphics.MaxAnisotropy;
- Graphics.Gpu.GraphicsConfig.ShadersDumpPath = ConfigurationState.Instance.Graphics.ShadersDumpPath;
- Graphics.Gpu.GraphicsConfig.EnableShaderCache = ConfigurationState.Instance.Graphics.EnableShaderCache;
+ Graphics.Gpu.GraphicsConfig.ResScale = (resScale == -1) ? resScaleCustom : resScale;
+ Graphics.Gpu.GraphicsConfig.MaxAnisotropy = ConfigurationState.Instance.Graphics.MaxAnisotropy;
+ Graphics.Gpu.GraphicsConfig.ShadersDumpPath = ConfigurationState.Instance.Graphics.ShadersDumpPath;
+ Graphics.Gpu.GraphicsConfig.EnableShaderCache = ConfigurationState.Instance.Graphics.EnableShaderCache;
Graphics.Gpu.GraphicsConfig.EnableTextureRecompression = ConfigurationState.Instance.Graphics.EnableTextureRecompression;
- Graphics.Gpu.GraphicsConfig.EnableMacroHLE = ConfigurationState.Instance.Graphics.EnableMacroHLE;
+ Graphics.Gpu.GraphicsConfig.EnableMacroHLE = ConfigurationState.Instance.Graphics.EnableMacroHLE;
}
- public void SaveConfig()
+ public static void SaveConfig()
{
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
}
@@ -1105,7 +1162,7 @@ namespace Ryujinx.Ui
Application.Invoke(delegate
{
_progressLabel.Text = $"{args.NumAppsLoaded}/{args.NumAppsFound} Games Loaded";
- float barValue = 0;
+ float barValue = 0;
if (args.NumAppsFound != 0)
{
@@ -1126,12 +1183,12 @@ namespace Ryujinx.Ui
{
Application.Invoke(delegate
{
- _gameStatus.Text = args.GameStatus;
- _fifoStatus.Text = args.FifoStatus;
- _gpuName.Text = args.GpuName;
- _dockedMode.Text = args.DockedMode;
- _aspectRatio.Text = args.AspectRatio;
- _gpuBackend.Text = args.GpuBackend;
+ _gameStatus.Text = args.GameStatus;
+ _fifoStatus.Text = args.FifoStatus;
+ _gpuName.Text = args.GpuName;
+ _dockedMode.Text = args.DockedMode;
+ _aspectRatio.Text = args.AspectRatio;
+ _gpuBackend.Text = args.GpuBackend;
_volumeStatus.Text = GetVolumeLabelText(args.Volume);
if (args.VSyncEnabled)
@@ -1151,8 +1208,8 @@ namespace Ryujinx.Ui
{
_tableStore.GetIter(out TreeIter treeIter, new TreePath(args.Path));
- string titleId = _tableStore.GetValue(treeIter, 2).ToString().Split("\n")[1].ToLower();
- bool newToggleValue = !(bool)_tableStore.GetValue(treeIter, 0);
+ string titleId = _tableStore.GetValue(treeIter, 2).ToString().Split("\n")[1].ToLower();
+ bool newToggleValue = !(bool)_tableStore.GetValue(treeIter, 0);
_tableStore.SetValue(treeIter, 0, newToggleValue);
@@ -1166,7 +1223,7 @@ namespace Ryujinx.Ui
{
TreeViewColumn column = (TreeViewColumn)sender;
- ConfigurationState.Instance.Ui.ColumnSort.SortColumnId.Value = column.SortColumnId;
+ ConfigurationState.Instance.Ui.ColumnSort.SortColumnId.Value = column.SortColumnId;
ConfigurationState.Instance.Ui.ColumnSort.SortAscending.Value = column.SortOrder == SortType.Ascending;
SaveConfig();
@@ -1193,7 +1250,7 @@ namespace Ryujinx.Ui
ConfigurationState.Instance.System.EnableDockedMode.Value = !ConfigurationState.Instance.System.EnableDockedMode.Value;
}
- private string GetVolumeLabelText(float volume)
+ private static string GetVolumeLabelText(float volume)
{
string icon = volume == 0 ? "🔇" : "🔊";
@@ -1237,8 +1294,8 @@ namespace Ryujinx.Ui
}
string titleFilePath = _tableStore.GetValue(treeIter, 9).ToString();
- string titleName = _tableStore.GetValue(treeIter, 2).ToString().Split("\n")[0];
- string titleId = _tableStore.GetValue(treeIter, 2).ToString().Split("\n")[1].ToLower();
+ string titleName = _tableStore.GetValue(treeIter, 2).ToString().Split("\n")[0];
+ string titleId = _tableStore.GetValue(treeIter, 2).ToString().Split("\n")[1].ToLower();
BlitStruct<ApplicationControlProperty> controlData = (BlitStruct<ApplicationControlProperty>)_tableStore.GetValue(treeIter, 10);
@@ -1247,43 +1304,41 @@ namespace Ryujinx.Ui
private void Load_Application_File(object sender, EventArgs args)
{
- using (FileChooserNative fileChooser = new FileChooserNative("Choose the file to open", this, FileChooserAction.Open, "Open", "Cancel"))
+ using FileChooserNative fileChooser = new("Choose the file to open", this, FileChooserAction.Open, "Open", "Cancel");
+
+ FileFilter filter = new()
{
- FileFilter filter = new FileFilter()
- {
- Name = "Switch Executables"
- };
- filter.AddPattern("*.xci");
- filter.AddPattern("*.nsp");
- filter.AddPattern("*.pfs0");
- filter.AddPattern("*.nca");
- filter.AddPattern("*.nro");
- filter.AddPattern("*.nso");
+ Name = "Switch Executables",
+ };
+ filter.AddPattern("*.xci");
+ filter.AddPattern("*.nsp");
+ filter.AddPattern("*.pfs0");
+ filter.AddPattern("*.nca");
+ filter.AddPattern("*.nro");
+ filter.AddPattern("*.nso");
- fileChooser.AddFilter(filter);
+ fileChooser.AddFilter(filter);
- if (fileChooser.Run() == (int)ResponseType.Accept)
- {
- RunApplication(fileChooser.Filename);
- }
+ if (fileChooser.Run() == (int)ResponseType.Accept)
+ {
+ RunApplication(fileChooser.Filename);
}
}
private void Load_Application_Folder(object sender, EventArgs args)
{
- using (FileChooserNative fileChooser = new FileChooserNative("Choose the folder to open", this, FileChooserAction.SelectFolder, "Open", "Cancel"))
+ using FileChooserNative fileChooser = new("Choose the folder to open", this, FileChooserAction.SelectFolder, "Open", "Cancel");
+
+ if (fileChooser.Run() == (int)ResponseType.Accept)
{
- if (fileChooser.Run() == (int)ResponseType.Accept)
- {
- RunApplication(fileChooser.Filename);
- }
+ RunApplication(fileChooser.Filename);
}
}
private void FileMenu_StateChanged(object o, StateChangedArgs args)
{
- _appletMenu.Sensitive = _emulationContext == null && _contentManager.GetCurrentFirmwareVersion() != null && _contentManager.GetCurrentFirmwareVersion().Major > 3;
- _loadApplicationFile.Sensitive = _emulationContext == null;
+ _appletMenu.Sensitive = _emulationContext == null && _contentManager.GetCurrentFirmwareVersion() != null && _contentManager.GetCurrentFirmwareVersion().Major > 3;
+ _loadApplicationFile.Sensitive = _emulationContext == null;
_loadApplicationFolder.Sensitive = _emulationContext == null;
}
@@ -1332,7 +1387,7 @@ namespace Ryujinx.Ui
private void SetWindowSizePosition()
{
- DefaultWidth = ConfigurationState.Instance.Ui.WindowStartup.WindowSizeWidth;
+ DefaultWidth = ConfigurationState.Instance.Ui.WindowStartup.WindowSizeWidth;
DefaultHeight = ConfigurationState.Instance.Ui.WindowStartup.WindowSizeHeight;
Move(ConfigurationState.Instance.Ui.WindowStartup.WindowPositionX, ConfigurationState.Instance.Ui.WindowStartup.WindowPositionY);
@@ -1399,11 +1454,11 @@ namespace Ryujinx.Ui
private void Installer_File_Pressed(object o, EventArgs args)
{
- FileChooserNative fileChooser = new FileChooserNative("Choose the firmware file to open", this, FileChooserAction.Open, "Open", "Cancel");
+ FileChooserNative fileChooser = new("Choose the firmware file to open", this, FileChooserAction.Open, "Open", "Cancel");
- FileFilter filter = new FileFilter
+ FileFilter filter = new()
{
- Name = "Switch Firmware Files"
+ Name = "Switch Firmware Files",
};
filter.AddPattern("*.zip");
filter.AddPattern("*.xci");
@@ -1415,7 +1470,7 @@ namespace Ryujinx.Ui
private void Installer_Directory_Pressed(object o, EventArgs args)
{
- FileChooserNative directoryChooser = new FileChooserNative("Choose the firmware directory to open", this, FileChooserAction.SelectFolder, "Open", "Cancel");
+ FileChooserNative directoryChooser = new("Choose the firmware directory to open", this, FileChooserAction.SelectFolder, "Open", "Cancel");
HandleInstallerDialog(directoryChooser);
}
@@ -1460,7 +1515,7 @@ namespace Ryujinx.Ui
{
Logger.Info?.Print(LogClass.Application, $"Installing firmware {firmwareVersion.VersionString}");
- Thread thread = new Thread(() =>
+ Thread thread = new(() =>
{
Application.Invoke(delegate
{
@@ -1483,7 +1538,7 @@ namespace Ryujinx.Ui
// Purge Applet Cache.
- DirectoryInfo miiEditorCacheFolder = new DirectoryInfo(System.IO.Path.Combine(AppDataManager.GamesDirPath, "0100000000001009", "cache"));
+ DirectoryInfo miiEditorCacheFolder = new(System.IO.Path.Combine(AppDataManager.GamesDirPath, "0100000000001009", "cache"));
if (miiEditorCacheFolder.Exists)
{
@@ -1504,9 +1559,10 @@ namespace Ryujinx.Ui
{
RefreshFirmwareLabel();
}
- });
-
- thread.Name = "GUI.FirmwareInstallerThread";
+ })
+ {
+ Name = "GUI.FirmwareInstallerThread",
+ };
thread.Start();
}
}
@@ -1571,7 +1627,7 @@ namespace Ryujinx.Ui
else
{
// otherwise, clear state.
- _userChannelPersistence = new UserChannelPersistence();
+ _userChannelPersistence = new UserChannelPersistence();
_currentEmulatedGamePath = null;
_actionMenu.Sensitive = false;
_firmwareInstallFile.Sensitive = true;
@@ -1616,7 +1672,7 @@ namespace Ryujinx.Ui
private void Settings_Pressed(object sender, EventArgs args)
{
- SettingsWindow settingsWindow = new SettingsWindow(this, _virtualFileSystem, _contentManager);
+ SettingsWindow settingsWindow = new(this, _virtualFileSystem, _contentManager);
settingsWindow.SetSizeRequest((int)(settingsWindow.DefaultWidth * Program.WindowScaleFactor), (int)(settingsWindow.DefaultHeight * Program.WindowScaleFactor));
settingsWindow.Show();
@@ -1648,7 +1704,7 @@ namespace Ryujinx.Ui
private void ManageUserProfiles_Pressed(object sender, EventArgs args)
{
- UserProfilesManagerWindow userProfilesManagerWindow = new UserProfilesManagerWindow(_accountManager, _contentManager, _virtualFileSystem);
+ UserProfilesManagerWindow userProfilesManagerWindow = new(_accountManager, _contentManager, _virtualFileSystem);
userProfilesManagerWindow.SetSizeRequest((int)(userProfilesManagerWindow.DefaultWidth * Program.WindowScaleFactor), (int)(userProfilesManagerWindow.DefaultHeight * Program.WindowScaleFactor));
userProfilesManagerWindow.Show();
@@ -1656,15 +1712,12 @@ namespace Ryujinx.Ui
private void Simulate_WakeUp_Message_Pressed(object sender, EventArgs args)
{
- if (_emulationContext != null)
- {
- _emulationContext.System.SimulateWakeUpMessage();
- }
+ _emulationContext?.System.SimulateWakeUpMessage();
}
private void ActionMenu_StateChanged(object o, StateChangedArgs args)
{
- _scanAmiibo.Sensitive = _emulationContext != null && _emulationContext.System.SearchingForAmiibo(out int _);
+ _scanAmiibo.Sensitive = _emulationContext != null && _emulationContext.System.SearchingForAmiibo(out int _);
_takeScreenshot.Sensitive = _emulationContext != null;
}
@@ -1672,12 +1725,12 @@ namespace Ryujinx.Ui
{
if (_emulationContext.System.SearchingForAmiibo(out int deviceId))
{
- AmiiboWindow amiiboWindow = new AmiiboWindow
+ AmiiboWindow amiiboWindow = new()
{
LastScannedAmiiboShowAll = _lastScannedAmiiboShowAll,
- LastScannedAmiiboId = _lastScannedAmiiboId,
- DeviceId = deviceId,
- TitleId = _emulationContext.Processes.ActiveApplication.ProgramIdText.ToUpper()
+ LastScannedAmiiboId = _lastScannedAmiiboId,
+ DeviceId = deviceId,
+ TitleId = _emulationContext.Processes.ActiveApplication.ProgramIdText.ToUpper(),
};
amiiboWindow.DeleteEvent += AmiiboWindow_DeleteEvent;
@@ -1702,7 +1755,7 @@ namespace Ryujinx.Ui
{
if (((AmiiboWindow)sender).AmiiboId != "" && ((AmiiboWindow)sender).Response == ResponseType.Ok)
{
- _lastScannedAmiiboId = ((AmiiboWindow)sender).AmiiboId;
+ _lastScannedAmiiboId = ((AmiiboWindow)sender).AmiiboId;
_lastScannedAmiiboShowAll = ((AmiiboWindow)sender).LastScannedAmiiboShowAll;
_emulationContext.System.ScanAmiibo(((AmiiboWindow)sender).DeviceId, ((AmiiboWindow)sender).AmiiboId, ((AmiiboWindow)sender).UseRandomUuid);
@@ -1722,7 +1775,7 @@ namespace Ryujinx.Ui
private void About_Pressed(object sender, EventArgs args)
{
- AboutWindow aboutWindow = new AboutWindow();
+ AboutWindow aboutWindow = new();
aboutWindow.SetSizeRequest((int)(aboutWindow.DefaultWidth * Program.WindowScaleFactor), (int)(aboutWindow.DefaultHeight * Program.WindowScaleFactor));
aboutWindow.Show();
@@ -1824,7 +1877,7 @@ namespace Ryujinx.Ui
UpdateGameTable();
}
- private void XCI_Shown_Toggled (object sender, EventArgs args)
+ private void XCI_Shown_Toggled(object sender, EventArgs args)
{
ConfigurationState.Instance.Ui.ShownFileTypes.XCI.Value = _xciShown.Active;
@@ -1832,7 +1885,7 @@ namespace Ryujinx.Ui
UpdateGameTable();
}
- private void NCA_Shown_Toggled (object sender, EventArgs args)
+ private void NCA_Shown_Toggled(object sender, EventArgs args)
{
ConfigurationState.Instance.Ui.ShownFileTypes.NCA.Value = _ncaShown.Active;
@@ -1840,7 +1893,7 @@ namespace Ryujinx.Ui
UpdateGameTable();
}
- private void NRO_Shown_Toggled (object sender, EventArgs args)
+ private void NRO_Shown_Toggled(object sender, EventArgs args)
{
ConfigurationState.Instance.Ui.ShownFileTypes.NRO.Value = _nroShown.Active;
@@ -1848,7 +1901,7 @@ namespace Ryujinx.Ui
UpdateGameTable();
}
- private void NSO_Shown_Toggled (object sender, EventArgs args)
+ private void NSO_Shown_Toggled(object sender, EventArgs args)
{
ConfigurationState.Instance.Ui.ShownFileTypes.NSO.Value = _nsoShown.Active;
diff --git a/src/Ryujinx/Ui/GLRenderer.cs b/src/Ryujinx/Ui/OpenGLRenderer.cs
index c5699691..2ca791fe 100644
--- a/src/Ryujinx/Ui/GLRenderer.cs
+++ b/src/Ryujinx/Ui/OpenGLRenderer.cs
@@ -1,7 +1,6 @@
using OpenTK.Graphics.OpenGL;
using Ryujinx.Common.Configuration;
using Ryujinx.Common.Logging;
-using Ryujinx.Graphics.OpenGL;
using Ryujinx.Input.HLE;
using SPB.Graphics;
using SPB.Graphics.Exceptions;
@@ -15,16 +14,16 @@ using System.Runtime.InteropServices;
namespace Ryujinx.Ui
{
- public partial class GlRenderer : RendererWidgetBase
+ public partial class OpenGLRenderer : RendererWidgetBase
{
- private GraphicsDebugLevel _glLogLevel;
+ private readonly GraphicsDebugLevel _glLogLevel;
private bool _initializedOpenGL;
private OpenGLContextBase _openGLContext;
private SwappableNativeWindowBase _nativeWindow;
- public GlRenderer(InputManager inputManager, GraphicsDebugLevel glLogLevel) : base(inputManager, glLogLevel)
+ public OpenGLRenderer(InputManager inputManager, GraphicsDebugLevel glLogLevel) : base(inputManager, glLogLevel)
{
_glLogLevel = glLogLevel;
}
@@ -93,7 +92,7 @@ namespace Ryujinx.Ui
public override void InitializeRenderer()
{
// First take exclusivity on the OpenGL context.
- ((OpenGLRenderer)Renderer).InitializeBackgroundContext(SPBOpenGLContext.CreateBackgroundContext(_openGLContext));
+ ((Graphics.OpenGL.OpenGLRenderer)Renderer).InitializeBackgroundContext(SPBOpenGLContext.CreateBackgroundContext(_openGLContext));
_openGLContext.MakeCurrent(_nativeWindow);
@@ -140,4 +139,4 @@ namespace Ryujinx.Ui
_openGLContext?.Dispose();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/OpenToolkitBindingsContext.cs b/src/Ryujinx/Ui/OpenToolkitBindingsContext.cs
index ec4111fa..b35673eb 100644
--- a/src/Ryujinx/Ui/OpenToolkitBindingsContext.cs
+++ b/src/Ryujinx/Ui/OpenToolkitBindingsContext.cs
@@ -5,7 +5,7 @@ namespace Ryujinx.Ui
{
public class OpenToolkitBindingsContext : OpenTK.IBindingsContext
{
- private IBindingsContext _bindingContext;
+ private readonly IBindingsContext _bindingContext;
public OpenToolkitBindingsContext(IBindingsContext bindingsContext)
{
diff --git a/src/Ryujinx/Ui/RendererWidgetBase.cs b/src/Ryujinx/Ui/RendererWidgetBase.cs
index 87ff7f6c..0ee34443 100644
--- a/src/Ryujinx/Ui/RendererWidgetBase.cs
+++ b/src/Ryujinx/Ui/RendererWidgetBase.cs
@@ -21,14 +21,13 @@ using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
+using Image = SixLabors.ImageSharp.Image;
+using Key = Ryujinx.Input.Key;
+using ScalingFilter = Ryujinx.Graphics.GAL.ScalingFilter;
+using Switch = Ryujinx.HLE.Switch;
namespace Ryujinx.Ui
{
- using Image = SixLabors.ImageSharp.Image;
- using Key = Input.Key;
- using ScalingFilter = Graphics.GAL.ScalingFilter;
- using Switch = HLE.Switch;
-
public abstract class RendererWidgetBase : DrawingArea
{
private const int SwitchPanelWidth = 1280;
@@ -71,12 +70,12 @@ namespace Ryujinx.Ui
// Hide Cursor
const int CursorHideIdleTime = 5; // seconds
- private static readonly Cursor _invisibleCursor = new Cursor(Display.Default, CursorType.BlankCursor);
+ private static readonly Cursor _invisibleCursor = new(Display.Default, CursorType.BlankCursor);
private long _lastCursorMoveTime;
private HideCursorMode _hideCursorMode;
- private InputManager _inputManager;
- private IKeyboard _keyboardInterface;
- private GraphicsDebugLevel _glLogLevel;
+ private readonly InputManager _inputManager;
+ private readonly IKeyboard _keyboardInterface;
+ private readonly GraphicsDebugLevel _glLogLevel;
private string _gpuBackendName;
private string _gpuVendorName;
private bool _isMouseInClient;
@@ -165,7 +164,7 @@ namespace Ryujinx.Ui
Window.Cursor = _invisibleCursor;
break;
default:
- throw new ArgumentOutOfRangeException();
+ throw new ArgumentOutOfRangeException(nameof(state));
}
});
}
@@ -379,12 +378,12 @@ namespace Ryujinx.Ui
{
lock (this)
{
- var currentTime = DateTime.Now;
- string filename = $"ryujinx_capture_{currentTime.Year}-{currentTime.Month:D2}-{currentTime.Day:D2}_{currentTime.Hour:D2}-{currentTime.Minute:D2}-{currentTime.Second:D2}.png";
- string directory = AppDataManager.Mode switch
+ var currentTime = DateTime.Now;
+ string filename = $"ryujinx_capture_{currentTime.Year}-{currentTime.Month:D2}-{currentTime.Day:D2}_{currentTime.Hour:D2}-{currentTime.Minute:D2}-{currentTime.Second:D2}.png";
+ string directory = AppDataManager.Mode switch
{
AppDataManager.LaunchMode.Portable or AppDataManager.LaunchMode.Custom => System.IO.Path.Combine(AppDataManager.BaseDirPath, "screenshots"),
- _ => System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "Ryujinx")
+ _ => System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "Ryujinx"),
};
string path = System.IO.Path.Combine(directory, filename);
@@ -415,7 +414,7 @@ namespace Ryujinx.Ui
image.SaveAsPng(path, new PngEncoder()
{
- ColorType = PngColorType.Rgb
+ ColorType = PngColorType.Rgb,
});
image.Dispose();
@@ -524,30 +523,30 @@ namespace Ryujinx.Ui
{
parent.Present();
- var activeProcess = Device.Processes.ActiveApplication;
+ var activeProcess = Device.Processes.ActiveApplication;
- string titleNameSection = string.IsNullOrWhiteSpace(activeProcess.Name) ? string.Empty : $" {activeProcess.Name}";
+ string titleNameSection = string.IsNullOrWhiteSpace(activeProcess.Name) ? string.Empty : $" {activeProcess.Name}";
string titleVersionSection = string.IsNullOrWhiteSpace(activeProcess.DisplayVersion) ? string.Empty : $" v{activeProcess.DisplayVersion}";
- string titleIdSection = $" ({activeProcess.ProgramIdText.ToUpper()})";
- string titleArchSection = activeProcess.Is64Bit ? " (64-bit)" : " (32-bit)";
+ string titleIdSection = $" ({activeProcess.ProgramIdText.ToUpper()})";
+ string titleArchSection = activeProcess.Is64Bit ? " (64-bit)" : " (32-bit)";
parent.Title = $"Ryujinx {Program.Version} -{titleNameSection}{titleVersionSection}{titleIdSection}{titleArchSection}";
});
- Thread renderLoopThread = new Thread(Render)
+ Thread renderLoopThread = new(Render)
{
- Name = "GUI.RenderLoop"
+ Name = "GUI.RenderLoop",
};
renderLoopThread.Start();
- Thread nvStutterWorkaround = null;
+ Thread nvidiaStutterWorkaround = null;
if (Renderer is Graphics.OpenGL.OpenGLRenderer)
{
- nvStutterWorkaround = new Thread(NVStutterWorkaround)
+ nvidiaStutterWorkaround = new Thread(NvidiaStutterWorkaround)
{
- Name = "GUI.NVStutterWorkaround"
+ Name = "GUI.NvidiaStutterWorkaround",
};
- nvStutterWorkaround.Start();
+ nvidiaStutterWorkaround.Start();
}
MainLoop();
@@ -556,7 +555,7 @@ namespace Ryujinx.Ui
// We only need to wait for all commands submitted during the main gpu loop to be processed.
_gpuDoneEvent.WaitOne();
_gpuDoneEvent.Dispose();
- nvStutterWorkaround?.Join();
+ nvidiaStutterWorkaround?.Join();
Exit();
}
@@ -584,7 +583,7 @@ namespace Ryujinx.Ui
}
}
- private void NVStutterWorkaround()
+ private void NvidiaStutterWorkaround()
{
while (_isActive)
{
@@ -752,7 +751,7 @@ namespace Ryujinx.Ui
ResScaleUp = 1 << 5,
ResScaleDown = 1 << 6,
VolumeUp = 1 << 7,
- VolumeDown = 1 << 8
+ VolumeDown = 1 << 8,
}
private KeyboardHotkeyState GetHotkeyState()
@@ -807,4 +806,4 @@ namespace Ryujinx.Ui
return state;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/SPBOpenGLContext.cs b/src/Ryujinx/Ui/SPBOpenGLContext.cs
index 97644269..b6195a9c 100644
--- a/src/Ryujinx/Ui/SPBOpenGLContext.cs
+++ b/src/Ryujinx/Ui/SPBOpenGLContext.cs
@@ -9,8 +9,8 @@ namespace Ryujinx.Ui
{
class SPBOpenGLContext : IOpenGLContext
{
- private OpenGLContextBase _context;
- private NativeWindowBase _window;
+ private readonly OpenGLContextBase _context;
+ private readonly NativeWindowBase _window;
private SPBOpenGLContext(OpenGLContextBase context, NativeWindowBase window)
{
diff --git a/src/Ryujinx/Ui/StatusUpdatedEventArgs.cs b/src/Ryujinx/Ui/StatusUpdatedEventArgs.cs
index 046597b0..949390ca 100644
--- a/src/Ryujinx/Ui/StatusUpdatedEventArgs.cs
+++ b/src/Ryujinx/Ui/StatusUpdatedEventArgs.cs
@@ -4,8 +4,8 @@ namespace Ryujinx.Ui
{
public class StatusUpdatedEventArgs : EventArgs
{
- public bool VSyncEnabled;
- public float Volume;
+ public bool VSyncEnabled;
+ public float Volume;
public string DockedMode;
public string AspectRatio;
public string GameStatus;
@@ -16,13 +16,13 @@ namespace Ryujinx.Ui
public StatusUpdatedEventArgs(bool vSyncEnabled, float volume, string gpuBackend, string dockedMode, string aspectRatio, string gameStatus, string fifoStatus, string gpuName)
{
VSyncEnabled = vSyncEnabled;
- Volume = volume;
- GpuBackend = gpuBackend;
- DockedMode = dockedMode;
- AspectRatio = aspectRatio;
- GameStatus = gameStatus;
- FifoStatus = fifoStatus;
- GpuName = gpuName;
+ Volume = volume;
+ GpuBackend = gpuBackend;
+ DockedMode = dockedMode;
+ AspectRatio = aspectRatio;
+ GameStatus = gameStatus;
+ FifoStatus = fifoStatus;
+ GpuName = gpuName;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/VKRenderer.cs b/src/Ryujinx/Ui/VulkanRenderer.cs
index d2106c58..ecb3fa24 100644
--- a/src/Ryujinx/Ui/VKRenderer.cs
+++ b/src/Ryujinx/Ui/VulkanRenderer.cs
@@ -12,12 +12,12 @@ using System.Runtime.InteropServices;
namespace Ryujinx.Ui
{
- public partial class VKRenderer : RendererWidgetBase
+ public partial class VulkanRenderer : RendererWidgetBase
{
public NativeWindowBase NativeWindow { get; private set; }
private UpdateBoundsCallbackDelegate _updateBoundsCallback;
- public VKRenderer(InputManager inputManager, GraphicsDebugLevel glLogLevel) : base(inputManager, glLogLevel) { }
+ public VulkanRenderer(InputManager inputManager, GraphicsDebugLevel glLogLevel) : base(inputManager, glLogLevel) { }
private NativeWindowBase RetrieveNativeWindow()
{
diff --git a/src/Ryujinx/Ui/Widgets/GameTableContextMenu.Designer.cs b/src/Ryujinx/Ui/Widgets/GameTableContextMenu.Designer.cs
index 5a0563d9..0f7b4f22 100644
--- a/src/Ryujinx/Ui/Widgets/GameTableContextMenu.Designer.cs
+++ b/src/Ryujinx/Ui/Widgets/GameTableContextMenu.Designer.cs
@@ -12,12 +12,12 @@ namespace Ryujinx.Ui.Widgets
private MenuItem _manageCheatMenuItem;
private MenuItem _openTitleModDirMenuItem;
private MenuItem _openTitleSdModDirMenuItem;
- private Menu _extractSubMenu;
+ private Menu _extractSubMenu;
private MenuItem _extractMenuItem;
private MenuItem _extractRomFsMenuItem;
private MenuItem _extractExeFsMenuItem;
private MenuItem _extractLogoMenuItem;
- private Menu _manageSubMenu;
+ private Menu _manageSubMenu;
private MenuItem _manageCacheMenuItem;
private MenuItem _purgePtcCacheMenuItem;
private MenuItem _purgeShaderCacheMenuItem;
@@ -31,7 +31,7 @@ namespace Ryujinx.Ui.Widgets
//
_openSaveUserDirMenuItem = new MenuItem("Open User Save Directory")
{
- TooltipText = "Open the directory which contains Application's User Saves."
+ TooltipText = "Open the directory which contains Application's User Saves.",
};
_openSaveUserDirMenuItem.Activated += OpenSaveUserDir_Clicked;
@@ -40,7 +40,7 @@ namespace Ryujinx.Ui.Widgets
//
_openSaveDeviceDirMenuItem = new MenuItem("Open Device Save Directory")
{
- TooltipText = "Open the directory which contains Application's Device Saves."
+ TooltipText = "Open the directory which contains Application's Device Saves.",
};
_openSaveDeviceDirMenuItem.Activated += OpenSaveDeviceDir_Clicked;
@@ -49,7 +49,7 @@ namespace Ryujinx.Ui.Widgets
//
_openSaveBcatDirMenuItem = new MenuItem("Open BCAT Save Directory")
{
- TooltipText = "Open the directory which contains Application's BCAT Saves."
+ TooltipText = "Open the directory which contains Application's BCAT Saves.",
};
_openSaveBcatDirMenuItem.Activated += OpenSaveBcatDir_Clicked;
@@ -58,7 +58,7 @@ namespace Ryujinx.Ui.Widgets
//
_manageTitleUpdatesMenuItem = new MenuItem("Manage Title Updates")
{
- TooltipText = "Open the Title Update management window"
+ TooltipText = "Open the Title Update management window",
};
_manageTitleUpdatesMenuItem.Activated += ManageTitleUpdates_Clicked;
@@ -67,7 +67,7 @@ namespace Ryujinx.Ui.Widgets
//
_manageDlcMenuItem = new MenuItem("Manage DLC")
{
- TooltipText = "Open the DLC management window"
+ TooltipText = "Open the DLC management window",
};
_manageDlcMenuItem.Activated += ManageDlc_Clicked;
@@ -76,7 +76,7 @@ namespace Ryujinx.Ui.Widgets
//
_manageCheatMenuItem = new MenuItem("Manage Cheats")
{
- TooltipText = "Open the Cheat management window"
+ TooltipText = "Open the Cheat management window",
};
_manageCheatMenuItem.Activated += ManageCheats_Clicked;
@@ -85,7 +85,7 @@ namespace Ryujinx.Ui.Widgets
//
_openTitleModDirMenuItem = new MenuItem("Open Mods Directory")
{
- TooltipText = "Open the directory which contains Application's Mods."
+ TooltipText = "Open the directory which contains Application's Mods.",
};
_openTitleModDirMenuItem.Activated += OpenTitleModDir_Clicked;
@@ -94,7 +94,7 @@ namespace Ryujinx.Ui.Widgets
//
_openTitleSdModDirMenuItem = new MenuItem("Open Atmosphere Mods Directory")
{
- TooltipText = "Open the alternative SD card atmosphere directory which contains the Application's Mods."
+ TooltipText = "Open the alternative SD card atmosphere directory which contains the Application's Mods.",
};
_openTitleSdModDirMenuItem.Activated += OpenTitleSdModDir_Clicked;
@@ -116,7 +116,7 @@ namespace Ryujinx.Ui.Widgets
//
_extractRomFsMenuItem = new MenuItem("RomFS")
{
- TooltipText = "Extract the RomFS section from Application's current config (including updates)."
+ TooltipText = "Extract the RomFS section from Application's current config (including updates).",
};
_extractRomFsMenuItem.Activated += ExtractRomFs_Clicked;
@@ -125,7 +125,7 @@ namespace Ryujinx.Ui.Widgets
//
_extractExeFsMenuItem = new MenuItem("ExeFS")
{
- TooltipText = "Extract the ExeFS section from Application's current config (including updates)."
+ TooltipText = "Extract the ExeFS section from Application's current config (including updates).",
};
_extractExeFsMenuItem.Activated += ExtractExeFs_Clicked;
@@ -134,7 +134,7 @@ namespace Ryujinx.Ui.Widgets
//
_extractLogoMenuItem = new MenuItem("Logo")
{
- TooltipText = "Extract the Logo section from Application's current config (including updates)."
+ TooltipText = "Extract the Logo section from Application's current config (including updates).",
};
_extractLogoMenuItem.Activated += ExtractLogo_Clicked;
@@ -148,7 +148,7 @@ namespace Ryujinx.Ui.Widgets
//
_manageCacheMenuItem = new MenuItem("Cache Management")
{
- Submenu = _manageSubMenu
+ Submenu = _manageSubMenu,
};
//
@@ -156,7 +156,7 @@ namespace Ryujinx.Ui.Widgets
//
_purgePtcCacheMenuItem = new MenuItem("Queue PPTC Rebuild")
{
- TooltipText = "Trigger PPTC to rebuild at boot time on the next game launch."
+ TooltipText = "Trigger PPTC to rebuild at boot time on the next game launch.",
};
_purgePtcCacheMenuItem.Activated += PurgePtcCache_Clicked;
@@ -165,7 +165,7 @@ namespace Ryujinx.Ui.Widgets
//
_purgeShaderCacheMenuItem = new MenuItem("Purge Shader Cache")
{
- TooltipText = "Delete the Application's shader cache."
+ TooltipText = "Delete the Application's shader cache.",
};
_purgeShaderCacheMenuItem.Activated += PurgeShaderCache_Clicked;
@@ -174,7 +174,7 @@ namespace Ryujinx.Ui.Widgets
//
_openPtcDirMenuItem = new MenuItem("Open PPTC Directory")
{
- TooltipText = "Open the directory which contains the Application's PPTC cache."
+ TooltipText = "Open the directory which contains the Application's PPTC cache.",
};
_openPtcDirMenuItem.Activated += OpenPtcDir_Clicked;
@@ -183,7 +183,7 @@ namespace Ryujinx.Ui.Widgets
//
_openShaderCacheDirMenuItem = new MenuItem("Open Shader Cache Directory")
{
- TooltipText = "Open the directory which contains the Application's shader cache."
+ TooltipText = "Open the directory which contains the Application's shader cache.",
};
_openShaderCacheDirMenuItem.Activated += OpenShaderCacheDir_Clicked;
@@ -217,4 +217,4 @@ namespace Ryujinx.Ui.Widgets
ShowAll();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs b/src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs
index 6279891e..8170b931 100644
--- a/src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs
+++ b/src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs
@@ -31,19 +31,19 @@ namespace Ryujinx.Ui.Widgets
{
public partial class GameTableContextMenu : Menu
{
- private readonly MainWindow _parent;
- private readonly VirtualFileSystem _virtualFileSystem;
- private readonly AccountManager _accountManager;
- private readonly HorizonClient _horizonClient;
+ private readonly MainWindow _parent;
+ private readonly VirtualFileSystem _virtualFileSystem;
+ private readonly AccountManager _accountManager;
+ private readonly HorizonClient _horizonClient;
private readonly BlitStruct<ApplicationControlProperty> _controlData;
private readonly string _titleFilePath;
private readonly string _titleName;
private readonly string _titleIdText;
- private readonly ulong _titleId;
+ private readonly ulong _titleId;
private MessageDialog _dialog;
- private bool _cancel;
+ private bool _cancel;
public GameTableContextMenu(MainWindow parent, VirtualFileSystem virtualFileSystem, AccountManager accountManager, HorizonClient horizonClient, string titleFilePath, string titleName, string titleId, BlitStruct<ApplicationControlProperty> controlData)
{
@@ -52,12 +52,12 @@ namespace Ryujinx.Ui.Widgets
InitializeComponent();
_virtualFileSystem = virtualFileSystem;
- _accountManager = accountManager;
- _horizonClient = horizonClient;
- _titleFilePath = titleFilePath;
- _titleName = titleName;
- _titleIdText = titleId;
- _controlData = controlData;
+ _accountManager = accountManager;
+ _horizonClient = horizonClient;
+ _titleFilePath = titleFilePath;
+ _titleName = titleName;
+ _titleIdText = titleId;
+ _controlData = controlData;
if (!ulong.TryParse(_titleIdText, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out _titleId))
{
@@ -66,16 +66,16 @@ namespace Ryujinx.Ui.Widgets
return;
}
- _openSaveUserDirMenuItem.Sensitive = !Utilities.IsZeros(controlData.ByteSpan) && controlData.Value.UserAccountSaveDataSize > 0;
- _openSaveDeviceDirMenuItem.Sensitive = !Utilities.IsZeros(controlData.ByteSpan) && controlData.Value.DeviceSaveDataSize > 0;
- _openSaveBcatDirMenuItem.Sensitive = !Utilities.IsZeros(controlData.ByteSpan) && controlData.Value.BcatDeliveryCacheStorageSize > 0;
+ _openSaveUserDirMenuItem.Sensitive = !Utilities.IsZeros(controlData.ByteSpan) && controlData.Value.UserAccountSaveDataSize > 0;
+ _openSaveDeviceDirMenuItem.Sensitive = !Utilities.IsZeros(controlData.ByteSpan) && controlData.Value.DeviceSaveDataSize > 0;
+ _openSaveBcatDirMenuItem.Sensitive = !Utilities.IsZeros(controlData.ByteSpan) && controlData.Value.BcatDeliveryCacheStorageSize > 0;
string fileExt = System.IO.Path.GetExtension(_titleFilePath).ToLower();
- bool hasNca = fileExt == ".nca" || fileExt == ".nsp" || fileExt == ".pfs0" || fileExt == ".xci";
+ bool hasNca = fileExt == ".nca" || fileExt == ".nsp" || fileExt == ".pfs0" || fileExt == ".xci";
_extractRomFsMenuItem.Sensitive = hasNca;
_extractExeFsMenuItem.Sensitive = hasNca;
- _extractLogoMenuItem.Sensitive = hasNca;
+ _extractLogoMenuItem.Sensitive = hasNca;
PopupAtPointer(null);
}
@@ -99,13 +99,13 @@ namespace Ryujinx.Ui.Widgets
control = ref new BlitStruct<ApplicationControlProperty>(1).Value;
// The set sizes don't actually matter as long as they're non-zero because we use directory savedata.
- control.UserAccountSaveDataSize = 0x4000;
+ control.UserAccountSaveDataSize = 0x4000;
control.UserAccountSaveDataJournalSize = 0x4000;
Logger.Warning?.Print(LogClass.Application, "No control file was found for this game. Using a dummy one instead. This may cause inaccuracies in some games.");
}
- Uid user = new Uid((ulong)_accountManager.LastOpenedUser.UserId.High, (ulong)_accountManager.LastOpenedUser.UserId.Low);
+ Uid user = new((ulong)_accountManager.LastOpenedUser.UserId.High, (ulong)_accountManager.LastOpenedUser.UserId.Low);
result = _horizonClient.Fs.EnsureApplicationSaveData(out _, new LibHac.Ncm.ApplicationId(titleId), in control, in user);
@@ -148,7 +148,7 @@ namespace Ryujinx.Ui.Widgets
}
string committedPath = System.IO.Path.Combine(saveRootPath, "0");
- string workingPath = System.IO.Path.Combine(saveRootPath, "1");
+ string workingPath = System.IO.Path.Combine(saveRootPath, "1");
// If the committed directory exists, that path will be loaded the next time the savedata is mounted
if (Directory.Exists(committedPath))
@@ -170,25 +170,25 @@ namespace Ryujinx.Ui.Widgets
private void ExtractSection(NcaSectionType ncaSectionType, int programIndex = 0)
{
- FileChooserNative fileChooser = new FileChooserNative("Choose the folder to extract into", _parent, FileChooserAction.SelectFolder, "Extract", "Cancel");
+ FileChooserNative fileChooser = new("Choose the folder to extract into", _parent, FileChooserAction.SelectFolder, "Extract", "Cancel");
- ResponseType response = (ResponseType)fileChooser.Run();
- string destination = fileChooser.Filename;
+ ResponseType response = (ResponseType)fileChooser.Run();
+ string destination = fileChooser.Filename;
fileChooser.Dispose();
if (response == ResponseType.Accept)
{
- Thread extractorThread = new Thread(() =>
+ Thread extractorThread = new(() =>
{
Gtk.Application.Invoke(delegate
{
_dialog = new MessageDialog(null, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Cancel, null)
{
- Title = "Ryujinx - NCA Section Extractor",
- Icon = new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png"),
- SecondaryText = $"Extracting {ncaSectionType} section from {System.IO.Path.GetFileName(_titleFilePath)}...",
- WindowPosition = WindowPosition.Center
+ Title = "Ryujinx - NCA Section Extractor",
+ Icon = new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png"),
+ SecondaryText = $"Extracting {ncaSectionType} section from {System.IO.Path.GetFileName(_titleFilePath)}...",
+ WindowPosition = WindowPosition.Center,
};
int dialogResponse = _dialog.Run();
@@ -199,139 +199,140 @@ namespace Ryujinx.Ui.Widgets
}
});
- using (FileStream file = new FileStream(_titleFilePath, FileMode.Open, FileAccess.Read))
+ using FileStream file = new(_titleFilePath, FileMode.Open, FileAccess.Read);
+
+ Nca mainNca = null;
+ Nca patchNca = null;
+
+ if ((System.IO.Path.GetExtension(_titleFilePath).ToLower() == ".nsp") ||
+ (System.IO.Path.GetExtension(_titleFilePath).ToLower() == ".pfs0") ||
+ (System.IO.Path.GetExtension(_titleFilePath).ToLower() == ".xci"))
{
- Nca mainNca = null;
- Nca patchNca = null;
+ PartitionFileSystem pfs;
- if ((System.IO.Path.GetExtension(_titleFilePath).ToLower() == ".nsp") ||
- (System.IO.Path.GetExtension(_titleFilePath).ToLower() == ".pfs0") ||
- (System.IO.Path.GetExtension(_titleFilePath).ToLower() == ".xci"))
+ if (System.IO.Path.GetExtension(_titleFilePath) == ".xci")
{
- PartitionFileSystem pfs;
+ Xci xci = new(_virtualFileSystem.KeySet, file.AsStorage());
- if (System.IO.Path.GetExtension(_titleFilePath) == ".xci")
- {
- Xci xci = new Xci(_virtualFileSystem.KeySet, file.AsStorage());
+ pfs = xci.OpenPartition(XciPartitionType.Secure);
+ }
+ else
+ {
+ pfs = new PartitionFileSystem(file.AsStorage());
+ }
- pfs = xci.OpenPartition(XciPartitionType.Secure);
- }
- else
- {
- pfs = new PartitionFileSystem(file.AsStorage());
- }
+ foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca"))
+ {
+ using var ncaFile = new UniqueRef<IFile>();
- foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca"))
- {
- using var ncaFile = new UniqueRef<IFile>();
+ pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure();
- pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure();
+ Nca nca = new(_virtualFileSystem.KeySet, ncaFile.Release().AsStorage());
- Nca nca = new Nca(_virtualFileSystem.KeySet, ncaFile.Release().AsStorage());
+ if (nca.Header.ContentType == NcaContentType.Program)
+ {
+ int dataIndex = Nca.GetSectionIndexFromType(NcaSectionType.Data, NcaContentType.Program);
- if (nca.Header.ContentType == NcaContentType.Program)
+ if (nca.SectionExists(NcaSectionType.Data) && nca.Header.GetFsHeader(dataIndex).IsPatchSection())
{
- int dataIndex = Nca.GetSectionIndexFromType(NcaSectionType.Data, NcaContentType.Program);
-
- if (nca.SectionExists(NcaSectionType.Data) && nca.Header.GetFsHeader(dataIndex).IsPatchSection())
- {
- patchNca = nca;
- }
- else
- {
- mainNca = nca;
- }
+ patchNca = nca;
+ }
+ else
+ {
+ mainNca = nca;
}
}
}
- else if (System.IO.Path.GetExtension(_titleFilePath).ToLower() == ".nca")
- {
- mainNca = new Nca(_virtualFileSystem.KeySet, file.AsStorage());
- }
+ }
+ else if (System.IO.Path.GetExtension(_titleFilePath).ToLower() == ".nca")
+ {
+ mainNca = new Nca(_virtualFileSystem.KeySet, file.AsStorage());
+ }
- if (mainNca == null)
- {
- Logger.Error?.Print(LogClass.Application, "Extraction failure. The main NCA is not present in the selected file.");
+ if (mainNca == null)
+ {
+ Logger.Error?.Print(LogClass.Application, "Extraction failure. The main NCA is not present in the selected file.");
- Gtk.Application.Invoke(delegate
+ Gtk.Application.Invoke(delegate
{
GtkDialog.CreateErrorDialog("Extraction failure. The main NCA is not present in the selected file.");
});
- return;
- }
+ return;
+ }
- (Nca updatePatchNca, _) = ApplicationLibrary.GetGameUpdateData(_virtualFileSystem, mainNca.Header.TitleId.ToString("x16"), programIndex, out _);
+ (Nca updatePatchNca, _) = ApplicationLibrary.GetGameUpdateData(_virtualFileSystem, mainNca.Header.TitleId.ToString("x16"), programIndex, out _);
- if (updatePatchNca != null)
- {
- patchNca = updatePatchNca;
- }
+ if (updatePatchNca != null)
+ {
+ patchNca = updatePatchNca;
+ }
- int index = Nca.GetSectionIndexFromType(ncaSectionType, mainNca.Header.ContentType);
+ int index = Nca.GetSectionIndexFromType(ncaSectionType, mainNca.Header.ContentType);
- bool sectionExistsInPatch = false;
- if (patchNca != null)
- {
- sectionExistsInPatch = patchNca.CanOpenSection(index);
- }
+ bool sectionExistsInPatch = false;
+
+ if (patchNca != null)
+ {
+ sectionExistsInPatch = patchNca.CanOpenSection(index);
+ }
- IFileSystem ncaFileSystem = sectionExistsInPatch ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid)
+ IFileSystem ncaFileSystem = sectionExistsInPatch ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid)
: mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid);
- FileSystemClient fsClient = _horizonClient.Fs;
+ FileSystemClient fsClient = _horizonClient.Fs;
- string source = DateTime.Now.ToFileTime().ToString()[10..];
- string output = DateTime.Now.ToFileTime().ToString()[10..];
+ string source = DateTime.Now.ToFileTime().ToString()[10..];
+ string output = DateTime.Now.ToFileTime().ToString()[10..];
- using var uniqueSourceFs = new UniqueRef<IFileSystem>(ncaFileSystem);
- using var uniqueOutputFs = new UniqueRef<IFileSystem>(new LocalFileSystem(destination));
+ using var uniqueSourceFs = new UniqueRef<IFileSystem>(ncaFileSystem);
+ using var uniqueOutputFs = new UniqueRef<IFileSystem>(new LocalFileSystem(destination));
- fsClient.Register(source.ToU8Span(), ref uniqueSourceFs.Ref);
- fsClient.Register(output.ToU8Span(), ref uniqueOutputFs.Ref);
+ fsClient.Register(source.ToU8Span(), ref uniqueSourceFs.Ref);
+ fsClient.Register(output.ToU8Span(), ref uniqueOutputFs.Ref);
- (Result? resultCode, bool canceled) = CopyDirectory(fsClient, $"{source}:/", $"{output}:/");
+ (Result? resultCode, bool canceled) = CopyDirectory(fsClient, $"{source}:/", $"{output}:/");
- if (!canceled)
+ if (!canceled)
+ {
+ if (resultCode.Value.IsFailure())
{
- if (resultCode.Value.IsFailure())
- {
- Logger.Error?.Print(LogClass.Application, $"LibHac returned error code: {resultCode.Value.ErrorCode}");
+ Logger.Error?.Print(LogClass.Application, $"LibHac returned error code: {resultCode.Value.ErrorCode}");
- Gtk.Application.Invoke(delegate
+ Gtk.Application.Invoke(delegate
{
_dialog?.Dispose();
GtkDialog.CreateErrorDialog("Extraction failed. Read the log file for further information.");
});
- }
- else if (resultCode.Value.IsSuccess())
- {
- Gtk.Application.Invoke(delegate
+ }
+ else if (resultCode.Value.IsSuccess())
+ {
+ Gtk.Application.Invoke(delegate
{
_dialog?.Dispose();
- MessageDialog dialog = new MessageDialog(null, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Ok, null)
+ MessageDialog dialog = new(null, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Ok, null)
{
- Title = "Ryujinx - NCA Section Extractor",
- Icon = new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png"),
- SecondaryText = "Extraction completed successfully.",
- WindowPosition = WindowPosition.Center
+ Title = "Ryujinx - NCA Section Extractor",
+ Icon = new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png"),
+ SecondaryText = "Extraction completed successfully.",
+ WindowPosition = WindowPosition.Center,
};
dialog.Run();
dialog.Dispose();
});
- }
}
-
- fsClient.Unmount(source.ToU8Span());
- fsClient.Unmount(output.ToU8Span());
}
- });
- extractorThread.Name = "GUI.NcaSectionExtractorThread";
- extractorThread.IsBackground = true;
+ fsClient.Unmount(source.ToU8Span());
+ fsClient.Unmount(output.ToU8Span());
+ })
+ {
+ Name = "GUI.NcaSectionExtractorThread",
+ IsBackground = true,
+ };
extractorThread.Start();
}
}
@@ -339,7 +340,10 @@ namespace Ryujinx.Ui.Widgets
private (Result? result, bool canceled) CopyDirectory(FileSystemClient fs, string sourcePath, string destPath)
{
Result rc = fs.OpenDirectory(out DirectoryHandle sourceHandle, sourcePath.ToU8Span(), OpenDirectoryMode.All);
- if (rc.IsFailure()) return (rc, false);
+ if (rc.IsFailure())
+ {
+ return (rc, false);
+ }
using (sourceHandle)
{
@@ -369,7 +373,10 @@ namespace Ryujinx.Ui.Widgets
fs.CreateOrOverwriteFile(subDstPath, entry.Size);
rc = CopyFile(fs, subSrcPath, subDstPath);
- if (rc.IsFailure()) return (rc, false);
+ if (rc.IsFailure())
+ {
+ return (rc, false);
+ }
}
}
}
@@ -377,22 +384,31 @@ namespace Ryujinx.Ui.Widgets
return (Result.Success, false);
}
- public Result CopyFile(FileSystemClient fs, string sourcePath, string destPath)
+ public static Result CopyFile(FileSystemClient fs, string sourcePath, string destPath)
{
Result rc = fs.OpenFile(out FileHandle sourceHandle, sourcePath.ToU8Span(), OpenMode.Read);
- if (rc.IsFailure()) return rc;
+ if (rc.IsFailure())
+ {
+ return rc;
+ }
using (sourceHandle)
{
rc = fs.OpenFile(out FileHandle destHandle, destPath.ToU8Span(), OpenMode.Write | OpenMode.AllowAppend);
- if (rc.IsFailure()) return rc;
+ if (rc.IsFailure())
+ {
+ return rc;
+ }
using (destHandle)
{
const int MaxBufferSize = 1024 * 1024;
rc = fs.GetFileSize(out long fileSize, sourceHandle);
- if (rc.IsFailure()) return rc;
+ if (rc.IsFailure())
+ {
+ return rc;
+ }
int bufferSize = (int)Math.Min(MaxBufferSize, fileSize);
@@ -405,10 +421,16 @@ namespace Ryujinx.Ui.Widgets
Span<byte> buf = buffer.AsSpan(0, toRead);
rc = fs.ReadFile(out long _, sourceHandle, offset, buf);
- if (rc.IsFailure()) return rc;
+ if (rc.IsFailure())
+ {
+ return rc;
+ }
rc = fs.WriteFile(destHandle, offset, buf, WriteOption.None);
- if (rc.IsFailure()) return rc;
+ if (rc.IsFailure())
+ {
+ return rc;
+ }
}
}
finally
@@ -417,7 +439,10 @@ namespace Ryujinx.Ui.Widgets
}
rc = fs.FlushFile(destHandle);
- if (rc.IsFailure()) return rc;
+ if (rc.IsFailure())
+ {
+ return rc;
+ }
}
}
@@ -466,7 +491,7 @@ namespace Ryujinx.Ui.Widgets
private void OpenTitleModDir_Clicked(object sender, EventArgs args)
{
- string modsBasePath = ModLoader.GetModsBasePath();
+ string modsBasePath = ModLoader.GetModsBasePath();
string titleModsPath = ModLoader.GetTitleDir(modsBasePath, _titleIdText);
OpenHelper.OpenFolder(titleModsPath);
@@ -474,8 +499,8 @@ namespace Ryujinx.Ui.Widgets
private void OpenTitleSdModDir_Clicked(object sender, EventArgs args)
{
- string sdModsBasePath = ModLoader.GetSdModsBasePath();
- string titleModsPath = ModLoader.GetTitleDir(sdModsBasePath, _titleIdText);
+ string sdModsBasePath = ModLoader.GetSdModsBasePath();
+ string titleModsPath = ModLoader.GetTitleDir(sdModsBasePath, _titleIdText);
OpenHelper.OpenFolder(titleModsPath);
}
@@ -497,9 +522,9 @@ namespace Ryujinx.Ui.Widgets
private void OpenPtcDir_Clicked(object sender, EventArgs args)
{
- string ptcDir = System.IO.Path.Combine(AppDataManager.GamesDirPath, _titleIdText, "cache", "cpu");
+ string ptcDir = System.IO.Path.Combine(AppDataManager.GamesDirPath, _titleIdText, "cache", "cpu");
- string mainPath = System.IO.Path.Combine(ptcDir, "0");
+ string mainPath = System.IO.Path.Combine(ptcDir, "0");
string backupPath = System.IO.Path.Combine(ptcDir, "1");
if (!Directory.Exists(ptcDir))
@@ -526,12 +551,12 @@ namespace Ryujinx.Ui.Widgets
private void PurgePtcCache_Clicked(object sender, EventArgs args)
{
- DirectoryInfo mainDir = new DirectoryInfo(System.IO.Path.Combine(AppDataManager.GamesDirPath, _titleIdText, "cache", "cpu", "0"));
- DirectoryInfo backupDir = new DirectoryInfo(System.IO.Path.Combine(AppDataManager.GamesDirPath, _titleIdText, "cache", "cpu", "1"));
+ DirectoryInfo mainDir = new(System.IO.Path.Combine(AppDataManager.GamesDirPath, _titleIdText, "cache", "cpu", "0"));
+ DirectoryInfo backupDir = new(System.IO.Path.Combine(AppDataManager.GamesDirPath, _titleIdText, "cache", "cpu", "1"));
MessageDialog warningDialog = GtkDialog.CreateConfirmationDialog("Warning", $"You are about to queue a PPTC rebuild on the next boot of:\n\n<b>{_titleName}</b>\n\nAre you sure you want to proceed?");
- List<FileInfo> cacheFiles = new List<FileInfo>();
+ List<FileInfo> cacheFiles = new();
if (mainDir.Exists)
{
@@ -551,7 +576,7 @@ namespace Ryujinx.Ui.Widgets
{
file.Delete();
}
- catch(Exception e)
+ catch (Exception e)
{
GtkDialog.CreateErrorDialog($"Error purging PPTC cache {file.Name}: {e}");
}
@@ -563,12 +588,12 @@ namespace Ryujinx.Ui.Widgets
private void PurgeShaderCache_Clicked(object sender, EventArgs args)
{
- DirectoryInfo shaderCacheDir = new DirectoryInfo(System.IO.Path.Combine(AppDataManager.GamesDirPath, _titleIdText, "cache", "shader"));
+ DirectoryInfo shaderCacheDir = new(System.IO.Path.Combine(AppDataManager.GamesDirPath, _titleIdText, "cache", "shader"));
using MessageDialog warningDialog = GtkDialog.CreateConfirmationDialog("Warning", $"You are about to delete the shader cache for :\n\n<b>{_titleName}</b>\n\nAre you sure you want to proceed?");
- List<DirectoryInfo> oldCacheDirectories = new List<DirectoryInfo>();
- List<FileInfo> newCacheFiles = new List<FileInfo>();
+ List<DirectoryInfo> oldCacheDirectories = new();
+ List<FileInfo> newCacheFiles = new();
if (shaderCacheDir.Exists)
{
diff --git a/src/Ryujinx/Ui/Widgets/GtkDialog.cs b/src/Ryujinx/Ui/Widgets/GtkDialog.cs
index d2cab219..51e777fa 100644
--- a/src/Ryujinx/Ui/Widgets/GtkDialog.cs
+++ b/src/Ryujinx/Ui/Widgets/GtkDialog.cs
@@ -10,14 +10,14 @@ namespace Ryujinx.Ui.Widgets
{
private static bool _isChoiceDialogOpen;
- private GtkDialog(string title, string mainText, string secondaryText, MessageType messageType = MessageType.Other, ButtonsType buttonsType = ButtonsType.Ok)
+ private GtkDialog(string title, string mainText, string secondaryText, MessageType messageType = MessageType.Other, ButtonsType buttonsType = ButtonsType.Ok)
: base(null, DialogFlags.Modal, messageType, buttonsType, null)
{
- Title = title;
- Icon = new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png");
- Text = mainText;
- SecondaryText = secondaryText;
- WindowPosition = WindowPosition.Center;
+ Title = title;
+ Icon = new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png");
+ Text = mainText;
+ SecondaryText = secondaryText;
+ WindowPosition = WindowPosition.Center;
SecondaryUseMarkup = true;
Response += GtkDialog_Response;
@@ -80,7 +80,7 @@ namespace Ryujinx.Ui.Widgets
internal static ResponseType CreateCustomDialog(string title, string mainText, string secondaryText, Dictionary<int, string> buttons, MessageType messageType = MessageType.Other)
{
- GtkDialog gtkDialog = new GtkDialog(title, mainText, secondaryText, messageType, ButtonsType.None);
+ GtkDialog gtkDialog = new(title, mainText, secondaryText, messageType, ButtonsType.None);
foreach (var button in buttons)
{
@@ -92,9 +92,9 @@ namespace Ryujinx.Ui.Widgets
internal static string CreateInputDialog(Window parent, string title, string mainText, uint inputMax)
{
- GtkInputDialog gtkDialog = new GtkInputDialog(parent, title, mainText, inputMax);
- ResponseType response = (ResponseType)gtkDialog.Run();
- string responseText = gtkDialog.InputEntry.Text.TrimEnd();
+ GtkInputDialog gtkDialog = new(parent, title, mainText, inputMax);
+ ResponseType response = (ResponseType)gtkDialog.Run();
+ string responseText = gtkDialog.InputEntry.Text.TrimEnd();
gtkDialog.Dispose();
diff --git a/src/Ryujinx/Ui/Widgets/GtkInputDialog.cs b/src/Ryujinx/Ui/Widgets/GtkInputDialog.cs
index 21b34937..e4fb5aa1 100644
--- a/src/Ryujinx/Ui/Widgets/GtkInputDialog.cs
+++ b/src/Ryujinx/Ui/Widgets/GtkInputDialog.cs
@@ -12,26 +12,26 @@ namespace Ryujinx.Ui.Widgets
Title = title;
- Label mainTextLabel = new Label
+ Label mainTextLabel = new()
{
- Text = mainText
+ Text = mainText,
};
InputEntry = new Entry
{
- MaxLength = (int)inputMax
+ MaxLength = (int)inputMax,
};
- Label inputMaxTextLabel = new Label
+ Label inputMaxTextLabel = new()
{
- Text = $"(Max length: {inputMax})"
+ Text = $"(Max length: {inputMax})",
};
- ((Box)MessageArea).PackStart(mainTextLabel, true, true, 0);
- ((Box)MessageArea).PackStart(InputEntry, true, true, 5);
+ ((Box)MessageArea).PackStart(mainTextLabel, true, true, 0);
+ ((Box)MessageArea).PackStart(InputEntry, true, true, 5);
((Box)MessageArea).PackStart(inputMaxTextLabel, true, true, 0);
ShowAll();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Widgets/ProfileDialog.cs b/src/Ryujinx/Ui/Widgets/ProfileDialog.cs
index 242e8bd7..0731b37a 100644
--- a/src/Ryujinx/Ui/Widgets/ProfileDialog.cs
+++ b/src/Ryujinx/Ui/Widgets/ProfileDialog.cs
@@ -10,7 +10,7 @@ namespace Ryujinx.Ui.Widgets
{
public string FileName { get; private set; }
-#pragma warning disable CS0649, IDE0044
+#pragma warning disable CS0649, IDE0044 // Field is never assigned to, Add readonly modifier
[GUI] Entry _profileEntry;
[GUI] Label _errorMessage;
#pragma warning restore CS0649, IDE0044
@@ -54,4 +54,4 @@ namespace Ryujinx.Ui.Widgets
Respond(ResponseType.Cancel);
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Widgets/UserErrorDialog.cs b/src/Ryujinx/Ui/Widgets/UserErrorDialog.cs
index fc3938d4..b2dea835 100644
--- a/src/Ryujinx/Ui/Widgets/UserErrorDialog.cs
+++ b/src/Ryujinx/Ui/Widgets/UserErrorDialog.cs
@@ -6,9 +6,9 @@ namespace Ryujinx.Ui.Widgets
{
internal class UserErrorDialog : MessageDialog
{
- private const string SetupGuideUrl = "https://github.com/Ryujinx/Ryujinx/wiki/Ryujinx-Setup-&-Configuration-Guide";
- private const int OkResponseId = 0;
- private const int SetupGuideResponseId = 1;
+ private const string SetupGuideUrl = "https://github.com/Ryujinx/Ryujinx/wiki/Ryujinx-Setup-&-Configuration-Guide";
+ private const int OkResponseId = 0;
+ private const int SetupGuideResponseId = 1;
private readonly UserError _userError;
@@ -16,7 +16,7 @@ namespace Ryujinx.Ui.Widgets
{
_userError = error;
- WindowPosition = WindowPosition.Center;
+ WindowPosition = WindowPosition.Center;
SecondaryUseMarkup = true;
Response += UserErrorDialog_Response;
@@ -36,8 +36,8 @@ namespace Ryujinx.Ui.Widgets
SecondaryUseMarkup = true;
- Title = $"Ryujinx error ({errorCode})";
- Text = $"{errorCode}: {GetErrorTitle(error)}";
+ Title = $"Ryujinx error ({errorCode})";
+ Text = $"{errorCode}: {GetErrorTitle(error)}";
SecondaryText = GetErrorDescription(error);
if (isInSetupGuide)
@@ -46,34 +46,34 @@ namespace Ryujinx.Ui.Widgets
}
}
- private string GetErrorCode(UserError error)
+ private static string GetErrorCode(UserError error)
{
return $"RYU-{(uint)error:X4}";
}
- private string GetErrorTitle(UserError error)
+ private static string GetErrorTitle(UserError error)
{
return error switch
{
- UserError.NoKeys => "Keys not found",
- UserError.NoFirmware => "Firmware not found",
+ UserError.NoKeys => "Keys not found",
+ UserError.NoFirmware => "Firmware not found",
UserError.FirmwareParsingFailed => "Firmware parsing error",
- UserError.ApplicationNotFound => "Application not found",
- UserError.Unknown => "Unknown error",
- _ => "Undefined error",
+ UserError.ApplicationNotFound => "Application not found",
+ UserError.Unknown => "Unknown error",
+ _ => "Undefined error",
};
}
- private string GetErrorDescription(UserError error)
+ private static string GetErrorDescription(UserError error)
{
return error switch
{
- UserError.NoKeys => "Ryujinx was unable to find your 'prod.keys' file",
- UserError.NoFirmware => "Ryujinx was unable to find any firmwares installed",
+ UserError.NoKeys => "Ryujinx was unable to find your 'prod.keys' file",
+ UserError.NoFirmware => "Ryujinx was unable to find any firmwares installed",
UserError.FirmwareParsingFailed => "Ryujinx was unable to parse the provided firmware. This is usually caused by outdated keys.",
- UserError.ApplicationNotFound => "Ryujinx couldn't find a valid application at the given path.",
- UserError.Unknown => "An unknown error occured!",
- _ => "An undefined error occured! This shouldn't happen, please contact a dev!",
+ UserError.ApplicationNotFound => "Ryujinx couldn't find a valid application at the given path.",
+ UserError.Unknown => "An unknown error occured!",
+ _ => "An undefined error occured! This shouldn't happen, please contact a dev!",
};
}
@@ -82,9 +82,9 @@ namespace Ryujinx.Ui.Widgets
return error switch
{
UserError.NoKeys or
- UserError.NoFirmware or
+ UserError.NoFirmware or
UserError.FirmwareParsingFailed => true,
- _ => false,
+ _ => false,
};
}
@@ -97,9 +97,9 @@ namespace Ryujinx.Ui.Widgets
return error switch
{
- UserError.NoKeys => SetupGuideUrl + "#initial-setup---placement-of-prodkeys",
+ UserError.NoKeys => SetupGuideUrl + "#initial-setup---placement-of-prodkeys",
UserError.NoFirmware => SetupGuideUrl + "#initial-setup-continued---installation-of-firmware",
- _ => SetupGuideUrl,
+ _ => SetupGuideUrl,
};
}
@@ -120,4 +120,4 @@ namespace Ryujinx.Ui.Widgets
new UserErrorDialog(error).Run();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Windows/AboutWindow.Designer.cs b/src/Ryujinx/Ui/Windows/AboutWindow.Designer.cs
index 3edc002d..34502633 100644
--- a/src/Ryujinx/Ui/Windows/AboutWindow.Designer.cs
+++ b/src/Ryujinx/Ui/Windows/AboutWindow.Designer.cs
@@ -7,65 +7,63 @@ namespace Ryujinx.Ui.Windows
{
public partial class AboutWindow : Window
{
- private Box _mainBox;
- private Box _leftBox;
- private Box _logoBox;
- private Image _ryujinxLogo;
- private Box _logoTextBox;
- private Label _ryujinxLabel;
- private Label _ryujinxPhoneticLabel;
- private EventBox _ryujinxLink;
- private Label _ryujinxLinkLabel;
- private Label _versionLabel;
- private Label _disclaimerLabel;
- private EventBox _amiiboApiLink;
- private Label _amiiboApiLinkLabel;
- private Box _socialBox;
- private EventBox _patreonEventBox;
- private Box _patreonBox;
- private Image _patreonLogo;
- private Label _patreonLabel;
- private EventBox _githubEventBox;
- private Box _githubBox;
- private Image _githubLogo;
- private Label _githubLabel;
- private Box _discordBox;
- private EventBox _discordEventBox;
- private Image _discordLogo;
- private Label _discordLabel;
- private EventBox _twitterEventBox;
- private Box _twitterBox;
- private Image _twitterLogo;
- private Label _twitterLabel;
- private Separator _separator;
- private Box _rightBox;
- private Label _aboutLabel;
- private Label _aboutDescriptionLabel;
- private Label _createdByLabel;
- private TextView _createdByText;
- private EventBox _contributorsEventBox;
- private Label _contributorsLinkLabel;
- private Label _patreonNamesLabel;
+ private Box _mainBox;
+ private Box _leftBox;
+ private Box _logoBox;
+ private Image _ryujinxLogo;
+ private Box _logoTextBox;
+ private Label _ryujinxLabel;
+ private Label _ryujinxPhoneticLabel;
+ private EventBox _ryujinxLink;
+ private Label _ryujinxLinkLabel;
+ private Label _versionLabel;
+ private Label _disclaimerLabel;
+ private EventBox _amiiboApiLink;
+ private Label _amiiboApiLinkLabel;
+ private Box _socialBox;
+ private EventBox _patreonEventBox;
+ private Box _patreonBox;
+ private Image _patreonLogo;
+ private Label _patreonLabel;
+ private EventBox _githubEventBox;
+ private Box _githubBox;
+ private Image _githubLogo;
+ private Label _githubLabel;
+ private Box _discordBox;
+ private EventBox _discordEventBox;
+ private Image _discordLogo;
+ private Label _discordLabel;
+ private EventBox _twitterEventBox;
+ private Box _twitterBox;
+ private Image _twitterLogo;
+ private Label _twitterLabel;
+ private Separator _separator;
+ private Box _rightBox;
+ private Label _aboutLabel;
+ private Label _aboutDescriptionLabel;
+ private Label _createdByLabel;
+ private TextView _createdByText;
+ private EventBox _contributorsEventBox;
+ private Label _contributorsLinkLabel;
+ private Label _patreonNamesLabel;
private ScrolledWindow _patreonNamesScrolled;
- private TextView _patreonNamesText;
- private EventBox _changelogEventBox;
- private Label _changelogLinkLabel;
+ private TextView _patreonNamesText;
+ private EventBox _changelogEventBox;
+ private Label _changelogLinkLabel;
private void InitializeComponent()
{
-#pragma warning disable CS0612
-
//
// AboutWindow
//
- CanFocus = false;
- Resizable = false;
- Modal = true;
+ CanFocus = false;
+ Resizable = false;
+ Modal = true;
WindowPosition = WindowPosition.Center;
- DefaultWidth = 800;
- DefaultHeight = 450;
- TypeHint = Gdk.WindowTypeHint.Dialog;
+ DefaultWidth = 800;
+ DefaultHeight = 450;
+ TypeHint = Gdk.WindowTypeHint.Dialog;
//
// _mainBox
@@ -77,9 +75,9 @@ namespace Ryujinx.Ui.Windows
//
_leftBox = new Box(Orientation.Vertical, 0)
{
- Margin = 15,
- MarginLeft = 30,
- MarginRight = 0
+ Margin = 15,
+ MarginStart = 30,
+ MarginEnd = 0,
};
//
@@ -92,8 +90,8 @@ namespace Ryujinx.Ui.Windows
//
_ryujinxLogo = new Image(new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png", 100, 100))
{
- Margin = 10,
- MarginLeft = 15
+ Margin = 10,
+ MarginStart = 15,
};
//
@@ -106,9 +104,9 @@ namespace Ryujinx.Ui.Windows
//
_ryujinxLabel = new Label("Ryujinx")
{
- MarginTop = 15,
- Justify = Justification.Center,
- Attributes = new AttrList()
+ MarginTop = 15,
+ Justify = Justification.Center,
+ Attributes = new AttrList(),
};
_ryujinxLabel.Attributes.Insert(new Pango.AttrScale(2.7f));
@@ -117,7 +115,7 @@ namespace Ryujinx.Ui.Windows
//
_ryujinxPhoneticLabel = new Label("(REE-YOU-JINX)")
{
- Justify = Justification.Center
+ Justify = Justification.Center,
};
//
@@ -135,8 +133,8 @@ namespace Ryujinx.Ui.Windows
_ryujinxLinkLabel = new Label("www.ryujinx.org")
{
TooltipText = "Click to open the Ryujinx website in your default browser.",
- Justify = Justification.Center,
- Attributes = new AttrList()
+ Justify = Justification.Center,
+ Attributes = new AttrList(),
};
_ryujinxLinkLabel.Attributes.Insert(new Pango.AttrUnderline(Underline.Single));
@@ -145,9 +143,9 @@ namespace Ryujinx.Ui.Windows
//
_versionLabel = new Label(Program.Version)
{
- Expand = true,
+ Expand = true,
Justify = Justification.Center,
- Margin = 5
+ Margin = 5,
};
//
@@ -163,7 +161,7 @@ namespace Ryujinx.Ui.Windows
{
TooltipText = "Click to open the changelog for this version in your default browser.",
Justify = Justification.Center,
- Attributes = new AttrList()
+ Attributes = new AttrList(),
};
_changelogLinkLabel.Attributes.Insert(new Pango.AttrUnderline(Underline.Single));
@@ -172,10 +170,10 @@ namespace Ryujinx.Ui.Windows
//
_disclaimerLabel = new Label("Ryujinx is not affiliated with Nintendo™,\nor any of its partners, in any way.")
{
- Expand = true,
- Justify = Justification.Center,
- Margin = 5,
- Attributes = new AttrList()
+ Expand = true,
+ Justify = Justification.Center,
+ Margin = 5,
+ Attributes = new AttrList(),
};
_disclaimerLabel.Attributes.Insert(new Pango.AttrScale(0.8f));
@@ -184,7 +182,7 @@ namespace Ryujinx.Ui.Windows
//
_amiiboApiLink = new EventBox()
{
- Margin = 5
+ Margin = 5,
};
_amiiboApiLink.ButtonPressEvent += AmiiboApiButton_Pressed;
@@ -194,8 +192,8 @@ namespace Ryujinx.Ui.Windows
_amiiboApiLinkLabel = new Label("AmiiboAPI (www.amiiboapi.com) is used\nin our Amiibo emulation.")
{
TooltipText = "Click to open the AmiiboAPI website in your default browser.",
- Justify = Justification.Center,
- Attributes = new AttrList()
+ Justify = Justification.Center,
+ Attributes = new AttrList(),
};
_amiiboApiLinkLabel.Attributes.Insert(new Pango.AttrScale(0.9f));
@@ -204,8 +202,8 @@ namespace Ryujinx.Ui.Windows
//
_socialBox = new Box(Orientation.Horizontal, 0)
{
- Margin = 25,
- MarginBottom = 10
+ Margin = 25,
+ MarginBottom = 10,
};
//
@@ -213,7 +211,7 @@ namespace Ryujinx.Ui.Windows
//
_patreonEventBox = new EventBox()
{
- TooltipText = "Click to open the Ryujinx Patreon page in your default browser."
+ TooltipText = "Click to open the Ryujinx Patreon page in your default browser.",
};
_patreonEventBox.ButtonPressEvent += PatreonButton_Pressed;
@@ -227,7 +225,7 @@ namespace Ryujinx.Ui.Windows
//
_patreonLogo = new Image(new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Patreon_Light.png", 30, 30))
{
- Margin = 10
+ Margin = 10,
};
//
@@ -235,7 +233,7 @@ namespace Ryujinx.Ui.Windows
//
_patreonLabel = new Label("Patreon")
{
- Justify = Justification.Center
+ Justify = Justification.Center,
};
//
@@ -243,7 +241,7 @@ namespace Ryujinx.Ui.Windows
//
_githubEventBox = new EventBox()
{
- TooltipText = "Click to open the Ryujinx GitHub page in your default browser."
+ TooltipText = "Click to open the Ryujinx GitHub page in your default browser.",
};
_githubEventBox.ButtonPressEvent += GitHubButton_Pressed;
@@ -257,7 +255,7 @@ namespace Ryujinx.Ui.Windows
//
_githubLogo = new Image(new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_GitHub_Light.png", 30, 30))
{
- Margin = 10
+ Margin = 10,
};
//
@@ -265,7 +263,7 @@ namespace Ryujinx.Ui.Windows
//
_githubLabel = new Label("GitHub")
{
- Justify = Justification.Center
+ Justify = Justification.Center,
};
//
@@ -278,7 +276,7 @@ namespace Ryujinx.Ui.Windows
//
_discordEventBox = new EventBox()
{
- TooltipText = "Click to open an invite to the Ryujinx Discord server in your default browser."
+ TooltipText = "Click to open an invite to the Ryujinx Discord server in your default browser.",
};
_discordEventBox.ButtonPressEvent += DiscordButton_Pressed;
@@ -287,7 +285,7 @@ namespace Ryujinx.Ui.Windows
//
_discordLogo = new Image(new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Discord_Light.png", 30, 30))
{
- Margin = 10
+ Margin = 10,
};
//
@@ -295,7 +293,7 @@ namespace Ryujinx.Ui.Windows
//
_discordLabel = new Label("Discord")
{
- Justify = Justification.Center
+ Justify = Justification.Center,
};
//
@@ -303,7 +301,7 @@ namespace Ryujinx.Ui.Windows
//
_twitterEventBox = new EventBox()
{
- TooltipText = "Click to open the Ryujinx Twitter page in your default browser."
+ TooltipText = "Click to open the Ryujinx Twitter page in your default browser.",
};
_twitterEventBox.ButtonPressEvent += TwitterButton_Pressed;
@@ -317,7 +315,7 @@ namespace Ryujinx.Ui.Windows
//
_twitterLogo = new Image(new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Twitter_Light.png", 30, 30))
{
- Margin = 10
+ Margin = 10,
};
//
@@ -325,7 +323,7 @@ namespace Ryujinx.Ui.Windows
//
_twitterLabel = new Label("Twitter")
{
- Justify = Justification.Center
+ Justify = Justification.Center,
};
//
@@ -333,7 +331,7 @@ namespace Ryujinx.Ui.Windows
//
_separator = new Separator(Orientation.Vertical)
{
- Margin = 15
+ Margin = 15,
};
//
@@ -341,8 +339,8 @@ namespace Ryujinx.Ui.Windows
//
_rightBox = new Box(Orientation.Vertical, 0)
{
- Margin = 15,
- MarginTop = 40
+ Margin = 15,
+ MarginTop = 40,
};
//
@@ -350,8 +348,8 @@ namespace Ryujinx.Ui.Windows
//
_aboutLabel = new Label("About :")
{
- Halign = Align.Start,
- Attributes = new AttrList()
+ Halign = Align.Start,
+ Attributes = new AttrList(),
};
_aboutLabel.Attributes.Insert(new Pango.AttrWeight(Weight.Bold));
_aboutLabel.Attributes.Insert(new Pango.AttrUnderline(Underline.Single));
@@ -365,7 +363,7 @@ namespace Ryujinx.Ui.Windows
"Developers interested in contributing can find out more on our GitHub or Discord.")
{
Margin = 15,
- Halign = Align.Start
+ Halign = Align.Start,
};
//
@@ -373,8 +371,8 @@ namespace Ryujinx.Ui.Windows
//
_createdByLabel = new Label("Maintained by :")
{
- Halign = Align.Start,
- Attributes = new AttrList()
+ Halign = Align.Start,
+ Attributes = new AttrList(),
};
_createdByLabel.Attributes.Insert(new Pango.AttrWeight(Weight.Bold));
_createdByLabel.Attributes.Insert(new Pango.AttrUnderline(Underline.Single));
@@ -384,11 +382,11 @@ namespace Ryujinx.Ui.Windows
//
_createdByText = new TextView()
{
- WrapMode = Gtk.WrapMode.Word,
- Editable = false,
+ WrapMode = Gtk.WrapMode.Word,
+ Editable = false,
CursorVisible = false,
- Margin = 15,
- MarginRight = 30
+ Margin = 15,
+ MarginEnd = 30,
};
_createdByText.Buffer.Text = "gdkchan, Ac_K, Thog, rip in peri peri, LDj3SNuD, emmaus, Thealexbarney, Xpl0itR, GoffyDude, »jD« and more...";
@@ -404,9 +402,9 @@ namespace Ryujinx.Ui.Windows
_contributorsLinkLabel = new Label("See All Contributors...")
{
TooltipText = "Click to open the Contributors page in your default browser.",
- MarginRight = 30,
- Halign = Align.End,
- Attributes = new AttrList()
+ MarginEnd = 30,
+ Halign = Align.End,
+ Attributes = new AttrList(),
};
_contributorsLinkLabel.Attributes.Insert(new Pango.AttrUnderline(Underline.Single));
@@ -415,8 +413,8 @@ namespace Ryujinx.Ui.Windows
//
_patreonNamesLabel = new Label("Supported on Patreon by :")
{
- Halign = Align.Start,
- Attributes = new AttrList()
+ Halign = Align.Start,
+ Attributes = new AttrList(),
};
_patreonNamesLabel.Attributes.Insert(new Pango.AttrWeight(Weight.Bold));
_patreonNamesLabel.Attributes.Insert(new Pango.AttrUnderline(Underline.Single));
@@ -426,10 +424,10 @@ namespace Ryujinx.Ui.Windows
//
_patreonNamesScrolled = new ScrolledWindow()
{
- Margin = 15,
- MarginRight = 30,
- Expand = true,
- ShadowType = ShadowType.In
+ Margin = 15,
+ MarginEnd = 30,
+ Expand = true,
+ ShadowType = ShadowType.In,
};
_patreonNamesScrolled.SetPolicy(PolicyType.Never, PolicyType.Automatic);
@@ -438,13 +436,11 @@ namespace Ryujinx.Ui.Windows
//
_patreonNamesText = new TextView()
{
- WrapMode = Gtk.WrapMode.Word
+ WrapMode = Gtk.WrapMode.Word,
};
_patreonNamesText.Buffer.Text = "Loading...";
_patreonNamesText.SetProperty("editable", new GLib.Value(false));
-#pragma warning restore CS0612
-
ShowComponent();
}
@@ -512,4 +508,4 @@ namespace Ryujinx.Ui.Windows
ShowAll();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Windows/AboutWindow.cs b/src/Ryujinx/Ui/Windows/AboutWindow.cs
index 15bfa500..9e11905d 100644
--- a/src/Ryujinx/Ui/Windows/AboutWindow.cs
+++ b/src/Ryujinx/Ui/Windows/AboutWindow.cs
@@ -25,7 +25,7 @@ namespace Ryujinx.Ui.Windows
_patreonNamesText.Buffer.Text = "Connection Error.";
}
- HttpClient httpClient = new HttpClient();
+ HttpClient httpClient = new();
try
{
@@ -82,4 +82,4 @@ namespace Ryujinx.Ui.Windows
OpenHelper.OpenUrl("https://github.com/Ryujinx/Ryujinx/wiki/Changelog#ryujinx-changelog");
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Windows/AmiiboWindow.Designer.cs b/src/Ryujinx/Ui/Windows/AmiiboWindow.Designer.cs
index 3480c6e8..cb27c34c 100644
--- a/src/Ryujinx/Ui/Windows/AmiiboWindow.Designer.cs
+++ b/src/Ryujinx/Ui/Windows/AmiiboWindow.Designer.cs
@@ -4,37 +4,35 @@ namespace Ryujinx.Ui.Windows
{
public partial class AmiiboWindow : Window
{
- private Box _mainBox;
- private ButtonBox _buttonBox;
- private Button _scanButton;
- private Button _cancelButton;
- private CheckButton _randomUuidCheckBox;
- private Box _amiiboBox;
- private Box _amiiboHeadBox;
- private Box _amiiboSeriesBox;
- private Label _amiiboSeriesLabel;
+ private Box _mainBox;
+ private ButtonBox _buttonBox;
+ private Button _scanButton;
+ private Button _cancelButton;
+ private CheckButton _randomUuidCheckBox;
+ private Box _amiiboBox;
+ private Box _amiiboHeadBox;
+ private Box _amiiboSeriesBox;
+ private Label _amiiboSeriesLabel;
private ComboBoxText _amiiboSeriesComboBox;
- private Box _amiiboCharsBox;
- private Label _amiiboCharsLabel;
+ private Box _amiiboCharsBox;
+ private Label _amiiboCharsLabel;
private ComboBoxText _amiiboCharsComboBox;
- private CheckButton _showAllCheckBox;
- private Image _amiiboImage;
- private Label _gameUsageLabel;
+ private CheckButton _showAllCheckBox;
+ private Image _amiiboImage;
+ private Label _gameUsageLabel;
private void InitializeComponent()
{
-#pragma warning disable CS0612
-
//
// AmiiboWindow
//
- CanFocus = false;
- Resizable = false;
- Modal = true;
+ CanFocus = false;
+ Resizable = false;
+ Modal = true;
WindowPosition = WindowPosition.Center;
- DefaultWidth = 600;
- DefaultHeight = 470;
- TypeHint = Gdk.WindowTypeHint.Dialog;
+ DefaultWidth = 600;
+ DefaultHeight = 470;
+ TypeHint = Gdk.WindowTypeHint.Dialog;
//
// _mainBox
@@ -46,8 +44,8 @@ namespace Ryujinx.Ui.Windows
//
_buttonBox = new ButtonBox(Orientation.Horizontal)
{
- Margin = 20,
- LayoutStyle = ButtonBoxStyle.End
+ Margin = 20,
+ LayoutStyle = ButtonBoxStyle.End,
};
//
@@ -55,10 +53,10 @@ namespace Ryujinx.Ui.Windows
//
_scanButton = new Button()
{
- Label = "Scan It!",
- CanFocus = true,
+ Label = "Scan It!",
+ CanFocus = true,
ReceivesDefault = true,
- MarginLeft = 10
+ MarginStart = 10,
};
_scanButton.Clicked += ScanButton_Pressed;
@@ -67,8 +65,8 @@ namespace Ryujinx.Ui.Windows
//
_randomUuidCheckBox = new CheckButton()
{
- Label = "Hack: Use Random Tag Uuid",
- TooltipText = "This allows multiple scans of a single Amiibo.\n(used in The Legend of Zelda: Breath of the Wild)"
+ Label = "Hack: Use Random Tag Uuid",
+ TooltipText = "This allows multiple scans of a single Amiibo.\n(used in The Legend of Zelda: Breath of the Wild)",
};
//
@@ -76,10 +74,10 @@ namespace Ryujinx.Ui.Windows
//
_cancelButton = new Button()
{
- Label = "Cancel",
- CanFocus = true,
+ Label = "Cancel",
+ CanFocus = true,
ReceivesDefault = true,
- MarginLeft = 10
+ MarginStart = 10,
};
_cancelButton.Clicked += CancelButton_Pressed;
@@ -94,7 +92,7 @@ namespace Ryujinx.Ui.Windows
_amiiboHeadBox = new Box(Orientation.Horizontal, 0)
{
Margin = 20,
- Hexpand = true
+ Hexpand = true,
};
//
@@ -102,7 +100,7 @@ namespace Ryujinx.Ui.Windows
//
_amiiboSeriesBox = new Box(Orientation.Horizontal, 0)
{
- Hexpand = true
+ Hexpand = true,
};
//
@@ -120,7 +118,7 @@ namespace Ryujinx.Ui.Windows
//
_amiiboCharsBox = new Box(Orientation.Horizontal, 0)
{
- Hexpand = true
+ Hexpand = true,
};
//
@@ -138,7 +136,7 @@ namespace Ryujinx.Ui.Windows
//
_showAllCheckBox = new CheckButton()
{
- Label = "Show All Amiibo"
+ Label = "Show All Amiibo",
};
//
@@ -147,7 +145,7 @@ namespace Ryujinx.Ui.Windows
_amiiboImage = new Image()
{
HeightRequest = 350,
- WidthRequest = 350
+ WidthRequest = 350,
};
//
@@ -155,11 +153,9 @@ namespace Ryujinx.Ui.Windows
//
_gameUsageLabel = new Label("")
{
- MarginTop = 20
+ MarginTop = 20,
};
-#pragma warning restore CS0612
-
ShowComponent();
}
@@ -191,4 +187,4 @@ namespace Ryujinx.Ui.Windows
ShowAll();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Windows/AmiiboWindow.cs b/src/Ryujinx/Ui/Windows/AmiiboWindow.cs
index 5bf69d5a..4bbaaaaa 100644
--- a/src/Ryujinx/Ui/Windows/AmiiboWindow.cs
+++ b/src/Ryujinx/Ui/Windows/AmiiboWindow.cs
@@ -14,21 +14,19 @@ using System.Net.Http;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
-using AmiiboApi = Ryujinx.Ui.Common.Models.Amiibo.AmiiboApi;
-using AmiiboJsonSerializerContext = Ryujinx.Ui.Common.Models.Amiibo.AmiiboJsonSerializerContext;
namespace Ryujinx.Ui.Windows
{
public partial class AmiiboWindow : Window
{
- private const string DEFAULT_JSON = "{ \"amiibo\": [] }";
+ private const string DefaultJson = "{ \"amiibo\": [] }";
public string AmiiboId { get; private set; }
- public int DeviceId { get; set; }
- public string TitleId { get; set; }
- public string LastScannedAmiiboId { get; set; }
- public bool LastScannedAmiiboShowAll { get; set; }
+ public int DeviceId { get; set; }
+ public string TitleId { get; set; }
+ public string LastScannedAmiiboId { get; set; }
+ public bool LastScannedAmiiboShowAll { get; set; }
public ResponseType Response { get; private set; }
@@ -41,13 +39,13 @@ namespace Ryujinx.Ui.Windows
}
private readonly HttpClient _httpClient;
- private readonly string _amiiboJsonPath;
+ private readonly string _amiiboJsonPath;
private readonly byte[] _amiiboLogoBytes;
private List<AmiiboApi> _amiiboList;
- private static readonly AmiiboJsonSerializerContext SerializerContext = new(JsonHelper.GetDefaultSerializerOptions());
+ private static readonly AmiiboJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions());
public AmiiboWindow() : base($"Ryujinx {Program.Version} - Amiibo")
{
@@ -57,18 +55,18 @@ namespace Ryujinx.Ui.Windows
_httpClient = new HttpClient()
{
- Timeout = TimeSpan.FromSeconds(30)
+ Timeout = TimeSpan.FromSeconds(30),
};
Directory.CreateDirectory(System.IO.Path.Join(AppDataManager.BaseDirPath, "system", "amiibo"));
_amiiboJsonPath = System.IO.Path.Join(AppDataManager.BaseDirPath, "system", "amiibo", "Amiibo.json");
- _amiiboList = new List<AmiiboApi>();
+ _amiiboList = new List<AmiiboApi>();
- _amiiboLogoBytes = EmbeddedResources.Read("Ryujinx.Ui.Common/Resources/Logo_Amiibo.png");
+ _amiiboLogoBytes = EmbeddedResources.Read("Ryujinx.Ui.Common/Resources/Logo_Amiibo.png");
_amiiboImage.Pixbuf = new Gdk.Pixbuf(_amiiboLogoBytes);
- _scanButton.Sensitive = false;
+ _scanButton.Sensitive = false;
_randomUuidCheckBox.Sensitive = false;
_ = LoadContentAsync();
@@ -76,13 +74,13 @@ namespace Ryujinx.Ui.Windows
private async Task LoadContentAsync()
{
- string amiiboJsonString = DEFAULT_JSON;
+ string amiiboJsonString = DefaultJson;
if (File.Exists(_amiiboJsonPath))
{
amiiboJsonString = await File.ReadAllTextAsync(_amiiboJsonPath);
- if (await NeedsUpdate(JsonHelper.Deserialize(amiiboJsonString, SerializerContext.AmiiboJson).LastUpdated))
+ if (await NeedsUpdate(JsonHelper.Deserialize(amiiboJsonString, _serializerContext.AmiiboJson).LastUpdated))
{
amiiboJsonString = await DownloadAmiiboJson();
}
@@ -103,7 +101,7 @@ namespace Ryujinx.Ui.Windows
}
}
- _amiiboList = JsonHelper.Deserialize(amiiboJsonString, SerializerContext.AmiiboJson).Amiibo;
+ _amiiboList = JsonHelper.Deserialize(amiiboJsonString, _serializerContext.AmiiboJson).Amiibo;
_amiiboList = _amiiboList.OrderBy(amiibo => amiibo.AmiiboSeries).ToList();
if (LastScannedAmiiboShowAll)
@@ -118,7 +116,7 @@ namespace Ryujinx.Ui.Windows
private void ParseAmiiboData()
{
- List<string> comboxItemList = new List<string>();
+ List<string> comboxItemList = new();
for (int i = 0; i < _amiiboList.Count; i++)
{
@@ -149,7 +147,7 @@ namespace Ryujinx.Ui.Windows
}
_amiiboSeriesComboBox.Changed += SeriesComboBox_Changed;
- _amiiboCharsComboBox.Changed += CharacterComboBox_Changed;
+ _amiiboCharsComboBox.Changed += CharacterComboBox_Changed;
if (LastScannedAmiiboId != "")
{
@@ -219,7 +217,7 @@ namespace Ryujinx.Ui.Windows
Close();
}
- return DEFAULT_JSON;
+ return DefaultJson;
}
private async Task UpdateAmiiboPreview(string imageUrl)
@@ -228,14 +226,14 @@ namespace Ryujinx.Ui.Windows
if (response.IsSuccessStatusCode)
{
- byte[] amiiboPreviewBytes = await response.Content.ReadAsByteArrayAsync();
- Gdk.Pixbuf amiiboPreview = new Gdk.Pixbuf(amiiboPreviewBytes);
+ byte[] amiiboPreviewBytes = await response.Content.ReadAsByteArrayAsync();
+ Gdk.Pixbuf amiiboPreview = new(amiiboPreviewBytes);
- float ratio = Math.Min((float)_amiiboImage.AllocatedWidth / amiiboPreview.Width,
+ float ratio = Math.Min((float)_amiiboImage.AllocatedWidth / amiiboPreview.Width,
(float)_amiiboImage.AllocatedHeight / amiiboPreview.Height);
int resizeHeight = (int)(amiiboPreview.Height * ratio);
- int resizeWidth = (int)(amiiboPreview.Width * ratio);
+ int resizeWidth = (int)(amiiboPreview.Width * ratio);
_amiiboImage.Pixbuf = amiiboPreview.ScaleSimple(resizeWidth, resizeHeight, Gdk.InterpType.Bilinear);
}
@@ -245,7 +243,7 @@ namespace Ryujinx.Ui.Windows
}
}
- private void ShowInfoDialog()
+ private static void ShowInfoDialog()
{
GtkDialog.CreateInfoDialog($"Amiibo API", "Unable to connect to Amiibo API server. The service may be down or you may need to verify your internet connection is online.");
}
@@ -261,7 +259,7 @@ namespace Ryujinx.Ui.Windows
List<AmiiboApi> amiiboSortedList = _amiiboList.Where(amiibo => amiibo.AmiiboSeries == _amiiboSeriesComboBox.ActiveId).OrderBy(amiibo => amiibo.Name).ToList();
- List<string> comboxItemList = new List<string>();
+ List<string> comboxItemList = new();
for (int i = 0; i < amiiboSortedList.Count; i++)
{
@@ -295,7 +293,7 @@ namespace Ryujinx.Ui.Windows
_amiiboCharsComboBox.Active = 0;
- _scanButton.Sensitive = true;
+ _scanButton.Sensitive = true;
_randomUuidCheckBox.Sensitive = true;
}
@@ -346,12 +344,12 @@ namespace Ryujinx.Ui.Windows
_amiiboImage.Pixbuf = new Gdk.Pixbuf(_amiiboLogoBytes);
_amiiboSeriesComboBox.Changed -= SeriesComboBox_Changed;
- _amiiboCharsComboBox.Changed -= CharacterComboBox_Changed;
+ _amiiboCharsComboBox.Changed -= CharacterComboBox_Changed;
_amiiboSeriesComboBox.RemoveAll();
_amiiboCharsComboBox.RemoveAll();
- _scanButton.Sensitive = false;
+ _scanButton.Sensitive = false;
_randomUuidCheckBox.Sensitive = false;
new Task(() => ParseAmiiboData()).Start();
@@ -368,8 +366,8 @@ namespace Ryujinx.Ui.Windows
private void CancelButton_Pressed(object sender, EventArgs args)
{
- AmiiboId = "";
- LastScannedAmiiboId = "";
+ AmiiboId = "";
+ LastScannedAmiiboId = "";
LastScannedAmiiboShowAll = false;
Response = ResponseType.Cancel;
@@ -384,4 +382,4 @@ namespace Ryujinx.Ui.Windows
base.Dispose(disposing);
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Windows/AvatarWindow.cs b/src/Ryujinx/Ui/Windows/AvatarWindow.cs
index 0cda890f..3940f17d 100644
--- a/src/Ryujinx/Ui/Windows/AvatarWindow.cs
+++ b/src/Ryujinx/Ui/Windows/AvatarWindow.cs
@@ -18,7 +18,6 @@ using System.Buffers.Binary;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
-
using Image = SixLabors.ImageSharp.Image;
namespace Ryujinx.Ui.Windows
@@ -26,23 +25,23 @@ namespace Ryujinx.Ui.Windows
public class AvatarWindow : Window
{
public byte[] SelectedProfileImage;
- public bool NewUser;
+ public bool NewUser;
- private static Dictionary<string, byte[]> _avatarDict = new Dictionary<string, byte[]>();
+ private static readonly Dictionary<string, byte[]> _avatarDict = new();
- private ListStore _listStore;
- private IconView _iconView;
- private Button _setBackgroungColorButton;
- private Gdk.RGBA _backgroundColor;
+ private readonly ListStore _listStore;
+ private readonly IconView _iconView;
+ private readonly Button _setBackgroungColorButton;
+ private Gdk.RGBA _backgroundColor;
public AvatarWindow() : base($"Ryujinx {Program.Version} - Manage Accounts - Avatar")
{
Icon = new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png");
- CanFocus = false;
+ CanFocus = false;
Resizable = false;
- Modal = true;
- TypeHint = Gdk.WindowTypeHint.Dialog;
+ Modal = true;
+ TypeHint = Gdk.WindowTypeHint.Dialog;
SetDefaultSize(740, 400);
SetPosition(WindowPosition.Center);
@@ -50,54 +49,56 @@ namespace Ryujinx.Ui.Windows
Box vbox = new(Orientation.Vertical, 0);
Add(vbox);
- ScrolledWindow scrolledWindow = new ScrolledWindow
+ ScrolledWindow scrolledWindow = new()
{
- ShadowType = ShadowType.EtchedIn
+ ShadowType = ShadowType.EtchedIn,
};
scrolledWindow.SetPolicy(PolicyType.Automatic, PolicyType.Automatic);
Box hbox = new(Orientation.Horizontal, 0);
- Button chooseButton = new Button()
+ Button chooseButton = new()
{
- Label = "Choose",
- CanFocus = true,
- ReceivesDefault = true
+ Label = "Choose",
+ CanFocus = true,
+ ReceivesDefault = true,
};
chooseButton.Clicked += ChooseButton_Pressed;
_setBackgroungColorButton = new Button()
{
- Label = "Set Background Color",
- CanFocus = true
+ Label = "Set Background Color",
+ CanFocus = true,
};
_setBackgroungColorButton.Clicked += SetBackgroungColorButton_Pressed;
- _backgroundColor.Red = 1;
+ _backgroundColor.Red = 1;
_backgroundColor.Green = 1;
- _backgroundColor.Blue = 1;
+ _backgroundColor.Blue = 1;
_backgroundColor.Alpha = 1;
- Button closeButton = new Button()
+ Button closeButton = new()
{
- Label = "Close",
- CanFocus = true
+ Label = "Close",
+ CanFocus = true,
};
closeButton.Clicked += CloseButton_Pressed;
- vbox.PackStart(scrolledWindow, true, true, 0);
- hbox.PackStart(chooseButton, true, true, 0);
- hbox.PackStart(_setBackgroungColorButton, true, true, 0);
- hbox.PackStart(closeButton, true, true, 0);
- vbox.PackStart(hbox, false, false, 0);
+ vbox.PackStart(scrolledWindow, true, true, 0);
+ hbox.PackStart(chooseButton, true, true, 0);
+ hbox.PackStart(_setBackgroungColorButton, true, true, 0);
+ hbox.PackStart(closeButton, true, true, 0);
+ vbox.PackStart(hbox, false, false, 0);
_listStore = new ListStore(typeof(string), typeof(Gdk.Pixbuf));
_listStore.SetSortColumnId(0, SortType.Ascending);
- _iconView = new IconView(_listStore);
- _iconView.ItemWidth = 64;
- _iconView.ItemPadding = 10;
- _iconView.PixbufColumn = 1;
+ _iconView = new IconView(_listStore)
+ {
+ ItemWidth = 64,
+ ItemPadding = 10,
+ PixbufColumn = 1,
+ };
_iconView.SelectionChanged += IconView_SelectionChanged;
@@ -118,39 +119,36 @@ namespace Ryujinx.Ui.Windows
}
string contentPath = contentManager.GetInstalledContentPath(0x010000000000080A, StorageId.BuiltInSystem, NcaContentType.Data);
- string avatarPath = virtualFileSystem.SwitchPathToSystemPath(contentPath);
+ string avatarPath = virtualFileSystem.SwitchPathToSystemPath(contentPath);
if (!string.IsNullOrWhiteSpace(avatarPath))
{
- using (IStorage ncaFileStream = new LocalStorage(avatarPath, FileAccess.Read, FileMode.Open))
+ using IStorage ncaFileStream = new LocalStorage(avatarPath, FileAccess.Read, FileMode.Open);
+
+ Nca nca = new(virtualFileSystem.KeySet, ncaFileStream);
+ IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.ErrorOnInvalid);
+
+ foreach (var item in romfs.EnumerateEntries())
{
- Nca nca = new Nca(virtualFileSystem.KeySet, ncaFileStream);
- IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.ErrorOnInvalid);
+ // TODO: Parse DatabaseInfo.bin and table.bin files for more accuracy.
- foreach (var item in romfs.EnumerateEntries())
+ if (item.Type == DirectoryEntryType.File && item.FullPath.Contains("chara") && item.FullPath.Contains("szs"))
{
- // TODO: Parse DatabaseInfo.bin and table.bin files for more accuracy.
-
- if (item.Type == DirectoryEntryType.File && item.FullPath.Contains("chara") && item.FullPath.Contains("szs"))
- {
- using var file = new UniqueRef<IFile>();
+ using var file = new UniqueRef<IFile>();
- romfs.OpenFile(ref file.Ref, ("/" + item.FullPath).ToU8Span(), OpenMode.Read).ThrowIfFailure();
+ romfs.OpenFile(ref file.Ref, ("/" + item.FullPath).ToU8Span(), OpenMode.Read).ThrowIfFailure();
- using (MemoryStream stream = MemoryStreamManager.Shared.GetStream())
- using (MemoryStream streamPng = MemoryStreamManager.Shared.GetStream())
- {
- file.Get.AsStream().CopyTo(stream);
+ using MemoryStream stream = MemoryStreamManager.Shared.GetStream();
+ using MemoryStream streamPng = MemoryStreamManager.Shared.GetStream();
+ file.Get.AsStream().CopyTo(stream);
- stream.Position = 0;
+ stream.Position = 0;
- Image avatarImage = Image.LoadPixelData<Rgba32>(DecompressYaz0(stream), 256, 256);
+ Image avatarImage = Image.LoadPixelData<Rgba32>(DecompressYaz0(stream), 256, 256);
- avatarImage.SaveAsPng(streamPng);
+ avatarImage.SaveAsPng(streamPng);
- _avatarDict.Add(item.FullPath, streamPng.ToArray());
- }
- }
+ _avatarDict.Add(item.FullPath, streamPng.ToArray());
}
}
}
@@ -165,23 +163,24 @@ namespace Ryujinx.Ui.Windows
_listStore.AppendValues(avatar.Key, new Gdk.Pixbuf(ProcessImage(avatar.Value), 96, 96));
}
- _iconView.SelectPath(new TreePath(new int[] { 0 }));
+ _iconView.SelectPath(new TreePath(new[] { 0 }));
}
private byte[] ProcessImage(byte[] data)
{
- using (MemoryStream streamJpg = MemoryStreamManager.Shared.GetStream())
- {
- Image avatarImage = Image.Load(data, new PngDecoder());
+ using MemoryStream streamJpg = MemoryStreamManager.Shared.GetStream();
- avatarImage.Mutate(x => x.BackgroundColor(new Rgba32((byte)(_backgroundColor.Red * 255),
- (byte)(_backgroundColor.Green * 255),
- (byte)(_backgroundColor.Blue * 255),
- (byte)(_backgroundColor.Alpha * 255))));
- avatarImage.SaveAsJpeg(streamJpg);
+ Image avatarImage = Image.Load(data, new PngDecoder());
- return streamJpg.ToArray();
- }
+ avatarImage.Mutate(x => x.BackgroundColor(new Rgba32(
+ (byte)(_backgroundColor.Red * 255),
+ (byte)(_backgroundColor.Green * 255),
+ (byte)(_backgroundColor.Blue * 255),
+ (byte)(_backgroundColor.Alpha * 255)
+ )));
+ avatarImage.SaveAsJpeg(streamJpg);
+
+ return streamJpg.ToArray();
}
private void CloseButton_Pressed(object sender, EventArgs e)
@@ -203,20 +202,19 @@ namespace Ryujinx.Ui.Windows
private void SetBackgroungColorButton_Pressed(object sender, EventArgs e)
{
- using (ColorChooserDialog colorChooserDialog = new ColorChooserDialog("Set Background Color", this))
- {
- colorChooserDialog.UseAlpha = false;
- colorChooserDialog.Rgba = _backgroundColor;
-
- if (colorChooserDialog.Run() == (int)ResponseType.Ok)
- {
- _backgroundColor = colorChooserDialog.Rgba;
+ using ColorChooserDialog colorChooserDialog = new("Set Background Color", this);
- ProcessAvatars();
- }
+ colorChooserDialog.UseAlpha = false;
+ colorChooserDialog.Rgba = _backgroundColor;
- colorChooserDialog.Hide();
+ if (colorChooserDialog.Run() == (int)ResponseType.Ok)
+ {
+ _backgroundColor = colorChooserDialog.Rgba;
+
+ ProcessAvatars();
}
+
+ colorChooserDialog.Hide();
}
private void ChooseButton_Pressed(object sender, EventArgs e)
@@ -226,69 +224,68 @@ namespace Ryujinx.Ui.Windows
private static byte[] DecompressYaz0(Stream stream)
{
- using (BinaryReader reader = new BinaryReader(stream))
- {
- reader.ReadInt32(); // Magic
-
- uint decodedLength = BinaryPrimitives.ReverseEndianness(reader.ReadUInt32());
+ using BinaryReader reader = new(stream);
- reader.ReadInt64(); // Padding
+ reader.ReadInt32(); // Magic
- byte[] input = new byte[stream.Length - stream.Position];
- stream.Read(input, 0, input.Length);
+ uint decodedLength = BinaryPrimitives.ReverseEndianness(reader.ReadUInt32());
- long inputOffset = 0;
+ reader.ReadInt64(); // Padding
- byte[] output = new byte[decodedLength];
- long outputOffset = 0;
+ byte[] input = new byte[stream.Length - stream.Position];
+ stream.Read(input, 0, input.Length);
- ushort mask = 0;
- byte header = 0;
+ long inputOffset = 0;
- while (outputOffset < decodedLength)
+ byte[] output = new byte[decodedLength];
+ long outputOffset = 0;
+
+ ushort mask = 0;
+ byte header = 0;
+
+ while (outputOffset < decodedLength)
+ {
+ if ((mask >>= 1) == 0)
+ {
+ header = input[inputOffset++];
+ mask = 0x80;
+ }
+
+ if ((header & mask) > 0)
{
- if ((mask >>= 1) == 0)
+ if (outputOffset == output.Length)
{
- header = input[inputOffset++];
- mask = 0x80;
+ break;
}
- if ((header & mask) > 0)
- {
- if (outputOffset == output.Length)
- {
- break;
- }
+ output[outputOffset++] = input[inputOffset++];
+ }
+ else
+ {
+ byte byte1 = input[inputOffset++];
+ byte byte2 = input[inputOffset++];
+
+ int dist = ((byte1 & 0xF) << 8) | byte2;
+ int position = (int)outputOffset - (dist + 1);
- output[outputOffset++] = input[inputOffset++];
+ int length = byte1 >> 4;
+ if (length == 0)
+ {
+ length = input[inputOffset++] + 0x12;
}
else
{
- byte byte1 = input[inputOffset++];
- byte byte2 = input[inputOffset++];
-
- int dist = ((byte1 & 0xF) << 8) | byte2;
- int position = (int)outputOffset - (dist + 1);
-
- int length = byte1 >> 4;
- if (length == 0)
- {
- length = input[inputOffset++] + 0x12;
- }
- else
- {
- length += 2;
- }
-
- while (length-- > 0)
- {
- output[outputOffset++] = output[position++];
- }
+ length += 2;
}
- }
- return output;
+ while (length-- > 0)
+ {
+ output[outputOffset++] = output[position++];
+ }
+ }
}
+
+ return output;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Windows/CheatWindow.cs b/src/Ryujinx/Ui/Windows/CheatWindow.cs
index 32df2c0c..1eca732b 100644
--- a/src/Ryujinx/Ui/Windows/CheatWindow.cs
+++ b/src/Ryujinx/Ui/Windows/CheatWindow.cs
@@ -6,7 +6,6 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
-
using GUI = Gtk.Builder.ObjectAttribute;
namespace Ryujinx.Ui.Windows
@@ -16,11 +15,11 @@ namespace Ryujinx.Ui.Windows
private readonly string _enabledCheatsPath;
private readonly bool _noCheatsFound;
-#pragma warning disable CS0649, IDE0044
- [GUI] Label _baseTitleInfoLabel;
+#pragma warning disable CS0649, IDE0044 // Field is never assigned to, Add readonly modifier
+ [GUI] Label _baseTitleInfoLabel;
[GUI] TextView _buildIdTextView;
[GUI] TreeView _cheatTreeView;
- [GUI] Button _saveButton;
+ [GUI] Button _saveButton;
#pragma warning restore CS0649, IDE0044
public CheatWindow(VirtualFileSystem virtualFileSystem, ulong titleId, string titleName, string titlePath) : this(new Builder("Ryujinx.Ui.Windows.CheatWindow.glade"), virtualFileSystem, titleId, titleName, titlePath) { }
@@ -31,14 +30,14 @@ namespace Ryujinx.Ui.Windows
_baseTitleInfoLabel.Text = $"Cheats Available for {titleName} [{titleId:X16}]";
_buildIdTextView.Buffer.Text = $"BuildId: {ApplicationData.GetApplicationBuildId(virtualFileSystem, titlePath)}";
- string modsBasePath = ModLoader.GetModsBasePath();
+ string modsBasePath = ModLoader.GetModsBasePath();
string titleModsPath = ModLoader.GetTitleDir(modsBasePath, titleId.ToString("X16"));
_enabledCheatsPath = System.IO.Path.Combine(titleModsPath, "cheats", "enabled.txt");
_cheatTreeView.Model = new TreeStore(typeof(bool), typeof(string), typeof(string), typeof(string));
- CellRendererToggle enableToggle = new CellRendererToggle();
+ CellRendererToggle enableToggle = new();
enableToggle.Toggled += (sender, args) =>
{
_cheatTreeView.Model.GetIter(out TreeIter treeIter, new TreePath(args.Path));
@@ -62,7 +61,7 @@ namespace Ryujinx.Ui.Windows
var buildIdColumn = _cheatTreeView.AppendColumn("Build Id", new CellRendererText(), "text", 3);
buildIdColumn.Visible = false;
- string[] enabled = { };
+ string[] enabled = Array.Empty<string>();
if (File.Exists(_enabledCheatsPath))
{
@@ -90,7 +89,7 @@ namespace Ryujinx.Ui.Windows
parentIter = ((TreeStore)_cheatTreeView.Model).AppendValues(false, buildId, parentPath, "");
}
- string cleanName = cheat.Name.Substring(1, cheat.Name.Length - 8);
+ string cleanName = cheat.Name[1..^7];
((TreeStore)_cheatTreeView.Model).AppendValues(parentIter, enabled.Contains($"{buildId}-{cheat.Name}"), cleanName, "", buildId);
cheatAdded++;
@@ -116,7 +115,7 @@ namespace Ryujinx.Ui.Windows
return;
}
- List<string> enabledCheats = new List<string>();
+ List<string> enabledCheats = new();
if (_cheatTreeView.Model.GetIterFirst(out TreeIter parentIter))
{
diff --git a/src/Ryujinx/Ui/Windows/ControllerWindow.cs b/src/Ryujinx/Ui/Windows/ControllerWindow.cs
index 9b4befd8..19cc6f20 100644
--- a/src/Ryujinx/Ui/Windows/ControllerWindow.cs
+++ b/src/Ryujinx/Ui/Windows/ControllerWindow.cs
@@ -31,47 +31,47 @@ namespace Ryujinx.Ui.Windows
private bool _isWaitingForInput;
-#pragma warning disable CS0649, IDE0044
- [GUI] Adjustment _controllerStrongRumble;
- [GUI] Adjustment _controllerWeakRumble;
- [GUI] Adjustment _controllerDeadzoneLeft;
- [GUI] Adjustment _controllerDeadzoneRight;
- [GUI] Adjustment _controllerRangeLeft;
- [GUI] Adjustment _controllerRangeRight;
- [GUI] Adjustment _controllerTriggerThreshold;
- [GUI] Adjustment _slotNumber;
- [GUI] Adjustment _altSlotNumber;
- [GUI] Adjustment _sensitivity;
- [GUI] Adjustment _gyroDeadzone;
- [GUI] CheckButton _enableMotion;
- [GUI] CheckButton _enableCemuHook;
- [GUI] CheckButton _mirrorInput;
- [GUI] Entry _dsuServerHost;
- [GUI] Entry _dsuServerPort;
+#pragma warning disable CS0649, IDE0044 // Field is never assigned to, Add readonly modifier
+ [GUI] Adjustment _controllerStrongRumble;
+ [GUI] Adjustment _controllerWeakRumble;
+ [GUI] Adjustment _controllerDeadzoneLeft;
+ [GUI] Adjustment _controllerDeadzoneRight;
+ [GUI] Adjustment _controllerRangeLeft;
+ [GUI] Adjustment _controllerRangeRight;
+ [GUI] Adjustment _controllerTriggerThreshold;
+ [GUI] Adjustment _slotNumber;
+ [GUI] Adjustment _altSlotNumber;
+ [GUI] Adjustment _sensitivity;
+ [GUI] Adjustment _gyroDeadzone;
+ [GUI] CheckButton _enableMotion;
+ [GUI] CheckButton _enableCemuHook;
+ [GUI] CheckButton _mirrorInput;
+ [GUI] Entry _dsuServerHost;
+ [GUI] Entry _dsuServerPort;
[GUI] ComboBoxText _inputDevice;
[GUI] ComboBoxText _profile;
- [GUI] Box _settingsBox;
- [GUI] Box _motionAltBox;
- [GUI] Box _motionBox;
- [GUI] Box _dsuServerHostBox;
- [GUI] Box _dsuServerPortBox;
- [GUI] Box _motionControllerSlot;
- [GUI] Grid _leftStickKeyboard;
- [GUI] Grid _leftStickController;
- [GUI] Box _deadZoneLeftBox;
- [GUI] Box _rangeLeftBox;
- [GUI] Grid _rightStickKeyboard;
- [GUI] Grid _rightStickController;
- [GUI] Box _deadZoneRightBox;
- [GUI] Box _rangeRightBox;
- [GUI] Grid _leftSideTriggerBox;
- [GUI] Grid _rightSideTriggerBox;
- [GUI] Box _triggerThresholdBox;
+ [GUI] Box _settingsBox;
+ [GUI] Box _motionAltBox;
+ [GUI] Box _motionBox;
+ [GUI] Box _dsuServerHostBox;
+ [GUI] Box _dsuServerPortBox;
+ [GUI] Box _motionControllerSlot;
+ [GUI] Grid _leftStickKeyboard;
+ [GUI] Grid _leftStickController;
+ [GUI] Box _deadZoneLeftBox;
+ [GUI] Box _rangeLeftBox;
+ [GUI] Grid _rightStickKeyboard;
+ [GUI] Grid _rightStickController;
+ [GUI] Box _deadZoneRightBox;
+ [GUI] Box _rangeRightBox;
+ [GUI] Grid _leftSideTriggerBox;
+ [GUI] Grid _rightSideTriggerBox;
+ [GUI] Box _triggerThresholdBox;
[GUI] ComboBoxText _controllerType;
[GUI] ToggleButton _lStick;
- [GUI] CheckButton _invertLStickX;
- [GUI] CheckButton _invertLStickY;
- [GUI] CheckButton _rotateL90CW;
+ [GUI] CheckButton _invertLStickX;
+ [GUI] CheckButton _invertLStickY;
+ [GUI] CheckButton _rotateL90CW;
[GUI] ToggleButton _lStickUp;
[GUI] ToggleButton _lStickDown;
[GUI] ToggleButton _lStickLeft;
@@ -85,9 +85,9 @@ namespace Ryujinx.Ui.Windows
[GUI] ToggleButton _l;
[GUI] ToggleButton _zL;
[GUI] ToggleButton _rStick;
- [GUI] CheckButton _invertRStickX;
- [GUI] CheckButton _invertRStickY;
- [GUI] CheckButton _rotateR90CW;
+ [GUI] CheckButton _invertRStickX;
+ [GUI] CheckButton _invertRStickY;
+ [GUI] CheckButton _rotateR90Cw;
[GUI] ToggleButton _rStickUp;
[GUI] ToggleButton _rStickDown;
[GUI] ToggleButton _rStickLeft;
@@ -104,18 +104,18 @@ namespace Ryujinx.Ui.Windows
[GUI] ToggleButton _lSr;
[GUI] ToggleButton _rSl;
[GUI] ToggleButton _rSr;
- [GUI] Image _controllerImage;
- [GUI] CheckButton _enableRumble;
- [GUI] Box _rumbleBox;
+ [GUI] Image _controllerImage;
+ [GUI] CheckButton _enableRumble;
+ [GUI] Box _rumbleBox;
#pragma warning restore CS0649, IDE0044
- private MainWindow _mainWindow;
- private IGamepadDriver _gtk3KeyboardDriver;
+ private readonly MainWindow _mainWindow;
+ private readonly IGamepadDriver _gtk3KeyboardDriver;
private IGamepad _selectedGamepad;
private bool _mousePressed;
private bool _middleMousePressed;
- private static readonly InputConfigJsonSerializerContext SerializerContext = new(JsonHelper.GetDefaultSerializerOptions());
+ private static readonly InputConfigJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions());
public ControllerWindow(MainWindow mainWindow, PlayerIndex controllerId) : this(mainWindow, new Builder("Ryujinx.Ui.Windows.ControllerWindow.glade"), controllerId) { }
@@ -152,36 +152,36 @@ namespace Ryujinx.Ui.Windows
_controllerType.Active = 0; // Set initial value to first in list.
// Bind Events.
- _lStick.Clicked += ButtonForStick_Pressed;
- _lStickUp.Clicked += Button_Pressed;
- _lStickDown.Clicked += Button_Pressed;
- _lStickLeft.Clicked += Button_Pressed;
- _lStickRight.Clicked += Button_Pressed;
- _lStickButton.Clicked += Button_Pressed;
- _dpadUp.Clicked += Button_Pressed;
- _dpadDown.Clicked += Button_Pressed;
- _dpadLeft.Clicked += Button_Pressed;
- _dpadRight.Clicked += Button_Pressed;
- _minus.Clicked += Button_Pressed;
- _l.Clicked += Button_Pressed;
- _zL.Clicked += Button_Pressed;
- _lSl.Clicked += Button_Pressed;
- _lSr.Clicked += Button_Pressed;
- _rStick.Clicked += ButtonForStick_Pressed;
- _rStickUp.Clicked += Button_Pressed;
- _rStickDown.Clicked += Button_Pressed;
- _rStickLeft.Clicked += Button_Pressed;
- _rStickRight.Clicked += Button_Pressed;
- _rStickButton.Clicked += Button_Pressed;
- _a.Clicked += Button_Pressed;
- _b.Clicked += Button_Pressed;
- _x.Clicked += Button_Pressed;
- _y.Clicked += Button_Pressed;
- _plus.Clicked += Button_Pressed;
- _r.Clicked += Button_Pressed;
- _zR.Clicked += Button_Pressed;
- _rSl.Clicked += Button_Pressed;
- _rSr.Clicked += Button_Pressed;
+ _lStick.Clicked += ButtonForStick_Pressed;
+ _lStickUp.Clicked += Button_Pressed;
+ _lStickDown.Clicked += Button_Pressed;
+ _lStickLeft.Clicked += Button_Pressed;
+ _lStickRight.Clicked += Button_Pressed;
+ _lStickButton.Clicked += Button_Pressed;
+ _dpadUp.Clicked += Button_Pressed;
+ _dpadDown.Clicked += Button_Pressed;
+ _dpadLeft.Clicked += Button_Pressed;
+ _dpadRight.Clicked += Button_Pressed;
+ _minus.Clicked += Button_Pressed;
+ _l.Clicked += Button_Pressed;
+ _zL.Clicked += Button_Pressed;
+ _lSl.Clicked += Button_Pressed;
+ _lSr.Clicked += Button_Pressed;
+ _rStick.Clicked += ButtonForStick_Pressed;
+ _rStickUp.Clicked += Button_Pressed;
+ _rStickDown.Clicked += Button_Pressed;
+ _rStickLeft.Clicked += Button_Pressed;
+ _rStickRight.Clicked += Button_Pressed;
+ _rStickButton.Clicked += Button_Pressed;
+ _a.Clicked += Button_Pressed;
+ _b.Clicked += Button_Pressed;
+ _x.Clicked += Button_Pressed;
+ _y.Clicked += Button_Pressed;
+ _plus.Clicked += Button_Pressed;
+ _r.Clicked += Button_Pressed;
+ _zR.Clicked += Button_Pressed;
+ _rSl.Clicked += Button_Pressed;
+ _rSr.Clicked += Button_Pressed;
_enableCemuHook.Clicked += CemuHookCheckButtonPressed;
// Setup current values.
@@ -197,10 +197,7 @@ namespace Ryujinx.Ui.Windows
mainWindow.InputManager.GamepadDriver.OnGamepadConnected += HandleOnGamepadConnected;
mainWindow.InputManager.GamepadDriver.OnGamepadDisconnected += HandleOnGamepadDisconnected;
- if (_mainWindow.RendererWidget != null)
- {
- _mainWindow.RendererWidget.NpadManager.BlockInputUpdates();
- }
+ _mainWindow.RendererWidget?.NpadManager.BlockInputUpdates();
}
private void CemuHookCheckButtonPressed(object sender, EventArgs e)
@@ -229,10 +226,7 @@ namespace Ryujinx.Ui.Windows
_mainWindow.InputManager.GamepadDriver.OnGamepadConnected -= HandleOnGamepadConnected;
_mainWindow.InputManager.GamepadDriver.OnGamepadDisconnected -= HandleOnGamepadDisconnected;
- if (_mainWindow.RendererWidget != null)
- {
- _mainWindow.RendererWidget.NpadManager.UnblockInputUpdates();
- }
+ _mainWindow.RendererWidget?.NpadManager.UnblockInputUpdates();
_selectedGamepad?.Dispose();
@@ -384,62 +378,62 @@ namespace Ryujinx.Ui.Windows
_controllerImage.Pixbuf = _controllerType.ActiveId switch
{
"ProController" => new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Controller_ProCon.svg", 400, 400),
- "JoyconLeft" => new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Controller_JoyConLeft.svg", 400, 500),
- "JoyconRight" => new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Controller_JoyConRight.svg", 400, 500),
- _ => new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Controller_JoyConPair.svg", 400, 500),
+ "JoyconLeft" => new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Controller_JoyConLeft.svg", 400, 500),
+ "JoyconRight" => new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Controller_JoyConRight.svg", 400, 500),
+ _ => new Gdk.Pixbuf(Assembly.GetAssembly(typeof(ConfigurationState)), "Ryujinx.Ui.Common.Resources.Controller_JoyConPair.svg", 400, 500),
};
}
}
private void ClearValues()
{
- _lStick.Label = "Unbound";
- _lStickUp.Label = "Unbound";
- _lStickDown.Label = "Unbound";
- _lStickLeft.Label = "Unbound";
- _lStickRight.Label = "Unbound";
- _lStickButton.Label = "Unbound";
- _dpadUp.Label = "Unbound";
- _dpadDown.Label = "Unbound";
- _dpadLeft.Label = "Unbound";
- _dpadRight.Label = "Unbound";
- _minus.Label = "Unbound";
- _l.Label = "Unbound";
- _zL.Label = "Unbound";
- _lSl.Label = "Unbound";
- _lSr.Label = "Unbound";
- _rStick.Label = "Unbound";
- _rStickUp.Label = "Unbound";
- _rStickDown.Label = "Unbound";
- _rStickLeft.Label = "Unbound";
- _rStickRight.Label = "Unbound";
- _rStickButton.Label = "Unbound";
- _a.Label = "Unbound";
- _b.Label = "Unbound";
- _x.Label = "Unbound";
- _y.Label = "Unbound";
- _plus.Label = "Unbound";
- _r.Label = "Unbound";
- _zR.Label = "Unbound";
- _rSl.Label = "Unbound";
- _rSr.Label = "Unbound";
- _controllerStrongRumble.Value = 1;
- _controllerWeakRumble.Value = 1;
- _controllerDeadzoneLeft.Value = 0;
- _controllerDeadzoneRight.Value = 0;
- _controllerRangeLeft.Value = 1;
- _controllerRangeRight.Value = 1;
+ _lStick.Label = "Unbound";
+ _lStickUp.Label = "Unbound";
+ _lStickDown.Label = "Unbound";
+ _lStickLeft.Label = "Unbound";
+ _lStickRight.Label = "Unbound";
+ _lStickButton.Label = "Unbound";
+ _dpadUp.Label = "Unbound";
+ _dpadDown.Label = "Unbound";
+ _dpadLeft.Label = "Unbound";
+ _dpadRight.Label = "Unbound";
+ _minus.Label = "Unbound";
+ _l.Label = "Unbound";
+ _zL.Label = "Unbound";
+ _lSl.Label = "Unbound";
+ _lSr.Label = "Unbound";
+ _rStick.Label = "Unbound";
+ _rStickUp.Label = "Unbound";
+ _rStickDown.Label = "Unbound";
+ _rStickLeft.Label = "Unbound";
+ _rStickRight.Label = "Unbound";
+ _rStickButton.Label = "Unbound";
+ _a.Label = "Unbound";
+ _b.Label = "Unbound";
+ _x.Label = "Unbound";
+ _y.Label = "Unbound";
+ _plus.Label = "Unbound";
+ _r.Label = "Unbound";
+ _zR.Label = "Unbound";
+ _rSl.Label = "Unbound";
+ _rSr.Label = "Unbound";
+ _controllerStrongRumble.Value = 1;
+ _controllerWeakRumble.Value = 1;
+ _controllerDeadzoneLeft.Value = 0;
+ _controllerDeadzoneRight.Value = 0;
+ _controllerRangeLeft.Value = 1;
+ _controllerRangeRight.Value = 1;
_controllerTriggerThreshold.Value = 0;
- _mirrorInput.Active = false;
- _enableMotion.Active = false;
- _enableCemuHook.Active = false;
- _slotNumber.Value = 0;
- _altSlotNumber.Value = 0;
- _sensitivity.Value = 100;
- _gyroDeadzone.Value = 1;
- _dsuServerHost.Buffer.Text = "";
- _dsuServerPort.Buffer.Text = "";
- _enableRumble.Active = false;
+ _mirrorInput.Active = false;
+ _enableMotion.Active = false;
+ _enableCemuHook.Active = false;
+ _slotNumber.Value = 0;
+ _altSlotNumber.Value = 0;
+ _sensitivity.Value = 100;
+ _gyroDeadzone.Value = 1;
+ _dsuServerHost.Buffer.Text = "";
+ _dsuServerPort.Buffer.Text = "";
+ _enableRumble.Active = false;
}
private void SetValues(InputConfig config)
@@ -454,34 +448,34 @@ namespace Ryujinx.Ui.Windows
: ControllerType.ProController.ToString());
}
- _lStickUp.Label = keyboardConfig.LeftJoyconStick.StickUp.ToString();
- _lStickDown.Label = keyboardConfig.LeftJoyconStick.StickDown.ToString();
- _lStickLeft.Label = keyboardConfig.LeftJoyconStick.StickLeft.ToString();
- _lStickRight.Label = keyboardConfig.LeftJoyconStick.StickRight.ToString();
- _lStickButton.Label = keyboardConfig.LeftJoyconStick.StickButton.ToString();
- _dpadUp.Label = keyboardConfig.LeftJoycon.DpadUp.ToString();
- _dpadDown.Label = keyboardConfig.LeftJoycon.DpadDown.ToString();
- _dpadLeft.Label = keyboardConfig.LeftJoycon.DpadLeft.ToString();
- _dpadRight.Label = keyboardConfig.LeftJoycon.DpadRight.ToString();
- _minus.Label = keyboardConfig.LeftJoycon.ButtonMinus.ToString();
- _l.Label = keyboardConfig.LeftJoycon.ButtonL.ToString();
- _zL.Label = keyboardConfig.LeftJoycon.ButtonZl.ToString();
- _lSl.Label = keyboardConfig.LeftJoycon.ButtonSl.ToString();
- _lSr.Label = keyboardConfig.LeftJoycon.ButtonSr.ToString();
- _rStickUp.Label = keyboardConfig.RightJoyconStick.StickUp.ToString();
- _rStickDown.Label = keyboardConfig.RightJoyconStick.StickDown.ToString();
- _rStickLeft.Label = keyboardConfig.RightJoyconStick.StickLeft.ToString();
- _rStickRight.Label = keyboardConfig.RightJoyconStick.StickRight.ToString();
- _rStickButton.Label = keyboardConfig.RightJoyconStick.StickButton.ToString();
- _a.Label = keyboardConfig.RightJoycon.ButtonA.ToString();
- _b.Label = keyboardConfig.RightJoycon.ButtonB.ToString();
- _x.Label = keyboardConfig.RightJoycon.ButtonX.ToString();
- _y.Label = keyboardConfig.RightJoycon.ButtonY.ToString();
- _plus.Label = keyboardConfig.RightJoycon.ButtonPlus.ToString();
- _r.Label = keyboardConfig.RightJoycon.ButtonR.ToString();
- _zR.Label = keyboardConfig.RightJoycon.ButtonZr.ToString();
- _rSl.Label = keyboardConfig.RightJoycon.ButtonSl.ToString();
- _rSr.Label = keyboardConfig.RightJoycon.ButtonSr.ToString();
+ _lStickUp.Label = keyboardConfig.LeftJoyconStick.StickUp.ToString();
+ _lStickDown.Label = keyboardConfig.LeftJoyconStick.StickDown.ToString();
+ _lStickLeft.Label = keyboardConfig.LeftJoyconStick.StickLeft.ToString();
+ _lStickRight.Label = keyboardConfig.LeftJoyconStick.StickRight.ToString();
+ _lStickButton.Label = keyboardConfig.LeftJoyconStick.StickButton.ToString();
+ _dpadUp.Label = keyboardConfig.LeftJoycon.DpadUp.ToString();
+ _dpadDown.Label = keyboardConfig.LeftJoycon.DpadDown.ToString();
+ _dpadLeft.Label = keyboardConfig.LeftJoycon.DpadLeft.ToString();
+ _dpadRight.Label = keyboardConfig.LeftJoycon.DpadRight.ToString();
+ _minus.Label = keyboardConfig.LeftJoycon.ButtonMinus.ToString();
+ _l.Label = keyboardConfig.LeftJoycon.ButtonL.ToString();
+ _zL.Label = keyboardConfig.LeftJoycon.ButtonZl.ToString();
+ _lSl.Label = keyboardConfig.LeftJoycon.ButtonSl.ToString();
+ _lSr.Label = keyboardConfig.LeftJoycon.ButtonSr.ToString();
+ _rStickUp.Label = keyboardConfig.RightJoyconStick.StickUp.ToString();
+ _rStickDown.Label = keyboardConfig.RightJoyconStick.StickDown.ToString();
+ _rStickLeft.Label = keyboardConfig.RightJoyconStick.StickLeft.ToString();
+ _rStickRight.Label = keyboardConfig.RightJoyconStick.StickRight.ToString();
+ _rStickButton.Label = keyboardConfig.RightJoyconStick.StickButton.ToString();
+ _a.Label = keyboardConfig.RightJoycon.ButtonA.ToString();
+ _b.Label = keyboardConfig.RightJoycon.ButtonB.ToString();
+ _x.Label = keyboardConfig.RightJoycon.ButtonX.ToString();
+ _y.Label = keyboardConfig.RightJoycon.ButtonY.ToString();
+ _plus.Label = keyboardConfig.RightJoycon.ButtonPlus.ToString();
+ _r.Label = keyboardConfig.RightJoycon.ButtonR.ToString();
+ _zR.Label = keyboardConfig.RightJoycon.ButtonZr.ToString();
+ _rSl.Label = keyboardConfig.RightJoycon.ButtonSl.ToString();
+ _rSr.Label = keyboardConfig.RightJoycon.ButtonSr.ToString();
break;
case StandardControllerInputConfig controllerConfig:
@@ -492,63 +486,63 @@ namespace Ryujinx.Ui.Windows
: ControllerType.ProController.ToString());
}
- _lStick.Label = controllerConfig.LeftJoyconStick.Joystick.ToString();
- _invertLStickX.Active = controllerConfig.LeftJoyconStick.InvertStickX;
- _invertLStickY.Active = controllerConfig.LeftJoyconStick.InvertStickY;
- _rotateL90CW.Active = controllerConfig.LeftJoyconStick.Rotate90CW;
- _lStickButton.Label = controllerConfig.LeftJoyconStick.StickButton.ToString();
- _dpadUp.Label = controllerConfig.LeftJoycon.DpadUp.ToString();
- _dpadDown.Label = controllerConfig.LeftJoycon.DpadDown.ToString();
- _dpadLeft.Label = controllerConfig.LeftJoycon.DpadLeft.ToString();
- _dpadRight.Label = controllerConfig.LeftJoycon.DpadRight.ToString();
- _minus.Label = controllerConfig.LeftJoycon.ButtonMinus.ToString();
- _l.Label = controllerConfig.LeftJoycon.ButtonL.ToString();
- _zL.Label = controllerConfig.LeftJoycon.ButtonZl.ToString();
- _lSl.Label = controllerConfig.LeftJoycon.ButtonSl.ToString();
- _lSr.Label = controllerConfig.LeftJoycon.ButtonSr.ToString();
- _rStick.Label = controllerConfig.RightJoyconStick.Joystick.ToString();
- _invertRStickX.Active = controllerConfig.RightJoyconStick.InvertStickX;
- _invertRStickY.Active = controllerConfig.RightJoyconStick.InvertStickY;
- _rotateR90CW.Active = controllerConfig.RightJoyconStick.Rotate90CW;
- _rStickButton.Label = controllerConfig.RightJoyconStick.StickButton.ToString();
- _a.Label = controllerConfig.RightJoycon.ButtonA.ToString();
- _b.Label = controllerConfig.RightJoycon.ButtonB.ToString();
- _x.Label = controllerConfig.RightJoycon.ButtonX.ToString();
- _y.Label = controllerConfig.RightJoycon.ButtonY.ToString();
- _plus.Label = controllerConfig.RightJoycon.ButtonPlus.ToString();
- _r.Label = controllerConfig.RightJoycon.ButtonR.ToString();
- _zR.Label = controllerConfig.RightJoycon.ButtonZr.ToString();
- _rSl.Label = controllerConfig.RightJoycon.ButtonSl.ToString();
- _rSr.Label = controllerConfig.RightJoycon.ButtonSr.ToString();
- _controllerStrongRumble.Value = controllerConfig.Rumble.StrongRumble;
- _controllerWeakRumble.Value = controllerConfig.Rumble.WeakRumble;
- _enableRumble.Active = controllerConfig.Rumble.EnableRumble;
- _controllerDeadzoneLeft.Value = controllerConfig.DeadzoneLeft;
- _controllerDeadzoneRight.Value = controllerConfig.DeadzoneRight;
- _controllerRangeLeft.Value = controllerConfig.RangeLeft;
- _controllerRangeRight.Value = controllerConfig.RangeRight;
+ _lStick.Label = controllerConfig.LeftJoyconStick.Joystick.ToString();
+ _invertLStickX.Active = controllerConfig.LeftJoyconStick.InvertStickX;
+ _invertLStickY.Active = controllerConfig.LeftJoyconStick.InvertStickY;
+ _rotateL90CW.Active = controllerConfig.LeftJoyconStick.Rotate90CW;
+ _lStickButton.Label = controllerConfig.LeftJoyconStick.StickButton.ToString();
+ _dpadUp.Label = controllerConfig.LeftJoycon.DpadUp.ToString();
+ _dpadDown.Label = controllerConfig.LeftJoycon.DpadDown.ToString();
+ _dpadLeft.Label = controllerConfig.LeftJoycon.DpadLeft.ToString();
+ _dpadRight.Label = controllerConfig.LeftJoycon.DpadRight.ToString();
+ _minus.Label = controllerConfig.LeftJoycon.ButtonMinus.ToString();
+ _l.Label = controllerConfig.LeftJoycon.ButtonL.ToString();
+ _zL.Label = controllerConfig.LeftJoycon.ButtonZl.ToString();
+ _lSl.Label = controllerConfig.LeftJoycon.ButtonSl.ToString();
+ _lSr.Label = controllerConfig.LeftJoycon.ButtonSr.ToString();
+ _rStick.Label = controllerConfig.RightJoyconStick.Joystick.ToString();
+ _invertRStickX.Active = controllerConfig.RightJoyconStick.InvertStickX;
+ _invertRStickY.Active = controllerConfig.RightJoyconStick.InvertStickY;
+ _rotateR90Cw.Active = controllerConfig.RightJoyconStick.Rotate90CW;
+ _rStickButton.Label = controllerConfig.RightJoyconStick.StickButton.ToString();
+ _a.Label = controllerConfig.RightJoycon.ButtonA.ToString();
+ _b.Label = controllerConfig.RightJoycon.ButtonB.ToString();
+ _x.Label = controllerConfig.RightJoycon.ButtonX.ToString();
+ _y.Label = controllerConfig.RightJoycon.ButtonY.ToString();
+ _plus.Label = controllerConfig.RightJoycon.ButtonPlus.ToString();
+ _r.Label = controllerConfig.RightJoycon.ButtonR.ToString();
+ _zR.Label = controllerConfig.RightJoycon.ButtonZr.ToString();
+ _rSl.Label = controllerConfig.RightJoycon.ButtonSl.ToString();
+ _rSr.Label = controllerConfig.RightJoycon.ButtonSr.ToString();
+ _controllerStrongRumble.Value = controllerConfig.Rumble.StrongRumble;
+ _controllerWeakRumble.Value = controllerConfig.Rumble.WeakRumble;
+ _enableRumble.Active = controllerConfig.Rumble.EnableRumble;
+ _controllerDeadzoneLeft.Value = controllerConfig.DeadzoneLeft;
+ _controllerDeadzoneRight.Value = controllerConfig.DeadzoneRight;
+ _controllerRangeLeft.Value = controllerConfig.RangeLeft;
+ _controllerRangeRight.Value = controllerConfig.RangeRight;
_controllerTriggerThreshold.Value = controllerConfig.TriggerThreshold;
- _sensitivity.Value = controllerConfig.Motion.Sensitivity;
- _gyroDeadzone.Value = controllerConfig.Motion.GyroDeadzone;
- _enableMotion.Active = controllerConfig.Motion.EnableMotion;
- _enableCemuHook.Active = controllerConfig.Motion.MotionBackend == MotionInputBackendType.CemuHook;
+ _sensitivity.Value = controllerConfig.Motion.Sensitivity;
+ _gyroDeadzone.Value = controllerConfig.Motion.GyroDeadzone;
+ _enableMotion.Active = controllerConfig.Motion.EnableMotion;
+ _enableCemuHook.Active = controllerConfig.Motion.MotionBackend == MotionInputBackendType.CemuHook;
// If both stick ranges are 0 (usually indicative of an outdated profile load) then both sticks will be set to 1.0.
if (_controllerRangeLeft.Value <= 0.0 && _controllerRangeRight.Value <= 0.0)
{
- _controllerRangeLeft.Value = 1.0;
+ _controllerRangeLeft.Value = 1.0;
_controllerRangeRight.Value = 1.0;
-
+
Logger.Info?.Print(LogClass.Application, $"{config.PlayerIndex} stick range reset. Save the profile now to update your configuration");
}
if (controllerConfig.Motion is CemuHookMotionConfigController cemuHookMotionConfig)
{
- _slotNumber.Value = cemuHookMotionConfig.Slot;
- _altSlotNumber.Value = cemuHookMotionConfig.AltSlot;
- _mirrorInput.Active = cemuHookMotionConfig.MirrorInput;
- _dsuServerHost.Buffer.Text = cemuHookMotionConfig.DsuServerHost;
- _dsuServerPort.Buffer.Text = cemuHookMotionConfig.DsuServerPort.ToString();
+ _slotNumber.Value = cemuHookMotionConfig.Slot;
+ _altSlotNumber.Value = cemuHookMotionConfig.AltSlot;
+ _mirrorInput.Active = cemuHookMotionConfig.MirrorInput;
+ _dsuServerHost.Buffer.Text = cemuHookMotionConfig.DsuServerHost;
+ _dsuServerPort.Buffer.Text = cemuHookMotionConfig.DsuServerPort.ToString();
}
break;
@@ -559,6 +553,7 @@ namespace Ryujinx.Ui.Windows
{
if (_inputDevice.ActiveId.StartsWith("keyboard"))
{
+#pragma warning disable CA1806, IDE0055 // Disable formatting
Enum.TryParse(_lStickUp.Label, out Key lStickUp);
Enum.TryParse(_lStickDown.Label, out Key lStickDown);
Enum.TryParse(_lStickLeft.Label, out Key lStickLeft);
@@ -588,60 +583,62 @@ namespace Ryujinx.Ui.Windows
Enum.TryParse(_zR.Label, out Key rButtonZr);
Enum.TryParse(_rSl.Label, out Key rButtonSl);
Enum.TryParse(_rSr.Label, out Key rButtonSr);
+#pragma warning restore CA1806, IDE0055
return new StandardKeyboardInputConfig
{
- Backend = InputBackendType.WindowKeyboard,
- Version = InputConfig.CurrentVersion,
- Id = _inputDevice.ActiveId.Split("/")[1],
- ControllerType = Enum.Parse<ControllerType>(_controllerType.ActiveId),
- PlayerIndex = _playerIndex,
- LeftJoycon = new LeftJoyconCommonConfig<Key>
+ Backend = InputBackendType.WindowKeyboard,
+ Version = InputConfig.CurrentVersion,
+ Id = _inputDevice.ActiveId.Split("/")[1],
+ ControllerType = Enum.Parse<ControllerType>(_controllerType.ActiveId),
+ PlayerIndex = _playerIndex,
+ LeftJoycon = new LeftJoyconCommonConfig<Key>
{
- ButtonMinus = lButtonMinus,
- ButtonL = lButtonL,
- ButtonZl = lButtonZl,
- ButtonSl = lButtonSl,
- ButtonSr = lButtonSr,
- DpadUp = lDPadUp,
- DpadDown = lDPadDown,
- DpadLeft = lDPadLeft,
- DpadRight = lDPadRight
+ ButtonMinus = lButtonMinus,
+ ButtonL = lButtonL,
+ ButtonZl = lButtonZl,
+ ButtonSl = lButtonSl,
+ ButtonSr = lButtonSr,
+ DpadUp = lDPadUp,
+ DpadDown = lDPadDown,
+ DpadLeft = lDPadLeft,
+ DpadRight = lDPadRight,
},
LeftJoyconStick = new JoyconConfigKeyboardStick<Key>
{
- StickUp = lStickUp,
- StickDown = lStickDown,
- StickLeft = lStickLeft,
- StickRight = lStickRight,
- StickButton = lStickButton,
+ StickUp = lStickUp,
+ StickDown = lStickDown,
+ StickLeft = lStickLeft,
+ StickRight = lStickRight,
+ StickButton = lStickButton,
},
- RightJoycon = new RightJoyconCommonConfig<Key>
+ RightJoycon = new RightJoyconCommonConfig<Key>
{
- ButtonA = rButtonA,
- ButtonB = rButtonB,
- ButtonX = rButtonX,
- ButtonY = rButtonY,
- ButtonPlus = rButtonPlus,
- ButtonR = rButtonR,
- ButtonZr = rButtonZr,
- ButtonSl = rButtonSl,
- ButtonSr = rButtonSr
+ ButtonA = rButtonA,
+ ButtonB = rButtonB,
+ ButtonX = rButtonX,
+ ButtonY = rButtonY,
+ ButtonPlus = rButtonPlus,
+ ButtonR = rButtonR,
+ ButtonZr = rButtonZr,
+ ButtonSl = rButtonSl,
+ ButtonSr = rButtonSr,
},
RightJoyconStick = new JoyconConfigKeyboardStick<Key>
{
- StickUp = rStickUp,
- StickDown = rStickDown,
- StickLeft = rStickLeft,
- StickRight = rStickRight,
- StickButton = rStickButton,
+ StickUp = rStickUp,
+ StickDown = rStickDown,
+ StickLeft = rStickLeft,
+ StickRight = rStickRight,
+ StickButton = rStickButton,
},
};
}
-
+
if (_inputDevice.ActiveId.StartsWith("controller"))
{
- Enum.TryParse(_lStick.Label, out ConfigStickInputId lStick);
+#pragma warning disable CA1806, IDE0055 // Disable formatting
+ Enum.TryParse(_lStick.Label, out ConfigStickInputId lStick);
Enum.TryParse(_lStickButton.Label, out ConfigGamepadInputId lStickButton);
Enum.TryParse(_minus.Label, out ConfigGamepadInputId lButtonMinus);
Enum.TryParse(_l.Label, out ConfigGamepadInputId lButtonL);
@@ -653,7 +650,7 @@ namespace Ryujinx.Ui.Windows
Enum.TryParse(_dpadLeft.Label, out ConfigGamepadInputId lDPadLeft);
Enum.TryParse(_dpadRight.Label, out ConfigGamepadInputId lDPadRight);
- Enum.TryParse(_rStick.Label, out ConfigStickInputId rStick);
+ Enum.TryParse(_rStick.Label, out ConfigStickInputId rStick);
Enum.TryParse(_rStickButton.Label, out ConfigGamepadInputId rStickButton);
Enum.TryParse(_a.Label, out ConfigGamepadInputId rButtonA);
Enum.TryParse(_b.Label, out ConfigGamepadInputId rButtonB);
@@ -666,94 +663,95 @@ namespace Ryujinx.Ui.Windows
Enum.TryParse(_rSr.Label, out ConfigGamepadInputId rButtonSr);
int.TryParse(_dsuServerPort.Buffer.Text, out int port);
+#pragma warning restore CA1806, IDE0055
MotionConfigController motionConfig;
if (_enableCemuHook.Active)
{
- motionConfig = new CemuHookMotionConfigController
+ motionConfig = new CemuHookMotionConfigController
{
MotionBackend = MotionInputBackendType.CemuHook,
- EnableMotion = _enableMotion.Active,
- Sensitivity = (int)_sensitivity.Value,
- GyroDeadzone = _gyroDeadzone.Value,
- MirrorInput = _mirrorInput.Active,
- Slot = (int)_slotNumber.Value,
- AltSlot = (int)_altSlotNumber.Value,
+ EnableMotion = _enableMotion.Active,
+ Sensitivity = (int)_sensitivity.Value,
+ GyroDeadzone = _gyroDeadzone.Value,
+ MirrorInput = _mirrorInput.Active,
+ Slot = (int)_slotNumber.Value,
+ AltSlot = (int)_altSlotNumber.Value,
DsuServerHost = _dsuServerHost.Buffer.Text,
- DsuServerPort = port
+ DsuServerPort = port,
};
}
else
{
- motionConfig = new StandardMotionConfigController
+ motionConfig = new StandardMotionConfigController
{
MotionBackend = MotionInputBackendType.GamepadDriver,
- EnableMotion = _enableMotion.Active,
- Sensitivity = (int)_sensitivity.Value,
- GyroDeadzone = _gyroDeadzone.Value,
+ EnableMotion = _enableMotion.Active,
+ Sensitivity = (int)_sensitivity.Value,
+ GyroDeadzone = _gyroDeadzone.Value,
};
}
return new StandardControllerInputConfig
{
- Backend = InputBackendType.GamepadSDL2,
- Version = InputConfig.CurrentVersion,
- Id = _inputDevice.ActiveId.Split("/")[1].Split(" ")[0],
- ControllerType = Enum.Parse<ControllerType>(_controllerType.ActiveId),
- PlayerIndex = _playerIndex,
- DeadzoneLeft = (float)_controllerDeadzoneLeft.Value,
- DeadzoneRight = (float)_controllerDeadzoneRight.Value,
- RangeLeft = (float)_controllerRangeLeft.Value,
- RangeRight = (float)_controllerRangeRight.Value,
+ Backend = InputBackendType.GamepadSDL2,
+ Version = InputConfig.CurrentVersion,
+ Id = _inputDevice.ActiveId.Split("/")[1].Split(" ")[0],
+ ControllerType = Enum.Parse<ControllerType>(_controllerType.ActiveId),
+ PlayerIndex = _playerIndex,
+ DeadzoneLeft = (float)_controllerDeadzoneLeft.Value,
+ DeadzoneRight = (float)_controllerDeadzoneRight.Value,
+ RangeLeft = (float)_controllerRangeLeft.Value,
+ RangeRight = (float)_controllerRangeRight.Value,
TriggerThreshold = (float)_controllerTriggerThreshold.Value,
- LeftJoycon = new LeftJoyconCommonConfig<ConfigGamepadInputId>
+ LeftJoycon = new LeftJoyconCommonConfig<ConfigGamepadInputId>
{
- ButtonMinus = lButtonMinus,
- ButtonL = lButtonL,
- ButtonZl = lButtonZl,
- ButtonSl = lButtonSl,
- ButtonSr = lButtonSr,
- DpadUp = lDPadUp,
- DpadDown = lDPadDown,
- DpadLeft = lDPadLeft,
- DpadRight = lDPadRight
+ ButtonMinus = lButtonMinus,
+ ButtonL = lButtonL,
+ ButtonZl = lButtonZl,
+ ButtonSl = lButtonSl,
+ ButtonSr = lButtonSr,
+ DpadUp = lDPadUp,
+ DpadDown = lDPadDown,
+ DpadLeft = lDPadLeft,
+ DpadRight = lDPadRight,
},
LeftJoyconStick = new JoyconConfigControllerStick<ConfigGamepadInputId, ConfigStickInputId>
{
InvertStickX = _invertLStickX.Active,
- Joystick = lStick,
+ Joystick = lStick,
InvertStickY = _invertLStickY.Active,
- StickButton = lStickButton,
- Rotate90CW = _rotateL90CW.Active,
+ StickButton = lStickButton,
+ Rotate90CW = _rotateL90CW.Active,
},
- RightJoycon = new RightJoyconCommonConfig<ConfigGamepadInputId>
+ RightJoycon = new RightJoyconCommonConfig<ConfigGamepadInputId>
{
- ButtonA = rButtonA,
- ButtonB = rButtonB,
- ButtonX = rButtonX,
- ButtonY = rButtonY,
- ButtonPlus = rButtonPlus,
- ButtonR = rButtonR,
- ButtonZr = rButtonZr,
- ButtonSl = rButtonSl,
- ButtonSr = rButtonSr
+ ButtonA = rButtonA,
+ ButtonB = rButtonB,
+ ButtonX = rButtonX,
+ ButtonY = rButtonY,
+ ButtonPlus = rButtonPlus,
+ ButtonR = rButtonR,
+ ButtonZr = rButtonZr,
+ ButtonSl = rButtonSl,
+ ButtonSr = rButtonSr,
},
RightJoyconStick = new JoyconConfigControllerStick<ConfigGamepadInputId, ConfigStickInputId>
{
InvertStickX = _invertRStickX.Active,
- Joystick = rStick,
+ Joystick = rStick,
InvertStickY = _invertRStickY.Active,
- StickButton = rStickButton,
- Rotate90CW = _rotateR90CW.Active,
+ StickButton = rStickButton,
+ Rotate90CW = _rotateR90Cw.Active,
},
- Motion = motionConfig,
- Rumble = new RumbleConfigController
+ Motion = motionConfig,
+ Rumble = new RumbleConfigController
{
StrongRumble = (float)_controllerStrongRumble.Value,
- WeakRumble = (float)_controllerWeakRumble.Value,
- EnableRumble = _enableRumble.Active
- }
+ WeakRumble = (float)_controllerWeakRumble.Value,
+ EnableRumble = _enableRumble.Active,
+ },
};
}
@@ -856,7 +854,7 @@ namespace Ryujinx.Ui.Windows
{
throw new Exception("Controller not supported");
}
-
+
return assigner;
}
@@ -880,7 +878,7 @@ namespace Ryujinx.Ui.Windows
// Open GTK3 keyboard for cancel operations
IKeyboard keyboard = (IKeyboard)_gtk3KeyboardDriver.GetGamepad("0");
- Thread inputThread = new Thread(() =>
+ Thread inputThread = new(() =>
{
assigner.Initialize();
@@ -916,10 +914,11 @@ namespace Ryujinx.Ui.Windows
button.Active = false;
_isWaitingForInput = false;
});
- });
-
- inputThread.Name = "GUI.InputThread";
- inputThread.IsBackground = true;
+ })
+ {
+ Name = "GUI.InputThread",
+ IsBackground = true,
+ };
inputThread.Start();
}
@@ -950,7 +949,7 @@ namespace Ryujinx.Ui.Windows
Directory.CreateDirectory(basePath);
}
- if (_inputDevice.ActiveId == null|| _inputDevice.ActiveId.Equals("disabled"))
+ if (_inputDevice.ActiveId == null || _inputDevice.ActiveId.Equals("disabled"))
{
_profile.Append("default", "None");
}
@@ -971,10 +970,13 @@ namespace Ryujinx.Ui.Windows
{
((ToggleButton)sender).SetStateFlags(StateFlags.Normal, true);
- if (_inputDevice.ActiveId == "disabled" || _profile.ActiveId == null) return;
+ if (_inputDevice.ActiveId == "disabled" || _profile.ActiveId == null)
+ {
+ return;
+ }
InputConfig config = null;
- int pos = _profile.Active;
+ int pos = _profile.Active;
if (_profile.ActiveId == "default")
{
@@ -982,53 +984,53 @@ namespace Ryujinx.Ui.Windows
{
config = new StandardKeyboardInputConfig
{
- Version = InputConfig.CurrentVersion,
- Backend = InputBackendType.WindowKeyboard,
- Id = null,
- ControllerType = ControllerType.ProController,
- LeftJoycon = new LeftJoyconCommonConfig<Key>
+ Version = InputConfig.CurrentVersion,
+ Backend = InputBackendType.WindowKeyboard,
+ Id = null,
+ ControllerType = ControllerType.ProController,
+ LeftJoycon = new LeftJoyconCommonConfig<Key>
{
- DpadUp = Key.Up,
- DpadDown = Key.Down,
- DpadLeft = Key.Left,
- DpadRight = Key.Right,
- ButtonMinus = Key.Minus,
- ButtonL = Key.E,
- ButtonZl = Key.Q,
- ButtonSl = Key.Unbound,
- ButtonSr = Key.Unbound
+ DpadUp = Key.Up,
+ DpadDown = Key.Down,
+ DpadLeft = Key.Left,
+ DpadRight = Key.Right,
+ ButtonMinus = Key.Minus,
+ ButtonL = Key.E,
+ ButtonZl = Key.Q,
+ ButtonSl = Key.Unbound,
+ ButtonSr = Key.Unbound,
},
- LeftJoyconStick = new JoyconConfigKeyboardStick<Key>
+ LeftJoyconStick = new JoyconConfigKeyboardStick<Key>
{
- StickUp = Key.W,
- StickDown = Key.S,
- StickLeft = Key.A,
- StickRight = Key.D,
- StickButton = Key.F,
+ StickUp = Key.W,
+ StickDown = Key.S,
+ StickLeft = Key.A,
+ StickRight = Key.D,
+ StickButton = Key.F,
},
- RightJoycon = new RightJoyconCommonConfig<Key>
+ RightJoycon = new RightJoyconCommonConfig<Key>
{
- ButtonA = Key.Z,
- ButtonB = Key.X,
- ButtonX = Key.C,
- ButtonY = Key.V,
- ButtonPlus = Key.Plus,
- ButtonR = Key.U,
- ButtonZr = Key.O,
- ButtonSl = Key.Unbound,
- ButtonSr = Key.Unbound
+ ButtonA = Key.Z,
+ ButtonB = Key.X,
+ ButtonX = Key.C,
+ ButtonY = Key.V,
+ ButtonPlus = Key.Plus,
+ ButtonR = Key.U,
+ ButtonZr = Key.O,
+ ButtonSl = Key.Unbound,
+ ButtonSr = Key.Unbound,
},
RightJoyconStick = new JoyconConfigKeyboardStick<Key>
{
- StickUp = Key.I,
- StickDown = Key.K,
- StickLeft = Key.J,
- StickRight = Key.L,
- StickButton = Key.H,
- }
+ StickUp = Key.I,
+ StickDown = Key.K,
+ StickLeft = Key.J,
+ StickRight = Key.L,
+ StickButton = Key.H,
+ },
};
}
else if (_inputDevice.ActiveId.StartsWith("controller"))
@@ -1037,72 +1039,72 @@ namespace Ryujinx.Ui.Windows
config = new StandardControllerInputConfig
{
- Version = InputConfig.CurrentVersion,
- Backend = InputBackendType.GamepadSDL2,
- Id = null,
- ControllerType = ControllerType.JoyconPair,
- DeadzoneLeft = 0.1f,
- DeadzoneRight = 0.1f,
- RangeLeft = 1.0f,
- RangeRight = 1.0f,
+ Version = InputConfig.CurrentVersion,
+ Backend = InputBackendType.GamepadSDL2,
+ Id = null,
+ ControllerType = ControllerType.JoyconPair,
+ DeadzoneLeft = 0.1f,
+ DeadzoneRight = 0.1f,
+ RangeLeft = 1.0f,
+ RangeRight = 1.0f,
TriggerThreshold = 0.5f,
LeftJoycon = new LeftJoyconCommonConfig<ConfigGamepadInputId>
{
- DpadUp = ConfigGamepadInputId.DpadUp,
- DpadDown = ConfigGamepadInputId.DpadDown,
- DpadLeft = ConfigGamepadInputId.DpadLeft,
- DpadRight = ConfigGamepadInputId.DpadRight,
- ButtonMinus = ConfigGamepadInputId.Minus,
- ButtonL = ConfigGamepadInputId.LeftShoulder,
- ButtonZl = ConfigGamepadInputId.LeftTrigger,
- ButtonSl = ConfigGamepadInputId.Unbound,
- ButtonSr = ConfigGamepadInputId.Unbound,
+ DpadUp = ConfigGamepadInputId.DpadUp,
+ DpadDown = ConfigGamepadInputId.DpadDown,
+ DpadLeft = ConfigGamepadInputId.DpadLeft,
+ DpadRight = ConfigGamepadInputId.DpadRight,
+ ButtonMinus = ConfigGamepadInputId.Minus,
+ ButtonL = ConfigGamepadInputId.LeftShoulder,
+ ButtonZl = ConfigGamepadInputId.LeftTrigger,
+ ButtonSl = ConfigGamepadInputId.Unbound,
+ ButtonSr = ConfigGamepadInputId.Unbound,
},
LeftJoyconStick = new JoyconConfigControllerStick<ConfigGamepadInputId, ConfigStickInputId>
{
- Joystick = ConfigStickInputId.Left,
- StickButton = ConfigGamepadInputId.LeftStick,
+ Joystick = ConfigStickInputId.Left,
+ StickButton = ConfigGamepadInputId.LeftStick,
InvertStickX = false,
InvertStickY = false,
- Rotate90CW = false,
+ Rotate90CW = false,
},
RightJoycon = new RightJoyconCommonConfig<ConfigGamepadInputId>
{
- ButtonA = isNintendoStyle ? ConfigGamepadInputId.A : ConfigGamepadInputId.B,
- ButtonB = isNintendoStyle ? ConfigGamepadInputId.B : ConfigGamepadInputId.A,
- ButtonX = isNintendoStyle ? ConfigGamepadInputId.X : ConfigGamepadInputId.Y,
- ButtonY = isNintendoStyle ? ConfigGamepadInputId.Y : ConfigGamepadInputId.X,
- ButtonPlus = ConfigGamepadInputId.Plus,
- ButtonR = ConfigGamepadInputId.RightShoulder,
- ButtonZr = ConfigGamepadInputId.RightTrigger,
- ButtonSl = ConfigGamepadInputId.Unbound,
- ButtonSr = ConfigGamepadInputId.Unbound,
+ ButtonA = isNintendoStyle ? ConfigGamepadInputId.A : ConfigGamepadInputId.B,
+ ButtonB = isNintendoStyle ? ConfigGamepadInputId.B : ConfigGamepadInputId.A,
+ ButtonX = isNintendoStyle ? ConfigGamepadInputId.X : ConfigGamepadInputId.Y,
+ ButtonY = isNintendoStyle ? ConfigGamepadInputId.Y : ConfigGamepadInputId.X,
+ ButtonPlus = ConfigGamepadInputId.Plus,
+ ButtonR = ConfigGamepadInputId.RightShoulder,
+ ButtonZr = ConfigGamepadInputId.RightTrigger,
+ ButtonSl = ConfigGamepadInputId.Unbound,
+ ButtonSr = ConfigGamepadInputId.Unbound,
},
RightJoyconStick = new JoyconConfigControllerStick<ConfigGamepadInputId, ConfigStickInputId>
{
- Joystick = ConfigStickInputId.Right,
- StickButton = ConfigGamepadInputId.RightStick,
+ Joystick = ConfigStickInputId.Right,
+ StickButton = ConfigGamepadInputId.RightStick,
InvertStickX = false,
InvertStickY = false,
- Rotate90CW = false,
+ Rotate90CW = false,
},
Motion = new StandardMotionConfigController
{
MotionBackend = MotionInputBackendType.GamepadDriver,
EnableMotion = true,
- Sensitivity = 100,
+ Sensitivity = 100,
GyroDeadzone = 1,
},
Rumble = new RumbleConfigController
{
StrongRumble = 1f,
- WeakRumble = 1f,
- EnableRumble = false
- }
+ WeakRumble = 1f,
+ EnableRumble = false,
+ },
};
}
}
@@ -1122,7 +1124,7 @@ namespace Ryujinx.Ui.Windows
try
{
- config = JsonHelper.DeserializeFromFile(path, SerializerContext.InputConfig);
+ config = JsonHelper.DeserializeFromFile(path, _serializerContext.InputConfig);
}
catch (JsonException) { }
}
@@ -1134,17 +1136,23 @@ namespace Ryujinx.Ui.Windows
{
((ToggleButton)sender).SetStateFlags(StateFlags.Normal, true);
- if (_inputDevice.ActiveId == "disabled") return;
+ if (_inputDevice.ActiveId == "disabled")
+ {
+ return;
+ }
- InputConfig inputConfig = GetValues();
- ProfileDialog profileDialog = new ProfileDialog();
+ InputConfig inputConfig = GetValues();
+ ProfileDialog profileDialog = new();
- if (inputConfig == null) return;
+ if (inputConfig == null)
+ {
+ return;
+ }
if (profileDialog.Run() == (int)ResponseType.Ok)
{
string path = System.IO.Path.Combine(GetProfileBasePath(), profileDialog.FileName);
- string jsonString = JsonHelper.Serialize(inputConfig, SerializerContext.InputConfig);
+ string jsonString = JsonHelper.Serialize(inputConfig, _serializerContext.InputConfig);
File.WriteAllText(path, jsonString);
}
@@ -1156,9 +1164,12 @@ namespace Ryujinx.Ui.Windows
private void ProfileRemove_Activated(object sender, EventArgs args)
{
- ((ToggleButton) sender).SetStateFlags(StateFlags.Normal, true);
+ ((ToggleButton)sender).SetStateFlags(StateFlags.Normal, true);
- if (_inputDevice.ActiveId == "disabled" || _profile.ActiveId == "default" || _profile.ActiveId == null) return;
+ if (_inputDevice.ActiveId == "disabled" || _profile.ActiveId == "default" || _profile.ActiveId == null)
+ {
+ return;
+ }
MessageDialog confirmDialog = GtkDialog.CreateConfirmationDialog("Deleting Profile", "This action is irreversible, are you sure you want to continue?");
@@ -1200,10 +1211,7 @@ namespace Ryujinx.Ui.Windows
}
}
- if (_mainWindow.RendererWidget != null)
- {
- _mainWindow.RendererWidget.NpadManager.ReloadConfiguration(newConfig, ConfigurationState.Instance.Hid.EnableKeyboard, ConfigurationState.Instance.Hid.EnableMouse);
- }
+ _mainWindow.RendererWidget?.NpadManager.ReloadConfiguration(newConfig, ConfigurationState.Instance.Hid.EnableKeyboard, ConfigurationState.Instance.Hid.EnableMouse);
// Atomically replace and signal input change.
// NOTE: Do not modify InputConfig.Value directly as other code depends on the on-change event.
diff --git a/src/Ryujinx/Ui/Windows/DlcWindow.cs b/src/Ryujinx/Ui/Windows/DlcWindow.cs
index b22f1593..74aef00f 100644
--- a/src/Ryujinx/Ui/Windows/DlcWindow.cs
+++ b/src/Ryujinx/Ui/Windows/DlcWindow.cs
@@ -19,16 +19,16 @@ namespace Ryujinx.Ui.Windows
{
public class DlcWindow : Window
{
- private readonly VirtualFileSystem _virtualFileSystem;
- private readonly string _titleId;
- private readonly string _dlcJsonPath;
+ private readonly VirtualFileSystem _virtualFileSystem;
+ private readonly string _titleId;
+ private readonly string _dlcJsonPath;
private readonly List<DownloadableContentContainer> _dlcContainerList;
- private static readonly DownloadableContentJsonSerializerContext SerializerContext = new(JsonHelper.GetDefaultSerializerOptions());
+ private static readonly DownloadableContentJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions());
-#pragma warning disable CS0649, IDE0044
- [GUI] Label _baseTitleInfoLabel;
- [GUI] TreeView _dlcTreeView;
+#pragma warning disable CS0649, IDE0044 // Field is never assigned to, Add readonly modifier
+ [GUI] Label _baseTitleInfoLabel;
+ [GUI] TreeView _dlcTreeView;
[GUI] TreeSelection _dlcTreeSelection;
#pragma warning restore CS0649, IDE0044
@@ -38,23 +38,23 @@ namespace Ryujinx.Ui.Windows
{
builder.Autoconnect(this);
- _titleId = titleId;
- _virtualFileSystem = virtualFileSystem;
- _dlcJsonPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, _titleId, "dlc.json");
+ _titleId = titleId;
+ _virtualFileSystem = virtualFileSystem;
+ _dlcJsonPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, _titleId, "dlc.json");
_baseTitleInfoLabel.Text = $"DLC Available for {titleName} [{titleId.ToUpper()}]";
try
{
- _dlcContainerList = JsonHelper.DeserializeFromFile(_dlcJsonPath, SerializerContext.ListDownloadableContentContainer);
+ _dlcContainerList = JsonHelper.DeserializeFromFile(_dlcJsonPath, _serializerContext.ListDownloadableContentContainer);
}
catch
{
_dlcContainerList = new List<DownloadableContentContainer>();
}
-
+
_dlcTreeView.Model = new TreeStore(typeof(bool), typeof(string), typeof(string));
- CellRendererToggle enableToggle = new CellRendererToggle();
+ CellRendererToggle enableToggle = new();
enableToggle.Toggled += (sender, args) =>
{
_dlcTreeView.Model.GetIter(out TreeIter treeIter, new TreePath(args.Path));
@@ -71,9 +71,9 @@ namespace Ryujinx.Ui.Windows
}
};
- _dlcTreeView.AppendColumn("Enabled", enableToggle, "active", 0);
- _dlcTreeView.AppendColumn("TitleId", new CellRendererText(), "text", 1);
- _dlcTreeView.AppendColumn("Path", new CellRendererText(), "text", 2);
+ _dlcTreeView.AppendColumn("Enabled", enableToggle, "active", 0);
+ _dlcTreeView.AppendColumn("TitleId", new CellRendererText(), "text", 1);
+ _dlcTreeView.AppendColumn("Path", new CellRendererText(), "text", 2);
foreach (DownloadableContentContainer dlcContainer in _dlcContainerList)
{
@@ -85,8 +85,11 @@ namespace Ryujinx.Ui.Windows
// "enabled" box if all child NCAs are enabled. Usually fine since each nsp has only one nca.
bool areAllContentPacksEnabled = dlcContainer.DownloadableContentNcaList.TrueForAll((nca) => nca.Enabled);
TreeIter parentIter = ((TreeStore)_dlcTreeView.Model).AppendValues(areAllContentPacksEnabled, "", dlcContainer.ContainerPath);
+
using FileStream containerFile = File.OpenRead(dlcContainer.ContainerPath);
- PartitionFileSystem pfs = new PartitionFileSystem(containerFile.AsStorage());
+
+ PartitionFileSystem pfs = new(containerFile.AsStorage());
+
_virtualFileSystem.ImportTickets(pfs);
foreach (DownloadableContentNca dlcNca in dlcContainer.DownloadableContentNcaList)
@@ -126,14 +129,14 @@ namespace Ryujinx.Ui.Windows
private void AddButton_Clicked(object sender, EventArgs args)
{
- FileChooserNative fileChooser = new FileChooserNative("Select DLC files", this, FileChooserAction.Open, "Add", "Cancel")
+ FileChooserNative fileChooser = new("Select DLC files", this, FileChooserAction.Open, "Add", "Cancel")
{
- SelectMultiple = true
+ SelectMultiple = true,
};
- FileFilter filter = new FileFilter()
+ FileFilter filter = new()
{
- Name = "Switch Game DLCs"
+ Name = "Switch Game DLCs",
};
filter.AddPattern("*.nsp");
@@ -148,43 +151,45 @@ namespace Ryujinx.Ui.Windows
return;
}
- using (FileStream containerFile = File.OpenRead(containerPath))
- {
- PartitionFileSystem pfs = new PartitionFileSystem(containerFile.AsStorage());
- bool containsDlc = false;
+ using FileStream containerFile = File.OpenRead(containerPath);
- _virtualFileSystem.ImportTickets(pfs);
+ PartitionFileSystem pfs = new(containerFile.AsStorage());
+ bool containsDlc = false;
- TreeIter? parentIter = null;
+ _virtualFileSystem.ImportTickets(pfs);
- foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca"))
- {
- using var ncaFile = new UniqueRef<IFile>();
+ TreeIter? parentIter = null;
- pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure();
+ foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca"))
+ {
+ using var ncaFile = new UniqueRef<IFile>();
- Nca nca = TryCreateNca(ncaFile.Get.AsStorage(), containerPath);
+ pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure();
- if (nca == null) continue;
+ Nca nca = TryCreateNca(ncaFile.Get.AsStorage(), containerPath);
- if (nca.Header.ContentType == NcaContentType.PublicData)
+ if (nca == null)
+ {
+ continue;
+ }
+
+ if (nca.Header.ContentType == NcaContentType.PublicData)
+ {
+ if ((nca.Header.TitleId & 0xFFFFFFFFFFFFE000).ToString("x16") != _titleId)
{
- if ((nca.Header.TitleId & 0xFFFFFFFFFFFFE000).ToString("x16") != _titleId)
- {
- break;
- }
+ break;
+ }
- parentIter ??= ((TreeStore)_dlcTreeView.Model).AppendValues(true, "", containerPath);
+ parentIter ??= ((TreeStore)_dlcTreeView.Model).AppendValues(true, "", containerPath);
- ((TreeStore)_dlcTreeView.Model).AppendValues(parentIter.Value, true, nca.Header.TitleId.ToString("X16"), fileEntry.FullPath);
- containsDlc = true;
- }
+ ((TreeStore)_dlcTreeView.Model).AppendValues(parentIter.Value, true, nca.Header.TitleId.ToString("X16"), fileEntry.FullPath);
+ containsDlc = true;
}
+ }
- if (!containsDlc)
- {
- GtkDialog.CreateErrorDialog("The specified file does not contain DLC for the selected title!");
- }
+ if (!containsDlc)
+ {
+ GtkDialog.CreateErrorDialog("The specified file does not contain DLC for the selected title!");
}
}
}
@@ -206,17 +211,17 @@ namespace Ryujinx.Ui.Windows
}
}
}
-
+
private void RemoveAllButton_Clicked(object sender, EventArgs args)
{
- List<TreeIter> toRemove = new List<TreeIter>();
+ List<TreeIter> toRemove = new();
if (_dlcTreeView.Model.GetIterFirst(out TreeIter iter))
{
do
{
toRemove.Add(iter);
- }
+ }
while (_dlcTreeView.Model.IterNext(ref iter));
}
@@ -237,19 +242,19 @@ namespace Ryujinx.Ui.Windows
{
if (_dlcTreeView.Model.IterChildren(out TreeIter childIter, parentIter))
{
- DownloadableContentContainer dlcContainer = new DownloadableContentContainer
+ DownloadableContentContainer dlcContainer = new()
{
- ContainerPath = (string)_dlcTreeView.Model.GetValue(parentIter, 2),
- DownloadableContentNcaList = new List<DownloadableContentNca>()
+ ContainerPath = (string)_dlcTreeView.Model.GetValue(parentIter, 2),
+ DownloadableContentNcaList = new List<DownloadableContentNca>(),
};
do
{
dlcContainer.DownloadableContentNcaList.Add(new DownloadableContentNca
{
- Enabled = (bool)_dlcTreeView.Model.GetValue(childIter, 0),
- TitleId = Convert.ToUInt64(_dlcTreeView.Model.GetValue(childIter, 1).ToString(), 16),
- FullPath = (string)_dlcTreeView.Model.GetValue(childIter, 2)
+ Enabled = (bool)_dlcTreeView.Model.GetValue(childIter, 0),
+ TitleId = Convert.ToUInt64(_dlcTreeView.Model.GetValue(childIter, 1).ToString(), 16),
+ FullPath = (string)_dlcTreeView.Model.GetValue(childIter, 2),
});
}
while (_dlcTreeView.Model.IterNext(ref childIter));
@@ -260,7 +265,7 @@ namespace Ryujinx.Ui.Windows
while (_dlcTreeView.Model.IterNext(ref parentIter));
}
- JsonHelper.SerializeToFile(_dlcJsonPath, _dlcContainerList, SerializerContext.ListDownloadableContentContainer);
+ JsonHelper.SerializeToFile(_dlcJsonPath, _dlcContainerList, _serializerContext.ListDownloadableContentContainer);
Dispose();
}
diff --git a/src/Ryujinx/Ui/Windows/SettingsWindow.cs b/src/Ryujinx/Ui/Windows/SettingsWindow.cs
index fbfbf527..b9f1a90a 100644
--- a/src/Ryujinx/Ui/Windows/SettingsWindow.cs
+++ b/src/Ryujinx/Ui/Windows/SettingsWindow.cs
@@ -6,14 +6,12 @@ using Ryujinx.Audio.Backends.SoundIo;
using Ryujinx.Common.Configuration;
using Ryujinx.Common.Configuration.Hid;
using Ryujinx.Common.GraphicsDriver;
-using Ryujinx.Graphics.Vulkan;
using Ryujinx.HLE.FileSystem;
using Ryujinx.HLE.HOS.Services.Time.TimeZone;
using Ryujinx.Ui.Common.Configuration;
using Ryujinx.Ui.Common.Configuration.System;
using Ryujinx.Ui.Helper;
using Ryujinx.Ui.Widgets;
-using Silk.NET.Vulkan;
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -27,95 +25,95 @@ namespace Ryujinx.Ui.Windows
{
public class SettingsWindow : Window
{
- private readonly MainWindow _parent;
- private readonly ListStore _gameDirsBoxStore;
- private readonly ListStore _audioBackendStore;
+ private readonly MainWindow _parent;
+ private readonly ListStore _gameDirsBoxStore;
+ private readonly ListStore _audioBackendStore;
private readonly TimeZoneContentManager _timeZoneContentManager;
- private readonly HashSet<string> _validTzRegions;
+ private readonly HashSet<string> _validTzRegions;
- private long _systemTimeOffset;
+ private long _systemTimeOffset;
private float _previousVolumeLevel;
private bool _directoryChanged = false;
-#pragma warning disable CS0649, IDE0044
- [GUI] CheckButton _traceLogToggle;
- [GUI] CheckButton _errorLogToggle;
- [GUI] CheckButton _warningLogToggle;
- [GUI] CheckButton _infoLogToggle;
- [GUI] CheckButton _stubLogToggle;
- [GUI] CheckButton _debugLogToggle;
- [GUI] CheckButton _fileLogToggle;
- [GUI] CheckButton _guestLogToggle;
- [GUI] CheckButton _fsAccessLogToggle;
- [GUI] Adjustment _fsLogSpinAdjustment;
- [GUI] ComboBoxText _graphicsDebugLevel;
- [GUI] CheckButton _dockedModeToggle;
- [GUI] CheckButton _discordToggle;
- [GUI] CheckButton _checkUpdatesToggle;
- [GUI] CheckButton _showConfirmExitToggle;
- [GUI] RadioButton _hideCursorNever;
- [GUI] RadioButton _hideCursorOnIdle;
- [GUI] RadioButton _hideCursorAlways;
- [GUI] CheckButton _vSyncToggle;
- [GUI] CheckButton _shaderCacheToggle;
- [GUI] CheckButton _textureRecompressionToggle;
- [GUI] CheckButton _macroHLEToggle;
- [GUI] CheckButton _ptcToggle;
- [GUI] CheckButton _internetToggle;
- [GUI] CheckButton _fsicToggle;
- [GUI] RadioButton _mmSoftware;
- [GUI] RadioButton _mmHost;
- [GUI] RadioButton _mmHostUnsafe;
- [GUI] CheckButton _expandRamToggle;
- [GUI] CheckButton _ignoreToggle;
- [GUI] CheckButton _directKeyboardAccess;
- [GUI] CheckButton _directMouseAccess;
- [GUI] ComboBoxText _systemLanguageSelect;
- [GUI] ComboBoxText _systemRegionSelect;
- [GUI] Entry _systemTimeZoneEntry;
+#pragma warning disable CS0649, IDE0044 // Field is never assigned to, Add readonly modifier
+ [GUI] CheckButton _traceLogToggle;
+ [GUI] CheckButton _errorLogToggle;
+ [GUI] CheckButton _warningLogToggle;
+ [GUI] CheckButton _infoLogToggle;
+ [GUI] CheckButton _stubLogToggle;
+ [GUI] CheckButton _debugLogToggle;
+ [GUI] CheckButton _fileLogToggle;
+ [GUI] CheckButton _guestLogToggle;
+ [GUI] CheckButton _fsAccessLogToggle;
+ [GUI] Adjustment _fsLogSpinAdjustment;
+ [GUI] ComboBoxText _graphicsDebugLevel;
+ [GUI] CheckButton _dockedModeToggle;
+ [GUI] CheckButton _discordToggle;
+ [GUI] CheckButton _checkUpdatesToggle;
+ [GUI] CheckButton _showConfirmExitToggle;
+ [GUI] RadioButton _hideCursorNever;
+ [GUI] RadioButton _hideCursorOnIdle;
+ [GUI] RadioButton _hideCursorAlways;
+ [GUI] CheckButton _vSyncToggle;
+ [GUI] CheckButton _shaderCacheToggle;
+ [GUI] CheckButton _textureRecompressionToggle;
+ [GUI] CheckButton _macroHLEToggle;
+ [GUI] CheckButton _ptcToggle;
+ [GUI] CheckButton _internetToggle;
+ [GUI] CheckButton _fsicToggle;
+ [GUI] RadioButton _mmSoftware;
+ [GUI] RadioButton _mmHost;
+ [GUI] RadioButton _mmHostUnsafe;
+ [GUI] CheckButton _expandRamToggle;
+ [GUI] CheckButton _ignoreToggle;
+ [GUI] CheckButton _directKeyboardAccess;
+ [GUI] CheckButton _directMouseAccess;
+ [GUI] ComboBoxText _systemLanguageSelect;
+ [GUI] ComboBoxText _systemRegionSelect;
+ [GUI] Entry _systemTimeZoneEntry;
[GUI] EntryCompletion _systemTimeZoneCompletion;
- [GUI] Box _audioBackendBox;
- [GUI] ComboBox _audioBackendSelect;
- [GUI] Label _audioVolumeLabel;
- [GUI] Scale _audioVolumeSlider;
- [GUI] SpinButton _systemTimeYearSpin;
- [GUI] SpinButton _systemTimeMonthSpin;
- [GUI] SpinButton _systemTimeDaySpin;
- [GUI] SpinButton _systemTimeHourSpin;
- [GUI] SpinButton _systemTimeMinuteSpin;
- [GUI] Adjustment _systemTimeYearSpinAdjustment;
- [GUI] Adjustment _systemTimeMonthSpinAdjustment;
- [GUI] Adjustment _systemTimeDaySpinAdjustment;
- [GUI] Adjustment _systemTimeHourSpinAdjustment;
- [GUI] Adjustment _systemTimeMinuteSpinAdjustment;
- [GUI] ComboBoxText _multiLanSelect;
- [GUI] CheckButton _custThemeToggle;
- [GUI] Entry _custThemePath;
- [GUI] ToggleButton _browseThemePath;
- [GUI] Label _custThemePathLabel;
- [GUI] TreeView _gameDirsBox;
- [GUI] Entry _addGameDirBox;
- [GUI] ComboBoxText _galThreading;
- [GUI] Entry _graphicsShadersDumpPath;
- [GUI] ComboBoxText _anisotropy;
- [GUI] ComboBoxText _aspectRatio;
- [GUI] ComboBoxText _antiAliasing;
- [GUI] ComboBoxText _scalingFilter;
- [GUI] ComboBoxText _graphicsBackend;
- [GUI] ComboBoxText _preferredGpu;
- [GUI] ComboBoxText _resScaleCombo;
- [GUI] Entry _resScaleText;
- [GUI] Adjustment _scalingFilterLevel;
- [GUI] Scale _scalingFilterSlider;
- [GUI] ToggleButton _configureController1;
- [GUI] ToggleButton _configureController2;
- [GUI] ToggleButton _configureController3;
- [GUI] ToggleButton _configureController4;
- [GUI] ToggleButton _configureController5;
- [GUI] ToggleButton _configureController6;
- [GUI] ToggleButton _configureController7;
- [GUI] ToggleButton _configureController8;
- [GUI] ToggleButton _configureControllerH;
+ [GUI] Box _audioBackendBox;
+ [GUI] ComboBox _audioBackendSelect;
+ [GUI] Label _audioVolumeLabel;
+ [GUI] Scale _audioVolumeSlider;
+ [GUI] SpinButton _systemTimeYearSpin;
+ [GUI] SpinButton _systemTimeMonthSpin;
+ [GUI] SpinButton _systemTimeDaySpin;
+ [GUI] SpinButton _systemTimeHourSpin;
+ [GUI] SpinButton _systemTimeMinuteSpin;
+ [GUI] Adjustment _systemTimeYearSpinAdjustment;
+ [GUI] Adjustment _systemTimeMonthSpinAdjustment;
+ [GUI] Adjustment _systemTimeDaySpinAdjustment;
+ [GUI] Adjustment _systemTimeHourSpinAdjustment;
+ [GUI] Adjustment _systemTimeMinuteSpinAdjustment;
+ [GUI] ComboBoxText _multiLanSelect;
+ [GUI] CheckButton _custThemeToggle;
+ [GUI] Entry _custThemePath;
+ [GUI] ToggleButton _browseThemePath;
+ [GUI] Label _custThemePathLabel;
+ [GUI] TreeView _gameDirsBox;
+ [GUI] Entry _addGameDirBox;
+ [GUI] ComboBoxText _galThreading;
+ [GUI] Entry _graphicsShadersDumpPath;
+ [GUI] ComboBoxText _anisotropy;
+ [GUI] ComboBoxText _aspectRatio;
+ [GUI] ComboBoxText _antiAliasing;
+ [GUI] ComboBoxText _scalingFilter;
+ [GUI] ComboBoxText _graphicsBackend;
+ [GUI] ComboBoxText _preferredGpu;
+ [GUI] ComboBoxText _resScaleCombo;
+ [GUI] Entry _resScaleText;
+ [GUI] Adjustment _scalingFilterLevel;
+ [GUI] Scale _scalingFilterSlider;
+ [GUI] ToggleButton _configureController1;
+ [GUI] ToggleButton _configureController2;
+ [GUI] ToggleButton _configureController3;
+ [GUI] ToggleButton _configureController4;
+ [GUI] ToggleButton _configureController5;
+ [GUI] ToggleButton _configureController6;
+ [GUI] ToggleButton _configureController7;
+ [GUI] ToggleButton _configureController8;
+ [GUI] ToggleButton _configureControllerH;
#pragma warning restore CS0649, IDE0044
@@ -316,11 +314,11 @@ namespace Ryujinx.Ui.Windows
}
// Custom EntryCompletion Columns. If added to glade, need to override more signals
- ListStore tzList = new ListStore(typeof(string), typeof(string), typeof(string));
+ ListStore tzList = new(typeof(string), typeof(string), typeof(string));
_systemTimeZoneCompletion.Model = tzList;
- CellRendererText offsetCol = new CellRendererText();
- CellRendererText abbrevCol = new CellRendererText();
+ CellRendererText offsetCol = new();
+ CellRendererText abbrevCol = new();
_systemTimeZoneCompletion.PackStart(offsetCol, false);
_systemTimeZoneCompletion.AddAttribute(offsetCol, "text", 0);
@@ -364,17 +362,17 @@ namespace Ryujinx.Ui.Windows
PopulateNetworkInterfaces();
_multiLanSelect.SetActiveId(ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value);
- _custThemePath.Buffer.Text = ConfigurationState.Instance.Ui.CustomThemePath;
- _resScaleText.Buffer.Text = ConfigurationState.Instance.Graphics.ResScaleCustom.Value.ToString();
- _scalingFilterLevel.Value = ConfigurationState.Instance.Graphics.ScalingFilterLevel.Value;
- _resScaleText.Visible = _resScaleCombo.ActiveId == "-1";
- _scalingFilterSlider.Visible = _scalingFilter.ActiveId == "2";
+ _custThemePath.Buffer.Text = ConfigurationState.Instance.Ui.CustomThemePath;
+ _resScaleText.Buffer.Text = ConfigurationState.Instance.Graphics.ResScaleCustom.Value.ToString();
+ _scalingFilterLevel.Value = ConfigurationState.Instance.Graphics.ScalingFilterLevel.Value;
+ _resScaleText.Visible = _resScaleCombo.ActiveId == "-1";
+ _scalingFilterSlider.Visible = _scalingFilter.ActiveId == "2";
_graphicsShadersDumpPath.Buffer.Text = ConfigurationState.Instance.Graphics.ShadersDumpPath;
- _fsLogSpinAdjustment.Value = ConfigurationState.Instance.System.FsGlobalAccessLogMode;
- _systemTimeOffset = ConfigurationState.Instance.System.SystemTimeOffset;
+ _fsLogSpinAdjustment.Value = ConfigurationState.Instance.System.FsGlobalAccessLogMode;
+ _systemTimeOffset = ConfigurationState.Instance.System.SystemTimeOffset;
_gameDirsBox.AppendColumn("", new CellRendererText(), "text", 0);
- _gameDirsBoxStore = new ListStore(typeof(string));
+ _gameDirsBoxStore = new ListStore(typeof(string));
_gameDirsBox.Model = _gameDirsBoxStore;
foreach (string gameDir in ConfigurationState.Instance.Ui.GameDirs.Value)
@@ -384,9 +382,9 @@ namespace Ryujinx.Ui.Windows
if (_custThemeToggle.Active == false)
{
- _custThemePath.Sensitive = false;
+ _custThemePath.Sensitive = false;
_custThemePathLabel.Sensitive = false;
- _browseThemePath.Sensitive = false;
+ _browseThemePath.Sensitive = false;
}
// Setup system time spinners
@@ -394,10 +392,10 @@ namespace Ryujinx.Ui.Windows
_audioBackendStore = new ListStore(typeof(string), typeof(AudioBackend));
- TreeIter openAlIter = _audioBackendStore.AppendValues("OpenAL", AudioBackend.OpenAl);
+ TreeIter openAlIter = _audioBackendStore.AppendValues("OpenAL", AudioBackend.OpenAl);
TreeIter soundIoIter = _audioBackendStore.AppendValues("SoundIO", AudioBackend.SoundIo);
- TreeIter sdl2Iter = _audioBackendStore.AppendValues("SDL2", AudioBackend.SDL2);
- TreeIter dummyIter = _audioBackendStore.AppendValues("Dummy", AudioBackend.Dummy);
+ TreeIter sdl2Iter = _audioBackendStore.AppendValues("SDL2", AudioBackend.SDL2);
+ TreeIter dummyIter = _audioBackendStore.AppendValues("Dummy", AudioBackend.Dummy);
_audioBackendSelect = ComboBox.NewWithModelAndEntry(_audioBackendStore);
_audioBackendSelect.EntryTextColumn = 0;
@@ -418,35 +416,35 @@ namespace Ryujinx.Ui.Windows
_audioBackendSelect.SetActiveIter(dummyIter);
break;
default:
- throw new ArgumentOutOfRangeException();
+ throw new InvalidOperationException($"{nameof(ConfigurationState.Instance.System.AudioBackend)} contains an invalid value: {ConfigurationState.Instance.System.AudioBackend.Value}");
}
_audioBackendBox.Add(_audioBackendSelect);
_audioBackendSelect.Show();
- _previousVolumeLevel = ConfigurationState.Instance.System.AudioVolume;
- _audioVolumeLabel = new Label("Volume: ");
- _audioVolumeSlider = new Scale(Orientation.Horizontal, 0, 100, 1);
- _audioVolumeLabel.MarginStart = 10;
- _audioVolumeSlider.ValuePos = PositionType.Right;
+ _previousVolumeLevel = ConfigurationState.Instance.System.AudioVolume;
+ _audioVolumeLabel = new Label("Volume: ");
+ _audioVolumeSlider = new Scale(Orientation.Horizontal, 0, 100, 1);
+ _audioVolumeLabel.MarginStart = 10;
+ _audioVolumeSlider.ValuePos = PositionType.Right;
_audioVolumeSlider.WidthRequest = 200;
- _audioVolumeSlider.Value = _previousVolumeLevel * 100;
+ _audioVolumeSlider.Value = _previousVolumeLevel * 100;
_audioVolumeSlider.ValueChanged += VolumeSlider_OnChange;
_audioBackendBox.Add(_audioVolumeLabel);
_audioBackendBox.Add(_audioVolumeSlider);
_audioVolumeLabel.Show();
_audioVolumeSlider.Show();
- bool openAlIsSupported = false;
+ bool openAlIsSupported = false;
bool soundIoIsSupported = false;
- bool sdl2IsSupported = false;
+ bool sdl2IsSupported = false;
Task.Run(() =>
{
- openAlIsSupported = OpenALHardwareDeviceDriver.IsSupported;
+ openAlIsSupported = OpenALHardwareDeviceDriver.IsSupported;
soundIoIsSupported = !OperatingSystem.IsMacOS() && SoundIoHardwareDeviceDriver.IsSupported;
- sdl2IsSupported = SDL2HardwareDeviceDriver.IsSupported;
+ sdl2IsSupported = SDL2HardwareDeviceDriver.IsSupported;
});
// This function runs whenever the dropdown is opened
@@ -454,18 +452,18 @@ namespace Ryujinx.Ui.Windows
{
cell.Sensitive = ((AudioBackend)_audioBackendStore.GetValue(iter, 1)) switch
{
- AudioBackend.OpenAl => openAlIsSupported,
+ AudioBackend.OpenAl => openAlIsSupported,
AudioBackend.SoundIo => soundIoIsSupported,
- AudioBackend.SDL2 => sdl2IsSupported,
- AudioBackend.Dummy => true,
- _ => throw new ArgumentOutOfRangeException()
+ AudioBackend.SDL2 => sdl2IsSupported,
+ AudioBackend.Dummy => true,
+ _ => throw new InvalidOperationException($"{nameof(_audioBackendStore)} contains an invalid value for iteration {iter}: {_audioBackendStore.GetValue(iter, 1)}"),
};
});
if (OperatingSystem.IsMacOS())
{
var store = (_graphicsBackend.Model as ListStore);
- store.GetIter(out TreeIter openglIter, new TreePath(new int[] {1}));
+ store.GetIter(out TreeIter openglIter, new TreePath(new[] { 1 }));
store.Remove(ref openglIter);
_graphicsBackend.Model = store;
@@ -478,15 +476,15 @@ namespace Ryujinx.Ui.Windows
if (Enum.Parse<GraphicsBackend>(_graphicsBackend.ActiveId) == GraphicsBackend.Vulkan)
{
- var devices = VulkanRenderer.GetPhysicalDevices();
+ var devices = Graphics.Vulkan.VulkanRenderer.GetPhysicalDevices();
string preferredGpuIdFromConfig = ConfigurationState.Instance.Graphics.PreferredGpu.Value;
string preferredGpuId = preferredGpuIdFromConfig;
bool noGpuId = string.IsNullOrEmpty(preferredGpuIdFromConfig);
foreach (var device in devices)
{
- string dGPU = device.IsDiscrete ? " (dGPU)" : "";
- _preferredGpu.Append(device.Id, $"{device.Name}{dGPU}");
+ string dGpu = device.IsDiscrete ? " (dGPU)" : "";
+ _preferredGpu.Append(device.Id, $"{device.Name}{dGpu}");
// If there's no GPU selected yet, we just pick the first GPU.
// If there's a discrete GPU available, we always prefer that over the previous selection,
@@ -521,33 +519,33 @@ namespace Ryujinx.Ui.Windows
private void UpdateSystemTimeSpinners()
{
//Bind system time events
- _systemTimeYearSpin.ValueChanged -= SystemTimeSpin_ValueChanged;
- _systemTimeMonthSpin.ValueChanged -= SystemTimeSpin_ValueChanged;
- _systemTimeDaySpin.ValueChanged -= SystemTimeSpin_ValueChanged;
- _systemTimeHourSpin.ValueChanged -= SystemTimeSpin_ValueChanged;
+ _systemTimeYearSpin.ValueChanged -= SystemTimeSpin_ValueChanged;
+ _systemTimeMonthSpin.ValueChanged -= SystemTimeSpin_ValueChanged;
+ _systemTimeDaySpin.ValueChanged -= SystemTimeSpin_ValueChanged;
+ _systemTimeHourSpin.ValueChanged -= SystemTimeSpin_ValueChanged;
_systemTimeMinuteSpin.ValueChanged -= SystemTimeSpin_ValueChanged;
//Apply actual system time + SystemTimeOffset to system time spin buttons
DateTime systemTime = DateTime.Now.AddSeconds(_systemTimeOffset);
- _systemTimeYearSpinAdjustment.Value = systemTime.Year;
- _systemTimeMonthSpinAdjustment.Value = systemTime.Month;
- _systemTimeDaySpinAdjustment.Value = systemTime.Day;
- _systemTimeHourSpinAdjustment.Value = systemTime.Hour;
+ _systemTimeYearSpinAdjustment.Value = systemTime.Year;
+ _systemTimeMonthSpinAdjustment.Value = systemTime.Month;
+ _systemTimeDaySpinAdjustment.Value = systemTime.Day;
+ _systemTimeHourSpinAdjustment.Value = systemTime.Hour;
_systemTimeMinuteSpinAdjustment.Value = systemTime.Minute;
//Format spin buttons text to include leading zeros
- _systemTimeYearSpin.Text = systemTime.Year.ToString("0000");
- _systemTimeMonthSpin.Text = systemTime.Month.ToString("00");
- _systemTimeDaySpin.Text = systemTime.Day.ToString("00");
- _systemTimeHourSpin.Text = systemTime.Hour.ToString("00");
+ _systemTimeYearSpin.Text = systemTime.Year.ToString("0000");
+ _systemTimeMonthSpin.Text = systemTime.Month.ToString("00");
+ _systemTimeDaySpin.Text = systemTime.Day.ToString("00");
+ _systemTimeHourSpin.Text = systemTime.Hour.ToString("00");
_systemTimeMinuteSpin.Text = systemTime.Minute.ToString("00");
//Bind system time events
- _systemTimeYearSpin.ValueChanged += SystemTimeSpin_ValueChanged;
- _systemTimeMonthSpin.ValueChanged += SystemTimeSpin_ValueChanged;
- _systemTimeDaySpin.ValueChanged += SystemTimeSpin_ValueChanged;
- _systemTimeHourSpin.ValueChanged += SystemTimeSpin_ValueChanged;
+ _systemTimeYearSpin.ValueChanged += SystemTimeSpin_ValueChanged;
+ _systemTimeMonthSpin.ValueChanged += SystemTimeSpin_ValueChanged;
+ _systemTimeDaySpin.ValueChanged += SystemTimeSpin_ValueChanged;
+ _systemTimeHourSpin.ValueChanged += SystemTimeSpin_ValueChanged;
_systemTimeMinuteSpin.ValueChanged += SystemTimeSpin_ValueChanged;
}
@@ -555,7 +553,7 @@ namespace Ryujinx.Ui.Windows
{
if (_directoryChanged)
{
- List<string> gameDirs = new List<string>();
+ List<string> gameDirs = new();
_gameDirsBoxStore.GetIterFirst(out TreeIter treeIter);
@@ -611,52 +609,52 @@ namespace Ryujinx.Ui.Windows
DriverUtilities.ToggleOGLThreading(backendThreading == BackendThreading.Off);
}
- ConfigurationState.Instance.Logger.EnableError.Value = _errorLogToggle.Active;
- ConfigurationState.Instance.Logger.EnableTrace.Value = _traceLogToggle.Active;
- ConfigurationState.Instance.Logger.EnableWarn.Value = _warningLogToggle.Active;
- ConfigurationState.Instance.Logger.EnableInfo.Value = _infoLogToggle.Active;
- ConfigurationState.Instance.Logger.EnableStub.Value = _stubLogToggle.Active;
- ConfigurationState.Instance.Logger.EnableDebug.Value = _debugLogToggle.Active;
- ConfigurationState.Instance.Logger.EnableGuest.Value = _guestLogToggle.Active;
- ConfigurationState.Instance.Logger.EnableFsAccessLog.Value = _fsAccessLogToggle.Active;
- ConfigurationState.Instance.Logger.EnableFileLog.Value = _fileLogToggle.Active;
- ConfigurationState.Instance.Logger.GraphicsDebugLevel.Value = Enum.Parse<GraphicsDebugLevel>(_graphicsDebugLevel.ActiveId);
- ConfigurationState.Instance.System.EnableDockedMode.Value = _dockedModeToggle.Active;
- ConfigurationState.Instance.EnableDiscordIntegration.Value = _discordToggle.Active;
- ConfigurationState.Instance.CheckUpdatesOnStart.Value = _checkUpdatesToggle.Active;
- ConfigurationState.Instance.ShowConfirmExit.Value = _showConfirmExitToggle.Active;
- ConfigurationState.Instance.HideCursor.Value = hideCursor;
- ConfigurationState.Instance.Graphics.EnableVsync.Value = _vSyncToggle.Active;
- ConfigurationState.Instance.Graphics.EnableShaderCache.Value = _shaderCacheToggle.Active;
+ ConfigurationState.Instance.Logger.EnableError.Value = _errorLogToggle.Active;
+ ConfigurationState.Instance.Logger.EnableTrace.Value = _traceLogToggle.Active;
+ ConfigurationState.Instance.Logger.EnableWarn.Value = _warningLogToggle.Active;
+ ConfigurationState.Instance.Logger.EnableInfo.Value = _infoLogToggle.Active;
+ ConfigurationState.Instance.Logger.EnableStub.Value = _stubLogToggle.Active;
+ ConfigurationState.Instance.Logger.EnableDebug.Value = _debugLogToggle.Active;
+ ConfigurationState.Instance.Logger.EnableGuest.Value = _guestLogToggle.Active;
+ ConfigurationState.Instance.Logger.EnableFsAccessLog.Value = _fsAccessLogToggle.Active;
+ ConfigurationState.Instance.Logger.EnableFileLog.Value = _fileLogToggle.Active;
+ ConfigurationState.Instance.Logger.GraphicsDebugLevel.Value = Enum.Parse<GraphicsDebugLevel>(_graphicsDebugLevel.ActiveId);
+ ConfigurationState.Instance.System.EnableDockedMode.Value = _dockedModeToggle.Active;
+ ConfigurationState.Instance.EnableDiscordIntegration.Value = _discordToggle.Active;
+ ConfigurationState.Instance.CheckUpdatesOnStart.Value = _checkUpdatesToggle.Active;
+ ConfigurationState.Instance.ShowConfirmExit.Value = _showConfirmExitToggle.Active;
+ ConfigurationState.Instance.HideCursor.Value = hideCursor;
+ ConfigurationState.Instance.Graphics.EnableVsync.Value = _vSyncToggle.Active;
+ ConfigurationState.Instance.Graphics.EnableShaderCache.Value = _shaderCacheToggle.Active;
ConfigurationState.Instance.Graphics.EnableTextureRecompression.Value = _textureRecompressionToggle.Active;
- ConfigurationState.Instance.Graphics.EnableMacroHLE.Value = _macroHLEToggle.Active;
- ConfigurationState.Instance.System.EnablePtc.Value = _ptcToggle.Active;
- ConfigurationState.Instance.System.EnableInternetAccess.Value = _internetToggle.Active;
- ConfigurationState.Instance.System.EnableFsIntegrityChecks.Value = _fsicToggle.Active;
- ConfigurationState.Instance.System.MemoryManagerMode.Value = memoryMode;
- ConfigurationState.Instance.System.ExpandRam.Value = _expandRamToggle.Active;
- ConfigurationState.Instance.System.IgnoreMissingServices.Value = _ignoreToggle.Active;
- ConfigurationState.Instance.Hid.EnableKeyboard.Value = _directKeyboardAccess.Active;
- ConfigurationState.Instance.Hid.EnableMouse.Value = _directMouseAccess.Active;
- ConfigurationState.Instance.Ui.EnableCustomTheme.Value = _custThemeToggle.Active;
- ConfigurationState.Instance.System.Language.Value = Enum.Parse<Language>(_systemLanguageSelect.ActiveId);
- ConfigurationState.Instance.System.Region.Value = Enum.Parse<Common.Configuration.System.Region>(_systemRegionSelect.ActiveId);
- ConfigurationState.Instance.System.SystemTimeOffset.Value = _systemTimeOffset;
- ConfigurationState.Instance.Ui.CustomThemePath.Value = _custThemePath.Buffer.Text;
- ConfigurationState.Instance.Graphics.ShadersDumpPath.Value = _graphicsShadersDumpPath.Buffer.Text;
- ConfigurationState.Instance.System.FsGlobalAccessLogMode.Value = (int)_fsLogSpinAdjustment.Value;
- ConfigurationState.Instance.Graphics.MaxAnisotropy.Value = float.Parse(_anisotropy.ActiveId, CultureInfo.InvariantCulture);
- ConfigurationState.Instance.Graphics.AspectRatio.Value = Enum.Parse<AspectRatio>(_aspectRatio.ActiveId);
- ConfigurationState.Instance.Graphics.BackendThreading.Value = backendThreading;
- ConfigurationState.Instance.Graphics.GraphicsBackend.Value = Enum.Parse<GraphicsBackend>(_graphicsBackend.ActiveId);
- ConfigurationState.Instance.Graphics.PreferredGpu.Value = _preferredGpu.ActiveId;
- ConfigurationState.Instance.Graphics.ResScale.Value = int.Parse(_resScaleCombo.ActiveId);
- ConfigurationState.Instance.Graphics.ResScaleCustom.Value = resScaleCustom;
- ConfigurationState.Instance.System.AudioVolume.Value = (float)_audioVolumeSlider.Value / 100.0f;
- ConfigurationState.Instance.Graphics.AntiAliasing.Value = Enum.Parse<AntiAliasing>(_antiAliasing.ActiveId);
- ConfigurationState.Instance.Graphics.ScalingFilter.Value = Enum.Parse<ScalingFilter>(_scalingFilter.ActiveId);
- ConfigurationState.Instance.Graphics.ScalingFilterLevel.Value = (int)_scalingFilterLevel.Value;
- ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value = _multiLanSelect.ActiveId;
+ ConfigurationState.Instance.Graphics.EnableMacroHLE.Value = _macroHLEToggle.Active;
+ ConfigurationState.Instance.System.EnablePtc.Value = _ptcToggle.Active;
+ ConfigurationState.Instance.System.EnableInternetAccess.Value = _internetToggle.Active;
+ ConfigurationState.Instance.System.EnableFsIntegrityChecks.Value = _fsicToggle.Active;
+ ConfigurationState.Instance.System.MemoryManagerMode.Value = memoryMode;
+ ConfigurationState.Instance.System.ExpandRam.Value = _expandRamToggle.Active;
+ ConfigurationState.Instance.System.IgnoreMissingServices.Value = _ignoreToggle.Active;
+ ConfigurationState.Instance.Hid.EnableKeyboard.Value = _directKeyboardAccess.Active;
+ ConfigurationState.Instance.Hid.EnableMouse.Value = _directMouseAccess.Active;
+ ConfigurationState.Instance.Ui.EnableCustomTheme.Value = _custThemeToggle.Active;
+ ConfigurationState.Instance.System.Language.Value = Enum.Parse<Language>(_systemLanguageSelect.ActiveId);
+ ConfigurationState.Instance.System.Region.Value = Enum.Parse<Common.Configuration.System.Region>(_systemRegionSelect.ActiveId);
+ ConfigurationState.Instance.System.SystemTimeOffset.Value = _systemTimeOffset;
+ ConfigurationState.Instance.Ui.CustomThemePath.Value = _custThemePath.Buffer.Text;
+ ConfigurationState.Instance.Graphics.ShadersDumpPath.Value = _graphicsShadersDumpPath.Buffer.Text;
+ ConfigurationState.Instance.System.FsGlobalAccessLogMode.Value = (int)_fsLogSpinAdjustment.Value;
+ ConfigurationState.Instance.Graphics.MaxAnisotropy.Value = float.Parse(_anisotropy.ActiveId, CultureInfo.InvariantCulture);
+ ConfigurationState.Instance.Graphics.AspectRatio.Value = Enum.Parse<AspectRatio>(_aspectRatio.ActiveId);
+ ConfigurationState.Instance.Graphics.BackendThreading.Value = backendThreading;
+ ConfigurationState.Instance.Graphics.GraphicsBackend.Value = Enum.Parse<GraphicsBackend>(_graphicsBackend.ActiveId);
+ ConfigurationState.Instance.Graphics.PreferredGpu.Value = _preferredGpu.ActiveId;
+ ConfigurationState.Instance.Graphics.ResScale.Value = int.Parse(_resScaleCombo.ActiveId);
+ ConfigurationState.Instance.Graphics.ResScaleCustom.Value = resScaleCustom;
+ ConfigurationState.Instance.System.AudioVolume.Value = (float)_audioVolumeSlider.Value / 100.0f;
+ ConfigurationState.Instance.Graphics.AntiAliasing.Value = Enum.Parse<AntiAliasing>(_antiAliasing.ActiveId);
+ ConfigurationState.Instance.Graphics.ScalingFilter.Value = Enum.Parse<ScalingFilter>(_scalingFilter.ActiveId);
+ ConfigurationState.Instance.Graphics.ScalingFilterLevel.Value = (int)_scalingFilterLevel.Value;
+ ConfigurationState.Instance.Multiplayer.LanInterfaceId.Value = _multiLanSelect.ActiveId;
_previousVolumeLevel = ConfigurationState.Instance.System.AudioVolume.Value;
@@ -666,7 +664,7 @@ namespace Ryujinx.Ui.Windows
}
ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath);
- _parent.UpdateGraphicsConfig();
+ MainWindow.UpdateGraphicsConfig();
ThemeHelper.ApplyTheme();
}
@@ -692,10 +690,10 @@ namespace Ryujinx.Ui.Windows
private void SystemTimeSpin_ValueChanged(object sender, EventArgs e)
{
- int year = _systemTimeYearSpin.ValueAsInt;
- int month = _systemTimeMonthSpin.ValueAsInt;
- int day = _systemTimeDaySpin.ValueAsInt;
- int hour = _systemTimeHourSpin.ValueAsInt;
+ int year = _systemTimeYearSpin.ValueAsInt;
+ int month = _systemTimeMonthSpin.ValueAsInt;
+ int day = _systemTimeDaySpin.ValueAsInt;
+ int hour = _systemTimeHourSpin.ValueAsInt;
int minute = _systemTimeMinuteSpin.ValueAsInt;
if (!DateTime.TryParse(year + "-" + month + "-" + day + " " + hour + ":" + minute, out DateTime newTime))
@@ -725,9 +723,9 @@ namespace Ryujinx.Ui.Windows
}
else
{
- FileChooserNative fileChooser = new FileChooserNative("Choose the game directory to add to the list", this, FileChooserAction.SelectFolder, "Add", "Cancel")
+ FileChooserNative fileChooser = new("Choose the game directory to add to the list", this, FileChooserAction.SelectFolder, "Add", "Cancel")
{
- SelectMultiple = true
+ SelectMultiple = true,
};
if (fileChooser.Run() == (int)ResponseType.Accept)
@@ -779,18 +777,18 @@ namespace Ryujinx.Ui.Windows
private void CustThemeToggle_Activated(object sender, EventArgs args)
{
- _custThemePath.Sensitive = _custThemeToggle.Active;
+ _custThemePath.Sensitive = _custThemeToggle.Active;
_custThemePathLabel.Sensitive = _custThemeToggle.Active;
- _browseThemePath.Sensitive = _custThemeToggle.Active;
+ _browseThemePath.Sensitive = _custThemeToggle.Active;
}
private void BrowseThemeDir_Pressed(object sender, EventArgs args)
{
- using (FileChooserNative fileChooser = new FileChooserNative("Choose the theme to load", this, FileChooserAction.Open, "Select", "Cancel"))
+ using (FileChooserNative fileChooser = new("Choose the theme to load", this, FileChooserAction.Open, "Select", "Cancel"))
{
- FileFilter filter = new FileFilter()
+ FileFilter filter = new()
{
- Name = "Theme Files"
+ Name = "Theme Files",
};
filter.AddPattern("*.css");
@@ -809,7 +807,7 @@ namespace Ryujinx.Ui.Windows
{
((ToggleButton)sender).SetStateFlags(StateFlags.Normal, true);
- ControllerWindow controllerWindow = new ControllerWindow(_parent, playerIndex);
+ ControllerWindow controllerWindow = new(_parent, playerIndex);
controllerWindow.SetSizeRequest((int)(controllerWindow.DefaultWidth * Program.WindowScaleFactor), (int)(controllerWindow.DefaultHeight * Program.WindowScaleFactor));
controllerWindow.Show();
diff --git a/src/Ryujinx/Ui/Windows/TitleUpdateWindow.cs b/src/Ryujinx/Ui/Windows/TitleUpdateWindow.cs
index c40adc11..044f7e95 100644
--- a/src/Ryujinx/Ui/Windows/TitleUpdateWindow.cs
+++ b/src/Ryujinx/Ui/Windows/TitleUpdateWindow.cs
@@ -9,33 +9,32 @@ using LibHac.Tools.FsSystem.NcaUtils;
using Ryujinx.Common.Configuration;
using Ryujinx.Common.Utilities;
using Ryujinx.HLE.FileSystem;
-using Ryujinx.HLE.HOS;
using Ryujinx.Ui.App.Common;
using Ryujinx.Ui.Widgets;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
-using GUI = Gtk.Builder.ObjectAttribute;
+using GUI = Gtk.Builder.ObjectAttribute;
using SpanHelpers = LibHac.Common.SpanHelpers;
namespace Ryujinx.Ui.Windows
{
public class TitleUpdateWindow : Window
{
- private readonly MainWindow _parent;
+ private readonly MainWindow _parent;
private readonly VirtualFileSystem _virtualFileSystem;
- private readonly string _titleId;
- private readonly string _updateJsonPath;
+ private readonly string _titleId;
+ private readonly string _updateJsonPath;
private TitleUpdateMetadata _titleUpdateWindowData;
private readonly Dictionary<RadioButton, string> _radioButtonToPathDictionary;
- private static readonly TitleUpdateMetadataJsonSerializerContext SerializerContext = new(JsonHelper.GetDefaultSerializerOptions());
+ private static readonly TitleUpdateMetadataJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions());
-#pragma warning disable CS0649, IDE0044
- [GUI] Label _baseTitleInfoLabel;
- [GUI] Box _availableUpdatesBox;
+#pragma warning disable CS0649, IDE0044 // Field is never assigned to, Add readonly modifier
+ [GUI] Label _baseTitleInfoLabel;
+ [GUI] Box _availableUpdatesBox;
[GUI] RadioButton _noUpdateRadioButton;
#pragma warning restore CS0649, IDE0044
@@ -47,26 +46,26 @@ namespace Ryujinx.Ui.Windows
builder.Autoconnect(this);
- _titleId = titleId;
- _virtualFileSystem = virtualFileSystem;
- _updateJsonPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, _titleId, "updates.json");
+ _titleId = titleId;
+ _virtualFileSystem = virtualFileSystem;
+ _updateJsonPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, _titleId, "updates.json");
_radioButtonToPathDictionary = new Dictionary<RadioButton, string>();
try
{
- _titleUpdateWindowData = JsonHelper.DeserializeFromFile(_updateJsonPath, SerializerContext.TitleUpdateMetadata);
+ _titleUpdateWindowData = JsonHelper.DeserializeFromFile(_updateJsonPath, _serializerContext.TitleUpdateMetadata);
}
catch
{
_titleUpdateWindowData = new TitleUpdateMetadata
{
Selected = "",
- Paths = new List<string>()
+ Paths = new List<string>(),
};
}
_baseTitleInfoLabel.Text = $"Updates Available for {titleName} [{titleId.ToUpper()}]";
-
+
foreach (string path in _titleUpdateWindowData.Paths)
{
AddUpdate(path);
@@ -89,42 +88,41 @@ namespace Ryujinx.Ui.Windows
{
if (File.Exists(path))
{
- using (FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read))
+ using FileStream file = new(path, FileMode.Open, FileAccess.Read);
+
+ PartitionFileSystem nsp = new(file.AsStorage());
+
+ try
{
- PartitionFileSystem nsp = new PartitionFileSystem(file.AsStorage());
+ (Nca patchNca, Nca controlNca) = ApplicationLibrary.GetGameUpdateDataFromPartition(_virtualFileSystem, nsp, _titleId, 0);
- try
+ if (controlNca != null && patchNca != null)
{
- (Nca patchNca, Nca controlNca) = ApplicationLibrary.GetGameUpdateDataFromPartition(_virtualFileSystem, nsp, _titleId, 0);
-
- if (controlNca != null && patchNca != null)
- {
- ApplicationControlProperty controlData = new ApplicationControlProperty();
+ ApplicationControlProperty controlData = new();
- using var nacpFile = new UniqueRef<IFile>();
+ using var nacpFile = new UniqueRef<IFile>();
- controlNca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.None).OpenFile(ref nacpFile.Ref, "/control.nacp".ToU8Span(), OpenMode.Read).ThrowIfFailure();
- nacpFile.Get.Read(out _, 0, SpanHelpers.AsByteSpan(ref controlData), ReadOption.None).ThrowIfFailure();
+ controlNca.OpenFileSystem(NcaSectionType.Data, IntegrityCheckLevel.None).OpenFile(ref nacpFile.Ref, "/control.nacp".ToU8Span(), OpenMode.Read).ThrowIfFailure();
+ nacpFile.Get.Read(out _, 0, SpanHelpers.AsByteSpan(ref controlData), ReadOption.None).ThrowIfFailure();
- RadioButton radioButton = new RadioButton($"Version {controlData.DisplayVersionString.ToString()} - {path}");
- radioButton.JoinGroup(_noUpdateRadioButton);
+ RadioButton radioButton = new($"Version {controlData.DisplayVersionString.ToString()} - {path}");
+ radioButton.JoinGroup(_noUpdateRadioButton);
- _availableUpdatesBox.Add(radioButton);
- _radioButtonToPathDictionary.Add(radioButton, path);
+ _availableUpdatesBox.Add(radioButton);
+ _radioButtonToPathDictionary.Add(radioButton, path);
- radioButton.Show();
- radioButton.Active = true;
- }
- else
- {
- GtkDialog.CreateErrorDialog("The specified file does not contain an update for the selected title!");
- }
+ radioButton.Show();
+ radioButton.Active = true;
}
- catch (Exception exception)
+ else
{
- GtkDialog.CreateErrorDialog($"{exception.Message}. Errored File: {path}");
+ GtkDialog.CreateErrorDialog("The specified file does not contain an update for the selected title!");
}
}
+ catch (Exception exception)
+ {
+ GtkDialog.CreateErrorDialog($"{exception.Message}. Errored File: {path}");
+ }
}
}
@@ -143,24 +141,23 @@ namespace Ryujinx.Ui.Windows
private void AddButton_Clicked(object sender, EventArgs args)
{
- using (FileChooserNative fileChooser = new FileChooserNative("Select update files", this, FileChooserAction.Open, "Add", "Cancel"))
- {
- fileChooser.SelectMultiple = true;
+ using FileChooserNative fileChooser = new("Select update files", this, FileChooserAction.Open, "Add", "Cancel");
- FileFilter filter = new FileFilter()
- {
- Name = "Switch Game Updates"
- };
- filter.AddPattern("*.nsp");
+ fileChooser.SelectMultiple = true;
+
+ FileFilter filter = new()
+ {
+ Name = "Switch Game Updates",
+ };
+ filter.AddPattern("*.nsp");
- fileChooser.AddFilter(filter);
+ fileChooser.AddFilter(filter);
- if (fileChooser.Run() == (int)ResponseType.Accept)
+ if (fileChooser.Run() == (int)ResponseType.Accept)
+ {
+ foreach (string path in fileChooser.Filenames)
{
- foreach (string path in fileChooser.Filenames)
- {
- AddUpdate(path);
- }
+ AddUpdate(path);
}
}
}
@@ -193,7 +190,7 @@ namespace Ryujinx.Ui.Windows
}
}
- JsonHelper.SerializeToFile(_updateJsonPath, _titleUpdateWindowData, SerializerContext.TitleUpdateMetadata);
+ JsonHelper.SerializeToFile(_updateJsonPath, _titleUpdateWindowData, _serializerContext.TitleUpdateMetadata);
_parent.UpdateGameTable();
@@ -205,4 +202,4 @@ namespace Ryujinx.Ui.Windows
Dispose();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Windows/UserProfilesManagerWindow.Designer.cs b/src/Ryujinx/Ui/Windows/UserProfilesManagerWindow.Designer.cs
index 7c9ae8ba..804bd3fb 100644
--- a/src/Ryujinx/Ui/Windows/UserProfilesManagerWindow.Designer.cs
+++ b/src/Ryujinx/Ui/Windows/UserProfilesManagerWindow.Designer.cs
@@ -1,45 +1,43 @@
using Gtk;
using Pango;
+using System;
namespace Ryujinx.Ui.Windows
{
public partial class UserProfilesManagerWindow : Window
{
- private Box _mainBox;
- private Label _selectedLabel;
- private Box _selectedUserBox;
- private Image _selectedUserImage;
- private VBox _selectedUserInfoBox;
- private Entry _selectedUserNameEntry;
- private Label _selectedUserIdLabel;
- private VBox _selectedUserButtonsBox;
- private Button _saveProfileNameButton;
- private Button _changeProfileImageButton;
- private Box _usersTreeViewBox;
- private Label _availableUsersLabel;
+ private Box _mainBox;
+ private Label _selectedLabel;
+ private Box _selectedUserBox;
+ private Image _selectedUserImage;
+ private Box _selectedUserInfoBox;
+ private Entry _selectedUserNameEntry;
+ private Label _selectedUserIdLabel;
+ private Box _selectedUserButtonsBox;
+ private Button _saveProfileNameButton;
+ private Button _changeProfileImageButton;
+ private Box _usersTreeViewBox;
+ private Label _availableUsersLabel;
private ScrolledWindow _usersTreeViewWindow;
- private ListStore _tableStore;
- private TreeView _usersTreeView;
- private Box _bottomBox;
- private Button _addButton;
- private Button _deleteButton;
- private Button _closeButton;
+ private ListStore _tableStore;
+ private TreeView _usersTreeView;
+ private Box _bottomBox;
+ private Button _addButton;
+ private Button _deleteButton;
+ private Button _closeButton;
private void InitializeComponent()
{
-
-#pragma warning disable CS0612
-
//
// UserProfilesManagerWindow
//
- CanFocus = false;
- Resizable = false;
- Modal = true;
+ CanFocus = false;
+ Resizable = false;
+ Modal = true;
WindowPosition = WindowPosition.Center;
- DefaultWidth = 620;
- DefaultHeight = 548;
- TypeHint = Gdk.WindowTypeHint.Dialog;
+ DefaultWidth = 620;
+ DefaultHeight = 548;
+ TypeHint = Gdk.WindowTypeHint.Dialog;
//
// _mainBox
@@ -51,9 +49,9 @@ namespace Ryujinx.Ui.Windows
//
_selectedLabel = new Label("Selected User Profile:")
{
- Margin = 15,
+ Margin = 15,
Attributes = new AttrList(),
- Halign = Align.Start
+ Halign = Align.Start,
};
_selectedLabel.Attributes.Insert(new Pango.AttrWeight(Weight.Bold));
@@ -67,7 +65,7 @@ namespace Ryujinx.Ui.Windows
//
_selectedUserBox = new Box(Orientation.Horizontal, 0)
{
- MarginLeft = 30
+ MarginStart = 30,
};
//
@@ -78,15 +76,18 @@ namespace Ryujinx.Ui.Windows
//
// _selectedUserInfoBox
//
- _selectedUserInfoBox = new VBox(true, 0);
+ _selectedUserInfoBox = new Box(Orientation.Vertical, 0)
+ {
+ Homogeneous = true,
+ };
//
// _selectedUserNameEntry
//
_selectedUserNameEntry = new Entry("")
{
- MarginLeft = 15,
- MaxLength = (int)MaxProfileNameLength
+ MarginStart = 15,
+ MaxLength = (int)MaxProfileNameLength,
};
_selectedUserNameEntry.KeyReleaseEvent += SelectedUserNameEntry_KeyReleaseEvent;
@@ -95,16 +96,16 @@ namespace Ryujinx.Ui.Windows
//
_selectedUserIdLabel = new Label("")
{
- MarginTop = 15,
- MarginLeft = 15
+ MarginTop = 15,
+ MarginStart = 15,
};
//
// _selectedUserButtonsBox
//
- _selectedUserButtonsBox = new VBox()
+ _selectedUserButtonsBox = new Box(Orientation.Vertical, 0)
{
- MarginRight = 30
+ MarginEnd = 30,
};
//
@@ -112,10 +113,10 @@ namespace Ryujinx.Ui.Windows
//
_saveProfileNameButton = new Button()
{
- Label = "Save Profile Name",
- CanFocus = true,
+ Label = "Save Profile Name",
+ CanFocus = true,
ReceivesDefault = true,
- Sensitive = false
+ Sensitive = false,
};
_saveProfileNameButton.Clicked += EditProfileNameButton_Pressed;
@@ -124,10 +125,10 @@ namespace Ryujinx.Ui.Windows
//
_changeProfileImageButton = new Button()
{
- Label = "Change Profile Image",
- CanFocus = true,
+ Label = "Change Profile Image",
+ CanFocus = true,
ReceivesDefault = true,
- MarginTop = 10
+ MarginTop = 10,
};
_changeProfileImageButton.Clicked += ChangeProfileImageButton_Pressed;
@@ -136,9 +137,9 @@ namespace Ryujinx.Ui.Windows
//
_availableUsersLabel = new Label("Available User Profiles:")
{
- Margin = 15,
+ Margin = 15,
Attributes = new AttrList(),
- Halign = Align.Start
+ Halign = Align.Start,
};
_availableUsersLabel.Attributes.Insert(new Pango.AttrWeight(Weight.Bold));
@@ -147,12 +148,12 @@ namespace Ryujinx.Ui.Windows
//
_usersTreeViewWindow = new ScrolledWindow()
{
- ShadowType = ShadowType.In,
- CanFocus = true,
- Expand = true,
- MarginLeft = 30,
- MarginRight = 30,
- MarginBottom = 15
+ ShadowType = ShadowType.In,
+ CanFocus = true,
+ Expand = true,
+ MarginStart = 30,
+ MarginEnd = 30,
+ MarginBottom = 15,
};
//
@@ -175,9 +176,9 @@ namespace Ryujinx.Ui.Windows
//
_bottomBox = new Box(Orientation.Horizontal, 0)
{
- MarginLeft = 30,
- MarginRight = 30,
- MarginBottom = 15
+ MarginStart = 30,
+ MarginEnd = 30,
+ MarginBottom = 15,
};
//
@@ -185,10 +186,10 @@ namespace Ryujinx.Ui.Windows
//
_addButton = new Button()
{
- Label = "Add New Profile",
- CanFocus = true,
+ Label = "Add New Profile",
+ CanFocus = true,
ReceivesDefault = true,
- HeightRequest = 35
+ HeightRequest = 35,
};
_addButton.Clicked += AddButton_Pressed;
@@ -197,11 +198,11 @@ namespace Ryujinx.Ui.Windows
//
_deleteButton = new Button()
{
- Label = "Delete Selected Profile",
- CanFocus = true,
+ Label = "Delete Selected Profile",
+ CanFocus = true,
ReceivesDefault = true,
- HeightRequest = 35,
- MarginLeft = 10
+ HeightRequest = 35,
+ MarginStart = 10,
};
_deleteButton.Clicked += DeleteButton_Pressed;
@@ -210,16 +211,14 @@ namespace Ryujinx.Ui.Windows
//
_closeButton = new Button()
{
- Label = "Close",
- CanFocus = true,
+ Label = "Close",
+ CanFocus = true,
ReceivesDefault = true,
- HeightRequest = 35,
- WidthRequest = 80
+ HeightRequest = 35,
+ WidthRequest = 80,
};
_closeButton.Clicked += CloseButton_Pressed;
-#pragma warning restore CS0612
-
ShowComponent();
}
@@ -253,4 +252,4 @@ namespace Ryujinx.Ui.Windows
ShowAll();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx/Ui/Windows/UserProfilesManagerWindow.cs b/src/Ryujinx/Ui/Windows/UserProfilesManagerWindow.cs
index a08b5dd1..c2ca010c 100644
--- a/src/Ryujinx/Ui/Windows/UserProfilesManagerWindow.cs
+++ b/src/Ryujinx/Ui/Windows/UserProfilesManagerWindow.cs
@@ -13,7 +13,6 @@ using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Image = SixLabors.ImageSharp.Image;
-using UserId = Ryujinx.HLE.HOS.Services.Account.Acc.UserId;
namespace Ryujinx.Ui.Windows
{
@@ -29,7 +28,7 @@ namespace Ryujinx.Ui.Windows
private Gdk.RGBA _selectedColor;
- private ManualResetEvent _avatarsPreloadingEvent = new ManualResetEvent(false);
+ private readonly ManualResetEvent _avatarsPreloadingEvent = new(false);
public UserProfilesManagerWindow(AccountManager accountManager, ContentManager contentManager, VirtualFileSystem virtualFileSystem) : base($"Ryujinx {Program.Version} - Manage User Profiles")
{
@@ -37,24 +36,24 @@ namespace Ryujinx.Ui.Windows
InitializeComponent();
- _selectedColor.Red = 0.212;
+ _selectedColor.Red = 0.212;
_selectedColor.Green = 0.843;
- _selectedColor.Blue = 0.718;
+ _selectedColor.Blue = 0.718;
_selectedColor.Alpha = 1;
_accountManager = accountManager;
_contentManager = contentManager;
- CellRendererToggle userSelectedToggle = new CellRendererToggle();
+ CellRendererToggle userSelectedToggle = new();
userSelectedToggle.Toggled += UserSelectedToggle_Toggled;
// NOTE: Uncomment following line when multiple selection of user profiles is supported.
//_usersTreeView.AppendColumn("Selected", userSelectedToggle, "active", 0);
_usersTreeView.AppendColumn("User Icon", new CellRendererPixbuf(), "pixbuf", 1);
- _usersTreeView.AppendColumn("User Info", new CellRendererText(), "text", 2, "background-rgba", 3);
+ _usersTreeView.AppendColumn("User Info", new CellRendererText(), "text", 2, "background-rgba", 3);
_tableStore.SetSortColumnId(0, SortType.Descending);
-
+
RefreshList();
if (_contentManager.GetCurrentFirmwareVersion() != null)
@@ -77,8 +76,8 @@ namespace Ryujinx.Ui.Windows
if (userProfile.AccountState == AccountState.Open)
{
- _selectedUserImage.Pixbuf = new Gdk.Pixbuf(userProfile.Image, 96, 96);
- _selectedUserIdLabel.Text = userProfile.UserId.ToString();
+ _selectedUserImage.Pixbuf = new Gdk.Pixbuf(userProfile.Image, 96, 96);
+ _selectedUserIdLabel.Text = userProfile.UserId.ToString();
_selectedUserNameEntry.Text = userProfile.Name;
_deleteButton.Sensitive = userProfile.UserId != AccountManager.DefaultUserId;
@@ -111,7 +110,7 @@ namespace Ryujinx.Ui.Windows
Gdk.Pixbuf userPicture = (Gdk.Pixbuf)_tableStore.GetValue(selectedIter, 1);
string userName = _tableStore.GetValue(selectedIter, 2).ToString().Split("\n")[0];
- string userId = _tableStore.GetValue(selectedIter, 2).ToString().Split("\n")[1];
+ string userId = _tableStore.GetValue(selectedIter, 2).ToString().Split("\n")[1];
// Unselect the first user.
_usersTreeView.Model.GetIterFirst(out TreeIter firstIter);
@@ -121,9 +120,9 @@ namespace Ryujinx.Ui.Windows
// Set new informations.
_tableStore.SetValue(selectedIter, 0, true);
- _selectedUserImage.Pixbuf = userPicture;
- _selectedUserNameEntry.Text = userName;
- _selectedUserIdLabel.Text = userId;
+ _selectedUserImage.Pixbuf = userPicture;
+ _selectedUserNameEntry.Text = userName;
+ _selectedUserIdLabel.Text = userId;
_saveProfileNameButton.Sensitive = false;
// Open the selected one.
@@ -178,29 +177,27 @@ namespace Ryujinx.Ui.Windows
private void ProcessProfileImage(byte[] buffer)
{
- using (Image image = Image.Load(buffer))
- {
- image.Mutate(x => x.Resize(256, 256));
+ using Image image = Image.Load(buffer);
- using (MemoryStream streamJpg = MemoryStreamManager.Shared.GetStream())
- {
- image.SaveAsJpeg(streamJpg);
+ image.Mutate(x => x.Resize(256, 256));
- _bufferImageProfile = streamJpg.ToArray();
- }
- }
+ using MemoryStream streamJpg = MemoryStreamManager.Shared.GetStream();
+
+ image.SaveAsJpeg(streamJpg);
+
+ _bufferImageProfile = streamJpg.ToArray();
}
private void ProfileImageFileChooser()
{
- FileChooserNative fileChooser = new FileChooserNative("Import Custom Profile Image", this, FileChooserAction.Open, "Import", "Cancel")
+ FileChooserNative fileChooser = new("Import Custom Profile Image", this, FileChooserAction.Open, "Import", "Cancel")
{
- SelectMultiple = false
+ SelectMultiple = false,
};
- FileFilter filter = new FileFilter()
+ FileFilter filter = new()
{
- Name = "Custom Profile Images"
+ Name = "Custom Profile Images",
};
filter.AddPattern("*.jpg");
filter.AddPattern("*.jpeg");
@@ -225,15 +222,15 @@ namespace Ryujinx.Ui.Windows
}
else
{
- Dictionary<int, string> buttons = new Dictionary<int, string>()
+ Dictionary<int, string> buttons = new()
{
{ 0, "Import Image File" },
- { 1, "Select Firmware Avatar" }
+ { 1, "Select Firmware Avatar" },
};
ResponseType responseDialog = GtkDialog.CreateCustomDialog("Profile Image Selection",
"Choose a Profile Image",
- "You may import a custom profile image, or select an avatar from the system firmware.",
+ "You may import a custom profile image, or select an avatar from the system firmware.",
buttons, MessageType.Question);
if (responseDialog == 0)
@@ -242,9 +239,9 @@ namespace Ryujinx.Ui.Windows
}
else if (responseDialog == (ResponseType)1)
{
- AvatarWindow avatarWindow = new AvatarWindow()
+ AvatarWindow avatarWindow = new()
{
- NewUser = newUser
+ NewUser = newUser,
};
avatarWindow.DeleteEvent += AvatarWindow_DeleteEvent;
@@ -328,4 +325,4 @@ namespace Ryujinx.Ui.Windows
Close();
}
}
-} \ No newline at end of file
+}