diff --git a/docs/changelog.md b/docs/changelog.md index 79e72138..b803d303 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,6 +1,7 @@ # v7.0.0.7 Beta (2023-??-??) +- Fix geometry not working when used from mpv.conf and the conf editor. - GitHub Auto/Action/Workflow builds use a newer libmpv build. - German and Chinese translation updated. Thanks to our translation team! - New PowerShell script Tools/update-mpv-and-libmpv.ps1 to update mpv and libmpv. diff --git a/docs/manual.md b/docs/manual.md index 81698f0a..d44000a4 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -675,6 +675,8 @@ https://mpv.io/manual/master/#window Initial window location in percent. Default: 50:50 (centered) +Requires Windows 11, on Windows 10 it works slightly incorrect due to invisible borders. + x=0 docks the window to the left side. x=100 docks the window to the right side. diff --git a/src/MpvNet.Windows/Resources/editor_conf.txt b/src/MpvNet.Windows/Resources/editor_conf.txt index 98db3159..38a49437 100644 --- a/src/MpvNet.Windows/Resources/editor_conf.txt +++ b/src/MpvNet.Windows/Resources/editor_conf.txt @@ -971,9 +971,9 @@ directory = Window help = Initial window height in percent for audio files. Default: 70 name = geometry -file = mpvnet +file = mpv directory = Window -help = Initial window location in percent. Default: 50:50 (centered)\n\nx=0 docks the window to the left side.\nx=100 docks the window to the right side.\ny=0 docks the window to the top side.\ny=100 docks the window to the bottom side. +help = Initial window location in percent. Default: 50:50 (centered)\n\nRequires Windows 11, on Windows 10 it works slightly incorrect due to invisible borders.\n\nx=0 docks the window to the left side.\nx=100 docks the window to the right side.\n\ny=0 docks the window to the top side.\ny=100 docks the window to the bottom side. name = start-size file = mpvnet diff --git a/src/MpvNet.Windows/WinForms/MainForm.cs b/src/MpvNet.Windows/WinForms/MainForm.cs index 05a4ba40..4763b121 100644 --- a/src/MpvNet.Windows/WinForms/MainForm.cs +++ b/src/MpvNet.Windows/WinForms/MainForm.cs @@ -688,18 +688,20 @@ void SetSize(int width, int height, Screen screen, bool checkAutofit = true, boo int minTop = screens.Select(val => GetWorkingArea(Handle, val.WorkingArea).Y).Min(); int maxBottom = screens.Select(val => GetWorkingArea(Handle, val.WorkingArea).Bottom).Max(); - if (load && CommandLine.Contains("geometry")) + if (load) { - string geometryString = CommandLine.GetValue("geometry"); + string geometryString = Player.GetPropertyString("geometry"); - var geometry = ParseGeometry(geometryString, GetWorkingArea( - Handle, Screen.FromHandle(Handle).WorkingArea), width, height); + if (!string.IsNullOrEmpty(geometryString)) + { + var pos = ParseGeometry(geometryString, width, height); - if (geometry.x != int.MaxValue) - left = geometry.x; + if (pos.X != int.MaxValue) + left = pos.X; - if (geometry.y != int.MaxValue) - top = geometry.y; + if (pos.Y != int.MaxValue) + top = pos.Y; + } } if (left < minLeft) @@ -718,15 +720,17 @@ void SetSize(int width, int height, Screen screen, bool checkAutofit = true, boo SetWindowPos(Handle, IntPtr.Zero, left, top, width, height, SWP_NOACTIVATE); } - (int x, int y) ParseGeometry(string input, Rectangle workingArea, int width, int height) + Point ParseGeometry(string input, int width, int height) { int x = int.MaxValue; int y = int.MaxValue; - Match match = Regex.Match(input, @"^(\d+)%?:(\d+)%?$"); + Match match = Regex.Match(input, @"^\+(\d+)%?\+(\d+)%?$"); if (match.Success) { + Rectangle workingArea = GetWorkingArea(Handle, Screen.FromHandle(Handle).WorkingArea); + x = int.Parse(match.Groups[1].Value); y = int.Parse(match.Groups[2].Value); @@ -734,7 +738,7 @@ void SetSize(int width, int height, Screen screen, bool checkAutofit = true, boo y = workingArea.Top + Convert.ToInt32((workingArea.Height - height) / 100.0 * y); } - return (x, y); + return new Point(x, y); } public void CycleFullscreen(bool enabled)