Initial commit to new repository
This commit is contained in:
130
.decompiledproj/AxCopilot/Views/TrayContextMenu.cs
Normal file
130
.decompiledproj/AxCopilot/Views/TrayContextMenu.cs
Normal file
@@ -0,0 +1,130 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace AxCopilot.Views;
|
||||
|
||||
internal static class TrayContextMenu
|
||||
{
|
||||
internal const string GlyphOpen = "\ue7c5";
|
||||
|
||||
internal const string GlyphSettings = "\ue713";
|
||||
|
||||
internal const string GlyphReload = "\ue72c";
|
||||
|
||||
internal const string GlyphFolder = "\ue838";
|
||||
|
||||
internal const string GlyphInfo = "\ue946";
|
||||
|
||||
internal const string GlyphStats = "\ue9d9";
|
||||
|
||||
internal const string GlyphChat = "\ue8bd";
|
||||
|
||||
internal const string GlyphGuide = "\ue736";
|
||||
|
||||
internal const string GlyphAutoRun = "\ue82f";
|
||||
|
||||
internal const string GlyphExit = "\ue711";
|
||||
|
||||
private static readonly Bitmap DummyImage = new Bitmap(1, 1);
|
||||
|
||||
private static float GetDpiScale()
|
||||
{
|
||||
try
|
||||
{
|
||||
using Graphics graphics = Graphics.FromHwnd(IntPtr.Zero);
|
||||
return Math.Max(1f, graphics.DpiX / 96f);
|
||||
}
|
||||
catch
|
||||
{
|
||||
return 1f;
|
||||
}
|
||||
}
|
||||
|
||||
private static int Dp(int logicalPx, float dpiScale)
|
||||
{
|
||||
return Math.Max(1, (int)Math.Round((float)logicalPx / dpiScale));
|
||||
}
|
||||
|
||||
public static Padding DpiPadding(int left, int top, int right, int bottom)
|
||||
{
|
||||
float dpiScale = GetDpiScale();
|
||||
return new Padding(Dp(left, dpiScale), Dp(top, dpiScale), Dp(right, dpiScale), Dp(bottom, dpiScale));
|
||||
}
|
||||
|
||||
public static ToolStripMenuItem MakeItem(string text, string glyph, EventHandler onClick)
|
||||
{
|
||||
float dpiScale = GetDpiScale();
|
||||
ToolStripMenuItem toolStripMenuItem = new ToolStripMenuItem(text)
|
||||
{
|
||||
Tag = glyph,
|
||||
Image = DummyImage,
|
||||
Padding = new Padding(Dp(4, dpiScale), Dp(10, dpiScale), Dp(16, dpiScale), Dp(10, dpiScale))
|
||||
};
|
||||
toolStripMenuItem.Click += onClick;
|
||||
return toolStripMenuItem;
|
||||
}
|
||||
|
||||
public static ContextMenuStrip CreateMenu()
|
||||
{
|
||||
float dpiScale = GetDpiScale();
|
||||
ContextMenuStrip menu = new ContextMenuStrip();
|
||||
menu.Renderer = new ModernTrayRenderer();
|
||||
menu.Font = new Font("Segoe UI", 10f, GraphicsUnit.Point);
|
||||
menu.ShowImageMargin = true;
|
||||
menu.ImageScalingSize = new Size(Dp(52, dpiScale), Dp(32, dpiScale));
|
||||
menu.MinimumSize = new Size(Dp(280, dpiScale), 0);
|
||||
menu.Opened += delegate
|
||||
{
|
||||
ApplyRoundedCorners(menu);
|
||||
};
|
||||
return menu;
|
||||
}
|
||||
|
||||
private static void ApplyRoundedCorners(ContextMenuStrip menu)
|
||||
{
|
||||
try
|
||||
{
|
||||
nint num = CreateRoundRectRgn(0, 0, menu.Width, menu.Height, 16, 16);
|
||||
if (num != IntPtr.Zero && SetWindowRgn(menu.Handle, num, bRedraw: true) == 0)
|
||||
{
|
||||
DeleteObject(num);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
[DllImport("gdi32.dll")]
|
||||
private static extern nint CreateRoundRectRgn(int x1, int y1, int x2, int y2, int cx, int cy);
|
||||
|
||||
[DllImport("gdi32.dll")]
|
||||
private static extern bool DeleteObject(nint hObject);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern int SetWindowRgn(nint hWnd, nint hRgn, bool bRedraw);
|
||||
|
||||
public static void ApplySpacing(ContextMenuStrip menu, int top = 10, int bottom = 10, int left = 0, int right = 0)
|
||||
{
|
||||
if (menu.Items.Count == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
float dpiScale = GetDpiScale();
|
||||
int top2 = Dp(top, dpiScale);
|
||||
int bottom2 = Dp(bottom, dpiScale);
|
||||
int num = Dp(left, dpiScale);
|
||||
int num2 = Dp(right, dpiScale);
|
||||
foreach (ToolStripItem item in menu.Items)
|
||||
{
|
||||
Padding margin = item.Margin;
|
||||
item.Margin = new Padding(margin.Left + num, margin.Top, margin.Right + num2, margin.Bottom);
|
||||
}
|
||||
ToolStripItem toolStripItem2 = menu.Items[0];
|
||||
toolStripItem2.Margin = new Padding(toolStripItem2.Margin.Left, top2, toolStripItem2.Margin.Right, toolStripItem2.Margin.Bottom);
|
||||
ToolStripItem toolStripItem3 = menu.Items[menu.Items.Count - 1];
|
||||
toolStripItem3.Margin = new Padding(toolStripItem3.Margin.Left, toolStripItem3.Margin.Top, toolStripItem3.Margin.Right, bottom2);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user