mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-01 09:47:22 +13:00
Merge branch 'menu-icon-size'
This commit is contained in:
commit
e3897cf5ab
5 changed files with 215 additions and 1 deletions
|
@ -3224,7 +3224,7 @@ public enum EndSessionReasons : uint
|
||||||
}
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
enum SHGFI : uint
|
public enum SHGFI : uint
|
||||||
{
|
{
|
||||||
/// <summary>get icon</summary>
|
/// <summary>get icon</summary>
|
||||||
Icon = 0x000000100,
|
Icon = 0x000000100,
|
||||||
|
@ -3263,4 +3263,169 @@ enum SHGFI : uint
|
||||||
/// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary>
|
/// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary>
|
||||||
OverlayIndex = 0x000000040
|
OverlayIndex = 0x000000040
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum DeviceCap
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Device driver version
|
||||||
|
/// </summary>
|
||||||
|
DRIVERVERSION = 0,
|
||||||
|
/// <summary>
|
||||||
|
/// Device classification
|
||||||
|
/// </summary>
|
||||||
|
TECHNOLOGY = 2,
|
||||||
|
/// <summary>
|
||||||
|
/// Horizontal size in millimeters
|
||||||
|
/// </summary>
|
||||||
|
HORZSIZE = 4,
|
||||||
|
/// <summary>
|
||||||
|
/// Vertical size in millimeters
|
||||||
|
/// </summary>
|
||||||
|
VERTSIZE = 6,
|
||||||
|
/// <summary>
|
||||||
|
/// Horizontal width in pixels
|
||||||
|
/// </summary>
|
||||||
|
HORZRES = 8,
|
||||||
|
/// <summary>
|
||||||
|
/// Vertical height in pixels
|
||||||
|
/// </summary>
|
||||||
|
VERTRES = 10,
|
||||||
|
/// <summary>
|
||||||
|
/// Number of bits per pixel
|
||||||
|
/// </summary>
|
||||||
|
BITSPIXEL = 12,
|
||||||
|
/// <summary>
|
||||||
|
/// Number of planes
|
||||||
|
/// </summary>
|
||||||
|
PLANES = 14,
|
||||||
|
/// <summary>
|
||||||
|
/// Number of brushes the device has
|
||||||
|
/// </summary>
|
||||||
|
NUMBRUSHES = 16,
|
||||||
|
/// <summary>
|
||||||
|
/// Number of pens the device has
|
||||||
|
/// </summary>
|
||||||
|
NUMPENS = 18,
|
||||||
|
/// <summary>
|
||||||
|
/// Number of markers the device has
|
||||||
|
/// </summary>
|
||||||
|
NUMMARKERS = 20,
|
||||||
|
/// <summary>
|
||||||
|
/// Number of fonts the device has
|
||||||
|
/// </summary>
|
||||||
|
NUMFONTS = 22,
|
||||||
|
/// <summary>
|
||||||
|
/// Number of colors the device supports
|
||||||
|
/// </summary>
|
||||||
|
NUMCOLORS = 24,
|
||||||
|
/// <summary>
|
||||||
|
/// Size required for device descriptor
|
||||||
|
/// </summary>
|
||||||
|
PDEVICESIZE = 26,
|
||||||
|
/// <summary>
|
||||||
|
/// Curve capabilities
|
||||||
|
/// </summary>
|
||||||
|
CURVECAPS = 28,
|
||||||
|
/// <summary>
|
||||||
|
/// Line capabilities
|
||||||
|
/// </summary>
|
||||||
|
LINECAPS = 30,
|
||||||
|
/// <summary>
|
||||||
|
/// Polygonal capabilities
|
||||||
|
/// </summary>
|
||||||
|
POLYGONALCAPS = 32,
|
||||||
|
/// <summary>
|
||||||
|
/// Text capabilities
|
||||||
|
/// </summary>
|
||||||
|
TEXTCAPS = 34,
|
||||||
|
/// <summary>
|
||||||
|
/// Clipping capabilities
|
||||||
|
/// </summary>
|
||||||
|
CLIPCAPS = 36,
|
||||||
|
/// <summary>
|
||||||
|
/// Bitblt capabilities
|
||||||
|
/// </summary>
|
||||||
|
RASTERCAPS = 38,
|
||||||
|
/// <summary>
|
||||||
|
/// Length of the X leg
|
||||||
|
/// </summary>
|
||||||
|
ASPECTX = 40,
|
||||||
|
/// <summary>
|
||||||
|
/// Length of the Y leg
|
||||||
|
/// </summary>
|
||||||
|
ASPECTY = 42,
|
||||||
|
/// <summary>
|
||||||
|
/// Length of the hypotenuse
|
||||||
|
/// </summary>
|
||||||
|
ASPECTXY = 44,
|
||||||
|
/// <summary>
|
||||||
|
/// Shading and Blending caps
|
||||||
|
/// </summary>
|
||||||
|
SHADEBLENDCAPS = 45,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Logical pixels inch in X
|
||||||
|
/// </summary>
|
||||||
|
LOGPIXELSX = 88,
|
||||||
|
/// <summary>
|
||||||
|
/// Logical pixels inch in Y
|
||||||
|
/// </summary>
|
||||||
|
LOGPIXELSY = 90,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Number of entries in physical palette
|
||||||
|
/// </summary>
|
||||||
|
SIZEPALETTE = 104,
|
||||||
|
/// <summary>
|
||||||
|
/// Number of reserved entries in palette
|
||||||
|
/// </summary>
|
||||||
|
NUMRESERVED = 106,
|
||||||
|
/// <summary>
|
||||||
|
/// Actual color resolution
|
||||||
|
/// </summary>
|
||||||
|
COLORRES = 108,
|
||||||
|
|
||||||
|
// Printing related DeviceCaps. These replace the appropriate Escapes
|
||||||
|
/// <summary>
|
||||||
|
/// Physical Width in device units
|
||||||
|
/// </summary>
|
||||||
|
PHYSICALWIDTH = 110,
|
||||||
|
/// <summary>
|
||||||
|
/// Physical Height in device units
|
||||||
|
/// </summary>
|
||||||
|
PHYSICALHEIGHT = 111,
|
||||||
|
/// <summary>
|
||||||
|
/// Physical Printable Area x margin
|
||||||
|
/// </summary>
|
||||||
|
PHYSICALOFFSETX = 112,
|
||||||
|
/// <summary>
|
||||||
|
/// Physical Printable Area y margin
|
||||||
|
/// </summary>
|
||||||
|
PHYSICALOFFSETY = 113,
|
||||||
|
/// <summary>
|
||||||
|
/// Scaling factor x
|
||||||
|
/// </summary>
|
||||||
|
SCALINGFACTORX = 114,
|
||||||
|
/// <summary>
|
||||||
|
/// Scaling factor y
|
||||||
|
/// </summary>
|
||||||
|
SCALINGFACTORY = 115,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Current vertical refresh rate of the display device (for displays only) in Hz
|
||||||
|
/// </summary>
|
||||||
|
VREFRESH = 116,
|
||||||
|
/// <summary>
|
||||||
|
/// Vertical height of entire desktop in pixels
|
||||||
|
/// </summary>
|
||||||
|
DESKTOPVERTRES = 117,
|
||||||
|
/// <summary>
|
||||||
|
/// Horizontal width of entire desktop in pixels
|
||||||
|
/// </summary>
|
||||||
|
DESKTOPHORZRES = 118,
|
||||||
|
/// <summary>
|
||||||
|
/// Preferred blt alignment
|
||||||
|
/// </summary>
|
||||||
|
BLTALIGNMENT = 119
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -353,6 +353,9 @@ public static extern bool CreateProcess(string lpApplicationName, string lpComma
|
||||||
[DllImport("gdi32.dll")]
|
[DllImport("gdi32.dll")]
|
||||||
public static extern IntPtr CreateDIBSection(IntPtr hdc, [In] ref BITMAPINFOHEADER pbmi, uint pila, out IntPtr ppvBits, IntPtr hSection, uint dwOffset);
|
public static extern IntPtr CreateDIBSection(IntPtr hdc, [In] ref BITMAPINFOHEADER pbmi, uint pila, out IntPtr ppvBits, IntPtr hSection, uint dwOffset);
|
||||||
|
|
||||||
|
[DllImport("gdi32.dll")]
|
||||||
|
public static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
|
||||||
|
|
||||||
[DllImport("gdi32.dll")]
|
[DllImport("gdi32.dll")]
|
||||||
public static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);
|
public static extern uint GetPixel(IntPtr hdc, int nXPos, int nYPos);
|
||||||
|
|
||||||
|
|
|
@ -568,5 +568,24 @@ public static Icon GetJumboFileIcon(string filePath, bool jumboSize = true)
|
||||||
DestroyIcon(hIcon);
|
DestroyIcon(hIcon);
|
||||||
return icon;
|
return icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static float GetScreenScalingFactor()
|
||||||
|
{
|
||||||
|
float scalingFactor;
|
||||||
|
|
||||||
|
using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
|
||||||
|
{
|
||||||
|
IntPtr desktop = g.GetHdc();
|
||||||
|
int LogicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.VERTRES);
|
||||||
|
int PhysicalScreenHeight = GetDeviceCaps(desktop, (int)DeviceCap.DESKTOPVERTRES);
|
||||||
|
int logpixelsy = GetDeviceCaps(desktop, (int)DeviceCap.LOGPIXELSY);
|
||||||
|
float screenScalingFactor = (float)PhysicalScreenHeight / LogicalScreenHeight;
|
||||||
|
float dpiScalingFactor = logpixelsy / 96f;
|
||||||
|
scalingFactor = Math.Max(screenScalingFactor, dpiScalingFactor);
|
||||||
|
g.ReleaseHdc(desktop);
|
||||||
|
}
|
||||||
|
|
||||||
|
return scalingFactor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -71,6 +71,7 @@ public class RegionCaptureOptions
|
||||||
public bool IsFixedSize = false;
|
public bool IsFixedSize = false;
|
||||||
public Size FixedSize = new Size(250, 250);
|
public Size FixedSize = new Size(250, 250);
|
||||||
public bool ShowFPS = false;
|
public bool ShowFPS = false;
|
||||||
|
public int MenuIconSize = 0;
|
||||||
public bool RememberMenuState = false;
|
public bool RememberMenuState = false;
|
||||||
public bool MenuCollapsed = false;
|
public bool MenuCollapsed = false;
|
||||||
public Point MenuPosition = Point.Empty;
|
public Point MenuPosition = Point.Empty;
|
||||||
|
|
|
@ -81,6 +81,13 @@ internal void CreateToolbar()
|
||||||
|
|
||||||
menuForm.SuspendLayout();
|
menuForm.SuspendLayout();
|
||||||
|
|
||||||
|
if (Options.MenuIconSize == 0)
|
||||||
|
{
|
||||||
|
Options.MenuIconSize = (int)(16 * NativeMethods.GetScreenScalingFactor());
|
||||||
|
}
|
||||||
|
|
||||||
|
int imageScalingSize = Options.MenuIconSize.Clamp(16, 64);
|
||||||
|
|
||||||
tsMain = new ToolStripEx()
|
tsMain = new ToolStripEx()
|
||||||
{
|
{
|
||||||
AutoSize = true,
|
AutoSize = true,
|
||||||
|
@ -88,6 +95,7 @@ internal void CreateToolbar()
|
||||||
ClickThrough = true,
|
ClickThrough = true,
|
||||||
Dock = DockStyle.None,
|
Dock = DockStyle.None,
|
||||||
GripStyle = ToolStripGripStyle.Hidden,
|
GripStyle = ToolStripGripStyle.Hidden,
|
||||||
|
ImageScalingSize = new Size(imageScalingSize, imageScalingSize),
|
||||||
Location = new Point(0, 0),
|
Location = new Point(0, 0),
|
||||||
MinimumSize = new Size(10, 30),
|
MinimumSize = new Size(10, 30),
|
||||||
Padding = Form.IsEditorMode ? new Padding(5, 1, 3, 0) : new Padding(0, 1, 0, 0),
|
Padding = Form.IsEditorMode ? new Padding(5, 1, 3, 0) : new Padding(0, 1, 0, 0),
|
||||||
|
@ -976,6 +984,24 @@ internal void CreateToolbar()
|
||||||
};
|
};
|
||||||
tsddbOptions.DropDownItems.Add(tsmiSwitchToSelectionToolAfterDrawing);
|
tsddbOptions.DropDownItems.Add(tsmiSwitchToSelectionToolAfterDrawing);
|
||||||
|
|
||||||
|
// TODO: Translate
|
||||||
|
ToolStripLabeledNumericUpDown tslnudMenuIconSize = new ToolStripLabeledNumericUpDown("Menu icon size:");
|
||||||
|
tslnudMenuIconSize.Content.Minimum = 16;
|
||||||
|
tslnudMenuIconSize.Content.Maximum = 64;
|
||||||
|
tslnudMenuIconSize.Content.Increment = 16;
|
||||||
|
tslnudMenuIconSize.Content.Value = Options.MenuIconSize;
|
||||||
|
tslnudMenuIconSize.Content.ValueChanged = (sender, e) =>
|
||||||
|
{
|
||||||
|
Options.MenuIconSize = (int)tslnudMenuIconSize.Content.Value;
|
||||||
|
tsMain.SuspendLayout();
|
||||||
|
tsMain.AutoSize = false;
|
||||||
|
tsMain.ImageScalingSize = new Size(Options.MenuIconSize, Options.MenuIconSize);
|
||||||
|
tsMain.AutoSize = true;
|
||||||
|
tsMain.ResumeLayout();
|
||||||
|
UpdateMenuPosition();
|
||||||
|
};
|
||||||
|
tsddbOptions.DropDownItems.Add(tslnudMenuIconSize);
|
||||||
|
|
||||||
if (!Form.IsEditorMode)
|
if (!Form.IsEditorMode)
|
||||||
{
|
{
|
||||||
ToolStripMenuItem tsmiRememberMenuState = new ToolStripMenuItem(Resources.ShapeManager_CreateContextMenu_RememberMenuState);
|
ToolStripMenuItem tsmiRememberMenuState = new ToolStripMenuItem(Resources.ShapeManager_CreateContextMenu_RememberMenuState);
|
||||||
|
|
Loading…
Reference in a new issue