using System.Drawing; using System.Windows.Forms; using TweetDuck.Controls; using TweetLib.Utils.Serialization.Converters; using TweetLib.Utils.Static; namespace TweetDuck.Dialogs { 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 BasicTypeConverter<WindowState> Converter = new BasicTypeConverter<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' }; } }; } }