Add BackdropType in setting

This commit is contained in:
DB p 2025-03-09 09:46:30 +09:00
parent 1345470683
commit 7e622b7353
3 changed files with 79 additions and 0 deletions

View file

@ -76,6 +76,8 @@ namespace Flow.Launcher.Infrastructure.UserSettings
}
public bool UseDropShadowEffect { get; set; } = true;
public BackdropTypes BackdropType{ get; set; } = BackdropTypes.None;
/* Appearance Settings. It should be separated from the setting later.*/
public double WindowHeightSize { get; set; } = 42;
public double ItemHeightSize { get; set; } = 58;
@ -426,4 +428,12 @@ namespace Flow.Launcher.Infrastructure.UserSettings
Fast,
Custom
}
public enum BackdropTypes
{
None,
Acrylic,
Mica,
MicaAlt
}
}

View file

@ -15,6 +15,8 @@ using Flow.Launcher.ViewModel;
using ModernWpf;
using ThemeManager = Flow.Launcher.Core.Resource.ThemeManager;
using ThemeManagerForColorSchemeSwitch = ModernWpf.ThemeManager;
using static Flow.Launcher.Core.Resource.Theme;
using System.Windows.Interop;
namespace Flow.Launcher.SettingPages.ViewModels;
@ -177,6 +179,54 @@ public partial class SettingsPaneThemeViewModel : BaseModel
public class AnimationSpeedData : DropdownDataGeneric<AnimationSpeeds> { }
public List<AnimationSpeedData> AnimationSpeeds { get; } = DropdownDataGeneric<AnimationSpeeds>.GetValues<AnimationSpeedData>("AnimationSpeed");
public class BackdropTypeData : DropdownDataGeneric<BackdropTypes>
{
public void ApplyBackdrop()
{
IntPtr hWnd = new WindowInteropHelper(Application.Current.MainWindow).Handle;
if (hWnd == IntPtr.Zero)
return;
int backdropValue = Value switch
{
BackdropTypes.Acrylic => 3, // ✅ Acrylic (DWM_SYSTEMBACKDROP_TYPE = 3)
BackdropTypes.Mica => 2, // ✅ Mica (DWM_SYSTEMBACKDROP_TYPE = 2)
BackdropTypes.MicaAlt => 4, // ✅ MicaAlt (DWM_SYSTEMBACKDROP_TYPE = 4)
_ => 0 // ✅ None (DWM_SYSTEMBACKDROP_TYPE = 0)
};
Methods.SetWindowAttribute(hWnd, ParameterTypes.DWMWINDOWATTRIBUTE.DWMWA_SYSTEMBACKDROP_TYPE, backdropValue);
}
}
// ✅ BackdropTypeData 리스트 (Dropdown과 연동)
public List<BackdropTypeData> BackdropTypesList { get; } =
DropdownDataGeneric<BackdropTypes>.GetValues<BackdropTypeData>("BackdropTypes");
// ✅ BackdropType 속성 (값 저장 + 자동 적용)
public BackdropTypes BackdropType
{
get => Enum.IsDefined(typeof(BackdropTypes), Settings.BackdropType)
? (BackdropTypes)Settings.BackdropType
: BackdropTypes.None;
set
{
if (!Enum.IsDefined(typeof(BackdropTypes), value))
{
value = BackdropTypes.None;
}
Settings.BackdropType = value;
// ✅ BackdropTypeData 리스트에서 해당하는 값 찾기
var backdropData = BackdropTypesList.FirstOrDefault(b => b.Value == value);
backdropData?.ApplyBackdrop();
}
}
public bool UseSound
{
get => Settings.UseSound;

View file

@ -370,6 +370,25 @@
</DockPanel>
</Border>
</Grid>
<!-- Drop shadow effect -->
<cc:Card
Title="Backdrop Type"
Margin="0 8 0 0"
Icon="&#xeb91;"
Sub="{DynamicResource shadowEffectRestart}">
<ComboBox
MinWidth="160"
VerticalAlignment="Center"
DisplayMemberPath="Display"
FontSize="14"
ItemsSource="{Binding BackdropTypesList}"
SelectedValue="{Binding BackdropType, Mode=TwoWay}"
SelectedValuePath="Value" />
</cc:Card>
<!-- Drop shadow effect -->
<cc:Card
Title="{DynamicResource queryWindowShadowEffect}"