From df264ac20d4546513f99ef222153a37e2b3c801a Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Fri, 29 Nov 2024 07:58:35 +0100 Subject: [PATCH] overhaul ThemeHelper --- Pilz.UI.Telerik/Theming/HighContrastMode.cs | 8 ++++ Pilz.UI.Telerik/Theming/ThemeDefinition.cs | 17 ++++++++ Pilz.UI.Telerik/Theming/ThemeHelper.cs | 46 ++++++++++++++++----- 3 files changed, 60 insertions(+), 11 deletions(-) create mode 100644 Pilz.UI.Telerik/Theming/HighContrastMode.cs create mode 100644 Pilz.UI.Telerik/Theming/ThemeDefinition.cs diff --git a/Pilz.UI.Telerik/Theming/HighContrastMode.cs b/Pilz.UI.Telerik/Theming/HighContrastMode.cs new file mode 100644 index 0000000..a8fe806 --- /dev/null +++ b/Pilz.UI.Telerik/Theming/HighContrastMode.cs @@ -0,0 +1,8 @@ +namespace Pilz.UI.Telerik.Theming; + +public enum HighContrastMode +{ + Auto, + Enable, + Disable, +} diff --git a/Pilz.UI.Telerik/Theming/ThemeDefinition.cs b/Pilz.UI.Telerik/Theming/ThemeDefinition.cs new file mode 100644 index 0000000..f32022d --- /dev/null +++ b/Pilz.UI.Telerik/Theming/ThemeDefinition.cs @@ -0,0 +1,17 @@ +namespace Pilz.UI.Telerik.Theming; + +public class ThemeDefinition +{ + public ApplicationTheme Theme { get; set; } + public HighContrastMode HighContrast { get; set; } + + public ThemeDefinition() + { + } + + public ThemeDefinition(ApplicationTheme theme, HighContrastMode highContrast) + { + Theme = theme; + HighContrast = highContrast; + } +} diff --git a/Pilz.UI.Telerik/Theming/ThemeHelper.cs b/Pilz.UI.Telerik/Theming/ThemeHelper.cs index 920c831..cfc424a 100644 --- a/Pilz.UI.Telerik/Theming/ThemeHelper.cs +++ b/Pilz.UI.Telerik/Theming/ThemeHelper.cs @@ -4,32 +4,56 @@ namespace Pilz.UI.Telerik.Theming; public static class ThemeHelper { + [Obsolete()] public static void ApplyApplicationTheme(ApplicationTheme theme, Func getLightTheme, Func getDarkTheme) { ApplyApplicationTheme(theme, getLightTheme, getDarkTheme, getDarkTheme); } - + + [Obsolete()] public static void ApplyApplicationTheme(ApplicationTheme theme, Func getLightTheme, Func getDarkTheme, Func getGrayTheme) { - ThemeResolutionService.ApplicationThemeName = GetThemeName(theme, getLightTheme, getDarkTheme, getGrayTheme).ThemeName; + ApplyApplicationTheme(new(theme, HighContrastMode.Auto), def => def.Theme switch + { + ApplicationTheme.Light => getLightTheme(), + ApplicationTheme.Dark => getDarkTheme(), + ApplicationTheme.Gray => getGrayTheme(), + _ => throw new NotImplementedException(), + }); } - public static RadThemeComponentBase GetThemeName(ApplicationTheme theme, Func getLightTheme, Func getDarkTheme, Func getGrayTheme) + public static void ApplyApplicationTheme(ThemeDefinition themeDefinition, Func getTheme) { - RadThemeComponentBase? themeToUse; + ThemeResolutionService.ApplicationThemeName = GetThemeName(themeDefinition, getTheme).ThemeName; + } - if (theme == ApplicationTheme.Light || theme == ApplicationTheme.Auto && WindowsSettings.AppsUseLightTheme) - themeToUse = getLightTheme(); - else if (theme == ApplicationTheme.Dark || theme == ApplicationTheme.Auto && !WindowsSettings.AppsUseLightTheme) - themeToUse = getDarkTheme(); - else /*if (CoreSettings.AppTheme == ApplicationTheme.Gray)*/ - themeToUse = getGrayTheme(); + public static RadThemeComponentBase GetThemeName(ThemeDefinition themeDefinition, Func getTheme) + { + ApplicationTheme themeToUse; + HighContrastMode highContrast; - return themeToUse; + if (themeDefinition.HighContrast == HighContrastMode.Enable || themeDefinition.HighContrast == HighContrastMode.Auto && SystemInformation.HighContrast) + highContrast = HighContrastMode.Enable; + else + highContrast = HighContrastMode.Disable; + + if (themeDefinition.Theme == ApplicationTheme.Light || themeDefinition.Theme == ApplicationTheme.Auto && WindowsSettings.AppsUseLightTheme) + themeToUse = ApplicationTheme.Light; + else if (themeDefinition.Theme == ApplicationTheme.Dark || themeDefinition.Theme == ApplicationTheme.Auto && !WindowsSettings.AppsUseLightTheme) + themeToUse = ApplicationTheme.Dark; + else + themeToUse = ApplicationTheme.Gray; + + return getTheme(new(themeToUse, highContrast)); } public static bool IsDarkTheme(ApplicationTheme theme) { return theme == ApplicationTheme.Dark || theme == ApplicationTheme.Gray || theme == ApplicationTheme.Auto && !WindowsSettings.AppsUseLightTheme; } + + public static bool IsHighContrast(HighContrastMode theme) + { + return theme == HighContrastMode.Enable || theme == HighContrastMode.Auto && SystemInformation.HighContrast; + } }