mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-02 18:26:27 +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.Linq;
|
||||
using System.Windows.Forms;
|
||||
using Input = System.Windows.Input;
|
||||
|
||||
namespace ShareX.ScreenCaptureLib
|
||||
{
|
||||
|
@ -149,85 +150,48 @@ public void Update()
|
|||
|
||||
private void surface_KeyDown(object sender, KeyEventArgs e)
|
||||
{
|
||||
int speed;
|
||||
|
||||
if (e.Control)
|
||||
{
|
||||
speed = MaxMoveSpeed;
|
||||
}
|
||||
else
|
||||
{
|
||||
speed = MinMoveSpeed;
|
||||
}
|
||||
ProcessKeyDown(sender, e, true);
|
||||
}
|
||||
|
||||
private void ProcessKeyDown(object sender, KeyEventArgs e, bool first = false)
|
||||
{
|
||||
int speed = e.Control ? MaxMoveSpeed : MinMoveSpeed;
|
||||
switch (e.KeyCode)
|
||||
{
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (e.Shift)
|
||||
{
|
||||
MoveCurrentArea(-speed, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
ResizeCurrentArea(-speed, 0, IsBottomRightResizing);
|
||||
}
|
||||
NextKeyDown(sender, e, Keys.Up);
|
||||
NextKeyDown(sender, e, Keys.Down);
|
||||
}
|
||||
break;
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (e.Shift)
|
||||
{
|
||||
MoveCurrentArea(speed, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
ResizeCurrentArea(speed, 0, IsBottomRightResizing);
|
||||
}
|
||||
NextKeyDown(sender, e, Keys.Down);
|
||||
NextKeyDown(sender, e, Keys.Up);
|
||||
}
|
||||
break;
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (e.Shift)
|
||||
{
|
||||
MoveCurrentArea(0, -speed);
|
||||
}
|
||||
else
|
||||
{
|
||||
ResizeCurrentArea(0, -speed, IsBottomRightResizing);
|
||||
}
|
||||
NextKeyDown(sender, e, Keys.Right);
|
||||
NextKeyDown(sender, e, Keys.Left);
|
||||
}
|
||||
break;
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (e.Shift)
|
||||
{
|
||||
MoveCurrentArea(0, speed);
|
||||
}
|
||||
else
|
||||
{
|
||||
ResizeCurrentArea(0, speed, IsBottomRightResizing);
|
||||
}
|
||||
NextKeyDown(sender, e, Keys.Left);
|
||||
NextKeyDown(sender, e, Keys.Right);
|
||||
}
|
||||
break;
|
||||
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()
|
||||
{
|
||||
return Visible && nodes.Any(node => node.IsMouseHover);
|
||||
|
|
|
@ -42,12 +42,14 @@
|
|||
<DebugSymbols>false</DebugSymbols>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="PresentationCore" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Design" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="WindowsBase" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Enums.cs" />
|
||||
|
|
Loading…
Reference in a new issue