From 47e55acf216dcc41cadfbc757b78c906ef9cacca Mon Sep 17 00:00:00 2001 From: KeatonTheBot Date: Sun, 16 Aug 2026 16:36:10 -0500 Subject: [PATCH] UI: Update Avalonia to v12.1 - Avalonia to 12.1.1 - FluentAvalonia to 3.0.2 - Move DevTools Ctrl+F12 keybind to app initialization --- Directory.Packages.props | 16 ++-- src/Ryujinx/App.axaml.cs | 5 + src/Ryujinx/Assets/Styles/Styles.xaml | 8 +- src/Ryujinx/Common/Locale/LocaleExtension.cs | 1 + src/Ryujinx/Modules/Updater/Updater.cs | 36 +++---- src/Ryujinx/Ryujinx.csproj | 2 +- src/Ryujinx/UI/Applet/AvaHostUIHandler.cs | 2 +- .../UI/Applet/ControllerAppletDialog.axaml.cs | 8 +- src/Ryujinx/UI/Applet/SwkbdAppletDialog.axaml | 2 +- .../UI/Applet/SwkbdAppletDialog.axaml.cs | 18 ++-- .../UI/Controls/ApplicationGridView.axaml | 2 +- .../UI/Controls/ApplicationListView.axaml | 2 +- .../UI/Controls/DlcSelectView.axaml.cs | 2 +- .../UI/Controls/NavigationDialogHost.axaml | 6 +- .../UI/Controls/NavigationDialogHost.axaml.cs | 2 +- .../UI/Controls/UpdateWaitWindow.axaml.cs | 4 +- src/Ryujinx/UI/Helpers/CharacterReader.cs | 94 +++++++++++++++++++ src/Ryujinx/UI/Helpers/ContentDialogHelper.cs | 38 ++++---- src/Ryujinx/UI/Helpers/GlyphValueConverter.cs | 6 +- .../DownloadableContentManagerViewModel.cs | 2 +- .../UI/ViewModels/MainWindowViewModel.cs | 9 +- .../UI/ViewModels/TitleUpdateViewModel.cs | 2 +- src/Ryujinx/UI/Views/Input/InputView.axaml | 8 +- .../UI/Views/Input/MotionInputView.axaml | 4 +- .../UI/Views/Input/MotionInputView.axaml.cs | 2 +- .../UI/Views/Input/RumbleInputView.axaml.cs | 2 +- .../UI/Views/Main/MainMenuBarView.axaml.cs | 2 +- .../UI/Views/Main/MainStatusBarView.axaml | 4 +- .../UI/Views/Main/MainStatusBarView.axaml.cs | 2 +- .../UI/Views/Main/MainViewControls.axaml | 6 +- .../UI/Views/Main/MainViewControls.axaml.cs | 2 +- .../UI/Views/Settings/SettingsAudioView.axaml | 2 +- .../UI/Views/Settings/SettingsCPUView.axaml | 2 +- .../UI/Views/Settings/SettingsDebugView.axaml | 2 +- .../Views/Settings/SettingsGraphicsView.axaml | 4 +- .../Views/Settings/SettingsLoggingView.axaml | 2 +- .../Views/Settings/SettingsNetworkView.axaml | 2 +- .../UI/Views/Settings/SettingsUIView.axaml.cs | 6 +- .../UI/Views/User/UserEditorView.axaml | 6 +- .../UI/Views/User/UserEditorView.axaml.cs | 7 +- .../User/UserFirmwareAvatarSelectorView.axaml | 2 +- .../UserFirmwareAvatarSelectorView.axaml.cs | 5 +- .../User/UserProfileImageSelectorView.axaml | 2 +- .../UserProfileImageSelectorView.axaml.cs | 15 +-- .../UI/Views/User/UserRecovererView.axaml | 2 +- .../UI/Views/User/UserRecovererView.axaml.cs | 7 +- .../UI/Views/User/UserSaveManagerView.axaml | 8 +- .../Views/User/UserSaveManagerView.axaml.cs | 7 +- .../UI/Views/User/UserSelectorView.axaml | 4 +- .../UI/Views/User/UserSelectorView.axaml.cs | 11 ++- src/Ryujinx/UI/Windows/AboutWindow.axaml.cs | 2 +- .../Windows/ContentDialogOverlayWindow.axaml | 4 +- .../ContentDialogOverlayWindow.axaml.cs | 2 +- .../DownloadableContentManagerWindow.axaml | 8 +- .../DownloadableContentManagerWindow.axaml.cs | 6 +- src/Ryujinx/UI/Windows/MainWindow.axaml | 2 +- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 18 ++-- src/Ryujinx/UI/Windows/ModManagerWindow.axaml | 6 +- .../UI/Windows/ModManagerWindow.axaml.cs | 6 +- src/Ryujinx/UI/Windows/SettingsWindow.axaml | 42 ++++----- .../UI/Windows/SettingsWindow.axaml.cs | 6 +- src/Ryujinx/UI/Windows/StyleableWindow.cs | 4 +- .../UI/Windows/TitleUpdateWindow.axaml | 6 +- .../UI/Windows/TitleUpdateWindow.axaml.cs | 6 +- src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml | 2 +- .../UI/Windows/XCITrimmerWindow.axaml.cs | 4 +- 66 files changed, 315 insertions(+), 204 deletions(-) create mode 100644 src/Ryujinx/UI/Helpers/CharacterReader.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index 67e678aba..6909aaa7d 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -3,19 +3,19 @@ true - - - - - - - + + + + + + + - + diff --git a/src/Ryujinx/App.axaml.cs b/src/Ryujinx/App.axaml.cs index c9fa8bdb6..0b768b9b2 100644 --- a/src/Ryujinx/App.axaml.cs +++ b/src/Ryujinx/App.axaml.cs @@ -1,5 +1,6 @@ using Avalonia; using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Input; using Avalonia.Input.Platform; using Avalonia.Markup.Xaml; using Avalonia.Platform; @@ -39,6 +40,10 @@ namespace Ryujinx.Ava FAUISettings.SetAnimationsEnabledAtAppLevel(false); AvaloniaXamlLoader.Load(this); + +#if DEBUG + this.AttachDeveloperTools(options => options.Gesture = new KeyGesture(Key.F12, KeyModifiers.Control)); +#endif if (OperatingSystem.IsMacOS()) { diff --git a/src/Ryujinx/Assets/Styles/Styles.xaml b/src/Ryujinx/Assets/Styles/Styles.xaml index 53d0f4c37..55cfcb481 100644 --- a/src/Ryujinx/Assets/Styles/Styles.xaml +++ b/src/Ryujinx/Assets/Styles/Styles.xaml @@ -34,12 +34,12 @@ Width="100" VerticalAlignment="Center" Text="Rrrrr" - UseFloatingWatermark="True" - Watermark="Hello" /> + UseFloatingPlaceholder="True" + PlaceholderText="Hello" /> Test Check - + @@ -233,7 +233,7 @@ - - @@ -124,7 +124,7 @@ MinWidth="0" MinHeight="0" Click="OpenLocation"> - @@ -136,7 +136,7 @@ MinWidth="0" MinHeight="0" Click="RemoveDLC"> - diff --git a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs index 94cc3652c..86e7bd109 100644 --- a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs @@ -31,7 +31,7 @@ namespace Ryujinx.Ava.UI.Windows public static async Task Show(ApplicationLibrary applicationLibrary, ApplicationData applicationData) { - ContentDialog contentDialog = new() + FAContentDialog contentDialog = new() { PrimaryButtonText = "", SecondaryButtonText = "", @@ -51,12 +51,12 @@ namespace Ryujinx.Ava.UI.Windows private void SaveAndClose(object sender, RoutedEventArgs routedEventArgs) { ViewModel.Save(); - ((ContentDialog)Parent)?.Hide(); + ((FAContentDialog)Parent)?.Hide(); } private void Close(object sender, RoutedEventArgs e) { - ((ContentDialog)Parent)?.Hide(); + ((FAContentDialog)Parent)?.Hide(); } private void RemoveDLC(object sender, RoutedEventArgs e) diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml b/src/Ryujinx/UI/Windows/MainWindow.axaml index fee2755d4..d0c9262ff 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml @@ -23,7 +23,7 @@ WindowStartupLocation="Manual" Focusable="True"> - diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 812e505a5..9da1f5bba 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -125,17 +125,15 @@ namespace Ryujinx.Ava.UI.Windows } } - protected override void OnClosed(EventArgs e) + /* protected override void OnClosed(EventArgs e) { base.OnClosed(e); if (PlatformSettings != null) { - /// - /// Unsubscribe to the ColorValuesChanged event - /// + // Unsubscribe to the ColorValuesChanged event PlatformSettings.ColorValuesChanged -= OnPlatformColorValuesChanged; } - } + } */ protected override void OnApplyTemplate(TemplateAppliedEventArgs e) { @@ -309,7 +307,7 @@ namespace Ryujinx.Ava.UI.Windows LocaleManager.Instance[LocaleKeys.LinuxVmMaxMapCountDialogButtonUntilRestart], LocaleManager.Instance[LocaleKeys.LinuxVmMaxMapCountDialogButtonPersistent], LocaleManager.Instance[LocaleKeys.InputDialogNo], - (int)Symbol.Help + (int)FASymbol.Help ); int rc; @@ -494,7 +492,11 @@ namespace Ryujinx.Ava.UI.Windows _windowStartupWidthDelta = Math.Max(0, Width - ViewModel.WindowWidth); _windowStartupHeightDelta = Math.Max(0, Height - ViewModel.WindowHeight); - PlatformSettings?.ColorValuesChanged += OnPlatformColorValuesChanged; + // Subscribe to the ColorValuesChanged event + /* if (PlatformSettings != null) + { + PlatformSettings.ColorValuesChanged += OnPlatformColorValuesChanged; + } */ ViewModel.Initialize( ContentManager, @@ -744,7 +746,7 @@ namespace Ryujinx.Ava.UI.Windows Dispatcher.UIThread.InvokeAsync(async () => { await ContentDialogHelper.ShowTextDialog(LocaleManager.Instance[LocaleKeys.DialogConfirmationTitle], - msg, "", "", "", LocaleManager.Instance[LocaleKeys.InputDialogOk], (int)Symbol.Checkmark); + msg, "", "", "", LocaleManager.Instance[LocaleKeys.InputDialogOk], (int)FASymbol.Checkmark); }); } } diff --git a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml index ea76ead91..4fa4b0a7a 100644 --- a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml +++ b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml @@ -46,7 +46,7 @@ MinHeight="27" MaxHeight="27" HorizontalAlignment="Stretch" - Watermark="{locale:Locale Search}" + PlaceholderText="{locale:Locale Search}" Text="{Binding Search}" /> @@ -91,7 +91,7 @@ MinHeight="0" ToolTip.Tip="{Binding Path}" Click="OpenLocation"> - @@ -103,7 +103,7 @@ MinWidth="0" MinHeight="0" Click="DeleteMod"> - diff --git a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs index 76988448d..8484a6d8c 100644 --- a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs @@ -33,7 +33,7 @@ namespace Ryujinx.Ava.UI.Windows public static async Task Show(ulong titleId, ulong titleIdBase, ApplicationLibrary appLibrary, string titleName) { - ContentDialog contentDialog = new() + FAContentDialog contentDialog = new() { PrimaryButtonText = "", SecondaryButtonText = "", @@ -53,12 +53,12 @@ namespace Ryujinx.Ava.UI.Windows private void SaveAndClose(object sender, RoutedEventArgs e) { ViewModel.Save(); - ((ContentDialog)Parent)?.Hide(); + ((FAContentDialog)Parent)?.Hide(); } private void Close(object sender, RoutedEventArgs e) { - ((ContentDialog)Parent)?.Hide(); + ((FAContentDialog)Parent)?.Hide(); } private async void DeleteMod(object sender, RoutedEventArgs e) diff --git a/src/Ryujinx/UI/Windows/SettingsWindow.axaml b/src/Ryujinx/UI/Windows/SettingsWindow.axaml index 54740fb01..3735afb4e 100644 --- a/src/Ryujinx/UI/Windows/SettingsWindow.axaml +++ b/src/Ryujinx/UI/Windows/SettingsWindow.axaml @@ -40,7 +40,7 @@ - - - + - - - - - - + - - - + + - - - - - - + + - - - + + - - @@ -86,7 +86,7 @@ MinWidth="0" MinHeight="0" Click="RemoveUpdate"> - diff --git a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs index 09a766477..a6953bcf6 100644 --- a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs @@ -31,7 +31,7 @@ namespace Ryujinx.Ava.UI.Windows public static async Task Show(ApplicationLibrary applicationLibrary, ApplicationData applicationData) { - ContentDialog contentDialog = new() + FAContentDialog contentDialog = new() { PrimaryButtonText = "", SecondaryButtonText = "", @@ -50,14 +50,14 @@ namespace Ryujinx.Ava.UI.Windows private void Close(object sender, RoutedEventArgs e) { - ((ContentDialog)Parent)?.Hide(); + ((FAContentDialog)Parent)?.Hide(); } public void Save(object sender, RoutedEventArgs e) { ViewModel.Save(); - ((ContentDialog)Parent)?.Hide(); + ((FAContentDialog)Parent)?.Hide(); } private void OpenLocation(object sender, RoutedEventArgs e) diff --git a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml index 8cef94632..14d5d2b96 100644 --- a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml +++ b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml @@ -96,7 +96,7 @@ MaxHeight="29" Margin="5 0 5 0" HorizontalAlignment="Stretch" - Watermark="{locale:Locale Search}" + PlaceholderText="{locale:Locale Search}" Text="{Binding Search}" />