From b45a65fbdcec41b783759d670a9b36e1a597b00e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Mar 2025 00:08:01 -0600 Subject: [PATCH 01/25] misc: chore: rework HLEConfiguration --- .../LdnMitm/LdnMitmClient.cs | 2 +- .../LdnRyu/LdnMasterProxyClient.cs | 4 +- ...LEConfiguration.cs => HleConfiguration.cs} | 61 ++++++++++------- src/Ryujinx.HLE/Switch.cs | 12 ++-- src/Ryujinx/AppHost.cs | 57 +++++----------- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 68 ++++++++++--------- .../Configuration/ConfigurationState.Model.cs | 35 +++++++++- .../Configuration/ConfigurationState.cs | 4 +- 8 files changed, 134 insertions(+), 109 deletions(-) rename src/Ryujinx.HLE/{HLEConfiguration.cs => HleConfiguration.cs} (88%) diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs index 40697d122..35fc783c2 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnMitm/LdnMitmClient.cs @@ -19,7 +19,7 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm private readonly LanDiscovery _lanDiscovery; - public LdnMitmClient(HLEConfiguration config) + public LdnMitmClient(HleConfiguration config) { UnicastIPAddressInformation localIpInterface = NetworkHelpers.GetLocalInterface(config.MultiplayerLanInterfaceId).Item2; diff --git a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs index 712967180..c2bbcb471 100644 --- a/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs +++ b/src/Ryujinx.HLE/HOS/Services/Ldn/UserServiceCreator/LdnRyu/LdnMasterProxyClient.cs @@ -51,13 +51,13 @@ namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnRyu private string _passphrase; private byte[] _gameVersion = new byte[0x10]; - private readonly HLEConfiguration _config; + private readonly HleConfiguration _config; public event EventHandler NetworkChange; public ProxyConfig Config { get; private set; } - public LdnMasterProxyClient(string address, int port, HLEConfiguration config) : base(address, port) + public LdnMasterProxyClient(string address, int port, HleConfiguration config) : base(address, port) { if (ProxyHelpers.SupportsNoDelay()) { diff --git a/src/Ryujinx.HLE/HLEConfiguration.cs b/src/Ryujinx.HLE/HleConfiguration.cs similarity index 88% rename from src/Ryujinx.HLE/HLEConfiguration.cs rename to src/Ryujinx.HLE/HleConfiguration.cs index 0b7ae3974..97835033e 100644 --- a/src/Ryujinx.HLE/HLEConfiguration.cs +++ b/src/Ryujinx.HLE/HleConfiguration.cs @@ -15,55 +15,55 @@ namespace Ryujinx.HLE /// /// HLE configuration. /// - public class HLEConfiguration + public class HleConfiguration { /// /// The virtual file system used by the FS service. /// /// This cannot be changed after instantiation. - internal readonly VirtualFileSystem VirtualFileSystem; + internal VirtualFileSystem VirtualFileSystem { get; private set; } /// /// The manager for handling a LibHac Horizon instance. /// /// This cannot be changed after instantiation. - internal readonly LibHacHorizonManager LibHacHorizonManager; + internal LibHacHorizonManager LibHacHorizonManager { get; private set; } /// /// The account manager used by the account service. /// /// This cannot be changed after instantiation. - internal readonly AccountManager AccountManager; + internal AccountManager AccountManager { get; private set; } /// /// The content manager used by the NCM service. /// /// This cannot be changed after instantiation. - internal readonly ContentManager ContentManager; + internal ContentManager ContentManager { get; private set; } /// /// The persistent information between run for multi-application capabilities. /// /// This cannot be changed after instantiation. - public readonly UserChannelPersistence UserChannelPersistence; + public UserChannelPersistence UserChannelPersistence { get; private set; } /// /// The GPU renderer to use for all GPU operations. /// /// This cannot be changed after instantiation. - internal readonly IRenderer GpuRenderer; + internal IRenderer GpuRenderer { get; private set; } /// /// The audio device driver to use for all audio operations. /// /// This cannot be changed after instantiation. - internal readonly IHardwareDeviceDriver AudioDeviceDriver; + internal IHardwareDeviceDriver AudioDeviceDriver { get; private set; } /// /// The handler for various UI related operations needed outside of HLE. /// /// This cannot be changed after instantiation. - internal readonly IHostUIHandler HostUIHandler; + internal IHostUIHandler HostUIHandler { get; private set; } /// /// Control the memory configuration used by the emulation context. @@ -195,15 +195,7 @@ namespace Ryujinx.HLE /// This cannot be changed after instantiation. public EnabledDirtyHack[] Hacks { internal get; set; } - public HLEConfiguration(VirtualFileSystem virtualFileSystem, - LibHacHorizonManager libHacHorizonManager, - ContentManager contentManager, - AccountManager accountManager, - UserChannelPersistence userChannelPersistence, - IRenderer gpuRenderer, - IHardwareDeviceDriver audioDeviceDriver, - MemoryConfiguration memoryConfiguration, - IHostUIHandler hostUIHandler, + public HleConfiguration(MemoryConfiguration memoryConfiguration, SystemLanguage systemLanguage, RegionCode region, VSyncMode vSyncMode, @@ -227,15 +219,7 @@ namespace Ryujinx.HLE int customVSyncInterval, EnabledDirtyHack[] dirtyHacks = null) { - VirtualFileSystem = virtualFileSystem; - LibHacHorizonManager = libHacHorizonManager; - AccountManager = accountManager; - ContentManager = contentManager; - UserChannelPersistence = userChannelPersistence; - GpuRenderer = gpuRenderer; - AudioDeviceDriver = audioDeviceDriver; MemoryConfiguration = memoryConfiguration; - HostUIHandler = hostUIHandler; SystemLanguage = systemLanguage; Region = region; VSyncMode = vSyncMode; @@ -259,5 +243,30 @@ namespace Ryujinx.HLE MultiplayerLdnServer = multiplayerLdnServer; Hacks = dirtyHacks ?? []; } + + /// + /// Set the pre-configured services to use for this instance. + /// + public HleConfiguration Configure( + VirtualFileSystem virtualFileSystem, + LibHacHorizonManager libHacHorizonManager, + ContentManager contentManager, + AccountManager accountManager, + UserChannelPersistence userChannelPersistence, + IRenderer gpuRenderer, + IHardwareDeviceDriver audioDeviceDriver, + IHostUIHandler hostUIHandler + ) + { + VirtualFileSystem = virtualFileSystem; + LibHacHorizonManager = libHacHorizonManager; + AccountManager = accountManager; + ContentManager = contentManager; + UserChannelPersistence = userChannelPersistence; + GpuRenderer = gpuRenderer; + AudioDeviceDriver = audioDeviceDriver; + HostUIHandler = hostUIHandler; + return this; + } } } diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index 86b04061e..df5b48103 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -20,7 +20,7 @@ namespace Ryujinx.HLE { public static Switch Shared { get; private set; } - public HLEConfiguration Configuration { get; } + public HleConfiguration Configuration { get; } public IHardwareDeviceDriver AudioDeviceDriver { get; } public MemoryBlock Memory { get; } public GpuContext Gpu { get; } @@ -44,7 +44,7 @@ namespace Ryujinx.HLE public DirtyHacks DirtyHacks { get; } - public Switch(HLEConfiguration configuration) + public Switch(HleConfiguration configuration) { ArgumentNullException.ThrowIfNull(configuration.GpuRenderer); ArgumentNullException.ThrowIfNull(configuration.AudioDeviceDriver); @@ -94,16 +94,20 @@ namespace Ryujinx.HLE Gpu.GPFifo.DispatchCalls(); } - public void IncrementCustomVSyncInterval() + public int IncrementCustomVSyncInterval() { CustomVSyncInterval += 1; UpdateVSyncInterval(); + + return CustomVSyncInterval; } - public void DecrementCustomVSyncInterval() + public int DecrementCustomVSyncInterval() { CustomVSyncInterval -= 1; UpdateVSyncInterval(); + + return CustomVSyncInterval; } public void UpdateVSyncInterval() diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index b741eb977..95370fdc4 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -913,42 +913,18 @@ namespace Ryujinx.Ava Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({threadingMode}): {isGALThreaded}"); // Initialize Configuration. - MemoryConfiguration memoryConfiguration = ConfigurationState.Instance.System.DramSize.Value; - - Device = new Switch(new HLEConfiguration( - VirtualFileSystem, - _viewModel.LibHacHorizonManager, - ContentManager, - _accountManager, - _userChannelPersistence, - renderer, - InitializeAudio(), - memoryConfiguration, - _viewModel.UiHandler, - (SystemLanguage)ConfigurationState.Instance.System.Language.Value, - (RegionCode)ConfigurationState.Instance.System.Region.Value, - ConfigurationState.Instance.Graphics.VSyncMode, - ConfigurationState.Instance.System.EnableDockedMode, - ConfigurationState.Instance.System.EnablePtc, - ConfigurationState.Instance.System.EnableInternetAccess, - ConfigurationState.Instance.System.EnableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None, - ConfigurationState.Instance.System.FsGlobalAccessLogMode, - ConfigurationState.Instance.System.MatchSystemTime - ? 0 - : 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, - ConfigurationState.Instance.Multiplayer.Mode, - ConfigurationState.Instance.Multiplayer.DisableP2p, - ConfigurationState.Instance.Multiplayer.LdnPassphrase, - ConfigurationState.Instance.Multiplayer.GetLdnServer(), - ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value, - ConfigurationState.Instance.Hacks.ShowDirtyHacks ? ConfigurationState.Instance.Hacks.EnabledHacks : null)); + Device = new Switch(ConfigurationState.Instance.CreateHleConfiguration() + .Configure( + VirtualFileSystem, + _viewModel.LibHacHorizonManager, + ContentManager, + _accountManager, + _userChannelPersistence, + renderer, + InitializeAudio(), + _viewModel.UiHandler + ) + ); } private static IHardwareDeviceDriver InitializeAudio() @@ -1182,6 +1158,9 @@ namespace Ryujinx.Ava private void UpdateShaderCount() { + if (_displayCount is 0 && _renderer.ProgramCount is 0) + return; + // If there is a mismatch between total program compile and previous count // this means new shaders have been compiled and should be displayed. if (_renderer.ProgramCount != _previousCount) @@ -1255,12 +1234,10 @@ namespace Ryujinx.Ava VSyncModeToggle(); break; case KeyboardHotkeyState.CustomVSyncIntervalDecrement: - Device.DecrementCustomVSyncInterval(); - _viewModel.CustomVSyncInterval -= 1; + _viewModel.CustomVSyncInterval = Device.DecrementCustomVSyncInterval(); break; case KeyboardHotkeyState.CustomVSyncIntervalIncrement: - Device.IncrementCustomVSyncInterval(); - _viewModel.CustomVSyncInterval += 1; + _viewModel.CustomVSyncInterval = Device.IncrementCustomVSyncInterval(); break; case KeyboardHotkeyState.Screenshot: ScreenshotRequested = true; diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index 3ebfee751..f8936efd5 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -323,38 +323,42 @@ namespace Ryujinx.Headless renderer = new ThreadedRenderer(renderer); } - HLEConfiguration configuration = new(_virtualFileSystem, - _libHacHorizonManager, - _contentManager, - _accountManager, - _userChannelPersistence, - renderer, - new SDL2HardwareDeviceDriver(), - options.DramSize, - window, - options.SystemLanguage, - options.SystemRegion, - options.VSyncMode, - !options.DisableDockedMode, - !options.DisablePTC, - options.EnableInternetAccess, - !options.DisableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None, - options.FsGlobalAccessLogMode, - options.SystemTimeOffset, - options.SystemTimeZone, - options.MemoryManagerMode, - options.IgnoreMissingServices, - options.AspectRatio, - options.AudioVolume, - options.UseHypervisor ?? true, - options.MultiplayerLanInterfaceId, - Common.Configuration.Multiplayer.MultiplayerMode.Disabled, - false, - string.Empty, - string.Empty, - options.CustomVSyncInterval); - - return new Switch(configuration); + return new Switch( + new HleConfiguration( + options.DramSize, + options.SystemLanguage, + options.SystemRegion, + options.VSyncMode, + !options.DisableDockedMode, + !options.DisablePTC, + options.EnableInternetAccess, + !options.DisableFsIntegrityChecks ? IntegrityCheckLevel.ErrorOnInvalid : IntegrityCheckLevel.None, + options.FsGlobalAccessLogMode, + options.SystemTimeOffset, + options.SystemTimeZone, + options.MemoryManagerMode, + options.IgnoreMissingServices, + options.AspectRatio, + options.AudioVolume, + options.UseHypervisor ?? true, + options.MultiplayerLanInterfaceId, + Common.Configuration.Multiplayer.MultiplayerMode.Disabled, + false, + string.Empty, + string.Empty, + options.CustomVSyncInterval + ) + .Configure( + _virtualFileSystem, + _libHacHorizonManager, + _contentManager, + _accountManager, + _userChannelPersistence, + renderer, + new SDL2HardwareDeviceDriver(), + window + ) + ); } } } diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index ead99fbac..2ebf5725b 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -1,6 +1,6 @@ using ARMeilleure; using Gommon; -using Ryujinx.Ava.Utilities.AppLibrary; +using LibHac.Tools.FsSystem; using Ryujinx.Ava.Utilities.Configuration.System; using Ryujinx.Ava.Utilities.Configuration.UI; using Ryujinx.Common; @@ -11,6 +11,7 @@ using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.HLE; +using Ryujinx.HLE.HOS.SystemState; using System.Collections.Generic; using System.Linq; using RyuLogger = Ryujinx.Common.Logging.Logger; @@ -19,7 +20,7 @@ namespace Ryujinx.Ava.Utilities.Configuration { public partial class ConfigurationState { - /// + /// /// UI configuration section /// public class UISection @@ -838,5 +839,35 @@ namespace Ryujinx.Ava.Utilities.Configuration EnableHardwareAcceleration = new ReactiveObject(); HideCursor = new ReactiveObject(); } + + public HleConfiguration CreateHleConfiguration() => + new( + System.DramSize, + (SystemLanguage)System.Language.Value, + (RegionCode)System.Region.Value, + Graphics.VSyncMode, + System.EnableDockedMode, + System.EnablePtc, + System.EnableInternetAccess, + System.EnableFsIntegrityChecks + ? IntegrityCheckLevel.ErrorOnInvalid + : IntegrityCheckLevel.None, + System.FsGlobalAccessLogMode, + System.MatchSystemTime + ? 0 + : System.SystemTimeOffset, + System.TimeZone, + System.MemoryManagerMode, + System.IgnoreMissingServices, + Graphics.AspectRatio, + System.AudioVolume, + System.UseHypervisor, + Multiplayer.LanInterfaceId, + Multiplayer.Mode, + Multiplayer.DisableP2p, + Multiplayer.LdnPassphrase, + Instance.Multiplayer.GetLdnServer(), + Instance.Graphics.CustomVSyncInterval, + Instance.Hacks.ShowDirtyHacks ? Instance.Hacks.EnabledHacks : null); } } diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs index 4fdf7c4f0..5fb313cad 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs @@ -327,5 +327,5 @@ namespace Ryujinx.Ava.Utilities.Configuration return GraphicsBackend.OpenGl; } - } - } + } +} From f7976753fd1c181da7e429756d3cb5b15f78f1f3 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Mar 2025 00:14:56 -0600 Subject: [PATCH 02/25] misc: chore: move ThreadedRenderer creation logic into IRenderer base (since ThreadedRenderer is a GAL construct anyways) --- src/Ryujinx.Graphics.GAL/IRenderer.cs | 16 ++++++++++++++++ src/Ryujinx/AppHost.cs | 12 +----------- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 17 +++-------------- 3 files changed, 20 insertions(+), 25 deletions(-) diff --git a/src/Ryujinx.Graphics.GAL/IRenderer.cs b/src/Ryujinx.Graphics.GAL/IRenderer.cs index c2fdcbe4b..9d822e7c2 100644 --- a/src/Ryujinx.Graphics.GAL/IRenderer.cs +++ b/src/Ryujinx.Graphics.GAL/IRenderer.cs @@ -1,4 +1,6 @@ using Ryujinx.Common.Configuration; +using Ryujinx.Common.Logging; +using Ryujinx.Graphics.GAL.Multithreading; using System; using System.Threading; @@ -10,6 +12,20 @@ namespace Ryujinx.Graphics.GAL bool PreferThreading { get; } + public IRenderer TryMakeThreaded(BackendThreading backendThreading = BackendThreading.Auto) + { + if (backendThreading is BackendThreading.On || + (backendThreading is BackendThreading.Auto && PreferThreading)) + { + Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({backendThreading}): True"); + return new ThreadedRenderer(this); + } + + Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({backendThreading}): False"); + + return this; + } + IPipeline Pipeline { get; } IWindow Window { get; } diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 95370fdc4..40c54b6f7 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -902,16 +902,6 @@ namespace Ryujinx.Ava _ => new OpenGLRenderer() }; - BackendThreading threadingMode = ConfigurationState.Instance.Graphics.BackendThreading; - - bool isGALThreaded = threadingMode == BackendThreading.On || (threadingMode == BackendThreading.Auto && renderer.PreferThreading); - if (isGALThreaded) - { - renderer = new ThreadedRenderer(renderer); - } - - Logger.Info?.PrintMsg(LogClass.Gpu, $"Backend Threading ({threadingMode}): {isGALThreaded}"); - // Initialize Configuration. Device = new Switch(ConfigurationState.Instance.CreateHleConfiguration() .Configure( @@ -920,7 +910,7 @@ namespace Ryujinx.Ava ContentManager, _accountManager, _userChannelPersistence, - renderer, + renderer.TryMakeThreaded(ConfigurationState.Instance.Graphics.BackendThreading), InitializeAudio(), _viewModel.UiHandler ) diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index f8936efd5..d6a2ed789 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -312,18 +312,8 @@ namespace Ryujinx.Headless return new OpenGLRenderer(); } - private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) - { - BackendThreading threadingMode = options.BackendThreading; - - bool threadedGAL = threadingMode == BackendThreading.On || (threadingMode == BackendThreading.Auto && renderer.PreferThreading); - - if (threadedGAL) - { - renderer = new ThreadedRenderer(renderer); - } - - return new Switch( + private static Switch InitializeEmulationContext(WindowBase window, IRenderer renderer, Options options) => + new( new HleConfiguration( options.DramSize, options.SystemLanguage, @@ -354,11 +344,10 @@ namespace Ryujinx.Headless _contentManager, _accountManager, _userChannelPersistence, - renderer, + renderer.TryMakeThreaded(options.BackendThreading), new SDL2HardwareDeviceDriver(), window ) ); - } } } From 57c22a1f32abc8fb8c62d2b0855e11806f0e2ee5 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Mar 2025 02:56:59 -0600 Subject: [PATCH 03/25] misc: chore: [ci skip] Reduce duplicated close button & command space styling for dialogs --- src/Ryujinx/UI/Helpers/ContentDialogHelper.cs | 18 ++++++++++++++++++ .../UI/Views/Misc/ApplicationDataView.axaml.cs | 13 ++----------- .../UI/Views/Misc/DlcSelectView.axaml.cs | 12 +----------- src/Ryujinx/UI/Windows/AboutWindow.axaml.cs | 16 ++++------------ .../Compat/CompatibilityList.axaml.cs | 11 +---------- 5 files changed, 26 insertions(+), 44 deletions(-) diff --git a/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs b/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs index 0fd290b13..a93b2894e 100644 --- a/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs +++ b/src/Ryujinx/UI/Helpers/ContentDialogHelper.cs @@ -4,6 +4,7 @@ using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Input; using Avalonia.Layout; using Avalonia.Media; +using Avalonia.Styling; using Avalonia.Threading; using FluentAvalonia.Core; using FluentAvalonia.UI.Controls; @@ -21,6 +22,23 @@ namespace Ryujinx.Ava.UI.Helpers private static bool _isChoiceDialogOpen; private static ContentDialogOverlayWindow _contentDialogOverlayWindow; + public static ContentDialog ApplyStyles( + this ContentDialog contentDialog, + double closeButtonWidth = 80, + HorizontalAlignment buttonSpaceAlignment = HorizontalAlignment.Right) + { + Style closeButton = new(x => x.Name("CloseButton")); + closeButton.Setters.Add(new Setter(Layoutable.WidthProperty, closeButtonWidth)); + + Style closeButtonParent = new(x => x.Name("CommandSpace")); + closeButtonParent.Setters.Add(new Setter(Layoutable.HorizontalAlignmentProperty, buttonSpaceAlignment)); + + contentDialog.Styles.Add(closeButton); + contentDialog.Styles.Add(closeButtonParent); + + return contentDialog; + } + private async static Task ShowContentDialog( string title, object content, diff --git a/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs b/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs index 7bd05ba4f..02020c78c 100644 --- a/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs +++ b/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs @@ -1,6 +1,7 @@ using Avalonia.Controls; using Avalonia.Input.Platform; using Avalonia.Interactivity; +using Avalonia.Layout; using Avalonia.Styling; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; @@ -29,17 +30,7 @@ namespace Ryujinx.Ava.UI.Views.Misc Content = new ApplicationDataView { ViewModel = new ApplicationDataViewModel(appData) } }; - Style closeButton = new(x => x.Name("CloseButton")); - closeButton.Setters.Add(new Setter(WidthProperty, 160d)); - - Style closeButtonParent = new(x => x.Name("CommandSpace")); - closeButtonParent.Setters.Add(new Setter(HorizontalAlignmentProperty, - Avalonia.Layout.HorizontalAlignment.Center)); - - contentDialog.Styles.Add(closeButton); - contentDialog.Styles.Add(closeButtonParent); - - await ContentDialogHelper.ShowAsync(contentDialog); + await ContentDialogHelper.ShowAsync(contentDialog.ApplyStyles(160, HorizontalAlignment.Center)); } public ApplicationDataView() diff --git a/src/Ryujinx/UI/Views/Misc/DlcSelectView.axaml.cs b/src/Ryujinx/UI/Views/Misc/DlcSelectView.axaml.cs index 3db247dee..017ab9719 100644 --- a/src/Ryujinx/UI/Views/Misc/DlcSelectView.axaml.cs +++ b/src/Ryujinx/UI/Views/Misc/DlcSelectView.axaml.cs @@ -32,17 +32,7 @@ namespace Ryujinx.Ava.UI.Views.Misc Content = new DlcSelectView { ViewModel = viewModel } }; - Style closeButton = new(x => x.Name("CloseButton")); - closeButton.Setters.Add(new Setter(WidthProperty, 80d)); - - Style closeButtonParent = new(x => x.Name("CommandSpace")); - closeButtonParent.Setters.Add(new Setter(HorizontalAlignmentProperty, - Avalonia.Layout.HorizontalAlignment.Right)); - - contentDialog.Styles.Add(closeButton); - contentDialog.Styles.Add(closeButtonParent); - - await ContentDialogHelper.ShowAsync(contentDialog); + await ContentDialogHelper.ShowAsync(contentDialog.ApplyStyles()); return viewModel.SelectedDlc; } diff --git a/src/Ryujinx/UI/Windows/AboutWindow.axaml.cs b/src/Ryujinx/UI/Windows/AboutWindow.axaml.cs index 801748a8c..0af472503 100644 --- a/src/Ryujinx/UI/Windows/AboutWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/AboutWindow.axaml.cs @@ -5,6 +5,7 @@ using Avalonia.Layout; using Avalonia.Styling; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Common; @@ -14,7 +15,7 @@ using Button = Avalonia.Controls.Button; namespace Ryujinx.Ava.UI.Windows { - public partial class AboutWindow : UserControl + public partial class AboutWindow : RyujinxControl { public AboutWindow() { @@ -33,19 +34,10 @@ namespace Ryujinx.Ava.UI.Windows PrimaryButtonText = string.Empty, SecondaryButtonText = string.Empty, CloseButtonText = LocaleManager.Instance[LocaleKeys.UserProfilesClose], - Content = new AboutWindow { DataContext = viewModel } + Content = new AboutWindow { ViewModel = viewModel } }; - Style closeButton = new(x => x.Name("CloseButton")); - closeButton.Setters.Add(new Setter(WidthProperty, 80d)); - - Style closeButtonParent = new(x => x.Name("CommandSpace")); - closeButtonParent.Setters.Add(new Setter(HorizontalAlignmentProperty, HorizontalAlignment.Right)); - - contentDialog.Styles.Add(closeButton); - contentDialog.Styles.Add(closeButtonParent); - - await ContentDialogHelper.ShowAsync(contentDialog); + await ContentDialogHelper.ShowAsync(contentDialog.ApplyStyles()); } private void Button_OnClick(object sender, RoutedEventArgs e) diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs index 30d2649bc..db9feb36f 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs +++ b/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml.cs @@ -25,16 +25,7 @@ namespace Ryujinx.Ava.Utilities.Compat } }; - Style closeButton = new(x => x.Name("CloseButton")); - closeButton.Setters.Add(new Setter(WidthProperty, 80d)); - - Style closeButtonParent = new(x => x.Name("CommandSpace")); - closeButtonParent.Setters.Add(new Setter(HorizontalAlignmentProperty, Avalonia.Layout.HorizontalAlignment.Right)); - - contentDialog.Styles.Add(closeButton); - contentDialog.Styles.Add(closeButtonParent); - - await ContentDialogHelper.ShowAsync(contentDialog); + await ContentDialogHelper.ShowAsync(contentDialog.ApplyStyles()); } public CompatibilityList() From c12a59ecd631475ae462ab6da2623149fb8dafc7 Mon Sep 17 00:00:00 2001 From: GabCoolGuy Date: Tue, 4 Mar 2025 20:23:19 +0100 Subject: [PATCH 04/25] Remove 'About Avalonia' and Replace it with 'About Ryujinx' in MacOS's menu bar (#752) Video demonstration for non-Mac users: https://www.youtube.com/watch?v=7Wn_k5AjBuU --- src/Ryujinx/RyujinxApp.axaml | 5 +++++ src/Ryujinx/RyujinxApp.axaml.cs | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/Ryujinx/RyujinxApp.axaml b/src/Ryujinx/RyujinxApp.axaml index aca69645a..bffb5cece 100644 --- a/src/Ryujinx/RyujinxApp.axaml +++ b/src/Ryujinx/RyujinxApp.axaml @@ -17,4 +17,9 @@ + + + + + diff --git a/src/Ryujinx/RyujinxApp.axaml.cs b/src/Ryujinx/RyujinxApp.axaml.cs index 90552cd16..8bfe1660d 100644 --- a/src/Ryujinx/RyujinxApp.axaml.cs +++ b/src/Ryujinx/RyujinxApp.axaml.cs @@ -147,5 +147,10 @@ namespace Ryujinx.Ava Current is RyujinxApp { PlatformSettings: not null } app ? ConvertThemeVariant(app.PlatformSettings.GetColorValues().ThemeVariant) : ThemeVariant.Default; + + private async void AboutRyujinx_OnClick(object sender, EventArgs e) + { + await AboutWindow.Show(); + } } } From 2317c06364809ded959ec367e8fef0195fa2b65b Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Mar 2025 18:01:48 -0600 Subject: [PATCH 05/25] misc: small Avalonia project restructure Moved AppLibrary, Configuration, and PlayReport namespaces to Ryujinx.Systems, add the compat list stuff in the base Ryujinx.Systems namespace. Moved the compatibility UI stuff to the proper UI view/viewmodel folders. --- src/Ryujinx/AppHost.cs | 4 ++-- src/Ryujinx/Common/ApplicationHelper.cs | 2 +- src/Ryujinx/Common/LocaleManager.cs | 2 +- src/Ryujinx/Common/Models/XCITrimmerFileModel.cs | 2 +- src/Ryujinx/DiscordIntegrationModule.cs | 6 +++--- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 2 +- src/Ryujinx/Headless/HeadlessRyujinx.cs | 2 +- src/Ryujinx/Headless/Options.cs | 2 +- src/Ryujinx/Program.cs | 6 +++--- src/Ryujinx/RyujinxApp.axaml.cs | 2 +- .../AppLibrary/ApplicationCountUpdatedEventArgs.cs | 2 +- .../AppLibrary/ApplicationData.cs | 6 +++--- .../AppLibrary/ApplicationJsonSerializerContext.cs | 2 +- .../AppLibrary/ApplicationLibrary.cs | 7 ++++--- .../AppLibrary/ApplicationMetadata.cs | 2 +- .../{Utilities => Systems}/AppLibrary/LdnGameData.cs | 2 +- .../AppLibrary/LdnGameDataReceivedEventArgs.cs | 2 +- .../AppLibrary/LdnGameDataSerializerContext.cs | 2 +- .../{Utilities/Compat => Systems}/CompatibilityCsv.cs | 2 +- .../Configuration/AudioBackend.cs | 2 +- .../Configuration/ConfigurationFileFormat.cs | 6 +++--- .../Configuration/ConfigurationFileFormatSettings.cs | 2 +- .../ConfigurationJsonSerializerContext.cs | 2 +- .../Configuration/ConfigurationState.Migration.cs | 6 +++--- .../Configuration/ConfigurationState.Model.cs | 6 +++--- .../Configuration/ConfigurationState.cs | 6 +++--- .../{Utilities => Systems}/Configuration/FileTypes.cs | 10 +++++----- .../Configuration/LoggerModule.cs | 2 +- .../Configuration/System/Language.cs | 2 +- .../Configuration/System/Region.cs | 2 +- .../Configuration/UI/ColumnSort.cs | 2 +- .../Configuration/UI/FocusLostType.cs | 2 +- .../Configuration/UI/GuiColumns.cs | 2 +- .../Configuration/UI/ShownFileTypes.cs | 2 +- .../Configuration/UI/UpdaterType.cs | 2 +- .../Configuration/UI/WindowStartup.cs | 2 +- .../{Utilities => Systems}/PlayReport/Analyzer.cs | 4 ++-- .../{Utilities => Systems}/PlayReport/Delegates.cs | 2 +- .../PlayReport/MatchedValues.cs | 4 ++-- .../PlayReport/PlayReports.Formatters.cs | 2 +- .../{Utilities => Systems}/PlayReport/PlayReports.cs | 2 +- .../{Utilities => Systems}/PlayReport/Specs.cs | 8 ++++---- .../{Utilities => Systems}/PlayReport/Value.cs | 2 +- src/Ryujinx/UI/Applet/AvaHostUIHandler.cs | 2 +- .../UI/Controls/ApplicationContextMenu.axaml.cs | 3 +-- src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs | 2 +- .../UI/Helpers/Converters/MultiplayerInfoConverter.cs | 2 +- src/Ryujinx/UI/Helpers/LoggerAdapter.cs | 2 +- .../UI/Models/Generic/LastPlayedSortComparer.cs | 2 +- .../UI/Models/Generic/TimePlayedSortComparer.cs | 2 +- src/Ryujinx/UI/Models/SaveModel.cs | 2 +- src/Ryujinx/UI/Renderer/EmbeddedWindow.cs | 2 +- src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs | 2 +- src/Ryujinx/UI/Renderer/RendererHost.cs | 2 +- src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs | 2 +- .../UI/ViewModels/AppListFavoriteComparable.cs | 2 +- src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs | 4 ++-- .../ViewModels}/CompatibilityViewModel.cs | 6 +++--- src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs | 2 +- .../ViewModels/DownloadableContentManagerViewModel.cs | 2 +- src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs | 2 +- src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs | 2 +- src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs | 4 ++-- src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs | 2 +- src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs | 2 +- src/Ryujinx/UI/ViewModels/SettingsViewModel.cs | 6 +++--- src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs | 2 +- src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs | 2 +- src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs | 6 +++--- src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs | 2 +- .../UI/Views/Misc/ApplicationDataView.axaml.cs | 4 +--- .../UI/Views/Misc/ApplicationGridView.axaml.cs | 2 +- .../UI/Views/Misc/ApplicationListView.axaml.cs | 3 +-- .../Compat => UI/Views/Misc}/CompatibilityList.axaml | 11 ++++++----- .../Views/Misc}/CompatibilityList.axaml.cs | 3 ++- src/Ryujinx/UI/Views/Misc/DlcSelectView.axaml.cs | 2 +- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 4 ++-- .../Windows/DownloadableContentManagerWindow.axaml.cs | 2 +- .../UI/Windows/GameSpecificSettingsWindow.axaml.cs | 2 +- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 6 +++--- src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs | 2 +- src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs | 2 +- src/Ryujinx/Utilities/AppletMetadata.cs | 2 +- src/Ryujinx/Utilities/TitleUpdatesHelper.cs | 2 +- 84 files changed, 128 insertions(+), 129 deletions(-) rename src/Ryujinx/{Utilities => Systems}/AppLibrary/ApplicationCountUpdatedEventArgs.cs (81%) rename src/Ryujinx/{Utilities => Systems}/AppLibrary/ApplicationData.cs (98%) rename src/Ryujinx/{Utilities => Systems}/AppLibrary/ApplicationJsonSerializerContext.cs (85%) rename src/Ryujinx/{Utilities => Systems}/AppLibrary/ApplicationLibrary.cs (99%) rename src/Ryujinx/{Utilities => Systems}/AppLibrary/ApplicationMetadata.cs (97%) rename src/Ryujinx/{Utilities => Systems}/AppLibrary/LdnGameData.cs (97%) rename src/Ryujinx/{Utilities => Systems}/AppLibrary/LdnGameDataReceivedEventArgs.cs (90%) rename src/Ryujinx/{Utilities => Systems}/AppLibrary/LdnGameDataSerializerContext.cs (83%) rename src/Ryujinx/{Utilities/Compat => Systems}/CompatibilityCsv.cs (99%) rename src/Ryujinx/{Utilities => Systems}/Configuration/AudioBackend.cs (84%) rename src/Ryujinx/{Utilities => Systems}/Configuration/ConfigurationFileFormat.cs (99%) rename src/Ryujinx/{Utilities => Systems}/Configuration/ConfigurationFileFormatSettings.cs (83%) rename src/Ryujinx/{Utilities => Systems}/Configuration/ConfigurationJsonSerializerContext.cs (84%) rename src/Ryujinx/{Utilities => Systems}/Configuration/ConfigurationState.Migration.cs (99%) rename src/Ryujinx/{Utilities => Systems}/Configuration/ConfigurationState.Model.cs (99%) rename src/Ryujinx/{Utilities => Systems}/Configuration/ConfigurationState.cs (99%) rename src/Ryujinx/{Utilities => Systems}/Configuration/FileTypes.cs (62%) rename src/Ryujinx/{Utilities => Systems}/Configuration/LoggerModule.cs (98%) rename src/Ryujinx/{Utilities => Systems}/Configuration/System/Language.cs (91%) rename src/Ryujinx/{Utilities => Systems}/Configuration/System/Region.cs (84%) rename src/Ryujinx/{Utilities => Systems}/Configuration/UI/ColumnSort.cs (73%) rename src/Ryujinx/{Utilities => Systems}/Configuration/UI/FocusLostType.cs (86%) rename src/Ryujinx/{Utilities => Systems}/Configuration/UI/GuiColumns.cs (91%) rename src/Ryujinx/{Utilities => Systems}/Configuration/UI/ShownFileTypes.cs (85%) rename src/Ryujinx/{Utilities => Systems}/Configuration/UI/UpdaterType.cs (83%) rename src/Ryujinx/{Utilities => Systems}/Configuration/UI/WindowStartup.cs (85%) rename src/Ryujinx/{Utilities => Systems}/PlayReport/Analyzer.cs (98%) rename src/Ryujinx/{Utilities => Systems}/PlayReport/Delegates.cs (97%) rename src/Ryujinx/{Utilities => Systems}/PlayReport/MatchedValues.cs (96%) rename src/Ryujinx/{Utilities => Systems}/PlayReport/PlayReports.Formatters.cs (99%) rename src/Ryujinx/{Utilities => Systems}/PlayReport/PlayReports.cs (99%) rename src/Ryujinx/{Utilities => Systems}/PlayReport/Specs.cs (97%) rename src/Ryujinx/{Utilities => Systems}/PlayReport/Value.cs (99%) rename src/Ryujinx/{Utilities/Compat => UI/ViewModels}/CompatibilityViewModel.cs (94%) rename src/Ryujinx/{Utilities/Compat => UI/Views/Misc}/CompatibilityList.axaml (91%) rename src/Ryujinx/{Utilities/Compat => UI/Views/Misc}/CompatibilityList.axaml.cs (95%) diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 40c54b6f7..b50eb6912 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -21,8 +21,8 @@ using Ryujinx.Ava.UI.Renderer; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; -using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.AppLibrary; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; diff --git a/src/Ryujinx/Common/ApplicationHelper.cs b/src/Ryujinx/Common/ApplicationHelper.cs index 86e5ee310..c530ef459 100644 --- a/src/Ryujinx/Common/ApplicationHelper.cs +++ b/src/Ryujinx/Common/ApplicationHelper.cs @@ -16,7 +16,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.Utilities; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.HLE.FileSystem; diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index f60cff49b..f5194dd13 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -1,6 +1,6 @@ using Gommon; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common; using Ryujinx.Common.Utilities; using System; diff --git a/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs b/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs index da59a5d52..cddc5de22 100644 --- a/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs +++ b/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs @@ -1,4 +1,4 @@ -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; diff --git a/src/Ryujinx/DiscordIntegrationModule.cs b/src/Ryujinx/DiscordIntegrationModule.cs index 8d232b4fb..142261d72 100644 --- a/src/Ryujinx/DiscordIntegrationModule.cs +++ b/src/Ryujinx/DiscordIntegrationModule.cs @@ -1,9 +1,9 @@ using DiscordRPC; using Gommon; using Ryujinx.Ava.Utilities; -using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.Ava.Utilities.Configuration; -using Ryujinx.Ava.Utilities.PlayReport; +using Ryujinx.Ava.Systems.AppLibrary; +using Ryujinx.Ava.Systems.Configuration; +using Ryujinx.Ava.Systems.PlayReport; using Ryujinx.Common; using Ryujinx.Common.Logging; using Ryujinx.HLE; diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index d6a2ed789..7ff0a5259 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -2,7 +2,7 @@ using DiscordRPC; using LibHac.Tools.FsSystem; using Ryujinx.Audio.Backends.SDL2; using Ryujinx.Ava; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index 9a69c56dd..f346f1f63 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -1,7 +1,7 @@ using CommandLine; using Gommon; using Ryujinx.Ava; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs index 6658ba3ad..97670e44f 100644 --- a/src/Ryujinx/Headless/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -1,6 +1,6 @@ using CommandLine; using Gommon; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.HLE; diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index edd46a7db..a8a51e70d 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -8,7 +8,7 @@ using Projektanker.Icons.Avalonia.MaterialDesign; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Ava.Utilities.SystemInfo; using Ryujinx.Common; using Ryujinx.Common.Configuration; @@ -284,14 +284,14 @@ namespace Ryujinx.Ava if (CommandLineState.OverrideSystemRegion is not null) if (Enum.TryParse(CommandLineState.OverrideSystemRegion, true, out Ryujinx.HLE.HOS.SystemState.RegionCode result)) { - ConfigurationState.Instance.System.Region.Value = (Utilities.Configuration.System.Region)result; + ConfigurationState.Instance.System.Region.Value = (Systems.Configuration.System.Region)result; } //Check if language was overridden. if (CommandLineState.OverrideSystemLanguage is not null) if (Enum.TryParse(CommandLineState.OverrideSystemLanguage, true, out Ryujinx.HLE.HOS.SystemState.SystemLanguage result)) { - ConfigurationState.Instance.System.Language.Value = (Utilities.Configuration.System.Language)result; + ConfigurationState.Instance.System.Language.Value = (Systems.Configuration.System.Language)result; } // Check if hardware-acceleration was overridden. diff --git a/src/Ryujinx/RyujinxApp.axaml.cs b/src/Ryujinx/RyujinxApp.axaml.cs index 8bfe1660d..0a0f0a13c 100644 --- a/src/Ryujinx/RyujinxApp.axaml.cs +++ b/src/Ryujinx/RyujinxApp.axaml.cs @@ -12,7 +12,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common; using Ryujinx.Common.Logging; using System; diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationCountUpdatedEventArgs.cs b/src/Ryujinx/Systems/AppLibrary/ApplicationCountUpdatedEventArgs.cs similarity index 81% rename from src/Ryujinx/Utilities/AppLibrary/ApplicationCountUpdatedEventArgs.cs rename to src/Ryujinx/Systems/AppLibrary/ApplicationCountUpdatedEventArgs.cs index 9bbaef0e3..7866ffa3a 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationCountUpdatedEventArgs.cs +++ b/src/Ryujinx/Systems/AppLibrary/ApplicationCountUpdatedEventArgs.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Ava.Utilities.AppLibrary +namespace Ryujinx.Ava.Systems.AppLibrary { public class ApplicationCountUpdatedEventArgs : EventArgs { diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs b/src/Ryujinx/Systems/AppLibrary/ApplicationData.cs similarity index 98% rename from src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs rename to src/Ryujinx/Systems/AppLibrary/ApplicationData.cs index 16e7dec06..e04ea454a 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs +++ b/src/Ryujinx/Systems/AppLibrary/ApplicationData.cs @@ -9,8 +9,8 @@ using LibHac.Tools.Fs; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Ava.Common.Locale; -using Ryujinx.Ava.Utilities.Compat; -using Ryujinx.Ava.Utilities.PlayReport; +using Ryujinx.Ava.Utilities; +using Ryujinx.Ava.Systems.PlayReport; using Ryujinx.Common.Logging; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.Loaders.Processes.Extensions; @@ -18,7 +18,7 @@ using System; using System.IO; using System.Text.Json.Serialization; -namespace Ryujinx.Ava.Utilities.AppLibrary +namespace Ryujinx.Ava.Systems.AppLibrary { public class ApplicationData { diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationJsonSerializerContext.cs b/src/Ryujinx/Systems/AppLibrary/ApplicationJsonSerializerContext.cs similarity index 85% rename from src/Ryujinx/Utilities/AppLibrary/ApplicationJsonSerializerContext.cs rename to src/Ryujinx/Systems/AppLibrary/ApplicationJsonSerializerContext.cs index d443ab66e..3fd24a6ba 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationJsonSerializerContext.cs +++ b/src/Ryujinx/Systems/AppLibrary/ApplicationJsonSerializerContext.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Ryujinx.Ava.Utilities.AppLibrary +namespace Ryujinx.Ava.Systems.AppLibrary { [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(ApplicationMetadata))] diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs similarity index 99% rename from src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs rename to src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs index c85053723..fa1d427cb 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs @@ -12,8 +12,9 @@ using LibHac.Tools.Fs; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Ava.Common.Models; -using Ryujinx.Ava.Utilities.Configuration; -using Ryujinx.Ava.Utilities.Configuration.System; +using Ryujinx.Ava.Utilities; +using Ryujinx.Ava.Systems.Configuration; +using Ryujinx.Ava.Systems.Configuration.System; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; @@ -38,7 +39,7 @@ using MissingKeyException = LibHac.Common.Keys.MissingKeyException; using Path = System.IO.Path; using TimeSpan = System.TimeSpan; -namespace Ryujinx.Ava.Utilities.AppLibrary +namespace Ryujinx.Ava.Systems.AppLibrary { public class ApplicationLibrary { diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationMetadata.cs b/src/Ryujinx/Systems/AppLibrary/ApplicationMetadata.cs similarity index 97% rename from src/Ryujinx/Utilities/AppLibrary/ApplicationMetadata.cs rename to src/Ryujinx/Systems/AppLibrary/ApplicationMetadata.cs index d823c7482..9d8488aeb 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationMetadata.cs +++ b/src/Ryujinx/Systems/AppLibrary/ApplicationMetadata.cs @@ -1,7 +1,7 @@ using System; using System.Text.Json.Serialization; -namespace Ryujinx.Ava.Utilities.AppLibrary +namespace Ryujinx.Ava.Systems.AppLibrary { public class ApplicationMetadata { diff --git a/src/Ryujinx/Utilities/AppLibrary/LdnGameData.cs b/src/Ryujinx/Systems/AppLibrary/LdnGameData.cs similarity index 97% rename from src/Ryujinx/Utilities/AppLibrary/LdnGameData.cs rename to src/Ryujinx/Systems/AppLibrary/LdnGameData.cs index 252c0ecdc..6750983d6 100644 --- a/src/Ryujinx/Utilities/AppLibrary/LdnGameData.cs +++ b/src/Ryujinx/Systems/AppLibrary/LdnGameData.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; using System.Linq; -namespace Ryujinx.Ava.Utilities.AppLibrary +namespace Ryujinx.Ava.Systems.AppLibrary { public struct LdnGameData { diff --git a/src/Ryujinx/Utilities/AppLibrary/LdnGameDataReceivedEventArgs.cs b/src/Ryujinx/Systems/AppLibrary/LdnGameDataReceivedEventArgs.cs similarity index 90% rename from src/Ryujinx/Utilities/AppLibrary/LdnGameDataReceivedEventArgs.cs rename to src/Ryujinx/Systems/AppLibrary/LdnGameDataReceivedEventArgs.cs index 0eaa6ecb3..6c80c1924 100644 --- a/src/Ryujinx/Utilities/AppLibrary/LdnGameDataReceivedEventArgs.cs +++ b/src/Ryujinx/Systems/AppLibrary/LdnGameDataReceivedEventArgs.cs @@ -1,7 +1,7 @@ using System; using System.Collections.Generic; -namespace Ryujinx.Ava.Utilities.AppLibrary +namespace Ryujinx.Ava.Systems.AppLibrary { public class LdnGameDataReceivedEventArgs : EventArgs { diff --git a/src/Ryujinx/Utilities/AppLibrary/LdnGameDataSerializerContext.cs b/src/Ryujinx/Systems/AppLibrary/LdnGameDataSerializerContext.cs similarity index 83% rename from src/Ryujinx/Utilities/AppLibrary/LdnGameDataSerializerContext.cs rename to src/Ryujinx/Systems/AppLibrary/LdnGameDataSerializerContext.cs index 90d1894c7..ff7718ed5 100644 --- a/src/Ryujinx/Utilities/AppLibrary/LdnGameDataSerializerContext.cs +++ b/src/Ryujinx/Systems/AppLibrary/LdnGameDataSerializerContext.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; -namespace Ryujinx.Ava.Utilities.AppLibrary +namespace Ryujinx.Ava.Systems.AppLibrary { [JsonSerializable(typeof(IEnumerable))] internal partial class LdnGameDataSerializerContext : JsonSerializerContext; diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs b/src/Ryujinx/Systems/CompatibilityCsv.cs similarity index 99% rename from src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs rename to src/Ryujinx/Systems/CompatibilityCsv.cs index b58c05299..9bab87d9f 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityCsv.cs +++ b/src/Ryujinx/Systems/CompatibilityCsv.cs @@ -9,7 +9,7 @@ using System.Linq; using System.Reflection; using System.Text; -namespace Ryujinx.Ava.Utilities.Compat +namespace Ryujinx.Ava.Systems { public struct ColumnIndices(Func, int> getIndex) { diff --git a/src/Ryujinx/Utilities/Configuration/AudioBackend.cs b/src/Ryujinx/Systems/Configuration/AudioBackend.cs similarity index 84% rename from src/Ryujinx/Utilities/Configuration/AudioBackend.cs rename to src/Ryujinx/Systems/Configuration/AudioBackend.cs index 8394bb282..a0aa30f38 100644 --- a/src/Ryujinx/Utilities/Configuration/AudioBackend.cs +++ b/src/Ryujinx/Systems/Configuration/AudioBackend.cs @@ -1,7 +1,7 @@ using Ryujinx.Common.Utilities; using System.Text.Json.Serialization; -namespace Ryujinx.Ava.Utilities.Configuration +namespace Ryujinx.Ava.Systems.Configuration { [JsonConverter(typeof(TypedStringEnumConverter))] public enum AudioBackend diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs similarity index 99% rename from src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs rename to src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs index 814a48e53..042f95c46 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs @@ -1,5 +1,5 @@ -using Ryujinx.Ava.Utilities.Configuration.System; -using Ryujinx.Ava.Utilities.Configuration.UI; +using Ryujinx.Ava.Systems.Configuration.System; +using Ryujinx.Ava.Systems.Configuration.UI; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Multiplayer; @@ -8,7 +8,7 @@ using Ryujinx.Common.Utilities; using Ryujinx.HLE; using System.Collections.Generic; -namespace Ryujinx.Ava.Utilities.Configuration +namespace Ryujinx.Ava.Systems.Configuration { public class ConfigurationFileFormat { diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormatSettings.cs b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormatSettings.cs similarity index 83% rename from src/Ryujinx/Utilities/Configuration/ConfigurationFileFormatSettings.cs rename to src/Ryujinx/Systems/Configuration/ConfigurationFileFormatSettings.cs index 175d4dee8..1d0350dd3 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormatSettings.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormatSettings.cs @@ -1,6 +1,6 @@ using Ryujinx.Common.Utilities; -namespace Ryujinx.Ava.Utilities.Configuration +namespace Ryujinx.Ava.Systems.Configuration { internal static class ConfigurationFileFormatSettings { diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationJsonSerializerContext.cs b/src/Ryujinx/Systems/Configuration/ConfigurationJsonSerializerContext.cs similarity index 84% rename from src/Ryujinx/Utilities/Configuration/ConfigurationJsonSerializerContext.cs rename to src/Ryujinx/Systems/Configuration/ConfigurationJsonSerializerContext.cs index a81e00f4a..8574b3a93 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationJsonSerializerContext.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationJsonSerializerContext.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Ryujinx.Ava.Utilities.Configuration +namespace Ryujinx.Ava.Systems.Configuration { [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(ConfigurationFileFormat))] diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs similarity index 99% rename from src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs rename to src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs index 8a0ddb560..fcea6dbf0 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs @@ -1,7 +1,7 @@ using Avalonia.Media; using Gommon; -using Ryujinx.Ava.Utilities.Configuration.System; -using Ryujinx.Ava.Utilities.Configuration.UI; +using Ryujinx.Ava.Systems.Configuration.System; +using Ryujinx.Ava.Systems.Configuration.UI; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; @@ -14,7 +14,7 @@ using System.Collections.Generic; using System.Linq; using RyuLogger = Ryujinx.Common.Logging.Logger; -namespace Ryujinx.Ava.Utilities.Configuration +namespace Ryujinx.Ava.Systems.Configuration { public partial class ConfigurationState { diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs similarity index 99% rename from src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs rename to src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs index 2ebf5725b..1a4992444 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs @@ -1,8 +1,8 @@ using ARMeilleure; using Gommon; using LibHac.Tools.FsSystem; -using Ryujinx.Ava.Utilities.Configuration.System; -using Ryujinx.Ava.Utilities.Configuration.UI; +using Ryujinx.Ava.Systems.Configuration.System; +using Ryujinx.Ava.Systems.Configuration.UI; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; @@ -16,7 +16,7 @@ using System.Collections.Generic; using System.Linq; using RyuLogger = Ryujinx.Common.Logging.Logger; -namespace Ryujinx.Ava.Utilities.Configuration +namespace Ryujinx.Ava.Systems.Configuration { public partial class ConfigurationState { diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.cs similarity index 99% rename from src/Ryujinx/Utilities/Configuration/ConfigurationState.cs rename to src/Ryujinx/Systems/Configuration/ConfigurationState.cs index 5fb313cad..811c0b971 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.cs @@ -1,5 +1,5 @@ -using Ryujinx.Ava.Utilities.Configuration.System; -using Ryujinx.Ava.Utilities.Configuration.UI; +using Ryujinx.Ava.Systems.Configuration.System; +using Ryujinx.Ava.Systems.Configuration.UI; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Keyboard; @@ -9,7 +9,7 @@ using Ryujinx.HLE; using System; using System.Linq; -namespace Ryujinx.Ava.Utilities.Configuration +namespace Ryujinx.Ava.Systems.Configuration { public partial class ConfigurationState { diff --git a/src/Ryujinx/Utilities/Configuration/FileTypes.cs b/src/Ryujinx/Systems/Configuration/FileTypes.cs similarity index 62% rename from src/Ryujinx/Utilities/Configuration/FileTypes.cs rename to src/Ryujinx/Systems/Configuration/FileTypes.cs index c4550b5a6..4f27255b5 100644 --- a/src/Ryujinx/Utilities/Configuration/FileTypes.cs +++ b/src/Ryujinx/Systems/Configuration/FileTypes.cs @@ -1,8 +1,8 @@ using System; -using static Ryujinx.Ava.Utilities.Configuration.ConfigurationState.UISection; +using static Ryujinx.Ava.Systems.Configuration.ConfigurationState.UISection; -namespace Ryujinx.Ava.Utilities.Configuration +namespace Ryujinx.Ava.Systems.Configuration { public enum FileTypes { @@ -17,12 +17,12 @@ namespace Ryujinx.Ava.Utilities.Configuration public static class FileTypesExtensions { /// - /// Gets the current value for the correlating FileType name. + /// Gets the current value for the correlating FileType name. /// - /// The name of the parameter to get the value of. + /// The name of the parameter to get the value of. /// The config instance to get the value from. /// The current value of the setting. Value is if the file type is to be shown on the games list, otherwise. - public static bool GetConfigValue(this FileTypes type, ShownFileTypeSettings config) => type switch + public static bool GetConfigValue(this FileTypes type, ConfigurationState.UISection.ShownFileTypeSettings config) => type switch { FileTypes.NSP => config.NSP.Value, FileTypes.PFS0 => config.PFS0.Value, diff --git a/src/Ryujinx/Utilities/Configuration/LoggerModule.cs b/src/Ryujinx/Systems/Configuration/LoggerModule.cs similarity index 98% rename from src/Ryujinx/Utilities/Configuration/LoggerModule.cs rename to src/Ryujinx/Systems/Configuration/LoggerModule.cs index f6c1be082..941556c43 100644 --- a/src/Ryujinx/Utilities/Configuration/LoggerModule.cs +++ b/src/Ryujinx/Systems/Configuration/LoggerModule.cs @@ -4,7 +4,7 @@ using Ryujinx.Common.Logging.Targets; using System; using System.IO; -namespace Ryujinx.Ava.Utilities.Configuration +namespace Ryujinx.Ava.Systems.Configuration { public static class LoggerModule { diff --git a/src/Ryujinx/Utilities/Configuration/System/Language.cs b/src/Ryujinx/Systems/Configuration/System/Language.cs similarity index 91% rename from src/Ryujinx/Utilities/Configuration/System/Language.cs rename to src/Ryujinx/Systems/Configuration/System/Language.cs index 81a9bd192..2afc36cb9 100644 --- a/src/Ryujinx/Utilities/Configuration/System/Language.cs +++ b/src/Ryujinx/Systems/Configuration/System/Language.cs @@ -1,7 +1,7 @@ using Ryujinx.Common.Utilities; using System.Text.Json.Serialization; -namespace Ryujinx.Ava.Utilities.Configuration.System +namespace Ryujinx.Ava.Systems.Configuration.System { [JsonConverter(typeof(TypedStringEnumConverter))] public enum Language diff --git a/src/Ryujinx/Utilities/Configuration/System/Region.cs b/src/Ryujinx/Systems/Configuration/System/Region.cs similarity index 84% rename from src/Ryujinx/Utilities/Configuration/System/Region.cs rename to src/Ryujinx/Systems/Configuration/System/Region.cs index ff3352e6a..7d440d48a 100644 --- a/src/Ryujinx/Utilities/Configuration/System/Region.cs +++ b/src/Ryujinx/Systems/Configuration/System/Region.cs @@ -1,7 +1,7 @@ using Ryujinx.Common.Utilities; using System.Text.Json.Serialization; -namespace Ryujinx.Ava.Utilities.Configuration.System +namespace Ryujinx.Ava.Systems.Configuration.System { [JsonConverter(typeof(TypedStringEnumConverter))] public enum Region diff --git a/src/Ryujinx/Utilities/Configuration/UI/ColumnSort.cs b/src/Ryujinx/Systems/Configuration/UI/ColumnSort.cs similarity index 73% rename from src/Ryujinx/Utilities/Configuration/UI/ColumnSort.cs rename to src/Ryujinx/Systems/Configuration/UI/ColumnSort.cs index e74ca0ec5..e5f54c799 100644 --- a/src/Ryujinx/Utilities/Configuration/UI/ColumnSort.cs +++ b/src/Ryujinx/Systems/Configuration/UI/ColumnSort.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Ava.Utilities.Configuration.UI +namespace Ryujinx.Ava.Systems.Configuration.UI { public struct ColumnSort { diff --git a/src/Ryujinx/Utilities/Configuration/UI/FocusLostType.cs b/src/Ryujinx/Systems/Configuration/UI/FocusLostType.cs similarity index 86% rename from src/Ryujinx/Utilities/Configuration/UI/FocusLostType.cs rename to src/Ryujinx/Systems/Configuration/UI/FocusLostType.cs index eea588539..2d0341022 100644 --- a/src/Ryujinx/Utilities/Configuration/UI/FocusLostType.cs +++ b/src/Ryujinx/Systems/Configuration/UI/FocusLostType.cs @@ -1,7 +1,7 @@ using Ryujinx.Common.Utilities; using System.Text.Json.Serialization; -namespace Ryujinx.Ava.Utilities.Configuration.UI +namespace Ryujinx.Ava.Systems.Configuration.UI { [JsonConverter(typeof(TypedStringEnumConverter))] public enum FocusLostType diff --git a/src/Ryujinx/Utilities/Configuration/UI/GuiColumns.cs b/src/Ryujinx/Systems/Configuration/UI/GuiColumns.cs similarity index 91% rename from src/Ryujinx/Utilities/Configuration/UI/GuiColumns.cs rename to src/Ryujinx/Systems/Configuration/UI/GuiColumns.cs index 0ab9885fe..a0021be96 100644 --- a/src/Ryujinx/Utilities/Configuration/UI/GuiColumns.cs +++ b/src/Ryujinx/Systems/Configuration/UI/GuiColumns.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Ava.Utilities.Configuration.UI +namespace Ryujinx.Ava.Systems.Configuration.UI { public struct GuiColumns { diff --git a/src/Ryujinx/Utilities/Configuration/UI/ShownFileTypes.cs b/src/Ryujinx/Systems/Configuration/UI/ShownFileTypes.cs similarity index 85% rename from src/Ryujinx/Utilities/Configuration/UI/ShownFileTypes.cs rename to src/Ryujinx/Systems/Configuration/UI/ShownFileTypes.cs index 9541b4885..bc32bd153 100644 --- a/src/Ryujinx/Utilities/Configuration/UI/ShownFileTypes.cs +++ b/src/Ryujinx/Systems/Configuration/UI/ShownFileTypes.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Ava.Utilities.Configuration.UI +namespace Ryujinx.Ava.Systems.Configuration.UI { public struct ShownFileTypes { diff --git a/src/Ryujinx/Utilities/Configuration/UI/UpdaterType.cs b/src/Ryujinx/Systems/Configuration/UI/UpdaterType.cs similarity index 83% rename from src/Ryujinx/Utilities/Configuration/UI/UpdaterType.cs rename to src/Ryujinx/Systems/Configuration/UI/UpdaterType.cs index 2ab17a497..06cf35d10 100644 --- a/src/Ryujinx/Utilities/Configuration/UI/UpdaterType.cs +++ b/src/Ryujinx/Systems/Configuration/UI/UpdaterType.cs @@ -1,7 +1,7 @@ using Ryujinx.Common.Utilities; using System.Text.Json.Serialization; -namespace Ryujinx.Ava.Utilities.Configuration.UI +namespace Ryujinx.Ava.Systems.Configuration.UI { [JsonConverter(typeof(TypedStringEnumConverter))] public enum UpdaterType diff --git a/src/Ryujinx/Utilities/Configuration/UI/WindowStartup.cs b/src/Ryujinx/Systems/Configuration/UI/WindowStartup.cs similarity index 85% rename from src/Ryujinx/Utilities/Configuration/UI/WindowStartup.cs rename to src/Ryujinx/Systems/Configuration/UI/WindowStartup.cs index 6c5e36879..be93ef4b6 100644 --- a/src/Ryujinx/Utilities/Configuration/UI/WindowStartup.cs +++ b/src/Ryujinx/Systems/Configuration/UI/WindowStartup.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Ava.Utilities.Configuration.UI +namespace Ryujinx.Ava.Systems.Configuration.UI { public struct WindowStartup { diff --git a/src/Ryujinx/Utilities/PlayReport/Analyzer.cs b/src/Ryujinx/Systems/PlayReport/Analyzer.cs similarity index 98% rename from src/Ryujinx/Utilities/PlayReport/Analyzer.cs rename to src/Ryujinx/Systems/PlayReport/Analyzer.cs index 8faf4fb31..d4198cdcf 100644 --- a/src/Ryujinx/Utilities/PlayReport/Analyzer.cs +++ b/src/Ryujinx/Systems/PlayReport/Analyzer.cs @@ -1,5 +1,5 @@ using Gommon; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using Ryujinx.Common.Logging; using System; using System.Collections.Generic; @@ -7,7 +7,7 @@ using System.Collections.ObjectModel; using System.Globalization; using System.Linq; -namespace Ryujinx.Ava.Utilities.PlayReport +namespace Ryujinx.Ava.Systems.PlayReport { /// /// The entrypoint for the Play Report analysis system. diff --git a/src/Ryujinx/Utilities/PlayReport/Delegates.cs b/src/Ryujinx/Systems/PlayReport/Delegates.cs similarity index 97% rename from src/Ryujinx/Utilities/PlayReport/Delegates.cs rename to src/Ryujinx/Systems/PlayReport/Delegates.cs index 92569d32e..b3496ec4d 100644 --- a/src/Ryujinx/Utilities/PlayReport/Delegates.cs +++ b/src/Ryujinx/Systems/PlayReport/Delegates.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.Ava.Utilities.PlayReport +namespace Ryujinx.Ava.Systems.PlayReport { /// /// The delegate type that powers single value formatters.
diff --git a/src/Ryujinx/Utilities/PlayReport/MatchedValues.cs b/src/Ryujinx/Systems/PlayReport/MatchedValues.cs similarity index 96% rename from src/Ryujinx/Utilities/PlayReport/MatchedValues.cs rename to src/Ryujinx/Systems/PlayReport/MatchedValues.cs index 46cae678a..025130758 100644 --- a/src/Ryujinx/Utilities/PlayReport/MatchedValues.cs +++ b/src/Ryujinx/Systems/PlayReport/MatchedValues.cs @@ -1,8 +1,8 @@ using MsgPack; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using System.Collections.Generic; -namespace Ryujinx.Ava.Utilities.PlayReport +namespace Ryujinx.Ava.Systems.PlayReport { public abstract class MatchedValue { diff --git a/src/Ryujinx/Utilities/PlayReport/PlayReports.Formatters.cs b/src/Ryujinx/Systems/PlayReport/PlayReports.Formatters.cs similarity index 99% rename from src/Ryujinx/Utilities/PlayReport/PlayReports.Formatters.cs rename to src/Ryujinx/Systems/PlayReport/PlayReports.Formatters.cs index b5215c693..5c5fb40f4 100644 --- a/src/Ryujinx/Utilities/PlayReport/PlayReports.Formatters.cs +++ b/src/Ryujinx/Systems/PlayReport/PlayReports.Formatters.cs @@ -5,7 +5,7 @@ using System.Buffers.Binary; using System.Collections.Generic; using System.Linq; -namespace Ryujinx.Ava.Utilities.PlayReport +namespace Ryujinx.Ava.Systems.PlayReport { public partial class PlayReports { diff --git a/src/Ryujinx/Utilities/PlayReport/PlayReports.cs b/src/Ryujinx/Systems/PlayReport/PlayReports.cs similarity index 99% rename from src/Ryujinx/Utilities/PlayReport/PlayReports.cs rename to src/Ryujinx/Systems/PlayReport/PlayReports.cs index c46ae2be5..e42ca185c 100644 --- a/src/Ryujinx/Utilities/PlayReport/PlayReports.cs +++ b/src/Ryujinx/Systems/PlayReport/PlayReports.cs @@ -1,6 +1,6 @@ using System; -namespace Ryujinx.Ava.Utilities.PlayReport +namespace Ryujinx.Ava.Systems.PlayReport { public static partial class PlayReports { diff --git a/src/Ryujinx/Utilities/PlayReport/Specs.cs b/src/Ryujinx/Systems/PlayReport/Specs.cs similarity index 97% rename from src/Ryujinx/Utilities/PlayReport/Specs.cs rename to src/Ryujinx/Systems/PlayReport/Specs.cs index c162d4c2c..2dd1c02ac 100644 --- a/src/Ryujinx/Utilities/PlayReport/Specs.cs +++ b/src/Ryujinx/Systems/PlayReport/Specs.cs @@ -1,10 +1,10 @@ using MsgPack; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using System; using System.Collections.Generic; using System.Linq; -namespace Ryujinx.Ava.Utilities.PlayReport +namespace Ryujinx.Ava.Systems.PlayReport { /// /// A mapping of title IDs to value formatter specs. @@ -103,7 +103,7 @@ namespace Ryujinx.Ava.Utilities.PlayReport /// matching a specific set of keys that could exist in a Play Report for the previously specified title IDs. ///

/// The 'Sparse' multi-value formatters do not require every key to be present. - /// If you need this requirement, use . + /// If you need this requirement, use . ///
/// The key names to match. /// The function which can format the values. @@ -118,7 +118,7 @@ namespace Ryujinx.Ava.Utilities.PlayReport /// matching a specific set of keys that could exist in a Play Report for the previously specified title IDs. ///

/// The 'Sparse' multi-value formatters do not require every key to be present. - /// If you need this requirement, use . + /// If you need this requirement, use . ///
/// The resolution priority of this value formatter. Higher resolves sooner. /// The key names to match. diff --git a/src/Ryujinx/Utilities/PlayReport/Value.cs b/src/Ryujinx/Systems/PlayReport/Value.cs similarity index 99% rename from src/Ryujinx/Utilities/PlayReport/Value.cs rename to src/Ryujinx/Systems/PlayReport/Value.cs index b3108a41e..1c738c213 100644 --- a/src/Ryujinx/Utilities/PlayReport/Value.cs +++ b/src/Ryujinx/Systems/PlayReport/Value.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Generic; using System.Linq; -namespace Ryujinx.Ava.Utilities.PlayReport +namespace Ryujinx.Ava.Systems.PlayReport { /// /// The base input data to a ValueFormatter delegate, diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs index a8a6f24c6..18252f337 100644 --- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs @@ -7,7 +7,7 @@ using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common; using Ryujinx.HLE; using Ryujinx.HLE.HOS.Applets; diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs index cd6700aea..9230cb78b 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs @@ -12,8 +12,7 @@ using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Views.Misc; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; -using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.Ava.Utilities.Compat; +using Ryujinx.Ava.Systems.AppLibrary; using Ryujinx.Common.Configuration; using Ryujinx.Common.Helper; using Ryujinx.HLE.HOS; diff --git a/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs b/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs index 0ceaa6c4c..93f6b4c3c 100644 --- a/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs +++ b/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs @@ -1,5 +1,5 @@ using Avalonia.Interactivity; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; namespace Ryujinx.Ava.UI.Helpers { diff --git a/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs b/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs index 7694e8883..1dca0d164 100644 --- a/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs +++ b/src/Ryujinx/UI/Helpers/Converters/MultiplayerInfoConverter.cs @@ -2,7 +2,7 @@ using Avalonia.Data.Converters; using Avalonia.Markup.Xaml; using Gommon; using Ryujinx.Ava.Common.Locale; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using System; using System.Globalization; using System.Text; diff --git a/src/Ryujinx/UI/Helpers/LoggerAdapter.cs b/src/Ryujinx/UI/Helpers/LoggerAdapter.cs index ba317e74a..902d3966f 100644 --- a/src/Ryujinx/UI/Helpers/LoggerAdapter.cs +++ b/src/Ryujinx/UI/Helpers/LoggerAdapter.cs @@ -1,7 +1,7 @@ using Avalonia.Logging; using Avalonia.Utilities; using Gommon; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common.Logging; using System; using System.Text; diff --git a/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs b/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs index f2d27f2df..3808ae6a2 100644 --- a/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs +++ b/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs @@ -1,4 +1,4 @@ -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using System; using System.Collections.Generic; diff --git a/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs b/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs index d7ae51e96..321bde09b 100644 --- a/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs +++ b/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs @@ -1,4 +1,4 @@ -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using System; using System.Collections.Generic; diff --git a/src/Ryujinx/UI/Models/SaveModel.cs b/src/Ryujinx/UI/Models/SaveModel.cs index d50aabc4e..1a4718ddf 100644 --- a/src/Ryujinx/UI/Models/SaveModel.cs +++ b/src/Ryujinx/UI/Models/SaveModel.cs @@ -3,7 +3,7 @@ using LibHac.Fs; using LibHac.Ncm; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Utilities; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using Ryujinx.HLE.FileSystem; using System.IO; using System.Linq; diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs index 21c39967f..7b642bb9d 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs @@ -1,7 +1,7 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Platform; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Helper; using SPB.Graphics; diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs index 81a94d6c4..e788272f6 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs @@ -1,5 +1,5 @@ using OpenTK.Graphics.OpenGL; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; diff --git a/src/Ryujinx/UI/Renderer/RendererHost.cs b/src/Ryujinx/UI/Renderer/RendererHost.cs index 7352dbdb5..fd7124f2b 100644 --- a/src/Ryujinx/UI/Renderer/RendererHost.cs +++ b/src/Ryujinx/UI/Renderer/RendererHost.cs @@ -1,7 +1,7 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Media; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common.Configuration; using System; diff --git a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs index 7a63c3391..07aa84c04 100644 --- a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs @@ -5,7 +5,7 @@ using CommunityToolkit.Mvvm.ComponentModel; using Gommon; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using System; namespace Ryujinx.Ava.UI.ViewModels diff --git a/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs b/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs index 9c37368de..c8d648b99 100644 --- a/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs +++ b/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs @@ -1,4 +1,4 @@ -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using System; namespace Ryujinx.Ava.UI.ViewModels diff --git a/src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs b/src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs index 33c75bc62..4bffcb7d3 100644 --- a/src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/ApplicationDataViewModel.cs @@ -1,7 +1,7 @@ using Gommon; using Ryujinx.Ava.Common.Locale; -using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.Ava.Utilities.PlayReport; +using Ryujinx.Ava.Systems.AppLibrary; +using Ryujinx.Ava.Systems.PlayReport; namespace Ryujinx.Ava.UI.ViewModels { diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs b/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs similarity index 94% rename from src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs rename to src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs index 721a36194..650223e1f 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs @@ -1,10 +1,10 @@ using Gommon; -using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems; +using Ryujinx.Ava.Systems.AppLibrary; using System.Collections.Generic; using System.Linq; -namespace Ryujinx.Ava.Utilities.Compat +namespace Ryujinx.Ava.UI.ViewModels { public class CompatibilityViewModel : BaseModel { diff --git a/src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs b/src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs index b486aa766..e236ac737 100644 --- a/src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs @@ -1,6 +1,6 @@ using CommunityToolkit.Mvvm.ComponentModel; using Ryujinx.Ava.Common.Models; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using System.Linq; namespace Ryujinx.Ava.UI.ViewModels diff --git a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs index a16a06ff5..dc1e928f1 100644 --- a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -7,7 +7,7 @@ using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Helpers; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index b324d39e8..693c99ff1 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -10,7 +10,7 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Windows; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; diff --git a/src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs index 521b13859..effd07904 100644 --- a/src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/LedInputViewModel.cs @@ -3,7 +3,7 @@ using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Humanizer; using Ryujinx.Ava.UI.Helpers; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using System.Globalization; namespace Ryujinx.Ava.UI.ViewModels.Input diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 2c42a1a1d..1e7480b11 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -23,8 +23,8 @@ using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.Models.Generic; using Ryujinx.Ava.UI.Renderer; using Ryujinx.Ava.UI.Windows; -using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.AppLibrary; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Helper; diff --git a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs index cda7e34cf..081ca0912 100644 --- a/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/ModManagerViewModel.cs @@ -7,7 +7,7 @@ using Gommon; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; diff --git a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs index 167b8a857..816e85c98 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs @@ -1,6 +1,6 @@ using CommunityToolkit.Mvvm.ComponentModel; using Gommon; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; namespace Ryujinx.Ava.UI.ViewModels { diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index d0a6c6d8a..aa6b34922 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -12,9 +12,9 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Windows; -using Ryujinx.Ava.Utilities.Configuration; -using Ryujinx.Ava.Utilities.Configuration.System; -using Ryujinx.Ava.Utilities.Configuration.UI; +using Ryujinx.Ava.Systems.Configuration; +using Ryujinx.Ava.Systems.Configuration.System; +using Ryujinx.Ava.Systems.Configuration.UI; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.GraphicsDriver; diff --git a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs index 2b88aceed..7ecfc1c87 100644 --- a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs @@ -6,7 +6,7 @@ using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Helpers; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs index 560f852db..a48efcbd5 100644 --- a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs @@ -6,7 +6,7 @@ using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Helpers; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using Ryujinx.Common.Utilities; using System.Collections.Generic; using System.Collections.ObjectModel; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 6c2cf6cae..30a195747 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -11,9 +11,9 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; -using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.Ava.Utilities.Compat; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.AppLibrary; +using Ryujinx.Ava.Systems.Configuration; +using Ryujinx.Ava.UI.Views.Misc; using Ryujinx.Common; using Ryujinx.Common.Helper; using Ryujinx.Common.Utilities; diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs index 5a023910c..f8c4c48a2 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs @@ -7,7 +7,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; -using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; diff --git a/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs b/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs index 02020c78c..37b2aaf60 100644 --- a/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs +++ b/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs @@ -2,15 +2,13 @@ using Avalonia.Input.Platform; using Avalonia.Interactivity; using Avalonia.Layout; -using Avalonia.Styling; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; -using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.Ava.Utilities.Compat; +using Ryujinx.Ava.Systems.AppLibrary; using System.Linq; using System.Threading.Tasks; diff --git a/src/Ryujinx/UI/Views/Misc/ApplicationGridView.axaml.cs b/src/Ryujinx/UI/Views/Misc/ApplicationGridView.axaml.cs index bb7d62c8f..c1cf7a66b 100644 --- a/src/Ryujinx/UI/Views/Misc/ApplicationGridView.axaml.cs +++ b/src/Ryujinx/UI/Views/Misc/ApplicationGridView.axaml.cs @@ -4,7 +4,7 @@ using Avalonia.Interactivity; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Systems.AppLibrary; using System; namespace Ryujinx.Ava.UI.Views.Misc diff --git a/src/Ryujinx/UI/Views/Misc/ApplicationListView.axaml.cs b/src/Ryujinx/UI/Views/Misc/ApplicationListView.axaml.cs index e393d0836..e7f476158 100644 --- a/src/Ryujinx/UI/Views/Misc/ApplicationListView.axaml.cs +++ b/src/Ryujinx/UI/Views/Misc/ApplicationListView.axaml.cs @@ -5,8 +5,7 @@ using Avalonia.Interactivity; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.Ava.Utilities.Compat; +using Ryujinx.Ava.Systems.AppLibrary; using System; using System.Linq; diff --git a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml b/src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml similarity index 91% rename from src/Ryujinx/Utilities/Compat/CompatibilityList.axaml rename to src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml index ef70a23d1..a9365d690 100644 --- a/src/Ryujinx/Utilities/Compat/CompatibilityList.axaml +++ b/src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml @@ -1,16 +1,17 @@  + x:Class="Ryujinx.Ava.UI.Views.Misc.CompatibilityList" + x:DataType="viewModels:CompatibilityViewModel"> - + - + Date: Tue, 4 Mar 2025 18:23:57 -0600 Subject: [PATCH 06/25] misc: chore: Move Fs Integrity Checks getter to ConfigurationState --- src/Ryujinx/Common/ApplicationHelper.cs | 6 +----- src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs | 6 +----- .../Systems/Configuration/ConfigurationState.Model.cs | 8 ++++++-- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 5 +---- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 6 +----- src/Ryujinx/Utilities/TitleUpdatesHelper.cs | 6 +----- 6 files changed, 11 insertions(+), 26 deletions(-) diff --git a/src/Ryujinx/Common/ApplicationHelper.cs b/src/Ryujinx/Common/ApplicationHelper.cs index c530ef459..0b81e8cff 100644 --- a/src/Ryujinx/Common/ApplicationHelper.cs +++ b/src/Ryujinx/Common/ApplicationHelper.cs @@ -216,11 +216,7 @@ namespace Ryujinx.Ava.Common return; } - IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks - ? IntegrityCheckLevel.ErrorOnInvalid - : IntegrityCheckLevel.None; - - (Nca updatePatchNca, _) = mainNca.GetUpdateData(_virtualFileSystem, checkLevel, programIndex, out _); + (Nca updatePatchNca, _) = mainNca.GetUpdateData(_virtualFileSystem, ConfigurationState.Instance.System.IntegrityCheckLevel, programIndex, out _); if (updatePatchNca is not null) { patchNca = updatePatchNca; diff --git a/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs index fa1d427cb..b7321d6c1 100644 --- a/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Systems/AppLibrary/ApplicationLibrary.cs @@ -618,15 +618,11 @@ namespace Ryujinx.Ava.Systems.AppLibrary case ".xci": case ".nsp": { - IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks - ? IntegrityCheckLevel.ErrorOnInvalid - : IntegrityCheckLevel.None; - using IFileSystem pfs = PartitionFileSystemUtils.OpenApplicationFileSystem(filePath, _virtualFileSystem); Dictionary updates = - pfs.GetContentData(ContentMetaType.Patch, _virtualFileSystem, checkLevel); + pfs.GetContentData(ContentMetaType.Patch, _virtualFileSystem, ConfigurationState.Instance.System.IntegrityCheckLevel); if (updates.Count == 0) { diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs index 1a4992444..4d8a75de9 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs @@ -352,6 +352,10 @@ namespace Ryujinx.Ava.Systems.Configuration /// public ReactiveObject EnableFsIntegrityChecks { get; private set; } + public IntegrityCheckLevel IntegrityCheckLevel => EnableFsIntegrityChecks + ? IntegrityCheckLevel.ErrorOnInvalid + : IntegrityCheckLevel.None; + /// /// Enables FS access log output to the console. Possible modes are 0-3 /// @@ -843,8 +847,8 @@ namespace Ryujinx.Ava.Systems.Configuration public HleConfiguration CreateHleConfiguration() => new( System.DramSize, - (SystemLanguage)System.Language.Value, - (RegionCode)System.Region.Value, + System.Language.Value.ToHLE(), + System.Region.Value.ToHLE(), Graphics.VSyncMode, System.EnableDockedMode, System.EnablePtc, diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs index a5ccb2339..2cdca2241 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs @@ -38,12 +38,9 @@ namespace Ryujinx.Ava.UI.Windows MinHeight = 650; LoadedCheats = []; - IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks - ? IntegrityCheckLevel.ErrorOnInvalid - : IntegrityCheckLevel.None; Heading = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.CheatWindowHeading, titleName, titleId.ToUpper()); - BuildId = ApplicationData.GetBuildId(virtualFileSystem, checkLevel, titlePath); + BuildId = ApplicationData.GetBuildId(virtualFileSystem, ConfigurationState.Instance.System.IntegrityCheckLevel, titlePath); InitializeComponent(); diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 6cf5024de..b795902ef 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -273,11 +273,7 @@ namespace Ryujinx.Ava.UI.Windows LibHacHorizonManager.InitializeBcatServer(); LibHacHorizonManager.InitializeSystemClients(); - IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks - ? IntegrityCheckLevel.ErrorOnInvalid - : IntegrityCheckLevel.None; - - ApplicationLibrary = new ApplicationLibrary(VirtualFileSystem, checkLevel) + ApplicationLibrary = new ApplicationLibrary(VirtualFileSystem, ConfigurationState.Instance.System.IntegrityCheckLevel) { DesiredLanguage = ConfigurationState.Instance.System.Language, }; diff --git a/src/Ryujinx/Utilities/TitleUpdatesHelper.cs b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs index 21a50a93b..5fc9b609a 100644 --- a/src/Ryujinx/Utilities/TitleUpdatesHelper.cs +++ b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs @@ -81,10 +81,6 @@ namespace Ryujinx.Ava.Utilities { List<(TitleUpdateModel, bool IsSelected)> result = []; - IntegrityCheckLevel checkLevel = ConfigurationState.Instance.System.EnableFsIntegrityChecks - ? IntegrityCheckLevel.ErrorOnInvalid - : IntegrityCheckLevel.None; - foreach (string path in titleUpdateMetadata.Paths) { if (!File.Exists(path)) @@ -95,7 +91,7 @@ namespace Ryujinx.Ava.Utilities using IFileSystem pfs = PartitionFileSystemUtils.OpenApplicationFileSystem(path, vfs); Dictionary updates = - pfs.GetContentData(ContentMetaType.Patch, vfs, checkLevel); + pfs.GetContentData(ContentMetaType.Patch, vfs, ConfigurationState.Instance.System.IntegrityCheckLevel); if (!updates.TryGetValue(applicationIdBase, out ContentMetaData content)) continue; From 27cdf876a243798a90516c398a47d45f2506679e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Mar 2025 18:24:24 -0600 Subject: [PATCH 07/25] misc: chore: make some cleaner extensions for converting to/from ui/hle enums --- src/Ryujinx/Headless/Options.cs | 7 ++++--- src/Ryujinx/Program.cs | 9 +++++---- src/Ryujinx/Systems/Configuration/System/Language.cs | 9 +++++++++ src/Ryujinx/Systems/Configuration/System/Region.cs | 9 +++++++++ 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs index 97670e44f..8305cd311 100644 --- a/src/Ryujinx/Headless/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -1,6 +1,7 @@ using CommandLine; using Gommon; using Ryujinx.Ava.Systems.Configuration; +using Ryujinx.Ava.Systems.Configuration.System; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.HLE; @@ -37,7 +38,7 @@ namespace Ryujinx.Headless EnableInternetAccess = configurationState.System.EnableInternetAccess; if (NeedsOverride(nameof(DisableFsIntegrityChecks))) - DisableFsIntegrityChecks = configurationState.System.EnableFsIntegrityChecks; + DisableFsIntegrityChecks = !configurationState.System.EnableFsIntegrityChecks; if (NeedsOverride(nameof(FsGlobalAccessLogMode))) FsGlobalAccessLogMode = configurationState.System.FsGlobalAccessLogMode; @@ -58,10 +59,10 @@ namespace Ryujinx.Headless DisableDockedMode = !configurationState.System.EnableDockedMode; if (NeedsOverride(nameof(SystemLanguage))) - SystemLanguage = (SystemLanguage)(int)configurationState.System.Language.Value; + SystemLanguage = configurationState.System.Language.Value.ToHLE(); if (NeedsOverride(nameof(SystemRegion))) - SystemRegion = (RegionCode)(int)configurationState.System.Region.Value; + SystemRegion = configurationState.System.Region.Value.ToHLE(); if (NeedsOverride(nameof(SystemTimeZone))) SystemTimeZone = configurationState.System.TimeZone; diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index a8a51e70d..c24725b5c 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -9,6 +9,7 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Systems.Configuration; +using Ryujinx.Ava.Systems.Configuration.System; using Ryujinx.Ava.Utilities.SystemInfo; using Ryujinx.Common; using Ryujinx.Common.Configuration; @@ -282,16 +283,16 @@ namespace Ryujinx.Ava // Check if region was overridden. if (CommandLineState.OverrideSystemRegion is not null) - if (Enum.TryParse(CommandLineState.OverrideSystemRegion, true, out Ryujinx.HLE.HOS.SystemState.RegionCode result)) + if (Enum.TryParse(CommandLineState.OverrideSystemRegion, true, out HLE.HOS.SystemState.RegionCode result)) { - ConfigurationState.Instance.System.Region.Value = (Systems.Configuration.System.Region)result; + ConfigurationState.Instance.System.Region.Value = result.ToUI(); } //Check if language was overridden. if (CommandLineState.OverrideSystemLanguage is not null) - if (Enum.TryParse(CommandLineState.OverrideSystemLanguage, true, out Ryujinx.HLE.HOS.SystemState.SystemLanguage result)) + if (Enum.TryParse(CommandLineState.OverrideSystemLanguage, true, out HLE.HOS.SystemState.SystemLanguage result)) { - ConfigurationState.Instance.System.Language.Value = (Systems.Configuration.System.Language)result; + ConfigurationState.Instance.System.Language.Value = result.ToUI(); } // Check if hardware-acceleration was overridden. diff --git a/src/Ryujinx/Systems/Configuration/System/Language.cs b/src/Ryujinx/Systems/Configuration/System/Language.cs index 2afc36cb9..ff1476b73 100644 --- a/src/Ryujinx/Systems/Configuration/System/Language.cs +++ b/src/Ryujinx/Systems/Configuration/System/Language.cs @@ -25,4 +25,13 @@ namespace Ryujinx.Ava.Systems.Configuration.System TraditionalChinese, BrazilianPortuguese, } + + public static class LanguageEnumHelper + { + public static Language ToUI(this HLE.HOS.SystemState.SystemLanguage hleLanguage) + => (Language)hleLanguage; + + public static HLE.HOS.SystemState.SystemLanguage ToHLE(this Language uiLanguage) + => (HLE.HOS.SystemState.SystemLanguage)uiLanguage; + } } diff --git a/src/Ryujinx/Systems/Configuration/System/Region.cs b/src/Ryujinx/Systems/Configuration/System/Region.cs index 7d440d48a..0089f073c 100644 --- a/src/Ryujinx/Systems/Configuration/System/Region.cs +++ b/src/Ryujinx/Systems/Configuration/System/Region.cs @@ -14,4 +14,13 @@ namespace Ryujinx.Ava.Systems.Configuration.System Korea, Taiwan, } + + public static class RegionEnumHelper + { + public static Region ToUI(this HLE.HOS.SystemState.RegionCode hleRegion) + => (Region)hleRegion; + + public static HLE.HOS.SystemState.RegionCode ToHLE(this Region uiRegion) + => (HLE.HOS.SystemState.RegionCode)uiRegion; + } } From a23c6bf547320a1abbeb1680fe595244b115ebc0 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Tue, 4 Mar 2025 19:07:39 -0600 Subject: [PATCH 08/25] misc: chore: [ci skip] fix redundant qualified name --- src/Ryujinx/Systems/Configuration/FileTypes.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx/Systems/Configuration/FileTypes.cs b/src/Ryujinx/Systems/Configuration/FileTypes.cs index 4f27255b5..70517683b 100644 --- a/src/Ryujinx/Systems/Configuration/FileTypes.cs +++ b/src/Ryujinx/Systems/Configuration/FileTypes.cs @@ -17,12 +17,12 @@ namespace Ryujinx.Ava.Systems.Configuration public static class FileTypesExtensions { /// - /// Gets the current value for the correlating FileType name. + /// Gets the current value for the correlating FileType name. /// - /// The name of the parameter to get the value of. + /// The name of the parameter to get the value of. /// The config instance to get the value from. /// The current value of the setting. Value is if the file type is to be shown on the games list, otherwise. - public static bool GetConfigValue(this FileTypes type, ConfigurationState.UISection.ShownFileTypeSettings config) => type switch + public static bool GetConfigValue(this FileTypes type, ShownFileTypeSettings config) => type switch { FileTypes.NSP => config.NSP.Value, FileTypes.PFS0 => config.PFS0.Value, From 2b068269221ee5b4b39f37a44605ca681c7e4cd1 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 02:08:36 -0600 Subject: [PATCH 09/25] UI: Rework the compatibility list into a Window --- src/Ryujinx/Assets/Styles/Styles.xaml | 2 +- src/Ryujinx/Assets/locales.json | 50 ++++++++++++ src/Ryujinx/Common/LocaleManager.cs | 3 + .../Controls/ApplicationContextMenu.axaml.cs | 2 +- .../UI/ViewModels/CompatibilityViewModel.cs | 1 + .../UI/Views/Main/MainMenuBarView.axaml.cs | 2 +- .../Views/Misc/ApplicationDataView.axaml.cs | 2 +- .../Views/Misc/ApplicationListView.axaml.cs | 3 +- .../UI/Views/Misc/CompatibilityList.axaml.cs | 48 ------------ .../CompatibilityListWindow.axaml} | 78 +++++++++---------- .../Windows/CompatibilityListWindow.axaml.cs | 50 ++++++++++++ 11 files changed, 149 insertions(+), 92 deletions(-) delete mode 100644 src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml.cs rename src/Ryujinx/UI/{Views/Misc/CompatibilityList.axaml => Windows/CompatibilityListWindow.axaml} (53%) create mode 100644 src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs diff --git a/src/Ryujinx/Assets/Styles/Styles.xaml b/src/Ryujinx/Assets/Styles/Styles.xaml index eb40e853c..112815fb5 100644 --- a/src/Ryujinx/Assets/Styles/Styles.xaml +++ b/src/Ryujinx/Assets/Styles/Styles.xaml @@ -440,7 +440,7 @@ 13 26 28 - 900 + 700 756 diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index d69c3ee9b..e64cae4d5 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -23822,6 +23822,31 @@ "zh_TW": "上次更新時間: {0}" } }, + { + "ID": "CompatibilityListTitle", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Compatibility List - {0} entries", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "CompatibilityListWarning", "Translations": { @@ -23872,6 +23897,31 @@ "zh_TW": "搜尋相容性列表紀錄..." } }, + { + "ID": "CompatibilityListSearchBoxWatermarkWithCount", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Search {0} compatibility entries...", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "Søk i {0} kompatibilitetsoppføringer...", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "CompatibilityListOpen", "Translations": { diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index f5194dd13..30b055d8b 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -1,4 +1,5 @@ using Gommon; +using Ryujinx.Ava.Systems; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Common; @@ -55,6 +56,8 @@ namespace Ryujinx.Ava.Common.Locale SetDynamicValues(LocaleKeys.RyujinxConfirm, RyujinxApp.FullAppName); SetDynamicValues(LocaleKeys.RyujinxUpdater, RyujinxApp.FullAppName); SetDynamicValues(LocaleKeys.RyujinxRebooter, RyujinxApp.FullAppName); + SetDynamicValues(LocaleKeys.CompatibilityListSearchBoxWatermarkWithCount, CompatibilityCsv.Entries.Length); + } public string this[LocaleKeys key] diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs index 9230cb78b..9635582c8 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs @@ -407,7 +407,7 @@ namespace Ryujinx.Ava.UI.Controls public async void OpenApplicationCompatibility_Click(object sender, RoutedEventArgs args) { if (sender is MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel }) - await CompatibilityList.Show(viewModel.SelectedApplication.IdString); + await CompatibilityListWindow.Show(viewModel.SelectedApplication.IdString); } public async void OpenApplicationData_Click(object sender, RoutedEventArgs args) diff --git a/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs b/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs index 650223e1f..d6c10044d 100644 --- a/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/CompatibilityViewModel.cs @@ -1,6 +1,7 @@ using Gommon; using Ryujinx.Ava.Systems; using Ryujinx.Ava.Systems.AppLibrary; +using Ryujinx.Ava.UI.Windows; using System.Collections.Generic; using System.Linq; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 30a195747..13c2f4c8a 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -51,7 +51,7 @@ namespace Ryujinx.Ava.UI.Views.Main UninstallFileTypesMenuItem.Command = Commands.Create(UninstallFileTypes); XciTrimmerMenuItem.Command = Commands.Create(XCITrimmerWindow.Show); AboutWindowMenuItem.Command = Commands.Create(AboutWindow.Show); - CompatibilityListMenuItem.Command = Commands.Create(() => CompatibilityList.Show()); + CompatibilityListMenuItem.Command = Commands.Create(() => CompatibilityListWindow.Show()); UpdateMenuItem.Command = MainWindowViewModel.UpdateCommand; diff --git a/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs b/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs index 37b2aaf60..796123362 100644 --- a/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs +++ b/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs @@ -44,7 +44,7 @@ namespace Ryujinx.Ava.UI.Views.Misc if (RyujinxApp.AppLifetime.Windows.TryGetFirst(x => x is ContentDialogOverlayWindow, out Window window)) window.Close(ContentDialogResult.None); - await CompatibilityList.Show((string)playabilityLabel.Tag); + await CompatibilityListWindow.Show((string)playabilityLabel.Tag); } private async void IdString_OnClick(object sender, RoutedEventArgs e) diff --git a/src/Ryujinx/UI/Views/Misc/ApplicationListView.axaml.cs b/src/Ryujinx/UI/Views/Misc/ApplicationListView.axaml.cs index e7f476158..aa87a8c9a 100644 --- a/src/Ryujinx/UI/Views/Misc/ApplicationListView.axaml.cs +++ b/src/Ryujinx/UI/Views/Misc/ApplicationListView.axaml.cs @@ -6,6 +6,7 @@ using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Systems.AppLibrary; +using Ryujinx.Ava.UI.Windows; using System; using System.Linq; @@ -35,7 +36,7 @@ namespace Ryujinx.Ava.UI.Views.Misc if (sender is not Button { Content: TextBlock playabilityLabel }) return; - await CompatibilityList.Show((string)playabilityLabel.Tag); + await CompatibilityListWindow.Show((string)playabilityLabel.Tag); } private async void IdString_OnClick(object sender, RoutedEventArgs e) diff --git a/src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml.cs b/src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml.cs deleted file mode 100644 index 29c9700e3..000000000 --- a/src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml.cs +++ /dev/null @@ -1,48 +0,0 @@ -using Avalonia.Controls; -using Avalonia.Styling; -using FluentAvalonia.UI.Controls; -using Ryujinx.Ava.Common.Locale; -using Ryujinx.Ava.UI.Helpers; -using Ryujinx.Ava.UI.ViewModels; -using System.Threading.Tasks; - -namespace Ryujinx.Ava.UI.Views.Misc -{ - public partial class CompatibilityList : UserControl - { - public static async Task Show(string titleId = null) - { - ContentDialog contentDialog = new() - { - PrimaryButtonText = string.Empty, - SecondaryButtonText = string.Empty, - CloseButtonText = LocaleManager.Instance[LocaleKeys.SettingsButtonClose], - Content = new CompatibilityList - { - DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary), - SearchBox = { - Text = titleId ?? "" - } - } - }; - - await ContentDialogHelper.ShowAsync(contentDialog.ApplyStyles()); - } - - public CompatibilityList() - { - InitializeComponent(); - } - - private void TextBox_OnTextChanged(object sender, TextChangedEventArgs e) - { - if (DataContext is not CompatibilityViewModel cvm) - return; - - if (sender is not TextBox searchBox) - return; - - cvm.Search(searchBox.Text); - } - } -} diff --git a/src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml similarity index 53% rename from src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml rename to src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml index a9365d690..e3347252f 100644 --- a/src/Ryujinx/UI/Views/Misc/CompatibilityList.axaml +++ b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml @@ -1,82 +1,82 @@ - - + - - - - - - + + + + + + + - - + + - + - - + - + - + diff --git a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs new file mode 100644 index 000000000..dde94f63b --- /dev/null +++ b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs @@ -0,0 +1,50 @@ +using Avalonia.Controls; +using Avalonia.Styling; +using FluentAvalonia.UI.Controls; +using FluentAvalonia.UI.Windowing; +using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Systems.Configuration; +using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.Ava.UI.Windows; +using System.Threading.Tasks; + +namespace Ryujinx.Ava.UI.Windows +{ + public partial class CompatibilityListWindow : StyleableAppWindow + { + public static Task Show(string titleId = null) => + ShowAsync(new CompatibilityListWindow + { + DataContext = new CompatibilityViewModel(RyujinxApp.MainWindow.ViewModel.ApplicationLibrary), + SearchBoxFlush = { Text = titleId ?? string.Empty }, + SearchBoxNormal = { Text = titleId ?? string.Empty } + }); + + public CompatibilityListWindow() + { + Title = RyujinxApp.FormatTitle(LocaleKeys.CompatibilityListTitle); + + TitleBar.ExtendsContentIntoTitleBar = !ConfigurationState.Instance.ShowTitleBar; + TitleBar.TitleBarHitTestType = ConfigurationState.Instance.ShowTitleBar ? TitleBarHitTestType.Simple : TitleBarHitTestType.Complex; + TitleBar.Height = 37; + + InitializeComponent(); + + RyuLogo.Source = MainWindowViewModel.IconBitmap; + FlushControls.IsVisible = !ConfigurationState.Instance.ShowTitleBar; + NormalControls.IsVisible = ConfigurationState.Instance.ShowTitleBar; + } + + private void TextBox_OnTextChanged(object sender, TextChangedEventArgs e) + { + if (DataContext is not CompatibilityViewModel cvm) + return; + + if (sender is not TextBox searchBox) + return; + + cvm.Search(searchBox.Text); + } + } +} From bed3835718722f876d91500b04e5112479f87585 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 02:23:40 -0600 Subject: [PATCH 10/25] UI: fix ID copying from the Show Game Info popup --- src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs | 5 +---- src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs | 2 ++ 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs b/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs index 796123362..dc9dd527c 100644 --- a/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs +++ b/src/Ryujinx/UI/Views/Misc/ApplicationDataView.axaml.cs @@ -49,16 +49,13 @@ namespace Ryujinx.Ava.UI.Views.Misc private async void IdString_OnClick(object sender, RoutedEventArgs e) { - if (DataContext is not MainWindowViewModel mwvm) - return; - if (sender is not Button { Content: TextBlock idText }) return; if (!RyujinxApp.IsClipboardAvailable(out IClipboard clipboard)) return; - ApplicationData appData = mwvm.Applications.FirstOrDefault(it => it.IdString == idText.Text); + ApplicationData appData = RyujinxApp.MainWindow.ViewModel.Applications.FirstOrDefault(it => it.IdString == idText.Text); if (appData is null) return; diff --git a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs index dde94f63b..804f130d1 100644 --- a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs @@ -36,6 +36,8 @@ namespace Ryujinx.Ava.UI.Windows NormalControls.IsVisible = ConfigurationState.Instance.ShowTitleBar; } + // ReSharper disable once UnusedMember.Local + // its referenced in the axaml but rider keeps yelling at me that its unused so private void TextBox_OnTextChanged(object sender, TextChangedEventArgs e) { if (DataContext is not CompatibilityViewModel cvm) From dd02c8e25dc0a715993331b4179c2602ceb30d2e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 02:34:34 -0600 Subject: [PATCH 11/25] misc: chore: add helper constructor parameter to StyleableWindow to auto use custom title bar based on configuration --- src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs | 4 +--- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 5 +---- src/Ryujinx/UI/Windows/StyleableWindow.cs | 9 ++++++++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs index 804f130d1..8b7954ee0 100644 --- a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs @@ -21,12 +21,10 @@ namespace Ryujinx.Ava.UI.Windows SearchBoxNormal = { Text = titleId ?? string.Empty } }); - public CompatibilityListWindow() + public CompatibilityListWindow() : base(useCustomTitleBar: true) { Title = RyujinxApp.FormatTitle(LocaleKeys.CompatibilityListTitle); - TitleBar.ExtendsContentIntoTitleBar = !ConfigurationState.Instance.ShowTitleBar; - TitleBar.TitleBarHitTestType = ConfigurationState.Instance.ShowTitleBar ? TitleBarHitTestType.Simple : TitleBarHitTestType.Complex; TitleBar.Height = 37; InitializeComponent(); diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index b795902ef..512a93f26 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -76,7 +76,7 @@ namespace Ryujinx.Ava.UI.Windows public readonly double StatusBarHeight; public readonly double MenuBarHeight; - public MainWindow() + public MainWindow() : base(useCustomTitleBar: true) { DataContext = ViewModel = new MainWindowViewModel { @@ -90,9 +90,6 @@ namespace Ryujinx.Ava.UI.Windows ViewModel.Title = RyujinxApp.FormatTitle(); - TitleBar.ExtendsContentIntoTitleBar = !ConfigurationState.Instance.ShowTitleBar; - TitleBar.TitleBarHitTestType = (ConfigurationState.Instance.ShowTitleBar) ? TitleBarHitTestType.Simple : TitleBarHitTestType.Complex; - // NOTE: Height of MenuBar and StatusBar is not usable here, since it would still be 0 at this point. StatusBarHeight = StatusBarView.StatusBar.MinHeight; MenuBarHeight = MenuBar.MinHeight; diff --git a/src/Ryujinx/UI/Windows/StyleableWindow.cs b/src/Ryujinx/UI/Windows/StyleableWindow.cs index 0f3291226..294a36851 100644 --- a/src/Ryujinx/UI/Windows/StyleableWindow.cs +++ b/src/Ryujinx/UI/Windows/StyleableWindow.cs @@ -6,6 +6,7 @@ using Avalonia.Media; using Avalonia.Platform; using FluentAvalonia.UI.Windowing; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Ava.UI.ViewModels; using System.Threading.Tasks; @@ -21,7 +22,7 @@ namespace Ryujinx.Ava.UI.Windows await appWindow.ShowDialog(owner ?? RyujinxApp.MainWindow); } - protected StyleableAppWindow() + protected StyleableAppWindow(bool useCustomTitleBar = false) { WindowStartupLocation = WindowStartupLocation.CenterOwner; TransparencyLevelHint = [WindowTransparencyLevel.None]; @@ -29,6 +30,12 @@ namespace Ryujinx.Ava.UI.Windows LocaleManager.Instance.LocaleChanged += LocaleChanged; LocaleChanged(); + if (useCustomTitleBar) + { + TitleBar.ExtendsContentIntoTitleBar = !ConfigurationState.Instance.ShowTitleBar; + TitleBar.TitleBarHitTestType = ConfigurationState.Instance.ShowTitleBar ? TitleBarHitTestType.Simple : TitleBarHitTestType.Complex; + } + Icon = MainWindowViewModel.IconBitmap; } From e07130ecc3fddd38fdfad89b4bca724ff6abae6e Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 02:35:13 -0600 Subject: [PATCH 12/25] UI: Fix the unformatted title window when not using custom title bar in compat window --- src/Ryujinx/Common/LocaleManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index 30b055d8b..52bf1afbd 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -57,7 +57,7 @@ namespace Ryujinx.Ava.Common.Locale SetDynamicValues(LocaleKeys.RyujinxUpdater, RyujinxApp.FullAppName); SetDynamicValues(LocaleKeys.RyujinxRebooter, RyujinxApp.FullAppName); SetDynamicValues(LocaleKeys.CompatibilityListSearchBoxWatermarkWithCount, CompatibilityCsv.Entries.Length); - + SetDynamicValues(LocaleKeys.CompatibilityListTitle, CompatibilityCsv.Entries.Length); } public string this[LocaleKeys key] From 7bdf013ba6a55ed1a725afb279c2cf13898e68e4 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 02:45:34 -0600 Subject: [PATCH 13/25] misc: chore: [ci skip] change the initial dynamic values to a proper object initializer --- src/Ryujinx/Common/LocaleManager.cs | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index 52bf1afbd..9aa82a4a5 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -26,7 +26,21 @@ namespace Ryujinx.Ava.Common.Locale public LocaleManager() { _localeStrings = new Dictionary(); - _dynamicValues = new ConcurrentDictionary(); + _dynamicValues = new ConcurrentDictionary(new Dictionary + { + { LocaleKeys.DialogConfirmationTitle, [RyujinxApp.FullAppName] }, + { LocaleKeys.DialogUpdaterTitle, [RyujinxApp.FullAppName] }, + { LocaleKeys.DialogErrorTitle, [RyujinxApp.FullAppName] }, + { LocaleKeys.DialogWarningTitle, [RyujinxApp.FullAppName] }, + { LocaleKeys.DialogExitTitle, [RyujinxApp.FullAppName] }, + { LocaleKeys.DialogStopEmulationTitle, [RyujinxApp.FullAppName] }, + { LocaleKeys.RyujinxInfo, [RyujinxApp.FullAppName] }, + { LocaleKeys.RyujinxConfirm, [RyujinxApp.FullAppName] }, + { LocaleKeys.RyujinxUpdater, [RyujinxApp.FullAppName] }, + { LocaleKeys.RyujinxRebooter, [RyujinxApp.FullAppName] }, + { LocaleKeys.CompatibilityListSearchBoxWatermarkWithCount, [CompatibilityCsv.Entries.Length] }, + { LocaleKeys.CompatibilityListTitle, [CompatibilityCsv.Entries.Length] } + }); Load(); } @@ -45,19 +59,6 @@ namespace Ryujinx.Ava.Common.Locale ConfigurationState.Instance.ToFileFormat().SaveConfig(Program.ConfigurationPath); } - - SetDynamicValues(LocaleKeys.DialogConfirmationTitle, RyujinxApp.FullAppName); - SetDynamicValues(LocaleKeys.DialogUpdaterTitle, RyujinxApp.FullAppName); - SetDynamicValues(LocaleKeys.DialogErrorTitle, RyujinxApp.FullAppName); - SetDynamicValues(LocaleKeys.DialogWarningTitle, RyujinxApp.FullAppName); - SetDynamicValues(LocaleKeys.DialogExitTitle, RyujinxApp.FullAppName); - SetDynamicValues(LocaleKeys.DialogStopEmulationTitle, RyujinxApp.FullAppName); - SetDynamicValues(LocaleKeys.RyujinxInfo, RyujinxApp.FullAppName); - SetDynamicValues(LocaleKeys.RyujinxConfirm, RyujinxApp.FullAppName); - SetDynamicValues(LocaleKeys.RyujinxUpdater, RyujinxApp.FullAppName); - SetDynamicValues(LocaleKeys.RyujinxRebooter, RyujinxApp.FullAppName); - SetDynamicValues(LocaleKeys.CompatibilityListSearchBoxWatermarkWithCount, CompatibilityCsv.Entries.Length); - SetDynamicValues(LocaleKeys.CompatibilityListTitle, CompatibilityCsv.Entries.Length); } public string this[LocaleKeys key] From c76f32a4eef4d291fe219ec2f69be8cea6ec5a6f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 13:59:51 -0600 Subject: [PATCH 14/25] UI: Give the cheat manager the custom window title bar treatment --- src/Ryujinx/UI/Windows/CheatWindow.axaml | 107 ++++++++++++------ src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 7 +- .../Windows/CompatibilityListWindow.axaml.cs | 4 +- src/Ryujinx/UI/Windows/StyleableWindow.cs | 5 +- 4 files changed, 86 insertions(+), 37 deletions(-) diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml b/src/Ryujinx/UI/Windows/CheatWindow.axaml index 32f914019..fc46a3562 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml @@ -20,38 +20,81 @@ - - - + + + + + + + + + + + + + + Date: Wed, 5 Mar 2025 15:56:43 -0600 Subject: [PATCH 15/25] UI: Custom title bar support for Amiibo window --- src/Ryujinx/UI/Windows/AmiiboWindow.axaml | 22 +++++++++++++++++++- src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs | 7 ++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml index ce410923d..8d2a8da44 100644 --- a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml +++ b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml @@ -23,7 +23,27 @@ - + + + + + + + + + + + + + + diff --git a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs index 8c76b8e2f..170cd6741 100644 --- a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs @@ -1,13 +1,14 @@ using Avalonia.Interactivity; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models.Amiibo; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Ava.UI.ViewModels; namespace Ryujinx.Ava.UI.Windows { public partial class AmiiboWindow : StyleableAppWindow { - public AmiiboWindow(bool showAll, string lastScannedAmiiboId, string titleId) + public AmiiboWindow(bool showAll, string lastScannedAmiiboId, string titleId) : base(true, 40) { DataContext = ViewModel = new AmiiboWindowViewModel(this, lastScannedAmiiboId, titleId) { @@ -16,6 +17,10 @@ namespace Ryujinx.Ava.UI.Windows InitializeComponent(); + FlushControls.IsVisible = !ConfigurationState.Instance.ShowTitleBar; + NormalControls.IsVisible = ConfigurationState.Instance.ShowTitleBar; + RyuLogo.Source = MainWindowViewModel.IconBitmap; + Title = RyujinxApp.FormatTitle(LocaleKeys.Amiibo); } From 97a1bbdd749ddd47888d3a2d634ec112f48c486c Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 5 Mar 2025 17:50:40 -0600 Subject: [PATCH 16/25] UI: Fix consistency of checkboxes in system settings --- .../UI/Views/Settings/SettingsSystemView.axaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml index dd6858ee6..a52fe5fbe 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml @@ -191,16 +191,16 @@ IsEnabled="{Binding !IsGameTitleNotNull}" Opacity="{Binding PanelOpacity}" Orientation="Horizontal"> - - + ToolTip.Tip="{ext:Locale MatchTimeTooltip}"> + + + Date: Wed, 5 Mar 2025 18:39:42 -0600 Subject: [PATCH 17/25] UI: Rename Show Title Bar + Revamp for global settings window --- src/Ryujinx/AppHost.cs | 6 +-- src/Ryujinx/Assets/locales.json | 51 ++++++++++++++----- src/Ryujinx/Common/Markup/MarkupExtensions.cs | 14 +++++ .../ConfigurationState.Migration.cs | 3 +- .../Configuration/ConfigurationState.Model.cs | 16 ++---- .../Configuration/ConfigurationState.cs | 5 +- src/Ryujinx/UI/Controls/RyujinxLogo.cs | 29 +++++++++++ .../UI/ViewModels/MainWindowViewModel.cs | 9 +--- .../UI/ViewModels/SettingsViewModel.cs | 9 ++-- .../UI/Views/Main/MainMenuBarView.axaml | 10 ++-- .../UI/Views/Main/MainMenuBarView.axaml.cs | 5 +- .../UI/Views/Settings/SettingsUIView.axaml | 7 +-- src/Ryujinx/UI/Windows/AmiiboWindow.axaml | 7 ++- src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs | 5 +- src/Ryujinx/UI/Windows/CheatWindow.axaml | 7 +-- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 5 +- .../UI/Windows/CompatibilityListWindow.axaml | 8 +-- .../Windows/CompatibilityListWindow.axaml.cs | 7 ++- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 2 +- src/Ryujinx/UI/Windows/SettingsWindow.axaml | 23 ++++++--- .../UI/Windows/SettingsWindow.axaml.cs | 13 ++++- src/Ryujinx/UI/Windows/StyleableWindow.cs | 9 ++-- 22 files changed, 156 insertions(+), 94 deletions(-) create mode 100644 src/Ryujinx/UI/Controls/RyujinxLogo.cs diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index b50eb6912..13f36d695 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -470,7 +470,7 @@ namespace Ryujinx.Ava Dispatcher.UIThread.InvokeAsync(() => { - _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowTitleBar); + _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI); }); _viewModel.SetUiProgressHandlers(Device); @@ -872,7 +872,7 @@ namespace Ryujinx.Ava Device?.System.TogglePauseEmulation(false); _viewModel.IsPaused = false; - _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowTitleBar); + _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI); Logger.Info?.Print(LogClass.Emulation, "Emulation was resumed"); } @@ -881,7 +881,7 @@ namespace Ryujinx.Ava Device?.System.TogglePauseEmulation(true); _viewModel.IsPaused = true; - _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowTitleBar, LocaleManager.Instance[LocaleKeys.Paused]); + _viewModel.Title = TitleHelper.ActiveApplicationTitle(Device?.Processes.ActiveApplication, Program.Version, !ConfigurationState.Instance.ShowOldUI, LocaleManager.Instance[LocaleKeys.Paused]); Logger.Info?.Print(LogClass.Emulation, "Emulation was paused"); } diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index e64cae4d5..28e0af060 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -3823,28 +3823,53 @@ } }, { - "ID": "SettingsTabGeneralShowTitleBar", + "ID": "SettingsTabGeneralShowOldUI", "Translations": { "ar_SA": "", "de_DE": "", "el_GR": "", - "en_US": "Show Title Bar (Requires restart)", - "es_ES": "Mostrar Barra de Título (Requiere reinicio)", - "fr_FR": "Afficher Barre de Titre (Nécessite redémarrage)", + "en_US": "Show Original UI Style (Requires restart)", + "es_ES": "", + "fr_FR": "", "he_IL": "", - "it_IT": "Mostra barra del titolo (Richiede il riavvio)", + "it_IT": "", "ja_JP": "", - "ko_KR": "제목 표시줄 표시(다시 시작해야 함)", - "no_NO": "Vis tittellinje (krever omstart)", + "ko_KR": "", + "no_NO": "Vis original UI-stil (krever omstart)", "pl_PL": "", - "pt_BR": "Mostrar Barra de Título (Requer reinicialização)", - "ru_RU": "Показать строку заголовка (требуется перезапуск)", - "sv_SE": "Visa titelrad (kräver omstart)", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", - "uk_UA": "Показувати рядок заголовка (Потрібен перезапуск)", - "zh_CN": "显示标题栏 (需要重启)", - "zh_TW": "顯示「標題列」 (需要重新開啟Ryujinx)" + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, + { + "ID": "SettingsTabGeneralShowOldUIToolTip", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Show the older Avalonia Ryujinx UI reminiscent of Ryujinx 1.1.1403. This is enabled by default on platforms that are not Windows.\nThe classic-style title bar is back and major window layout reworkings are reversed; such as the settings navigation placement above this tooltip.", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "Vis det eldre Avalonia Ryujinx-grensesnittet som minner om Ryujinx 1.1.1403. Dette er aktivert som standard på plattformer som ikke er Windows.\nTittellinjen i klassisk stil er tilbake, og store omarbeidinger av vindusoppsettet er reversert, for eksempel plasseringen av innstillingsnavigasjonen over dette verktøytipset.", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" } }, { diff --git a/src/Ryujinx/Common/Markup/MarkupExtensions.cs b/src/Ryujinx/Common/Markup/MarkupExtensions.cs index 9e8ff00ef..26e9c3d3e 100644 --- a/src/Ryujinx/Common/Markup/MarkupExtensions.cs +++ b/src/Ryujinx/Common/Markup/MarkupExtensions.cs @@ -1,4 +1,5 @@ using Avalonia.Markup.Xaml.MarkupExtensions; +using Humanizer; using Projektanker.Icons.Avalonia; using Ryujinx.Ava.Common.Locale; @@ -24,4 +25,17 @@ namespace Ryujinx.Ava.Common.Markup protected override void ConfigureBindingExtension(CompiledBindingExtension bindingExtension) => bindingExtension.Source = LocaleManager.Instance; } + + internal class WindowTitleExtension(LocaleKeys key, bool includeVersion) : BasicMarkupExtension + { + public WindowTitleExtension(LocaleKeys key) : this(key, true) + { + } + + public override string Name => "WindowTitleTranslation"; + protected override string Value => RyujinxApp.FormatTitle(key, includeVersion); + + protected override void ConfigureBindingExtension(CompiledBindingExtension bindingExtension) + => bindingExtension.Source = LocaleManager.Instance; + } } diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs index fcea6dbf0..16a4fab10 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs @@ -46,12 +46,11 @@ namespace Ryujinx.Ava.Systems.Configuration EnableDiscordIntegration.Value = cff.EnableDiscordIntegration; - CheckUpdatesOnStart.Value = shouldLoadFromFile ? cff.CheckUpdatesOnStart : CheckUpdatesOnStart.Value; // Get from global config only UpdateCheckerType.Value = shouldLoadFromFile ? cff.UpdateCheckerType : UpdateCheckerType.Value; // Get from global config only FocusLostActionType.Value = cff.FocusLostActionType; ShowConfirmExit.Value = shouldLoadFromFile ? cff.ShowConfirmExit : ShowConfirmExit.Value; // Get from global config only RememberWindowState.Value = shouldLoadFromFile ? cff.RememberWindowState : RememberWindowState.Value; // Get from global config only - ShowTitleBar.Value = shouldLoadFromFile ? cff.ShowTitleBar : ShowTitleBar.Value; // Get from global config only + ShowOldUI.Value = shouldLoadFromFile ? cff.ShowTitleBar : ShowOldUI.Value; // Get from global config only EnableHardwareAcceleration.Value = shouldLoadFromFile ? cff.EnableHardwareAcceleration : EnableHardwareAcceleration.Value; // Get from global config only HideCursor.Value = cff.HideCursor; diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs index 4d8a75de9..24ee6ec66 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs @@ -783,11 +783,6 @@ namespace Ryujinx.Ava.Systems.Configuration /// Enables or disables Discord Rich Presence ///
public ReactiveObject EnableDiscordIntegration { get; private set; } - - /// - /// Checks for updates when Ryujinx starts when enabled - /// - public ReactiveObject CheckUpdatesOnStart { get; private set; } /// /// Checks for updates when Ryujinx starts when enabled, either prompting when an update is found or just showing a notification. @@ -810,9 +805,9 @@ namespace Ryujinx.Ava.Systems.Configuration public ReactiveObject RememberWindowState { get; private set; } /// - /// Enables or disables the redesigned title bar + /// Disable the new title bar layout & window layout changes. /// - public ReactiveObject ShowTitleBar { get; private set; } + public ReactiveObject ShowOldUI { get; private set; } /// /// Enables hardware-accelerated rendering for Avalonia @@ -833,15 +828,14 @@ namespace Ryujinx.Ava.Systems.Configuration Hid = new HidSection(); Multiplayer = new MultiplayerSection(); Hacks = new HacksSection(); - EnableDiscordIntegration = new ReactiveObject(); - CheckUpdatesOnStart = new ReactiveObject(); UpdateCheckerType = new ReactiveObject(); FocusLostActionType = new ReactiveObject(); + HideCursor = new ReactiveObject(); + EnableDiscordIntegration = new ReactiveObject(); ShowConfirmExit = new ReactiveObject(); RememberWindowState = new ReactiveObject(); - ShowTitleBar = new ReactiveObject(); + ShowOldUI = new ReactiveObject(); EnableHardwareAcceleration = new ReactiveObject(); - HideCursor = new ReactiveObject(); } public HleConfiguration CreateHleConfiguration() => diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.cs index 811c0b971..6fe35c744 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.cs @@ -56,12 +56,11 @@ namespace Ryujinx.Ava.Systems.Configuration MatchSystemTime = System.MatchSystemTime, DockedMode = System.EnableDockedMode, EnableDiscordIntegration = EnableDiscordIntegration, - CheckUpdatesOnStart = CheckUpdatesOnStart, UpdateCheckerType = UpdateCheckerType, FocusLostActionType = FocusLostActionType, ShowConfirmExit = ShowConfirmExit, RememberWindowState = RememberWindowState, - ShowTitleBar = ShowTitleBar, + ShowTitleBar = ShowOldUI, EnableHardwareAcceleration = EnableHardwareAcceleration, HideCursor = HideCursor, VSyncMode = Graphics.VSyncMode, @@ -183,7 +182,7 @@ namespace Ryujinx.Ava.Systems.Configuration FocusLostActionType.Value = FocusLostType.DoNothing; ShowConfirmExit.Value = true; RememberWindowState.Value = true; - ShowTitleBar.Value = !OperatingSystem.IsWindows(); + ShowOldUI.Value = !OperatingSystem.IsWindows(); EnableHardwareAcceleration.Value = true; HideCursor.Value = HideCursorMode.OnIdle; Graphics.VSyncMode.Value = VSyncMode.Switch; diff --git a/src/Ryujinx/UI/Controls/RyujinxLogo.cs b/src/Ryujinx/UI/Controls/RyujinxLogo.cs new file mode 100644 index 000000000..3b52ecf03 --- /dev/null +++ b/src/Ryujinx/UI/Controls/RyujinxLogo.cs @@ -0,0 +1,29 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Layout; +using Avalonia.Media.Imaging; +using Ryujinx.Ava.Systems.Configuration; +using Ryujinx.Ava.UI.ViewModels; +using System.Reflection; + +namespace Ryujinx.Ava.UI.Controls +{ + public class RyujinxLogo : Image + { + // The UI specifically uses a thicker bordered variant of the icon to avoid crunching out the border at lower resolutions. + // For an example of this, download canary 1.2.95, then open the settings menu, and look at the icon in the top-left. + // The border gets reduced to colored pixels in the 4 corners. + public static readonly Bitmap Bitmap = + new(Assembly.GetAssembly(typeof(MainWindowViewModel))! + .GetManifestResourceStream("Ryujinx.Assets.UIImages.Logo_Ryujinx_AntiAlias.png")!); + + public RyujinxLogo() + { + Margin = new Thickness(7, 7, 7, 0); + Height = 25; + Width = 25; + Source = Bitmap; + IsVisible = !ConfigurationState.Instance.ShowOldUI; + } + } +} diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 1e7480b11..9442c6338 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -137,13 +137,6 @@ namespace Ryujinx.Ava.UI.ViewModels // Key is Title ID public SafeDictionary LdnData = []; - // The UI specifically uses a thicker bordered variant of the icon to avoid crunching out the border at lower resolutions. - // For an example of this, download canary 1.2.95, then open the settings menu, and look at the icon in the top-left. - // The border gets reduced to colored pixels in the 4 corners. - public static readonly Bitmap IconBitmap = - new(Assembly.GetAssembly(typeof(MainWindowViewModel))! - .GetManifestResourceStream("Ryujinx.Assets.UIImages.Logo_Ryujinx_AntiAlias.png")!); - public MainWindow Window { get; init; } internal AppHost AppHost { get; set; } @@ -1794,7 +1787,7 @@ namespace Ryujinx.Ava.UI.ViewModels if (WindowState is not WindowState.Normal) { WindowState = WindowState.Normal; - Window.TitleBar.ExtendsContentIntoTitleBar = !ConfigurationState.Instance.ShowTitleBar; + Window.TitleBar.ExtendsContentIntoTitleBar = !ConfigurationState.Instance.ShowOldUI; if (IsGameRunning) { diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index aa6b34922..5dc5b789f 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -130,11 +130,10 @@ namespace Ryujinx.Ava.UI.ViewModels public bool IsOpenGLAvailable => !OperatingSystem.IsMacOS(); public bool EnableDiscordIntegration { get; set; } - public bool CheckUpdatesOnStart { get; set; } public bool ShowConfirmExit { get; set; } public bool IgnoreApplet { get; set; } public bool RememberWindowState { get; set; } - public bool ShowTitleBar { get; set; } + public bool ShowOldUI { get; set; } public int HideCursor { get; set; } public int UpdateCheckerType { get; set; } public bool EnableDockedMode { get; set; } @@ -537,10 +536,9 @@ namespace Ryujinx.Ava.UI.ViewModels // User Interface EnableDiscordIntegration = config.EnableDiscordIntegration; - CheckUpdatesOnStart = config.CheckUpdatesOnStart; ShowConfirmExit = config.ShowConfirmExit; RememberWindowState = config.RememberWindowState; - ShowTitleBar = config.ShowTitleBar; + ShowOldUI = config.ShowOldUI; HideCursor = (int)config.HideCursor.Value; UpdateCheckerType = (int)config.UpdateCheckerType.Value; FocusLostActionType = (int)config.FocusLostActionType.Value; @@ -646,10 +644,9 @@ namespace Ryujinx.Ava.UI.ViewModels // User Interface config.EnableDiscordIntegration.Value = EnableDiscordIntegration; - config.CheckUpdatesOnStart.Value = CheckUpdatesOnStart; config.ShowConfirmExit.Value = ShowConfirmExit; config.RememberWindowState.Value = RememberWindowState; - config.ShowTitleBar.Value = ShowTitleBar; + config.ShowOldUI.Value = ShowOldUI; config.HideCursor.Value = (HideCursorMode)HideCursor; config.UpdateCheckerType.Value = (UpdaterType)UpdateCheckerType; config.FocusLostActionType.Value = (FocusLostType)FocusLostActionType; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml index 1da91c388..61f5c1e50 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml @@ -6,18 +6,16 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" mc:Ignorable="d" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" + xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls" x:DataType="viewModels:MainWindowViewModel" x:Class="Ryujinx.Ava.UI.Views.Main.MainMenuBarView"> - + - + + IsChecked="{Binding ShowOldUI}" + ToolTip.Tip="{ext:Locale SettingsTabGeneralShowOldUIToolTip}"> - + diff --git a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml index 8d2a8da44..ad77a9b6b 100644 --- a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml +++ b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml @@ -6,6 +6,7 @@ xmlns:window="clr-namespace:Ryujinx.Ava.UI.Windows" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" + xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls" mc:Ignorable="d" d:DesignWidth="400" d:DesignHeight="350" @@ -24,14 +25,12 @@ - + ToolTip.Tip="{ext:WindowTitle Amiibo}" /> diff --git a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs index 170cd6741..2d6eb4716 100644 --- a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs @@ -17,9 +17,8 @@ namespace Ryujinx.Ava.UI.Windows InitializeComponent(); - FlushControls.IsVisible = !ConfigurationState.Instance.ShowTitleBar; - NormalControls.IsVisible = ConfigurationState.Instance.ShowTitleBar; - RyuLogo.Source = MainWindowViewModel.IconBitmap; + FlushControls.IsVisible = !ConfigurationState.Instance.ShowOldUI; + NormalControls.IsVisible = ConfigurationState.Instance.ShowOldUI; Title = RyujinxApp.FormatTitle(LocaleKeys.Amiibo); } diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml b/src/Ryujinx/UI/Windows/CheatWindow.axaml index fc46a3562..49b13048f 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml @@ -6,6 +6,7 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:window="clr-namespace:Ryujinx.Ava.UI.Windows" + xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls" Width="600" Height="750" MinWidth="500" @@ -21,14 +22,14 @@ - + Width="28" + ToolTip.Tip="{ext:WindowTitle CheatWindowTitle}"/> - + ToolTip.Tip="{ext:WindowTitle CompatibilityListTitle, False}"/> diff --git a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs index 6e6ef67f1..6728ff197 100644 --- a/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CompatibilityListWindow.axaml.cs @@ -26,10 +26,9 @@ namespace Ryujinx.Ava.UI.Windows Title = RyujinxApp.FormatTitle(LocaleKeys.CompatibilityListTitle); InitializeComponent(); - - RyuLogo.Source = MainWindowViewModel.IconBitmap; - FlushControls.IsVisible = !ConfigurationState.Instance.ShowTitleBar; - NormalControls.IsVisible = ConfigurationState.Instance.ShowTitleBar; + + FlushControls.IsVisible = !ConfigurationState.Instance.ShowOldUI; + NormalControls.IsVisible = ConfigurationState.Instance.ShowOldUI; } // ReSharper disable once UnusedMember.Local diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 512a93f26..bee04c466 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -97,7 +97,7 @@ namespace Ryujinx.Ava.UI.Windows TitleBar.Height = MenuBarHeight; // Correctly size window when 'TitleBar' is enabled (Nov. 14, 2024) - TitleBarHeight = (ConfigurationState.Instance.ShowTitleBar ? TitleBar.Height : 0); + TitleBarHeight = (ConfigurationState.Instance.ShowOldUI ? TitleBar.Height : 0); ApplicationList.DataContext = DataContext; ApplicationGrid.DataContext = DataContext; diff --git a/src/Ryujinx/UI/Windows/SettingsWindow.axaml b/src/Ryujinx/UI/Windows/SettingsWindow.axaml index 54ca4cbbd..73c1f087a 100644 --- a/src/Ryujinx/UI/Windows/SettingsWindow.axaml +++ b/src/Ryujinx/UI/Windows/SettingsWindow.axaml @@ -11,10 +11,11 @@ xmlns:settings="clr-namespace:Ryujinx.Ava.UI.Views.Settings" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" xmlns:helper="clr-namespace:Ryujinx.Common.Helper;assembly=Ryujinx.Common" + xmlns:controls="clr-namespace:Ryujinx.Ava.UI.Controls" Width="1100" - Height="927" MinWidth="800" MinHeight="480" + Title="{ext:WindowTitle Settings}" WindowStartupLocation="CenterOwner" x:DataType="viewModels:SettingsViewModel" mc:Ignorable="d" @@ -22,13 +23,20 @@ - + + + + - + @@ -41,12 +49,11 @@ @@ -108,7 +115,7 @@ -