From ed14c45fd241b37ba0e36ad91be5d2c516b8a833 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sun, 8 Mar 2026 23:46:08 +0800 Subject: [PATCH] Refactor brush creation with ThemeHelper utility Introduce ThemeHelper.GetFreezeSolidColorBrush to centralize and reuse SolidColorBrush creation and freezing logic. Refactor Theme.cs to use this helper, improving code clarity and maintainability. Also, use Brushes.Transparent directly where appropriate. --- Flow.Launcher.Core/Resource/Theme.cs | 22 ++++++---------------- Flow.Launcher.Core/Resource/ThemeHelper.cs | 13 +++++++++++++ 2 files changed, 19 insertions(+), 16 deletions(-) create mode 100644 Flow.Launcher.Core/Resource/ThemeHelper.cs diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index 62713b441..5e0e2894a 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -674,16 +674,12 @@ namespace Flow.Launcher.Core.Resource if (backdropType == BackdropTypes.Mica || backdropType == BackdropTypes.MicaAlt) { windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType().FirstOrDefault(x => x.Property == Control.BackgroundProperty)); - var brush = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0)); - brush.Freeze(); - windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, brush)); + windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, ThemeHelper.GetFreezeSolidColorBrush(Color.FromArgb(1, 0, 0, 0)))); } else if (backdropType == BackdropTypes.Acrylic) { windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType().FirstOrDefault(x => x.Property == Control.BackgroundProperty)); - var brush = new SolidColorBrush(Colors.Transparent); - brush.Freeze(); - windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, brush)); + windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Transparent)); } // For themes with blur enabled, the window border is rendered by the system, so it's treated as a simple rectangle regardless of thickness. @@ -806,10 +802,8 @@ namespace Flow.Launcher.Core.Resource } // Apply background color (remove transparency in color) - Color backgroundColor = Color.FromRgb(bgColor.Value.R, bgColor.Value.G, bgColor.Value.B); - var brush = new SolidColorBrush(backgroundColor); - brush.Freeze(); - previewStyle.Setters.Add(new Setter(Border.BackgroundProperty, brush)); + var backgroundColor = Color.FromRgb(bgColor.Value.R, bgColor.Value.G, bgColor.Value.B); + previewStyle.Setters.Add(new Setter(Border.BackgroundProperty, ThemeHelper.GetFreezeSolidColorBrush(backgroundColor))); // The blur theme keeps the corner round fixed (applying DWM code to modify it causes rendering issues). // The non-blur theme retains the previously set WindowBorderStyle. @@ -923,15 +917,11 @@ namespace Flow.Launcher.Core.Resource // Only set the background to transparent if the theme supports blur if (backdropType == BackdropTypes.Mica || backdropType == BackdropTypes.MicaAlt) { - var backgroundBrush = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0)); - backgroundBrush.Freeze(); - mainWindow.Background = backgroundBrush; + mainWindow.Background = ThemeHelper.GetFreezeSolidColorBrush(Color.FromArgb(1, 0, 0, 0)); } else { - var backgroundBrush = new SolidColorBrush(selectedBG); - backgroundBrush.Freeze(); - mainWindow.Background = backgroundBrush; + mainWindow.Background = ThemeHelper.GetFreezeSolidColorBrush(selectedBG); } } } diff --git a/Flow.Launcher.Core/Resource/ThemeHelper.cs b/Flow.Launcher.Core/Resource/ThemeHelper.cs new file mode 100644 index 000000000..dd998e19a --- /dev/null +++ b/Flow.Launcher.Core/Resource/ThemeHelper.cs @@ -0,0 +1,13 @@ +using System.Windows.Media; + +namespace Flow.Launcher.Core.Resource; + +public static class ThemeHelper +{ + public static SolidColorBrush GetFreezeSolidColorBrush(Color color) + { + var brush = new SolidColorBrush(color); + brush.Freeze(); + return brush; + } +}