-
This commit is contained in:
@@ -7,8 +7,14 @@
|
|||||||
- when single process queue is used the folder is no longer loaded
|
- when single process queue is used the folder is no longer loaded
|
||||||
- the playlist is never cleared whenever the control key is down but
|
- the playlist is never cleared whenever the control key is down but
|
||||||
files and URLs are appended instead
|
files and URLs are appended instead
|
||||||
- 2 powershell script hosting bugs were fixed and a new powershell example script
|
- powershell script hosting bugs were fixed and a new powershell example script
|
||||||
was added to the [scripting wiki page](https://github.com/stax76/mpv.net/wiki/Scripting#powershell)
|
was added to the [scripting wiki page](https://github.com/stax76/mpv.net/wiki/Scripting#powershell)
|
||||||
|
- the menu entry for the command palette was renamed to 'Show All Commands' and
|
||||||
|
the default key binding was changed to F1 which is also the default in VS Code
|
||||||
|
- the default key binding of the Everything media search was changed to F3
|
||||||
|
- support for the mpv property 'border' was added to show/hide
|
||||||
|
the window decoration (titlebar, border). A menu item and key binding (b)
|
||||||
|
was added as well
|
||||||
|
|
||||||
### 4.3.1
|
### 4.3.1
|
||||||
|
|
||||||
|
|||||||
34
mpv.net/Properties/Resources.Designer.cs
generated
34
mpv.net/Properties/Resources.Designer.cs
generated
@@ -82,28 +82,6 @@ namespace mpvnet.Properties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Looks up a localized string similar to
|
|
||||||
/// # This file defines the input (keys and mouse) bindings of mpv and mpv.net
|
|
||||||
/// # and it also defines the context menu of mpv.net. mpv.net has an input
|
|
||||||
/// # editor and an config editor as alternatives to editing conf text files.
|
|
||||||
/// # The input and config editor can be found in mpv.net's context menu at:
|
|
||||||
///
|
|
||||||
/// # Settings > Show Config Editor
|
|
||||||
/// # Settings > Show Input Editor
|
|
||||||
///
|
|
||||||
/// # The defaults of this file can be found at:
|
|
||||||
///
|
|
||||||
/// # https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt
|
|
||||||
///
|
|
||||||
/// # t [rest of string was truncated]";.
|
|
||||||
/// </summary>
|
|
||||||
internal static string inputConfHeader {
|
|
||||||
get {
|
|
||||||
return ResourceManager.GetString("inputConfHeader", resourceCulture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to
|
/// Looks up a localized string similar to
|
||||||
///# manual: https://mpv.io/manual/master/
|
///# manual: https://mpv.io/manual/master/
|
||||||
@@ -116,10 +94,9 @@ namespace mpvnet.Properties {
|
|||||||
///hwdec = yes
|
///hwdec = yes
|
||||||
///keep-open = yes
|
///keep-open = yes
|
||||||
///keep-open-pause = no
|
///keep-open-pause = no
|
||||||
///osd-playing-msg = ${filename}
|
///osd-playing-msg = '${filename}'
|
||||||
///screenshot-directory = ~~desktop/
|
///screenshot-directory = '~~desktop/'
|
||||||
///input-default-bindings = no
|
///input-default-bindings = no.
|
||||||
///.
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal static string mpvConf {
|
internal static string mpvConf {
|
||||||
get {
|
get {
|
||||||
@@ -166,13 +143,14 @@ namespace mpvnet.Properties {
|
|||||||
///[[settings]]
|
///[[settings]]
|
||||||
///name = "url-whitelist"
|
///name = "url-whitelist"
|
||||||
///filter = "mpv.net"
|
///filter = "mpv.net"
|
||||||
///help = "Domain whitelist to monitor the clipboard for URLs to play.\n\nDefault: youtube ard zdf"
|
///type = "string"
|
||||||
|
///help = "Whitelist to monitor the clipboard for URLs to play.\n\nDefault: tube vimeo ard zdf"
|
||||||
///
|
///
|
||||||
///[[settings]]
|
///[[settings]]
|
||||||
///name = "process-instance"
|
///name = "process-instance"
|
||||||
///default = "single"
|
///default = "single"
|
||||||
///filter = "mpv.net"
|
///filter = "mpv.net"
|
||||||
///help = "Defines if more then [rest of string was truncated]";.
|
///help = "Defines [rest of string was truncated]";.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal static string mpvNetConfToml {
|
internal static string mpvNetConfToml {
|
||||||
get {
|
get {
|
||||||
|
|||||||
@@ -121,9 +121,6 @@
|
|||||||
<data name="inputConf" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="inputConf" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\inputConf.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
|
<value>..\Resources\inputConf.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="inputConfHeader" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
|
||||||
<value>..\Resources\inputConfHeader.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
|
||||||
</data>
|
|
||||||
<data name="mpvConf" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="mpvConf" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\mpvConf.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
<value>..\Resources\mpvConf.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
Alt+s script-message mpv.net load-sub #menu: Open > Load external subtitle files...
|
Alt+s script-message mpv.net load-sub #menu: Open > Load external subtitle files...
|
||||||
_ ignore #menu: Open > -
|
_ ignore #menu: Open > -
|
||||||
_ script-message mpv.net open-files append #menu: Open > Add files to playlist...
|
_ script-message mpv.net open-files append #menu: Open > Add files to playlist...
|
||||||
Ctrl+S script-message mpv.net show-media-search #menu: Open > Show media search...
|
F3 script-message mpv.net show-media-search #menu: Open > Show media search...
|
||||||
_ ignore #menu: Open > -
|
_ ignore #menu: Open > -
|
||||||
_ ignore #menu: Open > Recent
|
_ ignore #menu: Open > Recent
|
||||||
|
|
||||||
@@ -132,6 +132,7 @@
|
|||||||
|
|
||||||
Ctrl+t set ontop yes #menu: View > On Top > Enable
|
Ctrl+t set ontop yes #menu: View > On Top > Enable
|
||||||
Ctrl+T set ontop no #menu: View > On Top > Disable
|
Ctrl+T set ontop no #menu: View > On Top > Disable
|
||||||
|
b cycle border #menu: View > Toggle Border
|
||||||
i script-message mpv.net show-info #menu: View > File Info
|
i script-message mpv.net show-info #menu: View > File Info
|
||||||
t script-binding stats/display-stats #menu: View > Show Statistics
|
t script-binding stats/display-stats #menu: View > Show Statistics
|
||||||
T script-binding stats/display-stats-toggle #menu: View > Toggle Statistics
|
T script-binding stats/display-stats-toggle #menu: View > Toggle Statistics
|
||||||
@@ -143,11 +144,11 @@
|
|||||||
Ctrl+i script-message mpv.net show-input-editor #menu: Settings > Show Input Editor
|
Ctrl+i script-message mpv.net show-input-editor #menu: Settings > Show Input Editor
|
||||||
Ctrl+f script-message mpv.net open-conf-folder #menu: Settings > Open Config Folder
|
Ctrl+f script-message mpv.net open-conf-folder #menu: Settings > Open Config Folder
|
||||||
|
|
||||||
Ctrl+P script-message mpv.net show-command-palette #menu: Tools > Command Palette
|
F1 script-message mpv.net show-command-palette #menu: Tools > Show All Commands
|
||||||
h script-message mpv.net show-history #menu: Tools > Show History
|
h script-message mpv.net show-history #menu: Tools > Show History
|
||||||
l ab-loop #menu: Tools > Set/clear A-B loop points
|
l ab-loop #menu: Tools > Set/clear A-B loop points
|
||||||
L cycle-values loop-file "inf" "no" #menu: Tools > Toggle infinite file looping
|
L cycle-values loop-file "inf" "no" #menu: Tools > Toggle infinite file looping
|
||||||
Ctrl+h cycle-values hwdec "auto" "no" #menu: Tools > Cycle Hardware Decoding
|
Ctrl+h cycle-values hwdec "auto" "no" #menu: Tools > Toggle Hardware Decoding
|
||||||
_ script-message mpv.net execute-mpv-command #menu: Tools > Execute mpv command...
|
_ script-message mpv.net execute-mpv-command #menu: Tools > Execute mpv command...
|
||||||
_ script-message mpv.net manage-file-associations #menu: Tools > Manage File Associations...
|
_ script-message mpv.net manage-file-associations #menu: Tools > Manage File Associations...
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
|
|
||||||
# This file defines the input (keys and mouse) bindings of mpv and mpv.net
|
|
||||||
# and it also defines the context menu of mpv.net. mpv.net has an input
|
|
||||||
# editor and an config editor as alternatives to editing conf text files.
|
|
||||||
# The input and config editor can be found in mpv.net's context menu at:
|
|
||||||
|
|
||||||
# Settings > Show Config Editor
|
|
||||||
# Settings > Show Input Editor
|
|
||||||
|
|
||||||
# The defaults of this file can be found at:
|
|
||||||
|
|
||||||
# https://github.com/stax76/mpv.net/blob/master/mpv.net/Resources/inputConf.txt
|
|
||||||
|
|
||||||
# the defaults of mpv can be found at:
|
|
||||||
|
|
||||||
# https://github.com/mpv-player/mpv/blob/master/etc/inputConf
|
|
||||||
|
|
||||||
# mpv.net's defaults of mpv.conf contain: 'input-default-bindings = no'
|
|
||||||
# which disables mpv's input defaults. Every line in this file begins with a
|
|
||||||
# space character to make it easier to do a text search, so if you want to know
|
|
||||||
# if 'o' has already a binding you can make a text search on ' o '.
|
|
||||||
|
|
||||||
# mpv input commands: https://github.com/stax76/mpv.net/wiki/mpv-input-commands
|
|
||||||
|
|
||||||
# mpv input keys: https://github.com/stax76/mpv.net/wiki/mpv-input-keys
|
|
||||||
@@ -9,6 +9,6 @@ volume = 50
|
|||||||
hwdec = yes
|
hwdec = yes
|
||||||
keep-open = yes
|
keep-open = yes
|
||||||
keep-open-pause = no
|
keep-open-pause = no
|
||||||
osd-playing-msg = ${filename}
|
osd-playing-msg = '${filename}'
|
||||||
screenshot-directory = ~~desktop/
|
screenshot-directory = '~~desktop/'
|
||||||
input-default-bindings = no
|
input-default-bindings = no
|
||||||
@@ -206,6 +206,22 @@ type = "color"
|
|||||||
filter = "Subtitle"
|
filter = "Subtitle"
|
||||||
help = "See sub-color. Color used for sub text background. You can use sub-shadow-offset to change its size relative to the text."
|
help = "See sub-color. Color used for sub text background. You can use sub-shadow-offset to change its size relative to the text."
|
||||||
|
|
||||||
|
[[settings]]
|
||||||
|
name = "fullscreen"
|
||||||
|
default = "no"
|
||||||
|
filter = "Screen"
|
||||||
|
help = "Start the player in fullscreen mode."
|
||||||
|
options = [{ name = "yes" },
|
||||||
|
{ name = "no" }]
|
||||||
|
|
||||||
|
[[settings]]
|
||||||
|
name = "border"
|
||||||
|
default = "yes"
|
||||||
|
filter = "Screen"
|
||||||
|
help = "Show window with decoration (titlebar, border)."
|
||||||
|
options = [{ name = "yes" },
|
||||||
|
{ name = "no" }]
|
||||||
|
|
||||||
[[settings]]
|
[[settings]]
|
||||||
name = "screen"
|
name = "screen"
|
||||||
filter = "Screen"
|
filter = "Screen"
|
||||||
@@ -225,14 +241,6 @@ default = "55"
|
|||||||
filter = "Screen"
|
filter = "Screen"
|
||||||
help = "Specify the OSD font size. See sub-font-size for details. Default: 55"
|
help = "Specify the OSD font size. See sub-font-size for details. Default: 55"
|
||||||
|
|
||||||
[[settings]]
|
|
||||||
name = "fullscreen"
|
|
||||||
default = "no"
|
|
||||||
filter = "Screen"
|
|
||||||
help = "Start the player in fullscreen mode."
|
|
||||||
options = [{ name = "yes" },
|
|
||||||
{ name = "no" }]
|
|
||||||
|
|
||||||
[[settings]]
|
[[settings]]
|
||||||
name = "screenshot-directory"
|
name = "screenshot-directory"
|
||||||
width = 500
|
width = 500
|
||||||
|
|||||||
@@ -102,7 +102,15 @@ namespace mpvnet
|
|||||||
|
|
||||||
string GetInputConfContent()
|
string GetInputConfContent()
|
||||||
{
|
{
|
||||||
string text = Properties.Resources.inputConfHeader + "\r\n";
|
string text = null;
|
||||||
|
|
||||||
|
foreach (string line in Properties.Resources.inputConf.Split(new[] { "\r\n" }, StringSplitOptions.None))
|
||||||
|
{
|
||||||
|
string test = line.Trim();
|
||||||
|
if (test == "" || test.StartsWith("#")) text += test + "\r\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
text = "\r\n" + text.Trim() + "\r\n\r\n";
|
||||||
|
|
||||||
foreach (CommandItem item in CommandItem.Items)
|
foreach (CommandItem item in CommandItem.Items)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ using System.Linq;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Diagnostics;
|
|
||||||
|
|
||||||
namespace mpvnet
|
namespace mpvnet
|
||||||
{
|
{
|
||||||
@@ -51,7 +50,7 @@ namespace mpvnet
|
|||||||
App.ProcessCommandLineEarly();
|
App.ProcessCommandLineEarly();
|
||||||
if (mp.Screen == -1) mp.Screen = Array.IndexOf(Screen.AllScreens, Screen.PrimaryScreen);
|
if (mp.Screen == -1) mp.Screen = Array.IndexOf(Screen.AllScreens, Screen.PrimaryScreen);
|
||||||
SetScreen(mp.Screen);
|
SetScreen(mp.Screen);
|
||||||
ChangeFullscreen(mp.Fullscreen);
|
CycleFullscreen(mp.Fullscreen);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -59,6 +58,24 @@ namespace mpvnet
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MenuItem FindMenuItem(string text) => FindMenuItem(text, ContextMenu.Items);
|
||||||
|
|
||||||
|
void Idle() => BeginInvoke(new Action(() => { Text = "mpv.net " + Application.ProductVersion; }));
|
||||||
|
|
||||||
|
void CM_Popup(object sender, EventArgs e) => CursorHelp.Show();
|
||||||
|
|
||||||
|
void VideoSizeChanged() => BeginInvoke(new Action(() => SetFormPosAndSizeKeepHeight()));
|
||||||
|
|
||||||
|
void Shutdown() => BeginInvoke(new Action(() => Close()));
|
||||||
|
|
||||||
|
void PropChangeFullscreen(bool value) => BeginInvoke(new Action(() => CycleFullscreen(value)));
|
||||||
|
|
||||||
|
void ContextMenu_Opened(object sender, EventArgs e) => CursorHelp.Show();
|
||||||
|
|
||||||
|
bool IsFullscreen => WindowState == FormWindowState.Maximized;
|
||||||
|
|
||||||
|
bool IsMouseInOSC() => PointToClient(Control.MousePosition).Y > ClientSize.Height * 0.9;
|
||||||
|
|
||||||
void ContextMenu_Opening(object sender, CancelEventArgs e)
|
void ContextMenu_Opening(object sender, CancelEventArgs e)
|
||||||
{
|
{
|
||||||
lock (mp.MediaTracks)
|
lock (mp.MediaTracks)
|
||||||
@@ -148,10 +165,8 @@ namespace mpvnet
|
|||||||
if (recent != null)
|
if (recent != null)
|
||||||
{
|
{
|
||||||
recent.DropDownItems.Clear();
|
recent.DropDownItems.Clear();
|
||||||
|
|
||||||
foreach (string path in RecentFiles)
|
foreach (string path in RecentFiles)
|
||||||
MenuItem.Add(recent.DropDownItems, path, () => mp.Load(new[] { path }, true, Control.ModifierKeys.HasFlag(Keys.Control)));
|
MenuItem.Add(recent.DropDownItems, path, () => mp.Load(new[] { path }, true, Control.ModifierKeys.HasFlag(Keys.Control)));
|
||||||
|
|
||||||
recent.DropDownItems.Add(new ToolStripSeparator());
|
recent.DropDownItems.Add(new ToolStripSeparator());
|
||||||
MenuItem mi = new MenuItem("Clear List");
|
MenuItem mi = new MenuItem("Clear List");
|
||||||
mi.Action = () => RecentFiles.Clear();
|
mi.Action = () => RecentFiles.Clear();
|
||||||
@@ -159,8 +174,6 @@ namespace mpvnet
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public MenuItem FindMenuItem(string text) => FindMenuItem(text, ContextMenu.Items);
|
|
||||||
|
|
||||||
MenuItem FindMenuItem(string text, ToolStripItemCollection items)
|
MenuItem FindMenuItem(string text, ToolStripItemCollection items)
|
||||||
{
|
{
|
||||||
foreach (var item in items)
|
foreach (var item in items)
|
||||||
@@ -209,7 +222,7 @@ namespace mpvnet
|
|||||||
Native.SetWindowPos(Handle, IntPtr.Zero /* HWND_TOP */, left, top, rect.Width, rect.Height, 4 /* SWP_NOZORDER */);
|
Native.SetWindowPos(Handle, IntPtr.Zero /* HWND_TOP */, left, top, rect.Width, rect.Height, 4 /* SWP_NOZORDER */);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetFormPositionAndSizeKeepHeight()
|
void SetFormPosAndSizeKeepHeight()
|
||||||
{
|
{
|
||||||
if (IsFullscreen || mp.VideoSize.Width == 0) return;
|
if (IsFullscreen || mp.VideoSize.Width == 0) return;
|
||||||
Screen screen = Screen.FromControl(this);
|
Screen screen = Screen.FromControl(this);
|
||||||
@@ -242,8 +255,7 @@ namespace mpvnet
|
|||||||
|
|
||||||
foreach (CommandItem item in items)
|
foreach (CommandItem item in items)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(item.Path))
|
if (string.IsNullOrEmpty(item.Path)) continue;
|
||||||
continue;
|
|
||||||
string path = item.Path.Replace("&", "&&");
|
string path = item.Path.Replace("&", "&&");
|
||||||
MenuItem menuItem = ContextMenu.Add(path, () => {
|
MenuItem menuItem = ContextMenu.Add(path, () => {
|
||||||
try {
|
try {
|
||||||
@@ -252,14 +264,11 @@ namespace mpvnet
|
|||||||
Msg.ShowException(ex);
|
Msg.ShowException(ex);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
if (menuItem != null)
|
if (menuItem != null) menuItem.ShortcutKeyDisplayString = item.Input + " ";
|
||||||
menuItem.ShortcutKeyDisplayString = item.Input + " ";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContextMenu_Opened(object sender, EventArgs e) => CursorHelp.Show();
|
private void FileLoaded()
|
||||||
|
|
||||||
private void Mp_FileLoaded()
|
|
||||||
{
|
{
|
||||||
string path = mp.get_property_string("path");
|
string path = mp.get_property_string("path");
|
||||||
BeginInvoke(new Action(() => {
|
BeginInvoke(new Action(() => {
|
||||||
@@ -273,10 +282,6 @@ namespace mpvnet
|
|||||||
if (RecentFiles.Count > 15) RecentFiles.RemoveAt(15);
|
if (RecentFiles.Count > 15) RecentFiles.RemoveAt(15);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mp_Idle() => BeginInvoke(new Action(() => { Text = "mpv.net " + Application.ProductVersion; }));
|
|
||||||
|
|
||||||
void CM_Popup(object sender, EventArgs e) => CursorHelp.Show();
|
|
||||||
|
|
||||||
void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
|
void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
|
||||||
{
|
{
|
||||||
Msg.ShowException(e.Exception);
|
Msg.ShowException(e.Exception);
|
||||||
@@ -286,29 +291,12 @@ namespace mpvnet
|
|||||||
{
|
{
|
||||||
Msg.ShowError(e.ExceptionObject.ToString());
|
Msg.ShowError(e.ExceptionObject.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void mp_VideoSizeChanged()
|
public void CycleFullscreen(bool enabled)
|
||||||
{
|
{
|
||||||
BeginInvoke(new Action(() => SetFormPositionAndSizeKeepHeight()));
|
if (enabled)
|
||||||
}
|
|
||||||
|
|
||||||
void mp_Shutdown()
|
|
||||||
{
|
|
||||||
BeginInvoke(new Action(() => Close()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool IsFullscreen => WindowState == FormWindowState.Maximized;
|
|
||||||
|
|
||||||
void mpPropChangeFullscreen(bool value)
|
|
||||||
{
|
|
||||||
BeginInvoke(new Action(() => ChangeFullscreen(value)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void ChangeFullscreen(bool value)
|
|
||||||
{
|
|
||||||
if (value)
|
|
||||||
{
|
{
|
||||||
if (FormBorderStyle != FormBorderStyle.None)
|
if (WindowState != FormWindowState.Maximized)
|
||||||
{
|
{
|
||||||
FormBorderStyle = FormBorderStyle.None;
|
FormBorderStyle = FormBorderStyle.None;
|
||||||
WindowState = FormWindowState.Maximized;
|
WindowState = FormWindowState.Maximized;
|
||||||
@@ -317,14 +305,19 @@ namespace mpvnet
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
WindowState = FormWindowState.Normal;
|
WindowState = FormWindowState.Normal;
|
||||||
FormBorderStyle = FormBorderStyle.Sizable;
|
|
||||||
SetFormPositionAndSizeKeepHeight();
|
if (mp.Border)
|
||||||
|
FormBorderStyle = FormBorderStyle.Sizable;
|
||||||
|
else
|
||||||
|
FormBorderStyle = FormBorderStyle.None;
|
||||||
|
|
||||||
|
SetFormPosAndSizeKeepHeight();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void WndProc(ref Message m)
|
protected override void WndProc(ref Message m)
|
||||||
{
|
{
|
||||||
//Debug.WriteLine(m);
|
//System.Diagnostics.Debug.WriteLine(m);
|
||||||
|
|
||||||
switch (m.Msg)
|
switch (m.Msg)
|
||||||
{
|
{
|
||||||
@@ -343,6 +336,9 @@ namespace mpvnet
|
|||||||
mp.command_string($"mouse {pos.X} {pos.Y}");
|
mp.command_string($"mouse {pos.X} {pos.Y}");
|
||||||
if (CursorHelp.IsPosDifferent(LastCursorPosChanged)) CursorHelp.Show();
|
if (CursorHelp.IsPosDifferent(LastCursorPosChanged)) CursorHelp.Show();
|
||||||
break;
|
break;
|
||||||
|
case 0x2a3: // WM_MOUSELEAVE
|
||||||
|
mp.command_string("mouse 1 1"); // osc won't always auto hide
|
||||||
|
break;
|
||||||
case 0x319: // WM_APPCOMMAND
|
case 0x319: // WM_APPCOMMAND
|
||||||
if (mp.WindowHandle != IntPtr.Zero)
|
if (mp.WindowHandle != IntPtr.Zero)
|
||||||
Native.PostMessage(mp.WindowHandle, m.Msg, m.WParam, m.LParam);
|
Native.PostMessage(mp.WindowHandle, m.Msg, m.WParam, m.LParam);
|
||||||
@@ -417,25 +413,6 @@ namespace mpvnet
|
|||||||
mp.Load(new[] { e.Data.GetData(DataFormats.Text).ToString() }, true, Control.ModifierKeys.HasFlag(Keys.Control));
|
mp.Load(new[] { e.Data.GetData(DataFormats.Text).ToString() }, true, Control.ModifierKeys.HasFlag(Keys.Control));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnMouseDown(MouseEventArgs e)
|
|
||||||
{
|
|
||||||
base.OnMouseDown(e);
|
|
||||||
|
|
||||||
if (WindowState == FormWindowState.Normal &&
|
|
||||||
e.Button == MouseButtons.Left &&
|
|
||||||
e.Y < ClientSize.Height * 0.9)
|
|
||||||
{
|
|
||||||
var HTCAPTION = new IntPtr(2);
|
|
||||||
Native.ReleaseCapture();
|
|
||||||
Native.PostMessage(Handle, 0xA1 /* WM_NCLBUTTONDOWN */, HTCAPTION, IntPtr.Zero);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Width - e.Location.X < 10 && e.Location.Y < 10)
|
|
||||||
mp.commandv("quit");
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsMouseInOSC() => PointToClient(Control.MousePosition).Y > ClientSize.Height * 0.9;
|
|
||||||
|
|
||||||
void Timer_Tick(object sender, EventArgs e)
|
void Timer_Tick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (CursorHelp.IsPosDifferent(LastCursorPosChanged))
|
if (CursorHelp.IsPosDifferent(LastCursorPosChanged))
|
||||||
@@ -446,37 +423,51 @@ namespace mpvnet
|
|||||||
else if (Environment.TickCount - LastCursorChangedTickCount > 1500 &&
|
else if (Environment.TickCount - LastCursorChangedTickCount > 1500 &&
|
||||||
!IsMouseInOSC() && ClientRectangle.Contains(PointToClient(MousePosition)) &&
|
!IsMouseInOSC() && ClientRectangle.Contains(PointToClient(MousePosition)) &&
|
||||||
Form.ActiveForm == this && !ContextMenu.Visible)
|
Form.ActiveForm == this && !ContextMenu.Visible)
|
||||||
{
|
|
||||||
CursorHelp.Hide();
|
CursorHelp.Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PropChangeOnTop(bool value) => BeginInvoke(new Action(() => TopMost = value));
|
||||||
|
|
||||||
|
void PropChangeAid(string value) => mp.Aid = value;
|
||||||
|
|
||||||
|
void PropChangeSid(string value) => mp.Sid = value;
|
||||||
|
|
||||||
|
void PropChangeVid(string value) => mp.Vid = value;
|
||||||
|
|
||||||
|
void PropChangeEdition(int value) => mp.Edition = value;
|
||||||
|
|
||||||
|
void PropChangeBorder(bool enabled) {
|
||||||
|
mp.Border = enabled;
|
||||||
|
|
||||||
|
BeginInvoke(new Action(() => {
|
||||||
|
if (!IsFullscreen)
|
||||||
|
{
|
||||||
|
if (mp.Border && FormBorderStyle == FormBorderStyle.None)
|
||||||
|
FormBorderStyle = FormBorderStyle.Sizable;
|
||||||
|
if (!mp.Border && FormBorderStyle == FormBorderStyle.Sizable)
|
||||||
|
FormBorderStyle = FormBorderStyle.None;
|
||||||
|
}
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnLoad(EventArgs e)
|
protected override void OnLoad(EventArgs e)
|
||||||
{
|
{
|
||||||
base.OnLoad(e);
|
base.OnLoad(e);
|
||||||
mp.Init();
|
mp.Init();
|
||||||
mp.observe_property_bool("fullscreen", mpPropChangeFullscreen);
|
mp.observe_property_bool("fullscreen", PropChangeFullscreen);
|
||||||
mp.observe_property_bool("ontop", mpPropChangeOnTop);
|
mp.observe_property_bool("ontop", PropChangeOnTop);
|
||||||
mp.observe_property_string("sid", mpPropChangeSid);
|
mp.observe_property_bool("border", PropChangeBorder);
|
||||||
mp.observe_property_string("aid", mpPropChangeAid);
|
mp.observe_property_string("sid", PropChangeSid);
|
||||||
mp.observe_property_string("vid", mpPropChangeVid);
|
mp.observe_property_string("aid", PropChangeAid);
|
||||||
mp.observe_property_int("edition", mpPropChangeEdition);
|
mp.observe_property_string("vid", PropChangeVid);
|
||||||
mp.Shutdown += mp_Shutdown;
|
mp.observe_property_int("edition", PropChangeEdition);
|
||||||
mp.VideoSizeChanged += mp_VideoSizeChanged;
|
mp.Shutdown += Shutdown;
|
||||||
mp.FileLoaded += Mp_FileLoaded;
|
mp.VideoSizeChanged += VideoSizeChanged;
|
||||||
mp.Idle += Mp_Idle;
|
mp.FileLoaded += FileLoaded;
|
||||||
|
mp.Idle += Idle;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mpPropChangeOnTop(bool value) => BeginInvoke(new Action(() => TopMost = value));
|
|
||||||
|
|
||||||
void mpPropChangeAid(string value) => mp.Aid = value;
|
|
||||||
|
|
||||||
void mpPropChangeSid(string value) => mp.Sid = value;
|
|
||||||
|
|
||||||
void mpPropChangeVid(string value) => mp.Vid = value;
|
|
||||||
|
|
||||||
void mpPropChangeEdition(int value) => mp.Edition = value;
|
|
||||||
|
|
||||||
protected override void OnShown(EventArgs e)
|
protected override void OnShown(EventArgs e)
|
||||||
{
|
{
|
||||||
base.OnShown(e);
|
base.OnShown(e);
|
||||||
@@ -490,6 +481,14 @@ namespace mpvnet
|
|||||||
CheckUrlInClipboard();
|
CheckUrlInClipboard();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnActivated(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnActivated(e);
|
||||||
|
CheckUrlInClipboard();
|
||||||
|
Message m = new Message() { Msg = 0x0202 }; // WM_LBUTTONUP
|
||||||
|
Native.SendMessage(Handle, m.Msg, m.WParam, m.LParam);
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnResize(EventArgs e)
|
protected override void OnResize(EventArgs e)
|
||||||
{
|
{
|
||||||
base.OnResize(e);
|
base.OnResize(e);
|
||||||
@@ -505,20 +504,29 @@ namespace mpvnet
|
|||||||
mp.AutoResetEvent.WaitOne(3000);
|
mp.AutoResetEvent.WaitOne(3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override void OnMouseDown(MouseEventArgs e)
|
||||||
|
{
|
||||||
|
base.OnMouseDown(e);
|
||||||
|
|
||||||
|
if (WindowState == FormWindowState.Normal &&
|
||||||
|
e.Button == MouseButtons.Left &&
|
||||||
|
e.Y < ClientSize.Height * 0.9)
|
||||||
|
{
|
||||||
|
var HTCAPTION = new IntPtr(2);
|
||||||
|
Native.ReleaseCapture();
|
||||||
|
Native.PostMessage(Handle, 0xA1 /* WM_NCLBUTTONDOWN */, HTCAPTION, IntPtr.Zero);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Width - e.Location.X < 10 && e.Location.Y < 10)
|
||||||
|
mp.commandv("quit");
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnLostFocus(EventArgs e)
|
protected override void OnLostFocus(EventArgs e)
|
||||||
{
|
{
|
||||||
base.OnLostFocus(e);
|
base.OnLostFocus(e);
|
||||||
CursorHelp.Show();
|
CursorHelp.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnActivated(EventArgs e)
|
|
||||||
{
|
|
||||||
base.OnActivated(e);
|
|
||||||
CheckUrlInClipboard();
|
|
||||||
Message m = new Message() { Msg = 0x0202 }; // WM_LBUTTONUP
|
|
||||||
Native.SendMessage(Handle, m.Msg, m.WParam, m.LParam);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CheckUrlInClipboard()
|
void CheckUrlInClipboard()
|
||||||
{
|
{
|
||||||
string clipboard = Clipboard.GetText();
|
string clipboard = Clipboard.GetText();
|
||||||
|
|||||||
@@ -260,7 +260,6 @@
|
|||||||
<None Include="App.config" />
|
<None Include="App.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Content Include="Resources\inputConfHeader.txt" />
|
|
||||||
<Content Include="Resources\inputConf.txt" />
|
<Content Include="Resources\inputConf.txt" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -65,17 +65,36 @@ namespace mpvnet
|
|||||||
public static List<MediaTrack> MediaTracks { get; set; } = new List<MediaTrack>();
|
public static List<MediaTrack> MediaTracks { get; set; } = new List<MediaTrack>();
|
||||||
public static List<KeyValuePair<string, double>> Chapters { get; set; } = new List<KeyValuePair<string, double>>();
|
public static List<KeyValuePair<string, double>> Chapters { get; set; } = new List<KeyValuePair<string, double>>();
|
||||||
|
|
||||||
public static string InputConfPath { get; } = ConfFolder + "\\input.conf";
|
public static string InputConfPath { get; } = ConfFolder + "\\input.conf";
|
||||||
public static string ConfPath { get; } = ConfFolder + "\\mpv.conf";
|
public static string ConfPath { get; } = ConfFolder + "\\mpv.conf";
|
||||||
|
|
||||||
public static bool Fullscreen { get; set; }
|
|
||||||
public static float Autofit { get; set; } = 0.50f;
|
|
||||||
public static int Screen { get; set; } = -1;
|
|
||||||
public static string Sid { get; set; } = "";
|
public static string Sid { get; set; } = "";
|
||||||
public static string Aid { get; set; } = "";
|
public static string Aid { get; set; } = "";
|
||||||
public static string Vid { get; set; } = "";
|
public static string Vid { get; set; } = "";
|
||||||
|
|
||||||
|
public static bool Fullscreen { get; set; }
|
||||||
|
public static bool Border { get; set; } = true;
|
||||||
|
|
||||||
|
public static int Screen { get; set; } = -1;
|
||||||
public static int Edition { get; set; }
|
public static int Edition { get; set; }
|
||||||
|
|
||||||
|
public static float Autofit { get; set; } = 0.50f;
|
||||||
|
|
||||||
|
public static void ProcessProperty(string name, string value)
|
||||||
|
{
|
||||||
|
switch (name)
|
||||||
|
{
|
||||||
|
case "autofit":
|
||||||
|
if (value.Length == 3 && value.EndsWith("%"))
|
||||||
|
if (int.TryParse(value.Substring(0, 2), out int result))
|
||||||
|
Autofit = result / 100f;
|
||||||
|
break;
|
||||||
|
case "fs":
|
||||||
|
case "fullscreen": Fullscreen = value == "yes"; break;
|
||||||
|
case "border": Border = value == "yes"; break;
|
||||||
|
case "screen": Screen = Convert.ToInt32(value); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static string _ConfFolder;
|
static string _ConfFolder;
|
||||||
|
|
||||||
public static string ConfFolder {
|
public static string ConfFolder {
|
||||||
@@ -146,7 +165,6 @@ namespace mpvnet
|
|||||||
string dummy = ConfFolder;
|
string dummy = ConfFolder;
|
||||||
LoadLibrary("mpv-1.dll");
|
LoadLibrary("mpv-1.dll");
|
||||||
Handle = mpv_create();
|
Handle = mpv_create();
|
||||||
set_property_string("input-default-bindings", "yes");
|
|
||||||
set_property_string("osc", "yes");
|
set_property_string("osc", "yes");
|
||||||
set_property_string("config", "yes");
|
set_property_string("config", "yes");
|
||||||
set_property_string("wid", MainForm.Hwnd.ToString());
|
set_property_string("wid", MainForm.Hwnd.ToString());
|
||||||
@@ -652,21 +670,6 @@ namespace mpvnet
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ProcessProperty(string name, string value)
|
|
||||||
{
|
|
||||||
switch (name)
|
|
||||||
{
|
|
||||||
case "autofit":
|
|
||||||
if (value.Length == 3 && value.EndsWith("%"))
|
|
||||||
if (int.TryParse(value.Substring(0, 2), out int result))
|
|
||||||
Autofit = result / 100f;
|
|
||||||
break;
|
|
||||||
case "fs":
|
|
||||||
case "fullscreen": Fullscreen = value == "yes"; break;
|
|
||||||
case "screen": Screen = Convert.ToInt32(value); break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ReadMetaData()
|
static void ReadMetaData()
|
||||||
{
|
{
|
||||||
lock (MediaTracks)
|
lock (MediaTracks)
|
||||||
|
|||||||
Reference in New Issue
Block a user