diff options
-rw-r--r-- | Ryujinx.Ava/UI/Controls/GameGridView.axaml.cs | 4 | ||||
-rw-r--r-- | Ryujinx.Ava/UI/Controls/GameListView.axaml.cs | 4 | ||||
-rw-r--r-- | Ryujinx.Ava/UI/Helpers/ContentDialogHelper.cs | 329 | ||||
-rw-r--r-- | Ryujinx.Ava/UI/ViewModels/MainWindowViewModel.cs | 5 | ||||
-rw-r--r-- | Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml.cs | 5 | ||||
-rw-r--r-- | Ryujinx.Ava/UI/Views/Main/MainStatusBarView.axaml.cs | 2 | ||||
-rw-r--r-- | Ryujinx.Ava/UI/Views/Main/MainViewControls.axaml.cs | 2 | ||||
-rw-r--r-- | Ryujinx.Ava/UI/Windows/AboutWindow.axaml | 460 | ||||
-rw-r--r-- | Ryujinx.Ava/UI/Windows/AboutWindow.axaml.cs | 11 |
9 files changed, 425 insertions, 397 deletions
diff --git a/Ryujinx.Ava/UI/Controls/GameGridView.axaml.cs b/Ryujinx.Ava/UI/Controls/GameGridView.axaml.cs index 9965f750..531b5435 100644 --- a/Ryujinx.Ava/UI/Controls/GameGridView.axaml.cs +++ b/Ryujinx.Ava/UI/Controls/GameGridView.axaml.cs @@ -38,9 +38,9 @@ namespace Ryujinx.Ava.UI.Controls { if (sender is ListBox listBox) { - var selected = listBox.SelectedItem as ApplicationData; + _selectedApplication = listBox.SelectedItem as ApplicationData; - _selectedApplication = selected; + (DataContext as MainWindowViewModel).GridSelectedApplication = _selectedApplication; } } diff --git a/Ryujinx.Ava/UI/Controls/GameListView.axaml.cs b/Ryujinx.Ava/UI/Controls/GameListView.axaml.cs index 01e35990..bded1dec 100644 --- a/Ryujinx.Ava/UI/Controls/GameListView.axaml.cs +++ b/Ryujinx.Ava/UI/Controls/GameListView.axaml.cs @@ -38,9 +38,9 @@ namespace Ryujinx.Ava.UI.Controls { if (sender is ListBox listBox) { - var selected = listBox.SelectedItem as ApplicationData; + _selectedApplication = listBox.SelectedItem as ApplicationData; - _selectedApplication = selected; + (DataContext as MainWindowViewModel).ListSelectedApplication = _selectedApplication; } } diff --git a/Ryujinx.Ava/UI/Helpers/ContentDialogHelper.cs b/Ryujinx.Ava/UI/Helpers/ContentDialogHelper.cs index a098a8ea..f4334b5f 100644 --- a/Ryujinx.Ava/UI/Helpers/ContentDialogHelper.cs +++ b/Ryujinx.Ava/UI/Helpers/ContentDialogHelper.cs @@ -19,134 +19,73 @@ namespace Ryujinx.Ava.UI.Helpers { private static bool _isChoiceDialogOpen; - private async static Task<UserResult> ShowContentDialog( - string title, - string primaryText, - string secondaryText, - string primaryButton, - string secondaryButton, - string closeButton, - int iconSymbol, - UserResult primaryButtonResult = UserResult.Ok, - ManualResetEvent deferResetEvent = null, - Func<Window, Task> doWhileDeferred = null, - TypedEventHandler<ContentDialog, ContentDialogButtonClickEventArgs> deferCloseAction = null) + public async static Task<UserResult> ShowContentDialog( + string title, + object content, + string primaryButton, + string secondaryButton, + string closeButton, + UserResult primaryButtonResult = UserResult.Ok, + ManualResetEvent deferResetEvent = null, + Func<Window, Task> doWhileDeferred = null, + TypedEventHandler<ContentDialog, ContentDialogButtonClickEventArgs> deferCloseAction = null) { UserResult result = UserResult.None; - bool useOverlay = false; - Window mainWindow = null; - - if (Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime al) + ContentDialog contentDialog = new() { - foreach (var item in al.Windows) - { - if (item.IsActive && item is MainWindow window && window.ViewModel.IsGameRunning) - { - mainWindow = window; - useOverlay = true; - break; - } - } - } - - ContentDialog contentDialog = null; - ContentDialogOverlayWindow overlay = null; + Title = title, + PrimaryButtonText = primaryButton, + SecondaryButtonText = secondaryButton, + CloseButtonText = closeButton, + Content = content + }; - if (useOverlay) + contentDialog.PrimaryButtonCommand = MiniCommand.Create(() => { - overlay = new ContentDialogOverlayWindow() - { - Height = mainWindow.Bounds.Height, - Width = mainWindow.Bounds.Width, - Position = mainWindow.PointToScreen(new Point()) - }; - - mainWindow.PositionChanged += OverlayOnPositionChanged; - - void OverlayOnPositionChanged(object sender, PixelPointEventArgs e) - { - overlay.Position = mainWindow.PointToScreen(new Point()); - } - - contentDialog = overlay.ContentDialog; - - bool opened = false; + result = primaryButtonResult; + }); - overlay.Opened += OverlayOnActivated; - - async void OverlayOnActivated(object sender, EventArgs e) - { - if (opened) - { - return; - } - - opened = true; - - overlay.Position = mainWindow.PointToScreen(new Point()); - - await ShowDialog(); - } - - await overlay.ShowDialog(mainWindow); - } - else + contentDialog.SecondaryButtonCommand = MiniCommand.Create(() => { - contentDialog = new ContentDialog(); - - await ShowDialog(); - } + result = UserResult.No; + contentDialog.PrimaryButtonClick -= deferCloseAction; + }); - async Task ShowDialog() + contentDialog.CloseButtonCommand = MiniCommand.Create(() => { - contentDialog.Title = title; - contentDialog.PrimaryButtonText = primaryButton; - contentDialog.SecondaryButtonText = secondaryButton; - contentDialog.CloseButtonText = closeButton; - contentDialog.Content = CreateDialogTextContent(primaryText, secondaryText, iconSymbol); - - contentDialog.PrimaryButtonCommand = MiniCommand.Create(() => - { - result = primaryButtonResult; - }); - contentDialog.SecondaryButtonCommand = MiniCommand.Create(() => - { - result = UserResult.No; - contentDialog.PrimaryButtonClick -= deferCloseAction; - }); - contentDialog.CloseButtonCommand = MiniCommand.Create(() => - { - result = UserResult.Cancel; - contentDialog.PrimaryButtonClick -= deferCloseAction; - }); - - if (deferResetEvent != null) - { - contentDialog.PrimaryButtonClick += deferCloseAction; - } - - if (useOverlay) - { - await contentDialog.ShowAsync(overlay, ContentDialogPlacement.Popup); - - overlay!.Close(); - } - else - { - await contentDialog.ShowAsync(ContentDialogPlacement.Popup); - } - } + result = UserResult.Cancel; + contentDialog.PrimaryButtonClick -= deferCloseAction; + }); - if (useOverlay) + if (deferResetEvent != null) { - overlay.Content = null; - overlay.Close(); + contentDialog.PrimaryButtonClick += deferCloseAction; } + await ShowAsync(contentDialog); + return result; } + private async static Task<UserResult> ShowTextDialog( + string title, + string primaryText, + string secondaryText, + string primaryButton, + string secondaryButton, + string closeButton, + int iconSymbol, + UserResult primaryButtonResult = UserResult.Ok, + ManualResetEvent deferResetEvent = null, + Func<Window, Task> doWhileDeferred = null, + TypedEventHandler<ContentDialog, ContentDialogButtonClickEventArgs> deferCloseAction = null) + { + Grid content = CreateTextDialogContent(primaryText, secondaryText, iconSymbol); + + return await ShowContentDialog(title, content, primaryButton, secondaryButton, closeButton, primaryButtonResult, deferResetEvent, doWhileDeferred, deferCloseAction); + } + public async static Task<UserResult> ShowDeferredContentDialog( StyleableWindow window, string title, @@ -162,7 +101,7 @@ namespace Ryujinx.Ava.UI.Helpers bool startedDeferring = false; UserResult result = UserResult.None; - return await ShowContentDialog( + return await ShowTextDialog( title, primaryText, secondaryText, @@ -192,8 +131,7 @@ namespace Ryujinx.Ava.UI.Helpers sender.PrimaryButtonClick -= DeferClose; -#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed - Task.Run(() => + _ = Task.Run(() => { deferResetEvent.WaitOne(); @@ -202,7 +140,6 @@ namespace Ryujinx.Ava.UI.Helpers deferral.Complete(); }); }); -#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed if (doWhileDeferred != null) { @@ -213,34 +150,42 @@ namespace Ryujinx.Ava.UI.Helpers } } - private static Grid CreateDialogTextContent(string primaryText, string secondaryText, int symbol) + private static Grid CreateTextDialogContent(string primaryText, string secondaryText, int symbol) { - Grid content = new Grid(); - content.RowDefinitions = new RowDefinitions() { new RowDefinition(), new RowDefinition() }; - content.ColumnDefinitions = new ColumnDefinitions() { new ColumnDefinition(GridLength.Auto), new ColumnDefinition() }; + Grid content = new() + { + RowDefinitions = new RowDefinitions() { new RowDefinition(), new RowDefinition() }, + ColumnDefinitions = new ColumnDefinitions() { new ColumnDefinition(GridLength.Auto), new ColumnDefinition() }, - content.MinHeight = 80; + MinHeight = 80 + }; + + SymbolIcon icon = new() + { + Symbol = (Symbol)symbol, + Margin = new Thickness(10), + FontSize = 40, + VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center + }; - SymbolIcon icon = new SymbolIcon { Symbol = (Symbol)symbol, Margin = new Thickness(10) }; - icon.FontSize = 40; - icon.VerticalAlignment = Avalonia.Layout.VerticalAlignment.Center; Grid.SetColumn(icon, 0); Grid.SetRowSpan(icon, 2); Grid.SetRow(icon, 0); - TextBlock primaryLabel = new TextBlock() + TextBlock primaryLabel = new() { - Text = primaryText, - Margin = new Thickness(5), + Text = primaryText, + Margin = new Thickness(5), TextWrapping = TextWrapping.Wrap, - MaxWidth = 450 + MaxWidth = 450 }; - TextBlock secondaryLabel = new TextBlock() + + TextBlock secondaryLabel = new() { - Text = secondaryText, - Margin = new Thickness(5), + Text = secondaryText, + Margin = new Thickness(5), TextWrapping = TextWrapping.Wrap, - MaxWidth = 450 + MaxWidth = 450 }; Grid.SetColumn(primaryLabel, 1); @@ -262,7 +207,7 @@ namespace Ryujinx.Ava.UI.Helpers string closeButton, string title) { - return await ShowContentDialog( + return await ShowTextDialog( title, primary, secondaryText, @@ -280,7 +225,7 @@ namespace Ryujinx.Ava.UI.Helpers string title, UserResult primaryButtonResult = UserResult.Yes) { - return await ShowContentDialog( + return await ShowTextDialog( string.IsNullOrWhiteSpace(title) ? LocaleManager.Instance[LocaleKeys.DialogConfirmationTitle] : title, primaryText, secondaryText, @@ -298,7 +243,7 @@ namespace Ryujinx.Ava.UI.Helpers internal static async Task CreateUpdaterInfoDialog(string primary, string secondaryText) { - await ShowContentDialog( + await ShowTextDialog( LocaleManager.Instance[LocaleKeys.DialogUpdaterTitle], primary, secondaryText, @@ -310,7 +255,7 @@ namespace Ryujinx.Ava.UI.Helpers internal static async Task CreateWarningDialog(string primary, string secondaryText) { - await ShowContentDialog( + await ShowTextDialog( LocaleManager.Instance[LocaleKeys.DialogWarningTitle], primary, secondaryText, @@ -324,7 +269,7 @@ namespace Ryujinx.Ava.UI.Helpers { Logger.Error?.Print(LogClass.Application, errorMessage); - await ShowContentDialog( + await ShowTextDialog( LocaleManager.Instance[LocaleKeys.DialogErrorTitle], LocaleManager.Instance[LocaleKeys.DialogErrorMessage], errorMessage, @@ -343,16 +288,15 @@ namespace Ryujinx.Ava.UI.Helpers _isChoiceDialogOpen = true; - UserResult response = - await ShowContentDialog( - title, - primary, - secondaryText, - LocaleManager.Instance[LocaleKeys.InputDialogYes], - "", - LocaleManager.Instance[LocaleKeys.InputDialogNo], - (int)Symbol.Help, - UserResult.Yes); + UserResult response = await ShowTextDialog( + title, + primary, + secondaryText, + LocaleManager.Instance[LocaleKeys.InputDialogYes], + "", + LocaleManager.Instance[LocaleKeys.InputDialogNo], + (int)Symbol.Help, + UserResult.Yes); _isChoiceDialogOpen = false; @@ -396,5 +340,98 @@ namespace Ryujinx.Ava.UI.Helpers return string.Empty; } + + public static async Task<ContentDialogResult> ShowAsync(ContentDialog contentDialog) + { + ContentDialogResult result; + + ContentDialogOverlayWindow contentDialogOverlayWindow = null; + + Window parent = GetMainWindow(); + + if (parent.IsActive && parent is MainWindow window && window.ViewModel.IsGameRunning) + { + contentDialogOverlayWindow = new() + { + Height = parent.Bounds.Height, + Width = parent.Bounds.Width, + Position = parent.PointToScreen(new Point()), + ShowInTaskbar = false + }; + + parent.PositionChanged += OverlayOnPositionChanged; + + void OverlayOnPositionChanged(object sender, PixelPointEventArgs e) + { + contentDialogOverlayWindow.Position = parent.PointToScreen(new Point()); + } + + contentDialogOverlayWindow.ContentDialog = contentDialog; + + bool opened = false; + + contentDialogOverlayWindow.Opened += OverlayOnActivated; + + async void OverlayOnActivated(object sender, EventArgs e) + { + if (opened) + { + return; + } + + opened = true; + + contentDialogOverlayWindow.Position = parent.PointToScreen(new Point()); + + result = await ShowDialog(); + } + + result = await contentDialogOverlayWindow.ShowDialog<ContentDialogResult>(parent); + } + else + { + result = await ShowDialog(); + } + + async Task<ContentDialogResult> ShowDialog() + { + if (contentDialogOverlayWindow is not null) + { + result = await contentDialog.ShowAsync(contentDialogOverlayWindow); + + contentDialogOverlayWindow!.Close(); + } + else + { + result = await contentDialog.ShowAsync(); + } + + return result; + } + + if (contentDialogOverlayWindow is not null) + { + contentDialogOverlayWindow.Content = null; + contentDialogOverlayWindow.Close(); + } + + return result; + } + + private static Window GetMainWindow() + { + if (Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime al) + { + foreach (Window item in al.Windows) + { + if (item.IsActive && item is MainWindow window) + { + return window; + } + } + } + + return null; + } } }
\ No newline at end of file diff --git a/Ryujinx.Ava/UI/ViewModels/MainWindowViewModel.cs b/Ryujinx.Ava/UI/ViewModels/MainWindowViewModel.cs index 9571af47..073c4902 100644 --- a/Ryujinx.Ava/UI/ViewModels/MainWindowViewModel.cs +++ b/Ryujinx.Ava/UI/ViewModels/MainWindowViewModel.cs @@ -87,8 +87,6 @@ namespace Ryujinx.Ava.UI.ViewModels private float _volume; private string _backendText; - public ApplicationData ListSelectedApplication; - public ApplicationData GridSelectedApplication; private bool _canUpdate; private Cursor _cursor; private string _title; @@ -97,6 +95,9 @@ namespace Ryujinx.Ava.UI.ViewModels private WindowState _windowState; private bool _isActive; + public ApplicationData ListSelectedApplication; + public ApplicationData GridSelectedApplication; + public event Action ReloadGameList; private string TitleName { get; set; } diff --git a/Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml.cs b/Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml.cs index 8c28abff..788f47a1 100644 --- a/Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml.cs @@ -36,10 +36,7 @@ namespace Ryujinx.Ava.UI.Views.Main private async void StopEmulation_Click(object sender, RoutedEventArgs e) { - await Task.Run(() => - { - Window.ViewModel.AppHost?.ShowExitPrompt(); - }); + await Window.ViewModel.AppHost?.ShowExitPrompt(); } private async void PauseEmulation_Click(object sender, RoutedEventArgs e) diff --git a/Ryujinx.Ava/UI/Views/Main/MainStatusBarView.axaml.cs b/Ryujinx.Ava/UI/Views/Main/MainStatusBarView.axaml.cs index d1050ddd..473de0ee 100644 --- a/Ryujinx.Ava/UI/Views/Main/MainStatusBarView.axaml.cs +++ b/Ryujinx.Ava/UI/Views/Main/MainStatusBarView.axaml.cs @@ -22,7 +22,7 @@ namespace Ryujinx.Ava.UI.Views.Main { base.OnAttachedToVisualTree(e); - if (this.VisualRoot is MainWindow window) + if (VisualRoot is MainWindow window) { Window = window; } diff --git a/Ryujinx.Ava/UI/Views/Main/MainViewControls.axaml.cs b/Ryujinx.Ava/UI/Views/Main/MainViewControls.axaml.cs index 841d59de..fd757893 100644 --- a/Ryujinx.Ava/UI/Views/Main/MainViewControls.axaml.cs +++ b/Ryujinx.Ava/UI/Views/Main/MainViewControls.axaml.cs @@ -22,7 +22,7 @@ namespace Ryujinx.Ava.UI.Views.Main { base.OnAttachedToVisualTree(e); - if (this.VisualRoot is MainWindow window) + if (VisualRoot is MainWindow window) { ViewModel = window.ViewModel; } diff --git a/Ryujinx.Ava/UI/Windows/AboutWindow.axaml b/Ryujinx.Ava/UI/Windows/AboutWindow.axaml index f446890c..7bd3e20d 100644 --- a/Ryujinx.Ava/UI/Windows/AboutWindow.axaml +++ b/Ryujinx.Ava/UI/Windows/AboutWindow.axaml @@ -1,253 +1,247 @@ <UserControl + x:Class="Ryujinx.Ava.UI.Windows.AboutWindow" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale" xmlns:flex="clr-namespace:Avalonia.Flexbox;assembly=Avalonia.Flexbox" + xmlns:locale="clr-namespace:Ryujinx.Ava.Common.Locale" + xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:viewModel="clr-namespace:Ryujinx.Ava.UI.ViewModels" - xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - mc:Ignorable="d" + Width="550" + Height="260" + Margin="0,-12,0,0" d:DesignHeight="260" d:DesignWidth="550" - Height="260" - Width="550" - x:Class="Ryujinx.Ava.UI.Windows.AboutWindow" - x:DataType="viewModel:AboutWindowViewModel" x:CompileBindings="True" - Margin="0 -12 0 0" - Focusable="True"> - <Design.DataContext> - <viewModel:AboutWindowViewModel /> - </Design.DataContext> - <Grid - HorizontalAlignment="Stretch" - VerticalAlignment="Stretch"> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="Auto" /> - <ColumnDefinition Width="Auto" /> - <ColumnDefinition Width="*" /> - </Grid.ColumnDefinitions> - <Grid + x:DataType="viewModel:AboutWindowViewModel" + Focusable="True" + mc:Ignorable="d"> + <Design.DataContext> + <viewModel:AboutWindowViewModel /> + </Design.DataContext> + <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto" /> + <ColumnDefinition Width="Auto" /> + <ColumnDefinition Width="*" /> + </Grid.ColumnDefinitions> + <Grid Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> - <Grid.RowDefinitions> - <RowDefinition Height="Auto" /> - <RowDefinition Height="*" /> - <RowDefinition Height="Auto" /> - </Grid.RowDefinitions> - <StackPanel - Grid.Row="0" - Spacing="10" - HorizontalAlignment="Stretch" - VerticalAlignment="Stretch"> - <Grid> - <Grid.ColumnDefinitions> - <ColumnDefinition Width="Auto" /> - <ColumnDefinition Width="*" /> - <ColumnDefinition Width="Auto" /> - </Grid.ColumnDefinitions> - <Image - Grid.Column="0" - Height="80" - Source="resm:Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png?assembly=Ryujinx.Ui.Common" /> - <flex:FlexPanel - Grid.Column="2" - HorizontalAlignment="Stretch" - VerticalAlignment="Stretch" - Direction="Column" - JustifyContent="SpaceAround" - RowSpacing="2"> - <TextBlock - FontSize="28" - FontWeight="Bold" - Text="Ryujinx" - TextAlignment="Left" /> - <TextBlock - Text="(REE-YOU-JINX)" - TextAlignment="Left" /> - </flex:FlexPanel> - </Grid> - <TextBlock - HorizontalAlignment="Center" - VerticalAlignment="Center" - Text="{Binding Version}" - TextAlignment="Center" - FontSize="10" - LineHeight="12" /> - </StackPanel> - <StackPanel - Grid.Row="2" - Spacing="10" - HorizontalAlignment="Stretch" - VerticalAlignment="Stretch"> - <TextBlock - HorizontalAlignment="Center" - Width="200" - Text="{locale:Locale AboutDisclaimerMessage}" - TextAlignment="Center" - TextWrapping="Wrap" - FontSize="10" - LineHeight="12" /> - <TextBlock - Name="AmiiboLabel" - HorizontalAlignment="Center" - Width="200" - PointerPressed="AmiiboLabel_OnPointerPressed" - Text="{locale:Locale AboutAmiiboDisclaimerMessage}" - TextAlignment="Center" - TextWrapping="Wrap" - FontSize="10" - LineHeight="12" /> - <StackPanel - HorizontalAlignment="Center" - Orientation="Horizontal" - Spacing="10"> - <Button - MaxHeight="30" - MaxWidth="30" - MinHeight="30" - MinWidth="30" - Padding="8" - CornerRadius="15" - Background="Transparent" - Click="Button_OnClick" - Tag="https://www.patreon.com/ryujinx" - ToolTip.Tip="{locale:Locale AboutPatreonUrlTooltipMessage}"> - <Image Source="{Binding PatreonLogo}" /> - </Button> - <Button - MaxHeight="30" - MaxWidth="30" - MinHeight="30" - MinWidth="30" - Padding="8" - CornerRadius="15" - Background="Transparent" - Click="Button_OnClick" - Tag="https://github.com/Ryujinx/Ryujinx" - ToolTip.Tip="{locale:Locale AboutGithubUrlTooltipMessage}"> - <Image Source="{Binding GithubLogo}" /> - </Button> - <Button - MaxHeight="30" - MaxWidth="30" - MinHeight="30" - MinWidth="30" - Padding="8" - CornerRadius="15" - Background="Transparent" - Click="Button_OnClick" - Tag="https://discordapp.com/invite/N2FmfVc" - ToolTip.Tip="{locale:Locale AboutDiscordUrlTooltipMessage}"> - <Image Source="{Binding DiscordLogo}" /> - </Button> - <Button - MaxHeight="30" - MaxWidth="30" - MinHeight="30" - MinWidth="30" - Padding="8" - CornerRadius="15" - Background="Transparent" - Click="Button_OnClick" - Tag="https://twitter.com/RyujinxEmu" - ToolTip.Tip="{locale:Locale AboutTwitterUrlTooltipMessage}"> - <Image Source="{Binding TwitterLogo}" /> - </Button> - <Button - MaxHeight="30" - MaxWidth="30" - MinHeight="30" - MinWidth="30" - Padding="8" - CornerRadius="15" - Background="Transparent" - Click="Button_OnClick" - Tag="https://www.ryujinx.org" - ToolTip.Tip="{locale:Locale AboutUrlTooltipMessage}"> - <ui:SymbolIcon - Symbol="Link" - Foreground="{DynamicResource ThemeForegroundColor}" /> - </Button> - </StackPanel> - </StackPanel> - </Grid> - <Border + <Grid.RowDefinitions> + <RowDefinition Height="Auto" /> + <RowDefinition Height="*" /> + <RowDefinition Height="Auto" /> + </Grid.RowDefinitions> + <StackPanel + Grid.Row="0" + HorizontalAlignment="Stretch" + VerticalAlignment="Stretch" + Spacing="10"> + <Grid> + <Grid.ColumnDefinitions> + <ColumnDefinition Width="Auto" /> + <ColumnDefinition Width="*" /> + <ColumnDefinition Width="Auto" /> + </Grid.ColumnDefinitions> + <Image + Grid.Column="0" + Height="80" + Source="resm:Ryujinx.Ui.Common.Resources.Logo_Ryujinx.png?assembly=Ryujinx.Ui.Common" /> + <flex:FlexPanel + Grid.Column="2" + HorizontalAlignment="Stretch" + VerticalAlignment="Stretch" + Direction="Column" + JustifyContent="SpaceAround" + RowSpacing="2"> + <TextBlock + FontSize="28" + FontWeight="Bold" + Text="Ryujinx" + TextAlignment="Left" /> + <TextBlock Text="(REE-YOU-JINX)" TextAlignment="Left" /> + </flex:FlexPanel> + </Grid> + <TextBlock + HorizontalAlignment="Center" + VerticalAlignment="Center" + FontSize="10" + LineHeight="12" + Text="{Binding Version}" + TextAlignment="Center" /> + </StackPanel> + <StackPanel + Grid.Row="2" + HorizontalAlignment="Stretch" + VerticalAlignment="Stretch" + Spacing="10"> + <TextBlock + Width="200" + HorizontalAlignment="Center" + FontSize="10" + LineHeight="12" + Text="{locale:Locale AboutDisclaimerMessage}" + TextAlignment="Center" + TextWrapping="Wrap" /> + <TextBlock + Name="AmiiboLabel" + Width="200" + HorizontalAlignment="Center" + FontSize="10" + LineHeight="12" + PointerPressed="AmiiboLabel_OnPointerPressed" + Text="{locale:Locale AboutAmiiboDisclaimerMessage}" + TextAlignment="Center" + TextWrapping="Wrap" /> + <StackPanel + HorizontalAlignment="Center" + Orientation="Horizontal" + Spacing="10"> + <Button + MinWidth="30" + MinHeight="30" + MaxWidth="30" + MaxHeight="30" + Padding="8" + Background="Transparent" + Click="Button_OnClick" + CornerRadius="15" + Tag="https://www.patreon.com/ryujinx" + ToolTip.Tip="{locale:Locale AboutPatreonUrlTooltipMessage}"> + <Image Source="{Binding PatreonLogo}" /> + </Button> + <Button + MinWidth="30" + MinHeight="30" + MaxWidth="30" + MaxHeight="30" + Padding="8" + Background="Transparent" + Click="Button_OnClick" + CornerRadius="15" + Tag="https://github.com/Ryujinx/Ryujinx" + ToolTip.Tip="{locale:Locale AboutGithubUrlTooltipMessage}"> + <Image Source="{Binding GithubLogo}" /> + </Button> + <Button + MinWidth="30" + MinHeight="30" + MaxWidth="30" + MaxHeight="30" + Padding="8" + Background="Transparent" + Click="Button_OnClick" + CornerRadius="15" + Tag="https://discordapp.com/invite/N2FmfVc" + ToolTip.Tip="{locale:Locale AboutDiscordUrlTooltipMessage}"> + <Image Source="{Binding DiscordLogo}" /> + </Button> + <Button + MinWidth="30" + MinHeight="30" + MaxWidth="30" + MaxHeight="30" + Padding="8" + Background="Transparent" + Click="Button_OnClick" + CornerRadius="15" + Tag="https://twitter.com/RyujinxEmu" + ToolTip.Tip="{locale:Locale AboutTwitterUrlTooltipMessage}"> + <Image Source="{Binding TwitterLogo}" /> + </Button> + <Button + MinWidth="30" + MinHeight="30" + MaxWidth="30" + MaxHeight="30" + Padding="8" + Background="Transparent" + Click="Button_OnClick" + CornerRadius="15" + Tag="https://www.ryujinx.org" + ToolTip.Tip="{locale:Locale AboutUrlTooltipMessage}"> + <ui:SymbolIcon Foreground="{DynamicResource ThemeForegroundColor}" Symbol="Link" /> + </Button> + </StackPanel> + </StackPanel> + </Grid> + <Border Grid.Column="1" Width="1" + Margin="20,0" VerticalAlignment="Stretch" BorderBrush="{DynamicResource ThemeControlBorderColor}" - BorderThickness="1,0,0,0" - Margin="20 0"/> - <Grid + BorderThickness="1,0,0,0" /> + <Grid Grid.Column="2" - HorizontalAlignment="Stretch" + HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> - <Grid.RowDefinitions> - <RowDefinition Height="Auto" /> - <RowDefinition Height="Auto" /> - <RowDefinition Height="Auto" /> - </Grid.RowDefinitions> - <StackPanel - Grid.Row="0" - Margin="0 10 0 0" - Spacing="2"> - <TextBlock - FontWeight="Bold" - FontSize="15" - Text="{locale:Locale AboutRyujinxAboutTitle}" /> - <TextBlock - FontSize="10" - TextWrapping="Wrap" - Text="{locale:Locale AboutRyujinxAboutContent}" /> - </StackPanel> - <StackPanel - Grid.Row="1" - Margin="0 10 0 0" - Spacing="2"> - <TextBlock - FontWeight="Bold" - FontSize="15" - Text="{locale:Locale AboutRyujinxMaintainersTitle}" /> - <TextBlock - FontSize="10" - TextWrapping="Wrap" - Text="{Binding Developers}" /> - <Button - HorizontalAlignment="Left" - Background="Transparent" - Click="Button_OnClick" - Padding="5" - Tag="https://github.com/Ryujinx/Ryujinx/graphs/contributors?type=a"> - <TextBlock - FontSize="10" - Text="{locale:Locale AboutRyujinxContributorsButtonHeader}" - TextAlignment="Right" - ToolTip.Tip="{locale:Locale AboutRyujinxMaintainersContentTooltipMessage}" /> - </Button> - </StackPanel> - <StackPanel - Grid.Row="2" - Margin="0 10 0 0" - Spacing="2"> - <TextBlock - FontWeight="Bold" - FontSize="15" - Text="{locale:Locale AboutRyujinxSupprtersTitle}" /> - <ScrollViewer - VerticalScrollBarVisibility="Visible" - HorizontalScrollBarVisibility="Disabled" - Height="70"> - <TextBlock - Name="SupportersTextBlock" - VerticalAlignment="Top" - FontSize="10" - TextWrapping="Wrap" - Text="{Binding Supporters}" /> - </ScrollViewer> - </StackPanel> - </Grid> - </Grid> + <Grid.RowDefinitions> + <RowDefinition Height="Auto" /> + <RowDefinition Height="Auto" /> + <RowDefinition Height="Auto" /> + </Grid.RowDefinitions> + <StackPanel + Grid.Row="0" + Margin="0,10,0,0" + Spacing="2"> + <TextBlock + FontSize="15" + FontWeight="Bold" + Text="{locale:Locale AboutRyujinxAboutTitle}" /> + <TextBlock + FontSize="10" + Text="{locale:Locale AboutRyujinxAboutContent}" + TextWrapping="Wrap" /> + </StackPanel> + <StackPanel + Grid.Row="1" + Margin="0,10,0,0" + Spacing="2"> + <TextBlock + FontSize="15" + FontWeight="Bold" + Text="{locale:Locale AboutRyujinxMaintainersTitle}" /> + <TextBlock + FontSize="10" + Text="{Binding Developers}" + TextWrapping="Wrap" /> + <Button + Padding="5" + HorizontalAlignment="Left" + Background="Transparent" + Click="Button_OnClick" + Tag="https://github.com/Ryujinx/Ryujinx/graphs/contributors?type=a"> + <TextBlock + FontSize="10" + Text="{locale:Locale AboutRyujinxContributorsButtonHeader}" + TextAlignment="Right" + ToolTip.Tip="{locale:Locale AboutRyujinxMaintainersContentTooltipMessage}" /> + </Button> + </StackPanel> + <StackPanel + Grid.Row="2" + Margin="0,10,0,0" + Spacing="2"> + <TextBlock + FontSize="15" + FontWeight="Bold" + Text="{locale:Locale AboutRyujinxSupprtersTitle}" /> + <ScrollViewer + Height="70" + HorizontalScrollBarVisibility="Disabled" + VerticalScrollBarVisibility="Visible"> + <TextBlock + Name="SupportersTextBlock" + VerticalAlignment="Top" + FontSize="10" + Text="{Binding Supporters}" + TextWrapping="Wrap" /> + </ScrollViewer> + </StackPanel> + </Grid> + </Grid> </UserControl>
\ No newline at end of file diff --git a/Ryujinx.Ava/UI/Windows/AboutWindow.axaml.cs b/Ryujinx.Ava/UI/Windows/AboutWindow.axaml.cs index 5dbbbcdd..36a28605 100644 --- a/Ryujinx.Ava/UI/Windows/AboutWindow.axaml.cs +++ b/Ryujinx.Ava/UI/Windows/AboutWindow.axaml.cs @@ -4,6 +4,7 @@ using Avalonia.Interactivity; using Avalonia.Styling; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ui.Common.Helper; using System.Threading.Tasks; @@ -22,14 +23,12 @@ namespace Ryujinx.Ava.UI.Windows public static async Task Show() { - var content = new AboutWindow(); - ContentDialog contentDialog = new() { - PrimaryButtonText = "", + PrimaryButtonText = "", SecondaryButtonText = "", - CloseButtonText = LocaleManager.Instance[LocaleKeys.UserProfilesClose], - Content = content + CloseButtonText = LocaleManager.Instance[LocaleKeys.UserProfilesClose], + Content = new AboutWindow() }; Style closeButton = new(x => x.Name("CloseButton")); @@ -41,7 +40,7 @@ namespace Ryujinx.Ava.UI.Windows contentDialog.Styles.Add(closeButton); contentDialog.Styles.Add(closeButtonParent); - await contentDialog.ShowAsync(); + await ContentDialogHelper.ShowAsync(contentDialog); } private void Button_OnClick(object sender, RoutedEventArgs e) |