mirror of
https://github.com/ShareX/ShareX.git
synced 2024-09-30 01:07:21 +13:00
Step label create with default size and move it
This commit is contained in:
parent
70300cdd8f
commit
b131585a9d
4 changed files with 202 additions and 176 deletions
|
@ -59,7 +59,8 @@ public enum NodeType
|
|||
{
|
||||
None,
|
||||
Rectangle,
|
||||
Line
|
||||
Line,
|
||||
Point
|
||||
}
|
||||
|
||||
internal enum NodePosition
|
||||
|
|
|
@ -318,7 +318,7 @@ public void MoveCurrentArea(int x, int y)
|
|||
|
||||
if (shape != null)
|
||||
{
|
||||
if (shape.NodeType == NodeType.Rectangle)
|
||||
if (shape.NodeType == NodeType.Rectangle || shape.NodeType == NodeType.Point)
|
||||
{
|
||||
shape.Rectangle = shape.Rectangle.LocationOffset(x, y);
|
||||
}
|
||||
|
|
|
@ -38,9 +38,17 @@ namespace ShareX.ScreenCaptureLib
|
|||
public class StepDrawingShape : BaseDrawingShape
|
||||
{
|
||||
public override ShapeType ShapeType { get; } = ShapeType.DrawingStep;
|
||||
public override NodeType NodeType { get; } = NodeType.Point;
|
||||
|
||||
public int Number { get; set; }
|
||||
|
||||
private const int DefaultSize = 30;
|
||||
|
||||
public StepDrawingShape()
|
||||
{
|
||||
Rectangle = new Rectangle(0, 0, DefaultSize, DefaultSize);
|
||||
}
|
||||
|
||||
public override void OnDraw(Graphics g)
|
||||
{
|
||||
g.SmoothingMode = SmoothingMode.HighQuality;
|
||||
|
@ -61,6 +69,8 @@ public override void OnDraw(Graphics g)
|
|||
}
|
||||
}
|
||||
|
||||
g.SmoothingMode = SmoothingMode.None;
|
||||
|
||||
if (Rectangle.Width > 20 && Rectangle.Height > 20)
|
||||
{
|
||||
int fontSize = Math.Min(Rectangle.Width, Rectangle.Height) - 10;
|
||||
|
@ -69,13 +79,11 @@ public override void OnDraw(Graphics g)
|
|||
using (StringFormat sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center })
|
||||
{
|
||||
g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
|
||||
g.DrawString(Number.ToString(), font, Brushes.Black, Rectangle.LocationOffset(1, 1), sf);
|
||||
//g.DrawString(Number.ToString(), font, Brushes.Black, Rectangle.LocationOffset(1, 1), sf);
|
||||
g.DrawString(Number.ToString(), font, Brushes.White, Rectangle, sf);
|
||||
g.TextRenderingHint = TextRenderingHint.SystemDefault;
|
||||
}
|
||||
}
|
||||
|
||||
g.SmoothingMode = SmoothingMode.None;
|
||||
}
|
||||
|
||||
public override void AddShapePath(GraphicsPath gp, Rectangle rect)
|
||||
|
|
|
@ -712,7 +712,7 @@ private void form_MouseDown(object sender, MouseEventArgs e)
|
|||
{
|
||||
if (!IsCreating)
|
||||
{
|
||||
RegionSelection(e.Location);
|
||||
RegionSelection(InputManager.MousePosition0Based);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -814,7 +814,7 @@ private void form_KeyDown(object sender, KeyEventArgs e)
|
|||
|
||||
if (CurrentShape == null || CurrentShape != AreaIntersect())
|
||||
{
|
||||
RegionSelection(InputManager.MousePosition);
|
||||
RegionSelection(InputManager.MousePosition0Based);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -913,6 +913,189 @@ public void Update()
|
|||
ResizeManager.Update();
|
||||
}
|
||||
|
||||
private void RegionSelection(Point location)
|
||||
{
|
||||
if (ResizeManager.IsCursorOnNode())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BaseShape shape = AreaIntersect(location);
|
||||
|
||||
PositionOnClick = location;
|
||||
|
||||
if (shape != null && shape.ShapeType == CurrentShapeType) // Select area
|
||||
{
|
||||
IsMoving = true;
|
||||
CurrentShape = shape;
|
||||
SelectShape();
|
||||
}
|
||||
else if (!IsCreating) // Create new area
|
||||
{
|
||||
DeselectShape();
|
||||
|
||||
shape = AddShape();
|
||||
|
||||
if (shape.NodeType == NodeType.Point)
|
||||
{
|
||||
IsMoving = true;
|
||||
shape.Rectangle = new Rectangle(new Point(location.X - shape.Rectangle.Width / 2, location.Y - shape.Rectangle.Height / 2), shape.Rectangle.Size);
|
||||
}
|
||||
else if (Config.IsFixedSize && IsCurrentShapeTypeRegion)
|
||||
{
|
||||
IsMoving = true;
|
||||
shape.Rectangle = new Rectangle(new Point(location.X - Config.FixedSize.Width / 2, location.Y - Config.FixedSize.Height / 2), Config.FixedSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
IsCreating = true;
|
||||
shape.StartPosition = location;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void EndRegionSelection()
|
||||
{
|
||||
bool wasCreating = IsCreating;
|
||||
|
||||
IsCreating = false;
|
||||
IsMoving = false;
|
||||
|
||||
BaseShape shape = CurrentShape;
|
||||
|
||||
if (shape != null)
|
||||
{
|
||||
if (!IsCurrentRegionValid)
|
||||
{
|
||||
DeleteSelectedShape();
|
||||
CheckHover();
|
||||
}
|
||||
else if (Config.QuickCrop && IsCurrentShapeTypeRegion)
|
||||
{
|
||||
form.UpdateRegionPath();
|
||||
form.Close(RegionResult.Region);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wasCreating)
|
||||
{
|
||||
shape.OnShapeCreated();
|
||||
}
|
||||
|
||||
SelectShape();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!CurrentHoverRectangle.IsEmpty)
|
||||
{
|
||||
AddShape(CurrentHoverRectangle);
|
||||
|
||||
if (Config.QuickCrop && IsCurrentShapeTypeRegion)
|
||||
{
|
||||
form.UpdateRegionPath();
|
||||
form.Close(RegionResult.Region);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wasCreating)
|
||||
{
|
||||
shape.OnShapeCreated();
|
||||
}
|
||||
|
||||
SelectShape();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private BaseShape AddShape(Rectangle rect)
|
||||
{
|
||||
BaseShape shape = AddShape();
|
||||
shape.Rectangle = rect;
|
||||
return shape;
|
||||
}
|
||||
|
||||
private BaseShape AddShape()
|
||||
{
|
||||
BaseShape shape = CreateShape();
|
||||
Shapes.Add(shape);
|
||||
CurrentShape = shape;
|
||||
return shape;
|
||||
}
|
||||
|
||||
public BaseShape CreateShape(Rectangle rect)
|
||||
{
|
||||
BaseShape shape = CreateShape();
|
||||
shape.Rectangle = rect;
|
||||
return shape;
|
||||
}
|
||||
|
||||
public BaseShape CreateShape()
|
||||
{
|
||||
BaseShape shape;
|
||||
|
||||
switch (CurrentShapeType)
|
||||
{
|
||||
default:
|
||||
case ShapeType.RegionRectangle:
|
||||
shape = new RectangleRegionShape();
|
||||
break;
|
||||
case ShapeType.RegionRoundedRectangle:
|
||||
shape = new RoundedRectangleRegionShape();
|
||||
break;
|
||||
case ShapeType.RegionEllipse:
|
||||
shape = new EllipseRegionShape();
|
||||
break;
|
||||
case ShapeType.DrawingRectangle:
|
||||
shape = new RectangleDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingRoundedRectangle:
|
||||
shape = new RoundedRectangleDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingEllipse:
|
||||
shape = new EllipseDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingLine:
|
||||
shape = new LineDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingArrow:
|
||||
shape = new ArrowDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingText:
|
||||
shape = new TextDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingStep:
|
||||
shape = new StepDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingBlur:
|
||||
shape = new BlurEffectShape();
|
||||
break;
|
||||
case ShapeType.DrawingPixelate:
|
||||
shape = new PixelateEffectShape();
|
||||
break;
|
||||
case ShapeType.DrawingHighlight:
|
||||
shape = new HighlightEffectShape();
|
||||
break;
|
||||
}
|
||||
|
||||
shape.Manager = this;
|
||||
|
||||
shape.UpdateShapeConfig();
|
||||
|
||||
return shape;
|
||||
}
|
||||
|
||||
private void UpdateCurrentShape()
|
||||
{
|
||||
BaseShape shape = CurrentShape;
|
||||
|
||||
if (shape != null)
|
||||
{
|
||||
shape.UpdateShapeConfig();
|
||||
}
|
||||
}
|
||||
|
||||
private Point SnapPosition(Point posOnClick, Point posCurrent)
|
||||
{
|
||||
Rectangle currentRect = CaptureHelpers.CreateRectangle(posOnClick, posCurrent);
|
||||
|
@ -988,174 +1171,6 @@ public WindowInfo FindSelectedWindowInfo(Point mousePosition)
|
|||
return null;
|
||||
}
|
||||
|
||||
private void RegionSelection(Point location)
|
||||
{
|
||||
if (ResizeManager.IsCursorOnNode())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BaseShape shape = AreaIntersect(InputManager.MousePosition0Based);
|
||||
|
||||
PositionOnClick = InputManager.MousePosition0Based;
|
||||
|
||||
if (shape != null && shape.ShapeType == CurrentShapeType) // Select area
|
||||
{
|
||||
IsMoving = true;
|
||||
CurrentShape = shape;
|
||||
SelectShape();
|
||||
}
|
||||
else if (!IsCreating) // Create new area
|
||||
{
|
||||
DeselectShape();
|
||||
|
||||
Rectangle rect;
|
||||
|
||||
if (Config.IsFixedSize)
|
||||
{
|
||||
IsMoving = true;
|
||||
rect = new Rectangle(new Point(location.X - Config.FixedSize.Width / 2, location.Y - Config.FixedSize.Height / 2), Config.FixedSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
IsCreating = true;
|
||||
rect = new Rectangle(location, new Size(1, 1));
|
||||
}
|
||||
|
||||
AddShape(rect);
|
||||
|
||||
CurrentShape.StartPosition = PositionOnClick;
|
||||
}
|
||||
}
|
||||
|
||||
private void EndRegionSelection()
|
||||
{
|
||||
bool wasCreating = IsCreating;
|
||||
|
||||
IsCreating = false;
|
||||
IsMoving = false;
|
||||
|
||||
BaseShape shape = CurrentShape;
|
||||
|
||||
if (shape != null)
|
||||
{
|
||||
if (!IsCurrentRegionValid)
|
||||
{
|
||||
DeleteSelectedShape();
|
||||
CheckHover();
|
||||
}
|
||||
else if (Config.QuickCrop && IsCurrentShapeTypeRegion)
|
||||
{
|
||||
form.UpdateRegionPath();
|
||||
form.Close(RegionResult.Region);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wasCreating)
|
||||
{
|
||||
shape.OnShapeCreated();
|
||||
}
|
||||
|
||||
SelectShape();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (!CurrentHoverRectangle.IsEmpty)
|
||||
{
|
||||
AddShape(CurrentHoverRectangle);
|
||||
|
||||
if (Config.QuickCrop && IsCurrentShapeTypeRegion)
|
||||
{
|
||||
form.UpdateRegionPath();
|
||||
form.Close(RegionResult.Region);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (wasCreating)
|
||||
{
|
||||
shape.OnShapeCreated();
|
||||
}
|
||||
|
||||
SelectShape();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void AddShape(Rectangle rect)
|
||||
{
|
||||
BaseShape shape = CreateShape(rect);
|
||||
Shapes.Add(shape);
|
||||
CurrentShape = shape;
|
||||
}
|
||||
|
||||
public BaseShape CreateShape(Rectangle rect)
|
||||
{
|
||||
BaseShape shape;
|
||||
|
||||
switch (CurrentShapeType)
|
||||
{
|
||||
default:
|
||||
case ShapeType.RegionRectangle:
|
||||
shape = new RectangleRegionShape();
|
||||
break;
|
||||
case ShapeType.RegionRoundedRectangle:
|
||||
shape = new RoundedRectangleRegionShape();
|
||||
break;
|
||||
case ShapeType.RegionEllipse:
|
||||
shape = new EllipseRegionShape();
|
||||
break;
|
||||
case ShapeType.DrawingRectangle:
|
||||
shape = new RectangleDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingRoundedRectangle:
|
||||
shape = new RoundedRectangleDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingEllipse:
|
||||
shape = new EllipseDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingLine:
|
||||
shape = new LineDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingArrow:
|
||||
shape = new ArrowDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingText:
|
||||
shape = new TextDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingStep:
|
||||
shape = new StepDrawingShape();
|
||||
break;
|
||||
case ShapeType.DrawingBlur:
|
||||
shape = new BlurEffectShape();
|
||||
break;
|
||||
case ShapeType.DrawingPixelate:
|
||||
shape = new PixelateEffectShape();
|
||||
break;
|
||||
case ShapeType.DrawingHighlight:
|
||||
shape = new HighlightEffectShape();
|
||||
break;
|
||||
}
|
||||
|
||||
shape.Manager = this;
|
||||
shape.Rectangle = rect;
|
||||
|
||||
shape.UpdateShapeConfig();
|
||||
|
||||
return shape;
|
||||
}
|
||||
|
||||
private void UpdateCurrentShape()
|
||||
{
|
||||
BaseShape shape = CurrentShape;
|
||||
|
||||
if (shape != null)
|
||||
{
|
||||
shape.UpdateShapeConfig();
|
||||
}
|
||||
}
|
||||
|
||||
public Image RenderOutputImage(Image img)
|
||||
{
|
||||
Bitmap bmp = new Bitmap(img);
|
||||
|
@ -1187,7 +1202,9 @@ public Image RenderOutputImage(Image img)
|
|||
|
||||
private void SelectShape()
|
||||
{
|
||||
if (!CurrentRectangle.IsEmpty && !Config.IsFixedSize)
|
||||
BaseShape shape = CurrentShape;
|
||||
|
||||
if (shape != null && !CurrentRectangle.IsEmpty && !Config.IsFixedSize && shape.NodeType != NodeType.Point)
|
||||
{
|
||||
ResizeManager.Show();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue