From ef73c926d02cd674277bfa8c04562dd4d30d2897 Mon Sep 17 00:00:00 2001 From: Zelin Liao Date: Sat, 12 Jun 2021 22:38:40 +0800 Subject: [PATCH] Add Margin When Enabling Box Shadows --- Flow.Launcher.Core/Resource/Theme.cs | 41 +++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index a5f12bbb908..fe64e0c3e17 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -17,6 +17,8 @@ namespace Flow.Launcher.Core.Resource { public class Theme { + private const int ShadowExtraMargin = 12; + private readonly List _themeDirectories = new List(); private ResourceDictionary _oldResource; private string _oldTheme; @@ -224,6 +226,27 @@ public void AddDropShadowEffectToCurrentTheme() BlurRadius = 15 }; + var marginSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.MarginProperty) as Setter; + if (marginSetter == null) + { + marginSetter = new Setter() + { + Property = Border.MarginProperty, + Value = new Thickness(ShadowExtraMargin), + }; + windowBorderStyle.Setters.Add(marginSetter); + } + else + { + var baseMargin = (Thickness) marginSetter.Value; + var newMargin = new Thickness( + baseMargin.Left + ShadowExtraMargin, + baseMargin.Top + ShadowExtraMargin, + baseMargin.Right + ShadowExtraMargin, + baseMargin.Bottom + ShadowExtraMargin); + marginSetter.Value = newMargin; + } + windowBorderStyle.Setters.Add(effectSetter); UpdateResourceDictionary(dict); @@ -234,7 +257,23 @@ public void RemoveDropShadowEffectToCurrentTheme() var dict = CurrentThemeResourceDictionary(); var windowBorderStyle = dict["WindowBorderStyle"] as Style; - dict.Remove(Border.EffectProperty); + var effectSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.EffectProperty) as Setter; + var marginSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.MarginProperty) as Setter; + + if(effectSetter != null) + { + windowBorderStyle.Setters.Remove(effectSetter); + } + if (marginSetter != null) + { + var currentMargin = (Thickness)marginSetter.Value; + var newMargin = new Thickness( + currentMargin.Left - ShadowExtraMargin, + currentMargin.Top - ShadowExtraMargin, + currentMargin.Right - ShadowExtraMargin, + currentMargin.Bottom - ShadowExtraMargin); + marginSetter.Value = newMargin; + } UpdateResourceDictionary(dict); }