From 3d578e1d08b31d88212b281aeb123bf335481fa9 Mon Sep 17 00:00:00 2001 From: David Ruhmann Date: Wed, 19 Aug 2015 11:39:05 -0500 Subject: [PATCH] multi direction arrow key movement 8 direction movement rather than 4 --- .../RegionHelpers/ResizeManager.cs | 115 ++++++++---------- .../ShareX.ScreenCaptureLib.csproj | 2 + 2 files changed, 55 insertions(+), 62 deletions(-) diff --git a/ShareX.ScreenCaptureLib/RegionHelpers/ResizeManager.cs b/ShareX.ScreenCaptureLib/RegionHelpers/ResizeManager.cs index bc52fdbf8..63b874639 100644 --- a/ShareX.ScreenCaptureLib/RegionHelpers/ResizeManager.cs +++ b/ShareX.ScreenCaptureLib/RegionHelpers/ResizeManager.cs @@ -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); diff --git a/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj b/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj index 0614e99a4..204da8cdb 100644 --- a/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj +++ b/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj @@ -42,12 +42,14 @@ false + +