@@ -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
0 commit comments