mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-04 04:06:05 +13:00
Merge pull request #2916 from L1Q/master
Fix moving canvas offscreen when resizing
This commit is contained in:
commit
2eab4f214d
1 changed files with 18 additions and 12 deletions
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue