mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-01-02 10:43:31 +00:00
72 lines
1.9 KiB
C#
72 lines
1.9 KiB
C#
using System;
|
|
using Avalonia;
|
|
using Avalonia.Controls;
|
|
|
|
namespace Artemis.UI.Models;
|
|
|
|
public class WindowSize
|
|
{
|
|
private bool _applying;
|
|
public int Top { get; set; }
|
|
public int Left { get; set; }
|
|
public double Width { get; set; }
|
|
public double Height { get; set; }
|
|
public int MaximizedTop { get; set; }
|
|
public int MaximizedLeft { get; set; }
|
|
public double MaximizedWidth { get; set; }
|
|
public double MaximizedHeight { get; set; }
|
|
public bool IsMaximized { get; set; }
|
|
|
|
public void ApplyFromWindow(Window window)
|
|
{
|
|
if (_applying)
|
|
return;
|
|
|
|
if (double.IsNaN(window.Width) || double.IsNaN(window.Height))
|
|
return;
|
|
|
|
IsMaximized = window.WindowState == WindowState.Maximized;
|
|
if (IsMaximized)
|
|
{
|
|
MaximizedTop = window.Position.Y;
|
|
MaximizedLeft = window.Position.X;
|
|
MaximizedHeight = window.Height;
|
|
MaximizedWidth = window.Width;
|
|
}
|
|
else
|
|
{
|
|
Top = window.Position.Y;
|
|
Left = window.Position.X;
|
|
Height = window.Height;
|
|
Width = window.Width;
|
|
}
|
|
}
|
|
|
|
public void ApplyToWindow(Window window)
|
|
{
|
|
if (_applying)
|
|
return;
|
|
|
|
try
|
|
{
|
|
// The -8 seems to be a FluentAvalonia thing?
|
|
_applying = true;
|
|
if (IsMaximized)
|
|
{
|
|
window.Position = new PixelPoint(Math.Max(-8, MaximizedLeft), Math.Max(-8, MaximizedTop));
|
|
window.WindowState = WindowState.Maximized;
|
|
}
|
|
else
|
|
{
|
|
window.Position = new PixelPoint(Math.Max(-8, Left), Math.Max(-8, Top));
|
|
window.Height = Height;
|
|
window.Width = Width;
|
|
window.WindowState = WindowState.Normal;
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
_applying = false;
|
|
}
|
|
}
|
|
} |