multi direction arrow key movement

8 direction movement rather than 4
This commit is contained in:
David Ruhmann 2015-08-19 11:39:05 -05:00
parent e16cbcbdbb
commit 3d578e1d08
2 changed files with 55 additions and 62 deletions

View file

@ -27,6 +27,7 @@ You should have received a copy of the GNU General Public License
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using System.Windows.Forms; using System.Windows.Forms;
using Input = System.Windows.Input;
namespace ShareX.ScreenCaptureLib namespace ShareX.ScreenCaptureLib
{ {
@ -149,85 +150,48 @@ public void Update()
private void surface_KeyDown(object sender, KeyEventArgs e) private void surface_KeyDown(object sender, KeyEventArgs e)
{ {
int speed; ProcessKeyDown(sender, e, true);
if (e.Control)
{
speed = MaxMoveSpeed;
}
else
{
speed = MinMoveSpeed;
} }
private void ProcessKeyDown(object sender, KeyEventArgs e, bool first = false)
{
int speed = e.Control ? MaxMoveSpeed : MinMoveSpeed;
switch (e.KeyCode) switch (e.KeyCode)
{ {
case Keys.Left: case Keys.Left:
if (!areaManager.IsCurrentAreaValid || areaManager.IsCreating) if (Input.Keyboard.IsKeyDown(Input.Key.Right)) return;
AdjustPosition(-speed, 0, e);
if (first)
{ {
Cursor.Position = new Point(Cursor.Position.X - speed, Cursor.Position.Y); NextKeyDown(sender, e, Keys.Up);
} NextKeyDown(sender, e, Keys.Down);
else
{
if (e.Shift)
{
MoveCurrentArea(-speed, 0);
}
else
{
ResizeCurrentArea(-speed, 0, IsBottomRightResizing);
}
} }
break; break;
case Keys.Right: case Keys.Right:
if (!areaManager.IsCurrentAreaValid || areaManager.IsCreating) if (Input.Keyboard.IsKeyDown(Input.Key.Left)) return;
AdjustPosition(speed, 0, e);
if (first)
{ {
Cursor.Position = new Point(Cursor.Position.X + speed, Cursor.Position.Y); NextKeyDown(sender, e, Keys.Down);
} NextKeyDown(sender, e, Keys.Up);
else
{
if (e.Shift)
{
MoveCurrentArea(speed, 0);
}
else
{
ResizeCurrentArea(speed, 0, IsBottomRightResizing);
}
} }
break; break;
case Keys.Up: case Keys.Up:
if (!areaManager.IsCurrentAreaValid || areaManager.IsCreating) if (Input.Keyboard.IsKeyDown(Input.Key.Down)) return;
AdjustPosition(0, -speed, e);
if (first)
{ {
Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y - speed); NextKeyDown(sender, e, Keys.Right);
} NextKeyDown(sender, e, Keys.Left);
else
{
if (e.Shift)
{
MoveCurrentArea(0, -speed);
}
else
{
ResizeCurrentArea(0, -speed, IsBottomRightResizing);
}
} }
break; break;
case Keys.Down: case Keys.Down:
if (!areaManager.IsCurrentAreaValid || areaManager.IsCreating) if (Input.Keyboard.IsKeyDown(Input.Key.Up)) return;
AdjustPosition(0, speed, e);
if (first)
{ {
Cursor.Position = new Point(Cursor.Position.X, Cursor.Position.Y + speed); NextKeyDown(sender, e, Keys.Left);
} NextKeyDown(sender, e, Keys.Right);
else
{
if (e.Shift)
{
MoveCurrentArea(0, speed);
}
else
{
ResizeCurrentArea(0, speed, IsBottomRightResizing);
}
} }
break; break;
case Keys.Tab: case Keys.Tab:
@ -236,6 +200,33 @@ private void surface_KeyDown(object sender, KeyEventArgs e)
} }
} }
private void NextKeyDown(object sender, KeyEventArgs e, Keys k)
{
if (Input.Keyboard.IsKeyDown(Input.KeyInterop.KeyFromVirtualKey((int)k)))
{
ProcessKeyDown(sender, new KeyEventArgs(k | e.Modifiers));
}
}
private void AdjustPosition(int x, int y, KeyEventArgs e)
{
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);
}
}
}
public bool IsCursorOnNode() public bool IsCursorOnNode()
{ {
return Visible && nodes.Any(node => node.IsMouseHover); return Visible && nodes.Any(node => node.IsMouseHover);

View file

@ -42,12 +42,14 @@
<DebugSymbols>false</DebugSymbols> <DebugSymbols>false</DebugSymbols>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="PresentationCore" />
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Design" /> <Reference Include="System.Design" />
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Enums.cs" /> <Compile Include="Enums.cs" />