Move key move/resize methods to ShapeManager from ResizeManager, Removed Show/Hide methods from ResizeManager instead using Visible property

This commit is contained in:
Jaex 2016-08-05 14:37:20 +03:00
parent 7be1c5e519
commit 2622c2469c
2 changed files with 104 additions and 135 deletions

View file

@ -57,6 +57,8 @@ public bool Visible
if (shape != null)
{
UpdateNodePositions();
if (shape.NodeType == NodeType.Rectangle)
{
foreach (NodeObject node in nodes)
@ -81,20 +83,23 @@ public bool Visible
}
public bool IsResizing { get; private set; }
public bool IsBottomRightResizing { get; set; }
public bool IsCursorOnNode
{
get
{
return Visible && nodes.Any(node => node.IsCursorHover);
}
}
private ShapeManager shapeManager;
private NodeObject[] nodes;
private bool isUpPressed, isDownPressed, isLeftPressed, isRightPressed;
private Rectangle tempRect;
public ResizeManager(BaseRegionForm form, ShapeManager shapeManager)
{
this.shapeManager = shapeManager;
form.KeyDown += form_KeyDown;
form.KeyUp += form_KeyUp;
nodes = new NodeObject[8];
for (int i = 0; i < 8; i++)
@ -189,7 +194,7 @@ public void Update()
{
shapeManager.IsCreating = true;
Hide();
Visible = false;
}
}
}
@ -202,131 +207,6 @@ public void Update()
}
}
private void form_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Left:
case Keys.A:
isLeftPressed = true;
break;
case Keys.Right:
case Keys.D:
isRightPressed = true;
break;
case Keys.Up:
case Keys.W:
isUpPressed = true;
break;
case Keys.Down:
case Keys.S:
isDownPressed = true;
break;
case Keys.Menu:
IsBottomRightResizing = true;
break;
}
int speed;
if (e.Shift)
{
speed = RegionCaptureOptions.MoveSpeedMaximum;
}
else
{
speed = RegionCaptureOptions.MoveSpeedMinimum;
}
int x = 0;
if (isLeftPressed)
{
x -= speed;
}
if (isRightPressed)
{
x += speed;
}
int y = 0;
if (isUpPressed)
{
y -= speed;
}
if (isDownPressed)
{
y += speed;
}
if (x != 0 || y != 0)
{
BaseShape shape = shapeManager.CurrentShape;
if (shape == null || shapeManager.IsCreating)
{
Cursor.Position = Cursor.Position.Add(x, y);
}
else
{
if (e.Control)
{
shape.Move(x, y);
}
else
{
shape.Resize(x, y, e.Alt);
}
}
}
}
private void form_KeyUp(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Left:
case Keys.A:
isLeftPressed = false;
break;
case Keys.Right:
case Keys.D:
isRightPressed = false;
break;
case Keys.Up:
case Keys.W:
isUpPressed = false;
break;
case Keys.Down:
case Keys.S:
isDownPressed = false;
break;
case Keys.Menu:
IsBottomRightResizing = false;
break;
}
}
public bool IsCursorOnNode()
{
return Visible && nodes.Any(node => node.IsCursorHover);
}
public void Show()
{
UpdateNodePositions();
Visible = true;
}
public void Hide()
{
Visible = false;
}
private void UpdateNodePositions()
{
BaseShape shape = shapeManager.CurrentShape;

View file

@ -206,6 +206,7 @@ public AnnotationOptions AnnotationOptions
private ToolStripSeparator tssObjectOptions, tssShapeOptions;
private ToolStripMenuItem tsmiDeleteSelected, tsmiDeleteAll, tsmiBorderColor, tsmiFillColor, tsmiHighlightColor;
private ToolStripLabeledNumericUpDown tslnudBorderSize, tslnudRoundedRectangleRadius, tslnudBlurRadius, tslnudPixelateSize;
private bool isLeftPressed, isRightPressed, isUpPressed, isDownPressed;
public ShapeManager(RectangleRegionForm form)
{
@ -937,6 +938,22 @@ private void form_KeyDown(object sender, KeyEventArgs e)
case Keys.Menu:
IsSnapResizing = true;
break;
case Keys.Left:
case Keys.A:
isLeftPressed = true;
break;
case Keys.Right:
case Keys.D:
isRightPressed = true;
break;
case Keys.Up:
case Keys.W:
isUpPressed = true;
break;
case Keys.Down:
case Keys.S:
isDownPressed = true;
break;
}
if (form.Mode == RectangleRegionMode.Annotation && !IsCreating)
@ -978,6 +995,62 @@ private void form_KeyDown(object sender, KeyEventArgs e)
break;
}
}
int speed;
if (e.Shift)
{
speed = RegionCaptureOptions.MoveSpeedMaximum;
}
else
{
speed = RegionCaptureOptions.MoveSpeedMinimum;
}
int x = 0;
if (isLeftPressed)
{
x -= speed;
}
if (isRightPressed)
{
x += speed;
}
int y = 0;
if (isUpPressed)
{
y -= speed;
}
if (isDownPressed)
{
y += speed;
}
if (x != 0 || y != 0)
{
BaseShape shape = CurrentShape;
if (shape == null || IsCreating)
{
Cursor.Position = Cursor.Position.Add(x, y);
}
else
{
if (e.Control)
{
shape.Move(x, y);
}
else
{
shape.Resize(x, y, e.Alt);
}
}
}
}
private void form_KeyUp(object sender, KeyEventArgs e)
@ -1004,6 +1077,22 @@ private void form_KeyUp(object sender, KeyEventArgs e)
case Keys.Apps:
OpenOptionsMenu();
break;
case Keys.Left:
case Keys.A:
isLeftPressed = false;
break;
case Keys.Right:
case Keys.D:
isRightPressed = false;
break;
case Keys.Up:
case Keys.W:
isUpPressed = false;
break;
case Keys.Down:
case Keys.S:
isDownPressed = false;
break;
}
}
@ -1058,7 +1147,7 @@ public void Update()
private void RegionSelection(Point position)
{
if (ResizeManager.IsCursorOnNode())
if (ResizeManager.IsCursorOnNode)
{
return;
}
@ -1297,7 +1386,7 @@ private void CheckHover()
{
CurrentHoverRectangle = Rectangle.Empty;
if (!ResizeManager.IsCursorOnNode() && !IsCreating && !IsMoving && !IsResizing)
if (!ResizeManager.IsCursorOnNode && !IsCreating && !IsMoving && !IsResizing)
{
BaseShape shape = GetShapeIntersect();
@ -1395,14 +1484,14 @@ private void SelectShape()
if (shape != null && !CurrentRectangle.IsEmpty && shape.NodeType != NodeType.Point)
{
ResizeManager.Show();
ResizeManager.Visible = true;
}
}
private void DeselectShape()
{
CurrentShape = null;
ResizeManager.Hide();
ResizeManager.Visible = false;
}
private void DeleteCurrentShape()