using System.Drawing; using System.Windows.Forms; using TweetDuck.Core.Controls; using TweetDuck.Core.Utils; using TweetDuck.Data.Serialization; namespace TweetDuck.Data{ sealed class WindowState{ private Rectangle rect; private bool isMaximized; public void Save(Form form){ rect = form.WindowState == FormWindowState.Normal ? form.DesktopBounds : form.RestoreBounds; isMaximized = form.WindowState == FormWindowState.Maximized; } public void Restore(Form form, bool firstTimeFullscreen){ if (rect != Rectangle.Empty){ form.DesktopBounds = rect; form.WindowState = isMaximized ? FormWindowState.Maximized : FormWindowState.Normal; } if ((rect == Rectangle.Empty && firstTimeFullscreen) || form.IsFullyOutsideView()){ form.DesktopBounds = Screen.PrimaryScreen.WorkingArea; form.WindowState = FormWindowState.Maximized; Save(form); } } public static readonly SingleTypeConverter<WindowState> Converter = new SingleTypeConverter<WindowState>{ ConvertToString = value => $"{(value.isMaximized ? 'M' : '_')}{value.rect.X} {value.rect.Y} {value.rect.Width} {value.rect.Height}", ConvertToObject = value => { int[] elements = StringUtils.ParseInts(value.Substring(1), ' '); return new WindowState{ rect = new Rectangle(elements[0], elements[1], elements[2], elements[3]), isMaximized = value[0] == 'M' }; } }; } }