mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-01 09:47:22 +13:00
Merge pull request #930 from davidruhmann/multi-direction-arrow-movement
multi direction arrow key movement
This commit is contained in:
commit
5ad848b9c8
1 changed files with 55 additions and 75 deletions
|
@ -56,6 +56,11 @@ public bool Visible
|
|||
public int MinMoveSpeed { get; set; }
|
||||
public bool IsBottomRightResizing { get; set; }
|
||||
|
||||
private bool IsUpPressed { get; set; }
|
||||
private bool IsDownPressed { get; set; }
|
||||
private bool IsLeftPressed { get; set; }
|
||||
private bool IsRightPressed { get; set; }
|
||||
|
||||
private AreaManager areaManager;
|
||||
private NodeObject[] nodes;
|
||||
private Rectangle tempRect;
|
||||
|
@ -68,6 +73,7 @@ public ResizeManager(Surface surface, AreaManager areaManager)
|
|||
MaxMoveSpeed = surface.Config.MaxMoveSpeed;
|
||||
|
||||
surface.KeyDown += surface_KeyDown;
|
||||
surface.KeyUp += surface_KeyUp;
|
||||
|
||||
nodes = new NodeObject[8];
|
||||
|
||||
|
@ -149,89 +155,63 @@ public void Update()
|
|||
|
||||
private void surface_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
int speed;
|
||||
|
||||
if (e.Control)
|
||||
{
|
||||
speed = MaxMoveSpeed;
|
||||
}
|
||||
else
|
||||
{
|
||||
speed = MinMoveSpeed;
|
||||
}
|
||||
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
case Keys.Left:
|
||||
if (!areaManager.IsCurrentAreaValid || areaManager.IsCreating)
|
||||
{
|
||||
Cursor.Position = new Point(Cursor.Position.X - speed, Cursor.Position.Y);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (e.Shift)
|
||||
{
|
||||
MoveCurrentArea(-speed, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
ResizeCurrentArea(-speed, 0, IsBottomRightResizing);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Keys.Right:
|
||||
if (!areaManager.IsCurrentAreaValid || areaManager.IsCreating)
|
||||
{
|
||||
Cursor.Position = new Point(Cursor.Position.X + speed, Cursor.Position.Y);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (e.Shift)
|
||||
{
|
||||
MoveCurrentArea(speed, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
ResizeCurrentArea(speed, 0, IsBottomRightResizing);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Keys.Up:
|
||||
if (!areaManager.IsCurrentAreaValid || areaManager.IsCreating)
|
||||
{
|
||||
Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y - speed);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (e.Shift)
|
||||
{
|
||||
MoveCurrentArea(0, -speed);
|
||||
}
|
||||
else
|
||||
{
|
||||
ResizeCurrentArea(0, -speed, IsBottomRightResizing);
|
||||
}
|
||||
}
|
||||
IsUpPressed = true;
|
||||
break;
|
||||
case Keys.Down:
|
||||
if (!areaManager.IsCurrentAreaValid || areaManager.IsCreating)
|
||||
{
|
||||
Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + speed);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (e.Shift)
|
||||
{
|
||||
MoveCurrentArea(0, speed);
|
||||
}
|
||||
else
|
||||
{
|
||||
ResizeCurrentArea(0, speed, IsBottomRightResizing);
|
||||
}
|
||||
}
|
||||
IsDownPressed = true;
|
||||
break;
|
||||
case Keys.Left:
|
||||
IsLeftPressed = true;
|
||||
break;
|
||||
case Keys.Right:
|
||||
IsRightPressed = true;
|
||||
break;
|
||||
case Keys.Tab:
|
||||
IsBottomRightResizing = !IsBottomRightResizing;
|
||||
return;
|
||||
}
|
||||
|
||||
// Calculate cursor movement
|
||||
int speed = e.Control ? MaxMoveSpeed : MinMoveSpeed;
|
||||
int y = IsUpPressed && IsDownPressed ? 0 : IsDownPressed ? speed : IsUpPressed ? -speed : 0;
|
||||
int x = IsLeftPressed && IsRightPressed ? 0 : IsRightPressed ? speed : IsLeftPressed ? -speed : 0;
|
||||
|
||||
// Move the cursor
|
||||
if (!areaManager.IsCurrentAreaValid || areaManager.IsCreating)
|
||||
{
|
||||
Cursor.Position = new Point(Cursor.Position.X + x, Cursor.Position.Y + y);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (e.Shift)
|
||||
{
|
||||
MoveCurrentArea(x, y);
|
||||
}
|
||||
else
|
||||
{
|
||||
ResizeCurrentArea(x, y, IsBottomRightResizing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void surface_KeyUp(object sender, KeyEventArgs e)
|
||||
{
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
case Keys.Up:
|
||||
IsUpPressed = false;
|
||||
break;
|
||||
case Keys.Down:
|
||||
IsDownPressed = false;
|
||||
break;
|
||||
case Keys.Left:
|
||||
IsLeftPressed = false;
|
||||
break;
|
||||
case Keys.Right:
|
||||
IsRightPressed = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue