From db56792472d719ecc88742bbc23021faf16c4ba6 Mon Sep 17 00:00:00 2001 From: L1Q <0xL1Q@ex.ua> Date: Thu, 9 Nov 2017 05:55:46 +0200 Subject: [PATCH] Fix moving canvas offscreen when resizing Also fix canvas jumpling once when resizing --- .../Forms/RegionCaptureForm.cs | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/ShareX.ScreenCaptureLib/Forms/RegionCaptureForm.cs b/ShareX.ScreenCaptureLib/Forms/RegionCaptureForm.cs index 4a4719376..bb24eada4 100644 --- a/ShareX.ScreenCaptureLib/Forms/RegionCaptureForm.cs +++ b/ShareX.ScreenCaptureLib/Forms/RegionCaptureForm.cs @@ -326,10 +326,13 @@ private void OnMoved() } } - private void Pan(int deltaX, int deltaY) + private void Pan(int deltaX, int deltaY, bool usePanningStretch = true) { - PanningStrech.X -= deltaX; - PanningStrech.Y -= deltaY; + if (usePanningStretch) + { + PanningStrech.X -= deltaX; + PanningStrech.Y -= deltaY; + } int panLimit = 100; @@ -346,13 +349,16 @@ private void Pan(int deltaX, int deltaY) deltaY = Math.Max(deltaY, limitRectangle.Top - CanvasRectangle.Bottom); deltaY = Math.Min(deltaY, limitRectangle.Bottom - CanvasRectangle.Top); - deltaX -= Math.Min(Math.Max(deltaX, 0), Math.Max(0, PanningStrech.X)); - deltaX -= Math.Max(Math.Min(deltaX, 0), Math.Min(0, PanningStrech.X)); - deltaY -= Math.Min(Math.Max(deltaY, 0), Math.Max(0, PanningStrech.Y)); - deltaY -= Math.Max(Math.Min(deltaY, 0), Math.Min(0, PanningStrech.Y)); + if (usePanningStretch) + { + deltaX -= Math.Min(Math.Max(deltaX, 0), Math.Max(0, PanningStrech.X)); + deltaX -= Math.Max(Math.Min(deltaX, 0), Math.Min(0, PanningStrech.X)); + deltaY -= Math.Min(Math.Max(deltaY, 0), Math.Max(0, PanningStrech.Y)); + deltaY -= Math.Max(Math.Min(deltaY, 0), Math.Min(0, PanningStrech.Y)); - PanningStrech.X += deltaX; - PanningStrech.Y += deltaY; + PanningStrech.X += deltaX; + PanningStrech.Y += deltaY; + } CanvasRectangle = CanvasRectangle.LocationOffset(deltaX, deltaY); @@ -377,12 +383,12 @@ private void AutomaticPan(Vector2 centerOffset) if (IsEditorMode) { int x = (int)Math.Round(ClientArea.Width * 0.5f + centerOffset.X); - int y = (int)Math.Round(ToolbarHeight + (ClientArea.Height - ToolbarHeight) * 0.5f + centerOffset.Y); + int y = (int)Math.Round(ClientArea.Height * 0.5f + centerOffset.Y); int newX = x - CanvasRectangle.Width / 2; int newY = y - CanvasRectangle.Height / 2; int deltaX = newX - CanvasRectangle.X; int deltaY = newY - CanvasRectangle.Y; - Pan(deltaX, deltaY); + Pan(deltaX, deltaY, false); } } @@ -400,7 +406,7 @@ private void UpdateCenterOffset() public void CenterCanvas() { - CanvasCenterOffset = new Vector2(0f, 0f); + CanvasCenterOffset = new Vector2(0f, ToolbarHeight + 0f); AutomaticPan(); }