55 lines
1.8 KiB
C#
55 lines
1.8 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: Terraria.Graphics.WindowStateController
|
|
// Assembly: Terraria, Version=1.4.0.5, Culture=neutral, PublicKeyToken=null
|
|
// MVID: 67F9E73E-0A81-4937-A22C-5515CD405A83
|
|
// Assembly location: C:\Users\mikeyisbaeyt\Downloads\depotdownloader-2.4.5\depots\105601\6707058\Terraria.exe
|
|
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Terraria.Graphics
|
|
{
|
|
public class WindowStateController
|
|
{
|
|
public bool CanMoveWindowAcrossScreens => true;
|
|
|
|
public string ScreenDeviceName => Main.instance.Window.ScreenDeviceName;
|
|
|
|
public void TryMovingToScreen(string screenDeviceName)
|
|
{
|
|
Rectangle bounds;
|
|
if (!this.CanMoveWindowAcrossScreens || !this.TryGetBounds(screenDeviceName, out bounds) || !this.IsVisibleOnAnyScreen(bounds))
|
|
return;
|
|
Form form = (Form) Control.FromHandle(Main.instance.Window.Handle);
|
|
if (!this.WouldViewFitInScreen(form.Bounds, bounds))
|
|
return;
|
|
form.Location = new Point(bounds.Width / 2 - form.Width / 2 + bounds.X, bounds.Height / 2 - form.Height / 2 + bounds.Y);
|
|
}
|
|
|
|
private bool TryGetBounds(string screenDeviceName, out Rectangle bounds)
|
|
{
|
|
bounds = new Rectangle();
|
|
foreach (Screen allScreen in Screen.AllScreens)
|
|
{
|
|
if (allScreen.DeviceName == screenDeviceName)
|
|
{
|
|
bounds = allScreen.Bounds;
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private bool WouldViewFitInScreen(Rectangle view, Rectangle screen) => view.Width <= screen.Width && view.Height <= screen.Height;
|
|
|
|
private bool IsVisibleOnAnyScreen(Rectangle rect)
|
|
{
|
|
foreach (Screen allScreen in Screen.AllScreens)
|
|
{
|
|
if (allScreen.WorkingArea.IntersectsWith(rect))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
}
|