mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-01 17:56:51 +13:00
Rectangle region now supports rounded rectangle, ellipse, triangle and diamond shapes
This commit is contained in:
parent
f0ccb77fc8
commit
fa0c6f09c9
2 changed files with 104 additions and 3 deletions
|
@ -38,6 +38,10 @@ public class RectangleRegion : Surface
|
|||
{
|
||||
public AreaManager AreaManager { get; private set; }
|
||||
|
||||
public float RoundedRectangleRadius { get; set; }
|
||||
public int RoundedRectangleRadiusIncrement { get; set; }
|
||||
public TriangleAngle TriangleAngle { get; set; }
|
||||
|
||||
#region Screen color picker
|
||||
|
||||
public bool ScreenColorPickerMode { get; set; }
|
||||
|
@ -72,6 +76,11 @@ public Color CurrentColor
|
|||
public RectangleRegion()
|
||||
{
|
||||
AreaManager = new AreaManager(this);
|
||||
|
||||
RoundedRectangleRadius = 25;
|
||||
RoundedRectangleRadiusIncrement = 3;
|
||||
TriangleAngle = TriangleAngle.Top;
|
||||
|
||||
KeyDown += RectangleRegion_KeyDown;
|
||||
MouseDown += RectangleRegion_MouseDown;
|
||||
MouseWheel += RectangleRegion_MouseWheel;
|
||||
|
@ -105,6 +114,57 @@ private void RectangleRegion_KeyDown(object sender, KeyEventArgs e)
|
|||
case Keys.Control | Keys.C:
|
||||
CopyAreaInfo();
|
||||
break;
|
||||
case Keys.NumPad1:
|
||||
AreaManager.CurrentShape = RegionShape.Rectangle;
|
||||
break;
|
||||
case Keys.NumPad2:
|
||||
AreaManager.CurrentShape = RegionShape.RoundedRectangle;
|
||||
break;
|
||||
case Keys.NumPad3:
|
||||
AreaManager.CurrentShape = RegionShape.Ellipse;
|
||||
break;
|
||||
case Keys.NumPad4:
|
||||
AreaManager.CurrentShape = RegionShape.Triangle;
|
||||
break;
|
||||
case Keys.NumPad5:
|
||||
AreaManager.CurrentShape = RegionShape.Diamond;
|
||||
break;
|
||||
case Keys.Add:
|
||||
switch (AreaManager.CurrentShape)
|
||||
{
|
||||
case RegionShape.RoundedRectangle:
|
||||
RoundedRectangleRadius += RoundedRectangleRadiusIncrement;
|
||||
break;
|
||||
case RegionShape.Triangle:
|
||||
if (TriangleAngle == TriangleAngle.Left)
|
||||
{
|
||||
TriangleAngle = TriangleAngle.Top;
|
||||
}
|
||||
else
|
||||
{
|
||||
TriangleAngle++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case Keys.Subtract:
|
||||
switch (AreaManager.CurrentShape)
|
||||
{
|
||||
case RegionShape.RoundedRectangle:
|
||||
RoundedRectangleRadius = Math.Max(0, RoundedRectangleRadius - RoundedRectangleRadiusIncrement);
|
||||
break;
|
||||
case RegionShape.Triangle:
|
||||
if (TriangleAngle == TriangleAngle.Top)
|
||||
{
|
||||
TriangleAngle = TriangleAngle.Left;
|
||||
}
|
||||
else
|
||||
{
|
||||
TriangleAngle--;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -407,6 +467,29 @@ protected virtual void WriteTips(StringBuilder sb)
|
|||
sb.AppendLine(string.Format("[I] {0} position and size info", Config.ShowInfo ? "Hide" : "Show"));
|
||||
sb.AppendLine(string.Format("[M] {0} magnifier", Config.ShowMagnifier ? "Hide" : "Show"));
|
||||
sb.AppendLine(string.Format("[C] {0} screen wide crosshair", Config.ShowCrosshair ? "Hide" : "Show"));
|
||||
|
||||
sb.AppendLine();
|
||||
|
||||
if (AreaManager.CurrentShape == RegionShape.Rectangle) sb.Append("-> ");
|
||||
sb.AppendLine("[Numpad 1] Rectangle shape");
|
||||
if (AreaManager.CurrentShape == RegionShape.RoundedRectangle) sb.Append("-> ");
|
||||
sb.AppendLine("[Numpad 2] Rounded rectangle shape");
|
||||
if (AreaManager.CurrentShape == RegionShape.Ellipse) sb.Append("-> ");
|
||||
sb.AppendLine("[Numpad 3] Ellipse shape");
|
||||
if (AreaManager.CurrentShape == RegionShape.Triangle) sb.Append("-> ");
|
||||
sb.AppendLine("[Numpad 4] Triangle shape");
|
||||
if (AreaManager.CurrentShape == RegionShape.Diamond) sb.Append("-> ");
|
||||
sb.AppendLine("[Numpad 5] Diamond shape");
|
||||
|
||||
switch (AreaManager.CurrentShape)
|
||||
{
|
||||
case RegionShape.RoundedRectangle:
|
||||
sb.AppendLine("[Numpad + or -] Change rounded rectangle corner radius");
|
||||
break;
|
||||
case RegionShape.Triangle:
|
||||
sb.AppendLine("[Numpad + or -] Change triangle angle");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private string GetAreaText(Rectangle area)
|
||||
|
@ -603,7 +686,25 @@ public void UpdateRegionPath()
|
|||
|
||||
protected virtual void AddShapePath(GraphicsPath graphicsPath, Rectangle rect, RegionShape shape)
|
||||
{
|
||||
graphicsPath.AddRectangle(rect);
|
||||
switch (shape)
|
||||
{
|
||||
default:
|
||||
case RegionShape.Rectangle:
|
||||
graphicsPath.AddRectangle(rect);
|
||||
break;
|
||||
case RegionShape.RoundedRectangle:
|
||||
graphicsPath.AddRoundedRectangle(rect, RoundedRectangleRadius);
|
||||
break;
|
||||
case RegionShape.Ellipse:
|
||||
graphicsPath.AddEllipse(rect);
|
||||
break;
|
||||
case RegionShape.Triangle:
|
||||
graphicsPath.AddTriangle(rect, TriangleAngle);
|
||||
break;
|
||||
case RegionShape.Diamond:
|
||||
graphicsPath.AddDiamond(rect);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
|
|
|
@ -166,11 +166,11 @@ private void Surface_KeyUp(object sender, KeyEventArgs e)
|
|||
return;
|
||||
}
|
||||
|
||||
if (e.KeyData >= Keys.NumPad0 && e.KeyData <= Keys.NumPad9)
|
||||
/*if (e.KeyData >= Keys.NumPad0 && e.KeyData <= Keys.NumPad9)
|
||||
{
|
||||
MonitorKey(e.KeyData - Keys.NumPad0);
|
||||
return;
|
||||
}
|
||||
}*/
|
||||
|
||||
switch (e.KeyData)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue