Skip to content

Commit f0b1422

Browse files
committed
Change AddShadow Logic
1 parent ff18abc commit f0b1422

File tree

2 files changed

+139
-69
lines changed

2 files changed

+139
-69
lines changed

Flow.Launcher.Core/Resource/Theme.cs

Lines changed: 131 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,69 @@ public void RefreshFrame()
153153

154154
//Methods.SetWindowAttribute(new WindowInteropHelper(mainWindow).Handle, DWMWINDOWATTRIBUTE.DWMWA_BORDER_COLOR, 0x00FF0000);
155155
//Methods.SetWindowAttribute(new WindowInteropHelper(mainWindow).Handle, DWMWINDOWATTRIBUTE.DWMWA_SYSTEMBACKDROP_TYPE, 3);
156+
157+
if (!_settings.UseDropShadowEffect && BlurEnabled)
158+
{
159+
_settings.UseDropShadowEffect = true;
160+
AddDropShadowEffectToCurrentTheme();
161+
}
162+
163+
if (_settings.UseDropShadowEffect)
164+
{
165+
AddDropShadowEffectToCurrentTheme();
166+
}
167+
//else if (!_settings.usedropshadoweffect && blurenabled)
168+
//{
169+
// adddropshadoweffecttocurrenttheme();
170+
// _settings.usedropshadoweffect = true;
171+
//}
156172
SetBlurForWindow();
157173
//SetCornerForWindow();
158174
}
159175

176+
public void AutoDropShadow()
177+
{
178+
if (_settings.UseDropShadowEffect)
179+
{
180+
RemoveDropShadowEffectFromCurrentTheme();
181+
if (BlurEnabled)
182+
{
183+
Debug.WriteLine("이거는 블러있는 테마이므로 외곽선 주고 그림자");
184+
SetWindowCornerPreference("Round");
185+
}
186+
else
187+
{
188+
Debug.WriteLine("이거는 블러없는 테마");
189+
AddDropShadowEffectToCurrentTheme();
190+
}
191+
}
192+
else
193+
{
194+
RemoveDropShadowEffectFromCurrentTheme();
195+
if (BlurEnabled)
196+
{
197+
SetWindowCornerPreference("Default");
198+
}
199+
else
200+
{
201+
RemoveDropShadowEffectFromCurrentTheme();
202+
}
203+
}
204+
}
205+
206+
public void SetWindowCornerPreference(string cornerType)
207+
{
208+
DWM_WINDOW_CORNER_PREFERENCE preference = cornerType switch
209+
{
210+
"DoNotRound" => DWM_WINDOW_CORNER_PREFERENCE.DoNotRound,
211+
"Round" => DWM_WINDOW_CORNER_PREFERENCE.Round,
212+
"RoundSmall" => DWM_WINDOW_CORNER_PREFERENCE.RoundSmall,
213+
"Default" => DWM_WINDOW_CORNER_PREFERENCE.Default,
214+
_ => DWM_WINDOW_CORNER_PREFERENCE.Default,
215+
};
216+
217+
SetWindowCornerPreference(mainWindow, preference);
218+
}
160219

161220
public void SetCornerForWindow()
162221
{
@@ -465,10 +524,11 @@ public bool ChangeTheme(string theme)
465524
}
466525

467526
BlurEnabled = Win32Helper.IsBlurTheme();
468-
469-
if (_settings.UseDropShadowEffect && !BlurEnabled)
527+
if (_settings.UseDropShadowEffect)
470528
AddDropShadowEffectToCurrentTheme();
471529

530+
531+
472532
//Win32Helper.SetBlurForWindow(Application.Current.MainWindow, BlurEnabled);
473533
SetBlurForWindow();
474534
}
@@ -656,76 +716,86 @@ private string GetThemePath(string themeName)
656716

