start-threshold setting added

This commit is contained in:
Frank Skare
2019-07-21 17:06:55 +02:00
parent 38604459a6
commit cedd54d64d
7 changed files with 52 additions and 53 deletions

View File

@@ -2,11 +2,14 @@
- on Win 7 the theme color was hardcoded to DarkSlateGrey because
WPF was returning a bad color on Win 7, this was fixed by reading
the theme color from the Registry on Win 7
the theme color from the Registry on Win 7. If the theme color
is identical to the background color it's corrected
- new option dark-color was added to overwrite the OS theme color used in dark mode, find the option under 'General'
- new option light-color was added to overwrite the OS theme color used in non dark mode, find the option under 'General'
- various changes regarding input handling
- it's now possible to use a custom folder as config folder
- slightly increased startup performance
- start-threshold setting added. Threshold in milliseconds to wait for libmpv returning the video resolution before the window is shown, otherwise default dimensions are used as defined by autofit and start-size. Default: 1500
### 4.7.3

View File

@@ -35,6 +35,8 @@ namespace mpvnet
public static bool RememberPosition { get; set; }
public static bool DebugMode { get; set; }
public static int StartThreshold { get; set; } = 1500;
public static bool IsDarkMode {
get => (DarkMode == "system" && Sys.IsDarkTheme) || DarkMode == "always";
}
@@ -94,6 +96,10 @@ namespace mpvnet
case "url-whitelist":
UrlWhitelist = value.Split(' ', ',', ';');
break;
case "start-threshold":
int.TryParse(value, out int result);
StartThreshold = result;
break;
}
}

View File

@@ -2,7 +2,7 @@
name = "dark-mode"
default = "always"
filter = "General"
help = "Enables a dark theme."
help = "Enables a dark theme. (mpv.net specific setting)"
options = [{ name = "always" },
{ name = "system" , help = "Available on Windows 10 or higher" },
{ name = "never" }]
@@ -11,25 +11,25 @@ options = [{ name = "always" },
name = "dark-color"
type = "color"
filter = "General"
help = "Theme color used in dark-mode. Leave empty to use OS theme."
help = "Theme color used in dark-mode. Leave empty to use OS theme. (mpv.net specific setting)"
[[settings]]
name = "light-color"
type = "color"
filter = "General"
help = "Theme color used when dark-mode is disabled. Leave empty to use OS theme"
help = "Theme color used when dark-mode is disabled. Leave empty to use OS theme. (mpv.net specific setting)"
[[settings]]
name = "url-whitelist"
filter = "General"
type = "string"
help = "mpv.net specific whitelist setting to monitor the clipboard for URLs to play.\n\nDefault: tube vimeo ard zdf"
help = "Whitelist setting to monitor the clipboard for URLs to play. (mpv.net specific setting)\n\nDefault: tube vimeo ard zdf"
[[settings]]
name = "process-instance"
default = "single"
filter = "General"
help = "mpv.net specific setting that defines if more then one mpv.net process is allowed.\n\nTip: Whenever the control key is pressed when files or URLs are opened, the playlist is not cleared but the files or URLs are appended to the playlist. This not only works on process startup but in all mpv.net features that open files."
help = "Defines if more then one mpv.net process is allowed. (mpv.net specific setting)\n\nTip: Whenever the control key is pressed when files or URLs are opened, the playlist is not cleared but the files or URLs are appended to the playlist. This not only works on process startup but in all mpv.net features that open files."
options = [{ name = "multi", help = "Create a new process everytime the shell starts mpv.net" },
{ name = "single", help = "Force a single process everytime the shell starts mpv.net" },
{ name = "queue", help = "Force a single process and add files to playlist" }]
@@ -38,7 +38,7 @@ options = [{ name = "multi", help = "Create a new process everytime the shell s
name = "debug-mode"
default = "no"
filter = "General"
help = "mpv.net specific debugging setting, enable this only when a developer asks for it."
help = "Enable this only when a developer asks for it. (mpv.net specific setting)"
options = [{ name = "yes" },
{ name = "no" }]
@@ -46,14 +46,19 @@ options = [{ name = "yes" },
name = "start-size"
default = "previous"
filter = "Screen"
help = "mpv.net specific setting to remember the window height in the current session, otherwise the video's native resolution is used."
help = "Setting to remember the window height in the current session, otherwise the video's native resolution is used. (mpv.net specific setting)"
options = [{ name = "video", help = "Window size is set to native video resolution" },
{ name = "previous", help = "Window size is remembered but only from the current session" }]
[[settings]]
name = "start-threshold"
filter = "Screen"
help = "Threshold in milliseconds to wait for libmpv returning the video resolution before the window is shown, otherwise default dimensions are used as defined by autofit and start-size. (mpv.net specific setting) Default: 1500"
[[settings]]
name = "remember-position"
default = "no"
filter = "Screen"
help = "mpv.net specific setting to save the window position on exit."
help = "Setting to save the window position on exit. (mpv.net specific setting)"
options = [{ name = "yes" },
{ name = "no" }]

View File

@@ -50,14 +50,15 @@ namespace WPF
if (Environment.OSVersion.Version.Major < 10)
{
int argb = Convert.ToInt32(Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM", "ColorizationColor", 0));
if (argb == 0) System.Drawing.Color.Blue.ToArgb();
var c = System.Drawing.Color.FromArgb(argb);
color = Color.FromArgb(c.A, c.R, c.G, c.B);
var wfc = System.Drawing.Color.FromArgb(argb);
color = Color.FromArgb(wfc.A, wfc.R, wfc.G, wfc.B);
}
else
color = SystemParameters.WindowGlassColor;
}
if (App.IsDarkMode && color == Colors.Black) color = Colors.Orange;
if (!App.IsDarkMode && color == Colors.White) color = Colors.Orange;
_ThemeColor = color.Value;
WasThemeColorSet = true;
}

View File

@@ -51,7 +51,6 @@
this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "mpv.net";
this.ResumeLayout(false);
}

View File

@@ -9,6 +9,7 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Diagnostics;
using System.Threading.Tasks;
namespace mpvnet
{
@@ -33,12 +34,10 @@ namespace mpvnet
Instance = this;
Hwnd = Handle;
mp.Init();
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Application.ThreadException += Application_ThreadException;
AppDomain.CurrentDomain.UnhandledException += (sender, e) => Msg.ShowError(e.ExceptionObject.ToString());
Application.ThreadException += (sender, e) => Msg.ShowException(e.Exception);
Msg.SupportURL = "https://github.com/stax76/mpv.net#support";
WPF.WPF.Init();
System.Windows.Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;
Text += " " + Application.ProductVersion;
Text = "mpv.net " + Application.ProductVersion;
object recent = RegHelp.GetObject(App.RegPath, "Recent");
@@ -47,10 +46,6 @@ namespace mpvnet
else
RecentFiles = new List<string>();
var wpfColor = WPF.WPF.ThemeColor;
Color color = Color.FromArgb(wpfColor.A, wpfColor.R, wpfColor.G, wpfColor.B);
ToolStripRendererEx.InitColors(color, App.IsDarkMode);
ContextMenu = new ContextMenuStripEx(components);
ContextMenu.Opened += ContextMenu_Opened;
ContextMenu.Opening += ContextMenu_Opening;
@@ -80,7 +75,7 @@ namespace mpvnet
mp.VideoSizeChanged += VideoSizeChanged;
mp.FileLoaded += FileLoaded;
mp.Idle += Idle;
mp.VideoSizeAutoResetEvent.WaitOne(1500);
mp.VideoSizeAutoResetEvent.WaitOne(App.StartThreshold);
if (Height < FontHeight * 4) SetFormPosAndSize();
mp.observe_property_bool("fullscreen", PropChangeFullscreen);
mp.observe_property_bool("ontop", PropChangeOnTop);
@@ -359,16 +354,6 @@ namespace mpvnet
if (RecentFiles.Count > 15) RecentFiles.RemoveAt(15);
}
void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
Msg.ShowException(e.Exception);
}
void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Msg.ShowError(e.ExceptionObject.ToString());
}
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
@@ -517,8 +502,13 @@ namespace mpvnet
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
var wpfColor = WPF.WPF.ThemeColor;
Color color = Color.FromArgb(wpfColor.A, wpfColor.R, wpfColor.G, wpfColor.B);
ToolStripRendererEx.InitColors(color, App.IsDarkMode);
BuildMenu();
ContextMenuStrip = ContextMenu;
WPF.WPF.Init();
System.Windows.Application.Current.ShutdownMode = System.Windows.ShutdownMode.OnExplicitShutdown;
IgnoreDpiChanged = false;
CheckClipboardForURL();
Cursor.Position = new Point(Cursor.Position.X + 1, Cursor.Position.Y);

