-
This commit is contained in:
@@ -83,33 +83,7 @@ namespace mpvnet
|
||||
File.WriteAllText(fp, "");
|
||||
}
|
||||
|
||||
public static void shell_execute(string[] args)
|
||||
{
|
||||
Process.Start(args[0]);
|
||||
}
|
||||
|
||||
public static void set_setting(string[] args)
|
||||
{
|
||||
bool changed = false;
|
||||
var lines = File.ReadAllLines(mp.mpvConfPath);
|
||||
|
||||
for (int i = 0; i < lines.Length; i++)
|
||||
{
|
||||
if (lines[i].Contains("=") &&
|
||||
lines[i].Substring(0, lines[i].IndexOf("=")).Trim("# ".ToCharArray()) == args[0])
|
||||
{
|
||||
lines[i] = args[0] + " = " + args[1];
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (changed)
|
||||
File.WriteAllText(mp.mpvConfPath, String.Join(Environment.NewLine, lines));
|
||||
else
|
||||
File.WriteAllText(mp.mpvConfPath, File.ReadAllText(mp.mpvConfPath) + Environment.NewLine + args[0] + " = " + args[1]);
|
||||
|
||||
Msg.Show("Changed settings are available on next startup.");
|
||||
}
|
||||
public static void shell_execute(string[] args) => Process.Start(args[0]);
|
||||
|
||||
public static void show_info(string[] args)
|
||||
{
|
||||
|
||||
@@ -16,12 +16,13 @@ namespace mpvnet
|
||||
public static MainForm Instance { get; set; }
|
||||
public static IntPtr Hwnd;
|
||||
|
||||
private Point LastCursorPosChanged;
|
||||
private int LastCursorChangedTickCount;
|
||||
private bool IgnoreDpiChanged = true;
|
||||
private float mpvAutofit = 0.42f;
|
||||
private bool mpvFullscreen;
|
||||
private int mpvScreen = -1;
|
||||
private Point LastCursorPosChanged;
|
||||
private int LastCursorChangedTickCount;
|
||||
private bool IgnoreDpiChanged = true;
|
||||
private float MpvAutofit = 0.50f;
|
||||
private bool MpvFullscreen;
|
||||
private int MpvScreen = -1;
|
||||
private string MpvNetDarkMode = "system";
|
||||
|
||||
public ContextMenuStripEx CMS;
|
||||
|
||||
@@ -43,12 +44,15 @@ namespace mpvnet
|
||||
foreach (var i in mp.mpvConf)
|
||||
ProcessMpvProperty(i.Key, i.Value);
|
||||
|
||||
foreach (var i in mp.mpvNetConf)
|
||||
ProcessMpvNetProperty(i.Key, i.Value);
|
||||
|
||||
ProcessCommandLineEarly();
|
||||
|
||||
if (mpvScreen == -1) mpvScreen = Array.IndexOf(Screen.AllScreens, Screen.PrimaryScreen);
|
||||
SetScreen(mpvScreen);
|
||||
if (MpvScreen == -1) MpvScreen = Array.IndexOf(Screen.AllScreens, Screen.PrimaryScreen);
|
||||
SetScreen(MpvScreen);
|
||||
|
||||
ChangeFullscreen(mpvFullscreen);
|
||||
ChangeFullscreen(MpvFullscreen);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -76,7 +80,7 @@ namespace mpvnet
|
||||
{
|
||||
if (IsFullscreen || mp.VideoSize.Width == 0) return;
|
||||
Screen screen = Screen.FromControl(this);
|
||||
int height = Convert.ToInt32(screen.Bounds.Height * mpvAutofit);
|
||||
int height = Convert.ToInt32(screen.Bounds.Height * MpvAutofit);
|
||||
int width = Convert.ToInt32(height * mp.VideoSize.Width / (double)mp.VideoSize.Height);
|
||||
Point middlePos = new Point(Left + Width / 2, Top + Height / 2);
|
||||
var rect = new Native.RECT(new Rectangle(screen.Bounds.X, screen.Bounds.Y, width, height));
|
||||
@@ -91,7 +95,7 @@ namespace mpvnet
|
||||
if (IsFullscreen || mp.VideoSize.Width == 0) return;
|
||||
Screen screen = Screen.FromControl(this);
|
||||
int height = ClientSize.Height;
|
||||
if (height > screen.Bounds.Height * 0.9) height = Convert.ToInt32(screen.Bounds.Height * mpvAutofit);
|
||||
if (height > screen.Bounds.Height * 0.9) height = Convert.ToInt32(screen.Bounds.Height * MpvAutofit);
|
||||
int width = Convert.ToInt32(height * mp.VideoSize.Width / (double)mp.VideoSize.Height);
|
||||
Point middlePos = new Point(Left + Width / 2, Top + Height / 2);
|
||||
var rect = new Native.RECT(new Rectangle(screen.Bounds.X, screen.Bounds.Y, width, height));
|
||||
@@ -118,6 +122,7 @@ namespace mpvnet
|
||||
string left = i.Substring(2, i.IndexOf("=") - 2);
|
||||
string right = i.Substring(left.Length + 3);
|
||||
ProcessMpvProperty(left, right);
|
||||
ProcessMpvNetProperty(left, right);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -127,7 +132,7 @@ namespace mpvnet
|
||||
{
|
||||
case "fs":
|
||||
case "fullscreen":
|
||||
mpvFullscreen = true;
|
||||
MpvFullscreen = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -142,14 +147,24 @@ namespace mpvnet
|
||||
case "autofit":
|
||||
if (value.Length == 3 && value.EndsWith("%"))
|
||||
if (int.TryParse(value.Substring(0, 2), out int result))
|
||||
mpvAutofit = result / 100f;
|
||||
MpvAutofit = result / 100f;
|
||||
break;
|
||||
case "fs":
|
||||
case "fullscreen":
|
||||
mpvFullscreen = value == "yes";
|
||||
MpvFullscreen = value == "yes";
|
||||
break;
|
||||
case "screen":
|
||||
mpvScreen = Convert.ToInt32(value);
|
||||
MpvScreen = Convert.ToInt32(value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ProcessMpvNetProperty(string name, string value)
|
||||
{
|
||||
switch (name)
|
||||
{
|
||||
case "dark-mode":
|
||||
MpvNetDarkMode = value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -425,6 +440,8 @@ namespace mpvnet
|
||||
protected override void OnShown(EventArgs e)
|
||||
{
|
||||
base.OnShown(e);
|
||||
if ((MpvNetDarkMode == "system" && Misc.IsDarkTheme) || MpvNetDarkMode == "always")
|
||||
ToolStripRendererEx.ColorTheme = Color.Black;
|
||||
CMS = new ContextMenuStripEx(components);
|
||||
CMS.Opened += CMS_Opened;
|
||||
ContextMenuStrip = CMS;
|
||||
|
||||
114
mpv.net/Menu.cs
114
mpv.net/Menu.cs
@@ -6,6 +6,7 @@ using System.Drawing.Text;
|
||||
using Microsoft.Win32;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
using System.Diagnostics;
|
||||
|
||||
public class ContextMenuStripEx : ContextMenuStrip
|
||||
{
|
||||
@@ -168,10 +169,12 @@ public class MenuItemEx : ToolStripMenuItem
|
||||
|
||||
public class ToolStripRendererEx : ToolStripSystemRenderer
|
||||
{
|
||||
public static Color ColorForeground { get; set; } = Color.Black;
|
||||
public static Color ColorTheme { get; set; } = Color.Empty;
|
||||
public static Color ColorChecked { get; set; }
|
||||
public static Color ColorBorder { get; set; }
|
||||
public static Color ColorTop { get; set; }
|
||||
public static Color ColorBottom { get; set; }
|
||||
public static Color ColorSelection { get; set; }
|
||||
public static Color ColorBackground { get; set; }
|
||||
|
||||
public static Color ColorToolStrip1 { get; set; }
|
||||
@@ -186,17 +189,28 @@ public class ToolStripRendererEx : ToolStripSystemRenderer
|
||||
var argb = Convert.ToInt32(Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM", "ColorizationColor", 0));
|
||||
if (argb == 0)
|
||||
argb = Color.LightBlue.ToArgb();
|
||||
InitColors(Color.FromArgb(argb));
|
||||
if (ColorTheme == Color.Empty)
|
||||
InitColors(Color.FromArgb(argb));
|
||||
else
|
||||
InitColors(ColorTheme);
|
||||
}
|
||||
|
||||
public static void InitColors(Color c)
|
||||
{
|
||||
ColorBorder = HSLColor.Convert(c).ToColorSetLuminosity(100);
|
||||
ColorChecked = HSLColor.Convert(c).ToColorSetLuminosity(200);
|
||||
ColorBottom = HSLColor.Convert(c).ToColorSetLuminosity(220);
|
||||
ColorBackground = HSLColor.Convert(c).ToColorSetLuminosity(230);
|
||||
ColorSelection = HSLColor.Convert(c).ToColorSetLuminosity(180);
|
||||
ColorBackground = HSLColor.Convert(c).ToColorSetLuminosity(210);
|
||||
ColorTop = HSLColor.Convert(c).ToColorSetLuminosity(240);
|
||||
|
||||
if (ColorTheme == Color.Black)
|
||||
{
|
||||
ColorBorder = Color.White;
|
||||
ColorBackground = Color.FromArgb(50, 50, 50);
|
||||
ColorSelection = Color.FromArgb(80, 80, 80);
|
||||
ColorForeground = Color.White;
|
||||
}
|
||||
|
||||
ColorToolStrip1 = ControlPaint.LightLight(ControlPaint.LightLight(ControlPaint.Light(ColorBorder, 1)));
|
||||
ColorToolStrip2 = ControlPaint.LightLight(ControlPaint.LightLight(ControlPaint.Light(ColorBorder, 0.7f)));
|
||||
ColorToolStrip3 = ControlPaint.LightLight(ControlPaint.LightLight(ControlPaint.Light(ColorBorder, 0.1f)));
|
||||
@@ -205,7 +219,10 @@ public class ToolStripRendererEx : ToolStripSystemRenderer
|
||||
|
||||
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
|
||||
{
|
||||
ControlPaint.DrawBorder(e.Graphics, e.AffectedBounds, Color.FromArgb(160, 175, 195), ButtonBorderStyle.Solid);
|
||||
Rectangle r = e.AffectedBounds;
|
||||
r.Inflate(-1, -1);
|
||||
ControlPaint.DrawBorder(e.Graphics, r, ColorBackground, ButtonBorderStyle.Solid);
|
||||
ControlPaint.DrawBorder(e.Graphics, e.AffectedBounds, ColorBorder, ButtonBorderStyle.Solid);
|
||||
}
|
||||
|
||||
protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
|
||||
@@ -222,6 +239,7 @@ public class ToolStripRendererEx : ToolStripSystemRenderer
|
||||
else
|
||||
TextOffset = Convert.ToInt32(e.Item.Height * 0.2);
|
||||
|
||||
e.TextColor = ColorForeground;
|
||||
e.TextRectangle = new Rectangle(TextOffset, Convert.ToInt32((e.Item.Height - rect.Height) / 2.0), rect.Width, rect.Height);
|
||||
}
|
||||
|
||||
@@ -235,9 +253,7 @@ public class ToolStripRendererEx : ToolStripSystemRenderer
|
||||
Rectangle r = new Rectangle(-1, -1, e.AffectedBounds.Width, e.AffectedBounds.Height);
|
||||
|
||||
using (SolidBrush b = new SolidBrush(ColorToolStrip2))
|
||||
{
|
||||
e.Graphics.FillRectangle(b, r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -252,52 +268,14 @@ public class ToolStripRendererEx : ToolStripSystemRenderer
|
||||
|
||||
if (e.Item.Selected && e.Item.Enabled)
|
||||
{
|
||||
if (e.Item.Owner is MenuStrip)
|
||||
DrawButton(e);
|
||||
else
|
||||
{
|
||||
g.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
var r2 = new Rectangle(r.X + 2, r.Y, r.Width - 4, r.Height - 1);
|
||||
r2.Inflate(-1, -1);
|
||||
using (SolidBrush b = new SolidBrush(ColorChecked))
|
||||
g.FillRectangle(b, r2);
|
||||
}
|
||||
g.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
var r2 = new Rectangle(r.X + 2, r.Y, r.Width - 4, r.Height - 1);
|
||||
r2.Inflate(-1, -1);
|
||||
using (SolidBrush b = new SolidBrush(ColorSelection))
|
||||
g.FillRectangle(b, r2);
|
||||
}
|
||||
}
|
||||
|
||||
public void DrawButton(ToolStripItemRenderEventArgs e)
|
||||
{
|
||||
var gx = e.Graphics;
|
||||
var rect = new Rectangle(Point.Empty, e.Item.Size);
|
||||
var rect2 = new Rectangle(rect.X, rect.Y, rect.Width - 1, rect.Height - 1);
|
||||
|
||||
using (Pen pen = new Pen(ColorBorder))
|
||||
gx.DrawRectangle(pen, rect2);
|
||||
|
||||
rect2.Inflate(-1, -1);
|
||||
var tsb = e.Item as ToolStripButton;
|
||||
|
||||
if (tsb != null && tsb.Checked)
|
||||
using (SolidBrush brush = new SolidBrush(ColorChecked))
|
||||
gx.FillRectangle(brush, rect2);
|
||||
else
|
||||
using (SolidBrush brush = new SolidBrush(ColorBottom))
|
||||
gx.FillRectangle(brush, rect2);
|
||||
}
|
||||
|
||||
protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs e)
|
||||
{
|
||||
if (e.Item.Selected)
|
||||
DrawButton(e);
|
||||
}
|
||||
|
||||
protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs e)
|
||||
{
|
||||
var button = (ToolStripButton)e.Item;
|
||||
if (e.Item.Selected || button.Checked)
|
||||
DrawButton(e);
|
||||
}
|
||||
|
||||
protected override void OnRenderArrow(ToolStripArrowRenderEventArgs e)
|
||||
{
|
||||
if (e.Direction == ArrowDirection.Down) throw new NotImplementedException();
|
||||
@@ -309,10 +287,13 @@ public class ToolStripRendererEx : ToolStripSystemRenderer
|
||||
float y3 = e.Item.Height * 0.75f;
|
||||
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
|
||||
|
||||
using (Pen p = new Pen(Brushes.Black, Control.DefaultFont.Height / 20f))
|
||||
using (Brush b = new SolidBrush(ColorForeground))
|
||||
{
|
||||
e.Graphics.DrawLine(p, x1, y1, x2, y2);
|
||||
e.Graphics.DrawLine(p, x2, y2, x3, y3);
|
||||
using (Pen p = new Pen(b, Control.DefaultFont.Height / 20f))
|
||||
{
|
||||
e.Graphics.DrawLine(p, x1, y1, x2, y2);
|
||||
e.Graphics.DrawLine(p, x2, y2, x3, y3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -324,25 +305,14 @@ public class ToolStripRendererEx : ToolStripSystemRenderer
|
||||
|
||||
protected override void OnRenderSeparator(ToolStripSeparatorRenderEventArgs e)
|
||||
{
|
||||
if (e.Item.IsOnDropDown)
|
||||
{
|
||||
e.Graphics.Clear(ColorBackground);
|
||||
int right = e.Item.Width - Convert.ToInt32(TextOffset / 5.0);
|
||||
int top = e.Item.Height / 2;
|
||||
top -= 1;
|
||||
using (Pen p = new Pen(Color.Gray))
|
||||
e.Graphics.DrawLine(p, new Point(TextOffset, top), new Point(right, top));
|
||||
}
|
||||
else if (e.Vertical)
|
||||
{
|
||||
var bounds = e.Item.Bounds;
|
||||
using (Pen p = new Pen(SystemColors.ControlDarkDark))
|
||||
e.Graphics.DrawLine(p,
|
||||
Convert.ToInt32(bounds.Width / 2.0),
|
||||
Convert.ToInt32(bounds.Height * 0.15),
|
||||
Convert.ToInt32(bounds.Width / 2.0),
|
||||
Convert.ToInt32(bounds.Height * 0.85));
|
||||
}
|
||||
e.Graphics.Clear(ColorBackground);
|
||||
int top = e.Item.Height / 2;
|
||||
top -= 1;
|
||||
int offset = Convert.ToInt32(e.Item.Font.Height * 0.7);
|
||||
using (Pen p = new Pen(ColorBorder))
|
||||
e.Graphics.DrawLine(p,
|
||||
new Point(offset, top),
|
||||
new Point(e.Item.Width - offset, top));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,14 @@ namespace mpvnet
|
||||
|
||||
public static string GetFilter(IEnumerable<string> values) => "*." +
|
||||
String.Join(";*.", values) + "|*." + String.Join(";*.", values) + "|All Files|*.*";
|
||||
|
||||
public static bool IsDarkTheme {
|
||||
get {
|
||||
object value = Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", "AppsUseLightTheme", 1);
|
||||
if (value is null) value = 1;
|
||||
return (int)value == 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class StringLogicalComparer : IComparer, IComparer<string>
|
||||
|
||||
@@ -10,7 +10,7 @@ using System.Runtime.InteropServices;
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("mpv.net")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017 stax76")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017-2019 stax76")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("2.6.0.0")]
|
||||
[assembly: AssemblyFileVersion("2.6.0.0")]
|
||||
[assembly: AssemblyVersion("2.7.0.0")]
|
||||
[assembly: AssemblyFileVersion("2.7.0.0")]
|
||||
|
||||
@@ -123,23 +123,21 @@
|
||||
|
||||
Ctrl+t set ontop yes #menu: View > On Top > Enable
|
||||
Ctrl+T set ontop no #menu: View > On Top > Disable
|
||||
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-toggle #menu: View > Toggle Statistics
|
||||
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-toggle #menu: View > Toggle Statistics
|
||||
Del script-binding osc/visibility #menu: View > Toggle OSC Visibility
|
||||
F8 show-text ${playlist} 5000 #menu: View > Show Playlist
|
||||
F9 show-text ${track-list} 5000 #menu: View > Show Audio/Video/Subtitle List
|
||||
|
||||
_ script-message mpv.net set-setting hwdec yes #menu: Settings > Hardware Decoding > Enable
|
||||
_ script-message mpv.net set-setting hwdec no #menu: Settings > Hardware Decoding > Disable
|
||||
Ctrl+c script-message mpv.net show-conf-editor #menu: Settings > Show Config 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
|
||||
|
||||
h script-message mpv.net show-history #menu: Tools > Show History
|
||||
l ab-loop #menu: Tools > Set/clear A-B loop points
|
||||
L cycle-values loop-file "inf" "no" #menu: Tools > Toggle Infinite Looping
|
||||
Del script-binding osc/visibility #menu: Tools > Toggle OSC Visibility
|
||||
h script-message mpv.net show-history #menu: Tools > Show History
|
||||
l ab-loop #menu: Tools > Set/clear A-B loop points
|
||||
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
|
||||
F8 show-text ${playlist} 5000 #menu: Tools > Show Playlist
|
||||
F9 show-text ${track-list} 5000 #menu: Tools > Show Audio/Video/Subtitle List
|
||||
_ script-message mpv.net execute-mpv-command #menu: Tools > Execute mpv command...
|
||||
|
||||
_ script-message mpv.net shell-execute https://mpv.io/manual/stable/ #menu: Help > Show mpv manual
|
||||
|
||||
@@ -10,6 +10,7 @@ using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using VBNET;
|
||||
using static mpvnet.libmpv;
|
||||
using static mpvnet.Native;
|
||||
@@ -60,6 +61,7 @@ namespace mpvnet
|
||||
public static string mpvConfFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\mpv\\";
|
||||
public static string InputConfPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\mpv\\input.conf";
|
||||
public static string mpvConfPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\mpv\\mpv.conf";
|
||||
public static string mpvNetConfPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\mpv\\mpvnet.conf";
|
||||
public static List<PythonScript> PythonScripts => new List<PythonScript>();
|
||||
public static AutoResetEvent AutoResetEvent = new AutoResetEvent(false);
|
||||
|
||||
@@ -80,6 +82,23 @@ namespace mpvnet
|
||||
}
|
||||
}
|
||||
|
||||
private static Dictionary<string, string> _mpvNetConf;
|
||||
|
||||
public static Dictionary<string, string> mpvNetConf {
|
||||
get {
|
||||
if (_mpvNetConf == null)
|
||||
{
|
||||
_mpvNetConf = new Dictionary<string, string>();
|
||||
|
||||
if (File.Exists(mpvNetConfPath))
|
||||
foreach (string i in File.ReadAllLines(mpvNetConfPath))
|
||||
if (i.Contains("=") && !i.StartsWith("#"))
|
||||
_mpvNetConf[i.Substring(0, i.IndexOf("=")).Trim()] = i.Substring(i.IndexOf("=") + 1).Trim();
|
||||
}
|
||||
return _mpvNetConf;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
if (!Directory.Exists(mp.mpvConfFolderPath))
|
||||
|
||||
Reference in New Issue
Block a user