657717
public void AddDropShadowEffectToCurrentTheme()
658718
{
659-
var dict = GetCurrentResourceDictionary();
719+
SetWindowCornerPreference("Default");
720+
if (BlurEnabled)
721+
{
722+
SetWindowCornerPreference("Round");
723+
}
724+
else
725+
{
726+
var dict = GetCurrentResourceDictionary();
660727

661-
//var windowBorderStyle = dict["WindowBorderStyle"] as Style;
728+
var windowBorderStyle = dict["WindowBorderStyle"] as Style;
662729

663-
//var effectSetter = new Setter
664-
//{
665-
// Property = Border.EffectProperty,
666-
// Value = new DropShadowEffect
667-
// {
668-
// Opacity = 0.3,
669-
// ShadowDepth = 12,
670-
// Direction = 270,
671-
// BlurRadius = 30
672-
// }
673-
//};
674-
675-
//var marginSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.MarginProperty) as Setter;
676-
//if (marginSetter == null)
677-
//{
678-
// var margin = new Thickness(ShadowExtraMargin, 12, ShadowExtraMargin, ShadowExtraMargin);
679-
// marginSetter = new Setter()
680-
// {
681-
// Property = Border.MarginProperty,
682-
// Value = margin,
683-
// };
684-
// windowBorderStyle.Setters.Add(marginSetter);
685-
686-
// SetResizeBoarderThickness(margin);
687-
//}
688-
//else
689-
//{
690-
// var baseMargin = (Thickness)marginSetter.Value;
691-
// var newMargin = new Thickness(
692-
// baseMargin.Left + ShadowExtraMargin,
693-
// baseMargin.Top + ShadowExtraMargin,
694-
// baseMargin.Right + ShadowExtraMargin,
695-
// baseMargin.Bottom + ShadowExtraMargin);
696-
// marginSetter.Value = newMargin;
697-
698-
// SetResizeBoarderThickness(newMargin);
699-
//}
730+
var effectSetter = new Setter
731+
{
732+
Property = Border.EffectProperty,
733+
Value = new DropShadowEffect
734+
{
735+
Opacity = 0.3,
736+
ShadowDepth = 12,
737+
Direction = 270,
738+
BlurRadius = 30
739+
}
740+
};
741+
742+
var marginSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.MarginProperty) as Setter;
743+
if (marginSetter == null)
744+
{
745+
var margin = new Thickness(ShadowExtraMargin, 12, ShadowExtraMargin, ShadowExtraMargin);
746+
marginSetter = new Setter()
747+
{
748+
Property = Border.MarginProperty,
749+
Value = margin,
750+
};
751+
windowBorderStyle.Setters.Add(marginSetter);
752+
753+
SetResizeBoarderThickness(margin);
754+
}
755+
else
756+
{
757+
var baseMargin = (Thickness)marginSetter.Value;
758+
var newMargin = new Thickness(
759+
baseMargin.Left + ShadowExtraMargin,
760+
baseMargin.Top + ShadowExtraMargin,
761+
baseMargin.Right + ShadowExtraMargin,
762+
baseMargin.Bottom + ShadowExtraMargin);
763+
marginSetter.Value = newMargin;
764+
765+
SetResizeBoarderThickness(newMargin);
766+
}
700767

701-
//windowBorderStyle.Setters.Add(effectSetter);
768+
windowBorderStyle.Setters.Add(effectSetter);
702769

703-
UpdateResourceDictionary(dict);
770+
UpdateResourceDictionary(dict);
771+
}
704772
}
705773

706774
public void RemoveDropShadowEffectFromCurrentTheme()
707775
{
776+
SetWindowCornerPreference("Default");
777+
708778
var dict = GetCurrentResourceDictionary();
709-
mainWindow.WindowStyle = WindowStyle.None;
710-
//var windowBorderStyle = dict["WindowBorderStyle"] as Style;
779+
//mainWindow.WindowStyle = WindowStyle.None;
780+
var windowBorderStyle = dict["WindowBorderStyle"] as Style;
711781

712-
//var effectSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.EffectProperty) as Setter;
713-
//var marginSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.MarginProperty) as Setter;
782+
var effectSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.EffectProperty) as Setter;
783+
var marginSetter = windowBorderStyle.Setters.FirstOrDefault(setterBase => setterBase is Setter setter && setter.Property == Border.MarginProperty) as Setter;
714784

715-
//if (effectSetter != null)
716-
//{
717-
// windowBorderStyle.Setters.Remove(effectSetter);
718-
//}
719-
//if (marginSetter != null)
720-
//{
721-
// var currentMargin = (Thickness)marginSetter.Value;
722-
// var newMargin = new Thickness(
723-
// currentMargin.Left - ShadowExtraMargin,
724-
// currentMargin.Top - ShadowExtraMargin,
725-
// currentMargin.Right - ShadowExtraMargin,
726-
// currentMargin.Bottom - ShadowExtraMargin);
727-
// marginSetter.Value = newMargin;
728-
//}
785+
if (effectSetter != null)
786+
{
787+
windowBorderStyle.Setters.Remove(effectSetter);
788+
}
789+
if (marginSetter != null)
790+
{
791+
var currentMargin = (Thickness)marginSetter.Value;
792+
var newMargin = new Thickness(
793+
currentMargin.Left - ShadowExtraMargin,
794+
currentMargin.Top - ShadowExtraMargin,
795+
currentMargin.Right - ShadowExtraMargin,
796+
currentMargin.Bottom - ShadowExtraMargin);
797+
marginSetter.Value = newMargin;
798+
}
729799

730800
SetResizeBoarderThickness(null);
731801

Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,14 @@ public bool DropShadowEffect
5353
return;
5454
}
5555

56-
//if (value)
57-
//{
58-
// ThemeManager.Instance.AddDropShadowEffectToCurrentTheme();
59-
//}
60-
//else
61-
//{
62-
// ThemeManager.Instance.RemoveDropShadowEffectFromCurrentTheme();
63-
//}
56+
if (value)
57+
{
58+
ThemeManager.Instance.AddDropShadowEffectToCurrentTheme();
59+
}
60+
else
61+
{
62+
ThemeManager.Instance.RemoveDropShadowEffectFromCurrentTheme();
63+
}
6464

6565
Settings.UseDropShadowEffect = value;
6666
}

0 commit comments

Comments
 (0)