mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-01 09:47:22 +13:00
Prevent panning from moving canvas offscreen
This commit is contained in:
parent
f0e5416e0d
commit
4b6d40ca20
2 changed files with 28 additions and 0 deletions
|
@ -56,6 +56,7 @@ public sealed class RegionCaptureForm : Form
|
|||
public bool IsAnnotated => ShapeManager != null && ShapeManager.IsAnnotated;
|
||||
|
||||
public Point CurrentPosition { get; private set; }
|
||||
public Point PanningStrech = new Point();
|
||||
|
||||
public Color CurrentColor
|
||||
{
|
||||
|
@ -327,6 +328,32 @@ private void OnMoved()
|
|||
|
||||
private void Pan(int deltaX, int deltaY)
|
||||
{
|
||||
PanningStrech.X -= deltaX;
|
||||
PanningStrech.Y -= deltaY;
|
||||
|
||||
int panLimit = 100;
|
||||
|
||||
Size panLimitSize = new Size(
|
||||
Math.Min(panLimit, CanvasRectangle.Width),
|
||||
Math.Min(panLimit, CanvasRectangle.Height));
|
||||
|
||||
Rectangle limitRectangle = new Rectangle(
|
||||
ClientArea.X + panLimitSize.Width, ClientArea.Y + panLimitSize.Height,
|
||||
ClientArea.Width - panLimitSize.Width * 2, ClientArea.Height - panLimitSize.Height * 2);
|
||||
|
||||
deltaX = Math.Max(deltaX, limitRectangle.Left - CanvasRectangle.Right);
|
||||
deltaX = Math.Min(deltaX, limitRectangle.Right - CanvasRectangle.Left);
|
||||
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));
|
||||
|
||||
PanningStrech.X += deltaX;
|
||||
PanningStrech.Y += deltaY;
|
||||
|
||||
CanvasRectangle = CanvasRectangle.LocationOffset(deltaX, deltaY);
|
||||
|
||||
if (backgroundBrush != null)
|
||||
|
|
|
@ -738,6 +738,7 @@ private void EndRegionSelection()
|
|||
private void StartPanning()
|
||||
{
|
||||
IsPanning = true;
|
||||
form.PanningStrech = new Point(0, 0);
|
||||
form.Cursor = Cursors.SizeAll;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue