revise theme structure to achieve the property update

This commit is contained in:
Hongtao Zhang 2023-01-09 09:39:50 -06:00
parent f109fb8a3c
commit 4a0891cac7
No known key found for this signature in database
GPG key ID: 75F655B91C7AC9BB
2 changed files with 19 additions and 12 deletions

View file

@ -82,13 +82,14 @@ namespace Flow.Launcher.Core.Resource
{ {
if (string.IsNullOrEmpty(path)) if (string.IsNullOrEmpty(path))
throw new DirectoryNotFoundException("Theme path can't be found <{path}>"); throw new DirectoryNotFoundException("Theme path can't be found <{path}>");
Settings.Theme = theme;
// reload all resources even if the theme itself hasn't changed in order to pickup changes // reload all resources even if the theme itself hasn't changed in order to pickup changes
// to things like fonts // to things like fonts
UpdateResourceDictionary(GetResourceDictionary()); UpdateResourceDictionary(GetResourceDictionary(theme));
Settings.Theme = theme;
//always allow re-loading default theme, in case of failure of switching to a new theme from default theme //always allow re-loading default theme, in case of failure of switching to a new theme from default theme
if (_oldTheme != theme || theme == defaultTheme) if (_oldTheme != theme || theme == defaultTheme)
{ {
@ -134,9 +135,9 @@ namespace Flow.Launcher.Core.Resource
_oldResource = dictionaryToUpdate; _oldResource = dictionaryToUpdate;
} }
private ResourceDictionary CurrentThemeResourceDictionary() private ResourceDictionary GetThemeResourceDictionary(string theme)
{ {
var uri = GetThemePath(Settings.Theme); var uri = GetThemePath(theme);
var dict = new ResourceDictionary var dict = new ResourceDictionary
{ {
Source = new Uri(uri, UriKind.Absolute) Source = new Uri(uri, UriKind.Absolute)
@ -145,10 +146,12 @@ namespace Flow.Launcher.Core.Resource
return dict; return dict;
} }
public ResourceDictionary GetResourceDictionary() private ResourceDictionary CurrentThemeResourceDictionary() => GetThemeResourceDictionary(Settings.Theme);
public ResourceDictionary GetResourceDictionary(string theme)
{ {
var dict = CurrentThemeResourceDictionary(); var dict = GetThemeResourceDictionary(theme);
if (dict["QueryBoxStyle"] is Style queryBoxStyle && if (dict["QueryBoxStyle"] is Style queryBoxStyle &&
dict["QuerySuggestionBoxStyle"] is Style querySuggestionBoxStyle) dict["QuerySuggestionBoxStyle"] is Style querySuggestionBoxStyle)
{ {
@ -200,6 +203,11 @@ namespace Flow.Launcher.Core.Resource
return dict; return dict;
} }
private ResourceDictionary GetCurrentResourceDictionary( )
{
return GetResourceDictionary(Settings.Theme);
}
public List<string> LoadAvailableThemes() public List<string> LoadAvailableThemes()
{ {
List<string> themes = new List<string>(); List<string> themes = new List<string>();
@ -229,7 +237,7 @@ namespace Flow.Launcher.Core.Resource
public void AddDropShadowEffectToCurrentTheme() public void AddDropShadowEffectToCurrentTheme()
{ {
var dict = GetResourceDictionary(); var dict = GetCurrentResourceDictionary();
var windowBorderStyle = dict["WindowBorderStyle"] as Style; var windowBorderStyle = dict["WindowBorderStyle"] as Style;
@ -273,7 +281,7 @@ namespace Flow.Launcher.Core.Resource
public void RemoveDropShadowEffectFromCurrentTheme() public void RemoveDropShadowEffectFromCurrentTheme()
{ {
var dict = CurrentThemeResourceDictionary(); var dict = GetCurrentResourceDictionary();
var windowBorderStyle = dict["WindowBorderStyle"] as Style; var windowBorderStyle = dict["WindowBorderStyle"] as Style;
var effectSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.EffectProperty) as Setter; var effectSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.EffectProperty) as Setter;

View file

@ -407,7 +407,6 @@ namespace Flow.Launcher.ViewModel
get { return Settings.Theme; } get { return Settings.Theme; }
set set
{ {
Settings.Theme = value;
ThemeManager.Instance.ChangeTheme(value); ThemeManager.Instance.ChangeTheme(value);
if (ThemeManager.Instance.BlurEnabled && Settings.UseDropShadowEffect) if (ThemeManager.Instance.BlurEnabled && Settings.UseDropShadowEffect)