Step label create with default size and move it

This commit is contained in:
Jaex 2016-05-22 23:19:13 +03:00
parent 70300cdd8f
commit b131585a9d
4 changed files with 202 additions and 176 deletions

View file

@ -59,7 +59,8 @@ public enum NodeType
{
None,
Rectangle,
Line
Line,
Point
}
internal enum NodePosition

View file

@ -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);
}

View file

@ -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)

View file

@ -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();
}