aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.Ava/UI/Controls/GameGridView.axaml.cs4
-rw-r--r--Ryujinx.Ava/UI/Controls/GameListView.axaml.cs4
-rw-r--r--Ryujinx.Ava/UI/Helpers/ContentDialogHelper.cs329
-rw-r--r--Ryujinx.Ava/UI/ViewModels/MainWindowViewModel.cs5
-rw-r--r--Ryujinx.Ava/UI/Views/Main/MainMenuBarView.axaml.cs5
-rw-r--r--Ryujinx.Ava/UI/Views/Main/MainStatusBarView.axaml.cs2
-rw-r--r--Ryujinx.Ava/UI/Views/Main/MainViewControls.axaml.cs2
-rw-r--r--Ryujinx.Ava/UI/Windows/AboutWindow.axaml460
-rw-r--r--Ryujinx.Ava/UI/Windows/AboutWindow.axaml.cs11
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)