Add the "Auto" theme option in setting (#6611)
* Add "Follow OS theme" option * Update App.axaml.cs * Add "Follow OS theme" option * Update App.axaml.cs * Remove `this` * Remove annotation for nullable reference * Change into switch expression to make it concise * Change comments to XML docs * Update en_US.json * Fix icons in About dialog do not response to "auto" theme The theme icons seemingly use Dark variant event when the OS theme is light. In addition, I added ThemeManager common to make it accessible for both App and AboutWindow * Newline at the end * newline moment * Update ThemeManager.cs * bait to switch to lf * change to lf * temp. revert * Add back ThemeManager.cs common, pls pass the format check * I found the mistake: should have put `ThemeManager.OnThemeChanged();` in try block Finally solve the formatting check * test formatting * Update App.axaml.cs * Ok i seem to forget to add version lol * Fix info CA1816
This commit is contained in:
@@ -1,8 +1,10 @@
|
||||
using Avalonia;
|
||||
using Avalonia.Controls.ApplicationLifetimes;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using Avalonia.Platform;
|
||||
using Avalonia.Styling;
|
||||
using Avalonia.Threading;
|
||||
using Ryujinx.Ava.Common;
|
||||
using Ryujinx.Ava.Common.Locale;
|
||||
using Ryujinx.Ava.UI.Helpers;
|
||||
using Ryujinx.Ava.UI.Windows;
|
||||
@@ -84,7 +86,7 @@ namespace Ryujinx.Ava
|
||||
ApplyConfiguredTheme();
|
||||
}
|
||||
|
||||
private void ApplyConfiguredTheme()
|
||||
public void ApplyConfiguredTheme()
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -92,13 +94,18 @@ namespace Ryujinx.Ava
|
||||
|
||||
if (string.IsNullOrWhiteSpace(baseStyle))
|
||||
{
|
||||
ConfigurationState.Instance.UI.BaseStyle.Value = "Dark";
|
||||
ConfigurationState.Instance.UI.BaseStyle.Value = "Auto";
|
||||
|
||||
baseStyle = ConfigurationState.Instance.UI.BaseStyle;
|
||||
}
|
||||
|
||||
ThemeVariant systemTheme = DetectSystemTheme();
|
||||
|
||||
ThemeManager.OnThemeChanged();
|
||||
|
||||
RequestedThemeVariant = baseStyle switch
|
||||
{
|
||||
"Auto" => systemTheme,
|
||||
"Light" => ThemeVariant.Light,
|
||||
"Dark" => ThemeVariant.Dark,
|
||||
_ => ThemeVariant.Default,
|
||||
@@ -111,5 +118,28 @@ namespace Ryujinx.Ava
|
||||
ShowRestartDialog();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Converts a PlatformThemeVariant value to the corresponding ThemeVariant value.
|
||||
/// </summary>
|
||||
public static ThemeVariant ConvertThemeVariant(PlatformThemeVariant platformThemeVariant) =>
|
||||
platformThemeVariant switch
|
||||
{
|
||||
PlatformThemeVariant.Dark => ThemeVariant.Dark,
|
||||
PlatformThemeVariant.Light => ThemeVariant.Light,
|
||||
_ => ThemeVariant.Default,
|
||||
};
|
||||
|
||||
public static ThemeVariant DetectSystemTheme()
|
||||
{
|
||||
if (Application.Current is App app)
|
||||
{
|
||||
var colorValues = app.PlatformSettings.GetColorValues();
|
||||
|
||||
return ConvertThemeVariant(colorValues.ThemeVariant);
|
||||
}
|
||||
|
||||
return ThemeVariant.Default;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user