mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-03 02:36:50 +13:00
multi direction arrow key movement
8 direction movement rather than 4
This commit is contained in:
parent
e16cbcbdbb
commit
3d578e1d08
2 changed files with 55 additions and 62 deletions
|
@ -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);
|
||||||
|
|
|
@ -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" />
|
||||||
|
|
Loading…
Reference in a new issue