Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 90 additions & 15 deletions ContextMenuManager/BluePointLilac.Controls/DarkModeHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,85 @@ public static class DarkModeHelper
[DllImport("DwmApi")]
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);

[DllImport("DwmApi")]
private static extern int DwmIsCompositionEnabled(out bool pfEnabled);

[DllImport("DwmApi")]
private static extern int DwmExtendFrameIntoClientArea(IntPtr hwnd, ref MARGINS pMarInset);

[DllImport("DwmApi")]
private static extern int DwmGetColorizationColor(out uint pcrColorization, out bool pfOpaqueBlend);

[StructLayout(LayoutKind.Sequential)]
private struct MARGINS
{
public int cxLeftWidth;
public int cxRightWidth;
public int cyTopHeight;
public int cyBottomHeight;
}

public static event EventHandler ThemeChanged;
private static SynchronizationContext uiContext;
public static Color MainColor = Color.FromArgb(255, 143, 31);

public static bool IsDwmCompositionEnabled
{
get
{
try
{
DwmIsCompositionEnabled(out bool enabled);
return enabled;
}
catch
{
return false;
}
}
}

public static Color GetDwmColorizationColor()
{
try
{
if (!IsDwmCompositionEnabled) return Color.Empty;
DwmGetColorizationColor(out uint color, out _);
byte a = (byte)((color >> 24) & 0xFF);
byte b = (byte)((color >> 16) & 0xFF);
byte g = (byte)((color >> 8) & 0xFF);
byte r = (byte)(color & 0xFF);
return Color.FromArgb(a, r, g, b);
}
catch
{
return Color.Empty;
}
}

public static void ExtendFrameIntoClientArea(IntPtr hwnd, int left, int right, int top, int bottom)
{
if (!IsDwmCompositionEnabled) return;
try
{
var margins = new MARGINS
{
cxLeftWidth = left,
cxRightWidth = right,
cyTopHeight = top,
cyBottomHeight = bottom
};
DwmExtendFrameIntoClientArea(hwnd, ref margins);
}
catch { }
}

public static void ExtendFrameIntoClientArea(IntPtr hwnd, bool extendAll)
{
if (extendAll)
ExtendFrameIntoClientArea(hwnd, -1, -1, -1, -1);
}

// 颜色属性
public static Color TitleArea { get; private set; }
public static Color FormBack { get; private set; }
Expand Down Expand Up @@ -143,12 +218,12 @@ private static void SetDarkModeColors()
FormBorder = Color.FromArgb(255, 50, 50, 50);
ButtonMain = Color.FromArgb(255, 55, 55, 55);
ButtonSecond = Color.FromArgb(255, 38, 38, 38);
SideBarBackground = Color.FromArgb(255, 26, 26, 26);
SideBarSeparator = Color.FromArgb(255, 64, 64, 64);
SideBarHovered = Color.FromArgb(255, 51, 51, 51);
ToolBarGradientTop = Color.FromArgb(255, 128, 128, 128);
ToolBarGradientMiddle = Color.FromArgb(255, 56, 56, 56);
ToolBarGradientBottom = Color.FromArgb(255, 128, 128, 128);
SideBarBackground = Color.FromArgb(255, 30, 30, 30);
SideBarSeparator = Color.FromArgb(255, 60, 60, 60);
SideBarHovered = Color.FromArgb(255, 50, 50, 52);
ToolBarGradientTop = Color.FromArgb(255, 45, 45, 45);
ToolBarGradientMiddle = Color.FromArgb(255, 35, 35, 35);
ToolBarGradientBottom = Color.FromArgb(255, 45, 45, 45);
StatusBarGradientTop = Color.FromArgb(255, 128, 128, 128);
StatusBarGradientMiddle = Color.FromArgb(255, 56, 56, 56);
StatusBarGradientBottom = Color.FromArgb(255, 128, 128, 128);
Expand All @@ -165,18 +240,18 @@ private static void SetDarkModeColors()

private static void SetLightModeColors()
{
TitleArea = Color.FromArgb(255, 243, 243, 243);
FormBack = SystemColors.Control;
TitleArea = Color.FromArgb(255, 248, 248, 248);
FormBack = Color.FromArgb(255, 245, 245, 245);
FormFore = SystemColors.ControlText;
FormBorder = Color.LightGray;
FormBorder = Color.FromArgb(255, 220, 220, 220);
ButtonMain = SystemColors.ControlLightLight;
ButtonSecond = SystemColors.ControlLight;
SideBarBackground = SystemColors.Control;
SideBarSeparator = Color.FromArgb(255, 200, 200, 200);
SideBarHovered = Color.FromArgb(255, 230, 230, 230);
ToolBarGradientTop = Color.FromArgb(255, 255, 255, 255);
ToolBarGradientMiddle = Color.FromArgb(255, 230, 230, 230);
ToolBarGradientBottom = Color.FromArgb(255, 255, 255, 255);
SideBarBackground = Color.FromArgb(255, 250, 250, 250);
SideBarSeparator = Color.FromArgb(255, 230, 230, 230);
SideBarHovered = Color.FromArgb(255, 240, 240, 242);
ToolBarGradientTop = Color.FromArgb(255, 252, 252, 252);
ToolBarGradientMiddle = Color.FromArgb(255, 245, 245, 245);
ToolBarGradientBottom = Color.FromArgb(255, 252, 252, 252);
StatusBarGradientTop = Color.FromArgb(255, 255, 255, 255);
StatusBarGradientMiddle = Color.FromArgb(255, 230, 230, 230);
StatusBarGradientBottom = Color.FromArgb(255, 255, 255, 255);
Expand Down
Loading
Loading