Fix moving canvas offscreen when resizing

Also fix canvas jumpling once when resizing
This commit is contained in:
L1Q 2017-11-09 05:55:46 +02:00
parent ec88a67703
commit db56792472

View file

@ -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();
}