View File

@@ -82,8 +82,6 @@ namespace mpvnet
public static float Autofit { get; set; } = 0.5f;
static string LastPlaybackRestartFile;
public static void Init()
{
LoadLibrary("mpv-1.dll");
@@ -164,7 +162,8 @@ namespace mpvnet
if (!Directory.Exists(_ConfigFolder))
Directory.CreateDirectory(_ConfigFolder);
RegHelp.SetObject(App.RegPath, "ConfigFolder", _ConfigFolder);
if (!_ConfigFolder.Contains("portable_config"))
RegHelp.SetObject(App.RegPath, "ConfigFolder", _ConfigFolder);
if (!File.Exists(_ConfigFolder + "\\input.conf"))
File.WriteAllText(_ConfigFolder + "\\input.conf", Properties.Resources.inputConf);
@@ -270,6 +269,16 @@ namespace mpvnet
case mpv_event_id.MPV_EVENT_FILE_LOADED:
HideLogo();
FileLoaded?.Invoke();
Size vidSize = new Size(get_property_int("width"), get_property_int("height"));
if (vidSize.Width == 0 || vidSize.Height == 0)
vidSize = new Size(1, 1);
if (VideoSize != vidSize)
{
VideoSize = vidSize;
VideoSizeChanged?.Invoke();
}
VideoSizeAutoResetEvent.Set();
Task.Run(new Action(() => ReadMetaData()));
WriteHistory(get_property_string("path"));
break;
case mpv_event_id.MPV_EVENT_TRACKS_CHANGED:
@@ -334,21 +343,6 @@ namespace mpvnet
break;
case mpv_event_id.MPV_EVENT_PLAYBACK_RESTART:
PlaybackRestart?.Invoke();
string path = get_property_string("path");
if (LastPlaybackRestartFile != path)
{
Size vidSize = new Size(get_property_int("dwidth"), get_property_int("dheight"));
if (vidSize.Width == 0 || vidSize.Height == 0)
vidSize = new Size(1, 1);
if (VideoSize != vidSize)
{
VideoSize = vidSize;
VideoSizeChanged?.Invoke();
}
VideoSizeAutoResetEvent.Set();
Task.Run(new Action(() => ReadMetaData()));
LastPlaybackRestartFile = path;
}
break;
case mpv_event_id.MPV_EVENT_CHAPTER_CHANGE:
ChapterChange?.Invoke();
@@ -553,7 +547,7 @@ namespace mpvnet
Load(files.ToArray(), App.ProcessInstance != "queue", Control.ModifierKeys.HasFlag(Keys.Control));
if (files.Count == 0)
if (files.Count == 0 || files[0].Contains("://"))
{
VideoSizeAutoResetEvent.Set();
VideoSizeChanged?.Invoke();
@@ -605,6 +599,7 @@ namespace mpvnet
if (string.IsNullOrEmpty(get_property_string("path")))
set_property_int("playlist-pos", 0);
if (loadFolder && !append) Task.Run(() => LoadFolder()); // user reported race condition
}
@@ -692,8 +687,8 @@ namespace mpvnet
{
if (MainForm.Instance is null) return;
Rectangle cr = MainForm.Instance.ClientRectangle;
if (cr.Width == 0 || cr.Height == 0) return;
int len = cr.Height / 5;
if (len == 0) return;
using (Bitmap b = new Bitmap(len, len))
{