1
0
mirror of https://github.com/chylex/TweetDuck.git synced 2025-09-14 01:32:10 +02:00

Compare commits

..

5 Commits

7 changed files with 211 additions and 80 deletions

View File

@@ -40,7 +40,7 @@ namespace TweetDuck.Core.Management{
if ((process = Process.Start(new ProcessStartInfo{ if ((process = Process.Start(new ProcessStartInfo{
FileName = Path.Combine(Program.ProgramPath, "TweetDuck.Video.exe"), FileName = Path.Combine(Program.ProgramPath, "TweetDuck.Video.exe"),
Arguments = $"{owner.Handle} {Config.VideoPlayerVolume} \"{url}\" \"{pipe.GenerateToken()}\"", Arguments = $"{owner.Handle} {(int)Math.Floor(100F*owner.GetDPIScale())} {Config.VideoPlayerVolume} \"{url}\" \"{pipe.GenerateToken()}\"",
UseShellExecute = false, UseShellExecute = false,
RedirectStandardOutput = true RedirectStandardOutput = true
})) != null){ })) != null){

View File

@@ -20,7 +20,7 @@ namespace TweetDuck{
public const string BrandName = "TweetDuck"; public const string BrandName = "TweetDuck";
public const string Website = "https://tweetduck.chylex.com"; public const string Website = "https://tweetduck.chylex.com";
public const string VersionTag = "1.17.1"; public const string VersionTag = "1.17.2";
public static readonly string ProgramPath = AppDomain.CurrentDomain.BaseDirectory; public static readonly string ProgramPath = AppDomain.CurrentDomain.BaseDirectory;
public static readonly bool IsPortable = File.Exists(Path.Combine(ProgramPath, "makeportable")); public static readonly bool IsPortable = File.Exists(Path.Combine(ProgramPath, "makeportable"));

View File

@@ -30,7 +30,7 @@ namespace TweetDuck.Video.Controls{
brushBack.Color = Parent.BackColor; brushBack.Color = Parent.BackColor;
} }
Rectangle rect = e.ClipRectangle; Rectangle rect = new Rectangle(0, 0, Width, Height);
Point cursor = PointToClient(Cursor.Position); Point cursor = PointToClient(Cursor.Position);
int width = rect.Width-1; int width = rect.Width-1;
int progress = (int)(width*((double)Value/Maximum)); int progress = (int)(width*((double)Value/Maximum));

View File

@@ -26,16 +26,18 @@
this.components = new System.ComponentModel.Container(); this.components = new System.ComponentModel.Container();
this.timerSync = new System.Windows.Forms.Timer(this.components); this.timerSync = new System.Windows.Forms.Timer(this.components);
this.trackBarVolume = new System.Windows.Forms.TrackBar(); this.trackBarVolume = new System.Windows.Forms.TrackBar();
this.tablePanel = new System.Windows.Forms.TableLayoutPanel(); this.tablePanelFull = new System.Windows.Forms.TableLayoutPanel();
this.progressSeek = new TweetDuck.Video.Controls.SeekBar(); this.progressSeek = new TweetDuck.Video.Controls.SeekBar();
this.labelTime = new System.Windows.Forms.Label(); this.labelTime = new System.Windows.Forms.Label();
this.timerData = new System.Windows.Forms.Timer(this.components);
this.labelTooltip = new TweetDuck.Video.Controls.LabelTooltip();
this.imageResize = new System.Windows.Forms.PictureBox(); this.imageResize = new System.Windows.Forms.PictureBox();
this.imageDownload = new System.Windows.Forms.PictureBox(); this.imageDownload = new System.Windows.Forms.PictureBox();
this.imageClose = new System.Windows.Forms.PictureBox(); this.imageClose = new System.Windows.Forms.PictureBox();
this.timerData = new System.Windows.Forms.Timer(this.components);
this.tablePanelCompactBottom = new System.Windows.Forms.TableLayoutPanel();
this.tablePanelCompactTop = new System.Windows.Forms.TableLayoutPanel();
this.labelTooltip = new TweetDuck.Video.Controls.LabelTooltip();
((System.ComponentModel.ISupportInitialize)(this.trackBarVolume)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.trackBarVolume)).BeginInit();
this.tablePanel.SuspendLayout(); this.tablePanelFull.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.imageResize)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.imageResize)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.imageDownload)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.imageDownload)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.imageClose)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.imageClose)).BeginInit();
@@ -64,31 +66,31 @@
this.trackBarVolume.MouseDown += new System.Windows.Forms.MouseEventHandler(this.trackBarVolume_MouseDown); this.trackBarVolume.MouseDown += new System.Windows.Forms.MouseEventHandler(this.trackBarVolume_MouseDown);
this.trackBarVolume.MouseUp += new System.Windows.Forms.MouseEventHandler(this.trackBarVolume_MouseUp); this.trackBarVolume.MouseUp += new System.Windows.Forms.MouseEventHandler(this.trackBarVolume_MouseUp);
// //
// tablePanel // tablePanelFull
// //
this.tablePanel.BackColor = System.Drawing.SystemColors.Control; this.tablePanelFull.BackColor = System.Drawing.SystemColors.Control;
this.tablePanel.ColumnCount = 6; this.tablePanelFull.ColumnCount = 6;
this.tablePanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28F)); this.tablePanelFull.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tablePanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tablePanelFull.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tablePanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 74F)); this.tablePanelFull.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 80F));
this.tablePanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 130F)); this.tablePanelFull.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 130F));
this.tablePanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28F)); this.tablePanelFull.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tablePanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28F)); this.tablePanelFull.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tablePanel.Controls.Add(this.trackBarVolume, 3, 0); this.tablePanelFull.Controls.Add(this.trackBarVolume, 3, 0);
this.tablePanel.Controls.Add(this.progressSeek, 1, 0); this.tablePanelFull.Controls.Add(this.progressSeek, 1, 0);
this.tablePanel.Controls.Add(this.labelTime, 2, 0); this.tablePanelFull.Controls.Add(this.labelTime, 2, 0);
this.tablePanel.Controls.Add(this.imageResize, 5, 0); this.tablePanelFull.Controls.Add(this.imageResize, 5, 0);
this.tablePanel.Controls.Add(this.imageDownload, 4, 0); this.tablePanelFull.Controls.Add(this.imageDownload, 4, 0);
this.tablePanel.Controls.Add(this.imageClose, 0, 0); this.tablePanelFull.Controls.Add(this.imageClose, 0, 0);
this.tablePanel.Dock = System.Windows.Forms.DockStyle.Bottom; this.tablePanelFull.Dock = System.Windows.Forms.DockStyle.Bottom;
this.tablePanel.Location = new System.Drawing.Point(0, 86); this.tablePanelFull.Location = new System.Drawing.Point(0, 86);
this.tablePanel.Name = "tablePanel"; this.tablePanelFull.Name = "tablePanelFull";
this.tablePanel.Padding = new System.Windows.Forms.Padding(2, 0, 2, 0); this.tablePanelFull.Padding = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.tablePanel.RowCount = 1; this.tablePanelFull.RowCount = 1;
this.tablePanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); this.tablePanelFull.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tablePanel.Size = new System.Drawing.Size(400, 34); this.tablePanelFull.Size = new System.Drawing.Size(400, 34);
this.tablePanel.TabIndex = 1; this.tablePanelFull.TabIndex = 0;
this.tablePanel.Visible = false; this.tablePanelFull.Visible = false;
// //
// progressSeek // progressSeek
// //
@@ -99,7 +101,7 @@
this.progressSeek.Margin = new System.Windows.Forms.Padding(9, 10, 8, 10); this.progressSeek.Margin = new System.Windows.Forms.Padding(9, 10, 8, 10);
this.progressSeek.Maximum = 5000; this.progressSeek.Maximum = 5000;
this.progressSeek.Name = "progressSeek"; this.progressSeek.Name = "progressSeek";
this.progressSeek.Size = new System.Drawing.Size(91, 14); this.progressSeek.Size = new System.Drawing.Size(85, 14);
this.progressSeek.Style = System.Windows.Forms.ProgressBarStyle.Continuous; this.progressSeek.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
this.progressSeek.TabIndex = 0; this.progressSeek.TabIndex = 0;
this.progressSeek.MouseDown += new System.Windows.Forms.MouseEventHandler(this.progressSeek_MouseDown); this.progressSeek.MouseDown += new System.Windows.Forms.MouseEventHandler(this.progressSeek_MouseDown);
@@ -108,31 +110,13 @@
// //
this.labelTime.Dock = System.Windows.Forms.DockStyle.Fill; this.labelTime.Dock = System.Windows.Forms.DockStyle.Fill;
this.labelTime.Font = new System.Drawing.Font("Segoe UI", 9F); this.labelTime.Font = new System.Drawing.Font("Segoe UI", 9F);
this.labelTime.Location = new System.Drawing.Point(138, 3); this.labelTime.Location = new System.Drawing.Point(132, 3);
this.labelTime.Margin = new System.Windows.Forms.Padding(0, 3, 0, 5); this.labelTime.Margin = new System.Windows.Forms.Padding(0, 3, 0, 5);
this.labelTime.Name = "labelTime"; this.labelTime.Name = "labelTime";
this.labelTime.Size = new System.Drawing.Size(74, 26); this.labelTime.Size = new System.Drawing.Size(80, 26);
this.labelTime.TabIndex = 1; this.labelTime.TabIndex = 1;
this.labelTime.TextAlign = System.Drawing.ContentAlignment.MiddleRight; this.labelTime.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
// //
// timerData
//
this.timerData.Interval = 500;
this.timerData.Tick += new System.EventHandler(this.timerData_Tick);
//
// labelTooltip
//
this.labelTooltip.AutoSize = true;
this.labelTooltip.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold);
this.labelTooltip.ForeColor = System.Drawing.Color.White;
this.labelTooltip.Location = new System.Drawing.Point(0, 0);
this.labelTooltip.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0);
this.labelTooltip.Name = "labelTooltip";
this.labelTooltip.Padding = new System.Windows.Forms.Padding(4, 2, 2, 2);
this.labelTooltip.Size = new System.Drawing.Size(6, 19);
this.labelTooltip.TabIndex = 2;
this.labelTooltip.Visible = false;
//
// imageResize // imageResize
// //
this.imageResize.Cursor = System.Windows.Forms.Cursors.Hand; this.imageResize.Cursor = System.Windows.Forms.Cursors.Hand;
@@ -179,6 +163,66 @@
this.imageClose.WaitOnLoad = true; this.imageClose.WaitOnLoad = true;
this.imageClose.Click += new System.EventHandler(this.imageClose_Click); this.imageClose.Click += new System.EventHandler(this.imageClose_Click);
// //
// timerData
//
this.timerData.Interval = 500;
this.timerData.Tick += new System.EventHandler(this.timerData_Tick);
//
// tablePanelCompactBottom
//
this.tablePanelCompactBottom.BackColor = System.Drawing.SystemColors.Control;
this.tablePanelCompactBottom.ColumnCount = 5;
this.tablePanelCompactBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tablePanelCompactBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tablePanelCompactBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 130F));
this.tablePanelCompactBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tablePanelCompactBottom.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28F));
this.tablePanelCompactBottom.Dock = System.Windows.Forms.DockStyle.Bottom;
this.tablePanelCompactBottom.Enabled = false;
this.tablePanelCompactBottom.Location = new System.Drawing.Point(0, 52);
this.tablePanelCompactBottom.Margin = new System.Windows.Forms.Padding(3, 0, 3, 3);
this.tablePanelCompactBottom.Name = "tablePanelCompactBottom";
this.tablePanelCompactBottom.Padding = new System.Windows.Forms.Padding(2, 0, 2, 0);
this.tablePanelCompactBottom.RowCount = 1;
this.tablePanelCompactBottom.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tablePanelCompactBottom.Size = new System.Drawing.Size(400, 34);
this.tablePanelCompactBottom.TabIndex = 1;
//
// tablePanelCompactTop
//
this.tablePanelCompactTop.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tablePanelCompactTop.BackColor = System.Drawing.SystemColors.Control;
this.tablePanelCompactTop.ColumnCount = 2;
this.tablePanelCompactTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tablePanelCompactTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 80F));
this.tablePanelCompactTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tablePanelCompactTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tablePanelCompactTop.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
this.tablePanelCompactTop.Enabled = false;
this.tablePanelCompactTop.Location = new System.Drawing.Point(0, 60);
this.tablePanelCompactTop.Margin = new System.Windows.Forms.Padding(0);
this.tablePanelCompactTop.Name = "tablePanelCompactTop";
this.tablePanelCompactTop.Padding = new System.Windows.Forms.Padding(2, 0, 4, 0);
this.tablePanelCompactTop.RowCount = 1;
this.tablePanelCompactTop.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
this.tablePanelCompactTop.Size = new System.Drawing.Size(400, 34);
this.tablePanelCompactTop.TabIndex = 2;
this.tablePanelCompactTop.Visible = false;
//
// labelTooltip
//
this.labelTooltip.AutoSize = true;
this.labelTooltip.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold);
this.labelTooltip.ForeColor = System.Drawing.Color.White;
this.labelTooltip.Location = new System.Drawing.Point(0, 0);
this.labelTooltip.Margin = new System.Windows.Forms.Padding(0, 2, 0, 0);
this.labelTooltip.Name = "labelTooltip";
this.labelTooltip.Padding = new System.Windows.Forms.Padding(4, 2, 2, 2);
this.labelTooltip.Size = new System.Drawing.Size(6, 19);
this.labelTooltip.TabIndex = 3;
this.labelTooltip.Visible = false;
//
// FormPlayer // FormPlayer
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -187,7 +231,9 @@
this.ClientSize = new System.Drawing.Size(400, 120); this.ClientSize = new System.Drawing.Size(400, 120);
this.ControlBox = false; this.ControlBox = false;
this.Controls.Add(this.labelTooltip); this.Controls.Add(this.labelTooltip);
this.Controls.Add(this.tablePanel); this.Controls.Add(this.tablePanelCompactBottom);
this.Controls.Add(this.tablePanelFull);
this.Controls.Add(this.tablePanelCompactTop);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Location = new System.Drawing.Point(-32000, -32000); this.Location = new System.Drawing.Point(-32000, -32000);
this.MaximizeBox = false; this.MaximizeBox = false;
@@ -199,7 +245,7 @@
this.Text = "TweetDuck Video"; this.Text = "TweetDuck Video";
this.Load += new System.EventHandler(this.FormPlayer_Load); this.Load += new System.EventHandler(this.FormPlayer_Load);
((System.ComponentModel.ISupportInitialize)(this.trackBarVolume)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.trackBarVolume)).EndInit();
this.tablePanel.ResumeLayout(false); this.tablePanelFull.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.imageResize)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.imageResize)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.imageDownload)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.imageDownload)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.imageClose)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.imageClose)).EndInit();
@@ -212,7 +258,7 @@
private System.Windows.Forms.Timer timerSync; private System.Windows.Forms.Timer timerSync;
private System.Windows.Forms.TrackBar trackBarVolume; private System.Windows.Forms.TrackBar trackBarVolume;
private System.Windows.Forms.TableLayoutPanel tablePanel; private System.Windows.Forms.TableLayoutPanel tablePanelFull;
private Controls.SeekBar progressSeek; private Controls.SeekBar progressSeek;
private System.Windows.Forms.Label labelTime; private System.Windows.Forms.Label labelTime;
private System.Windows.Forms.Timer timerData; private System.Windows.Forms.Timer timerData;
@@ -220,6 +266,8 @@
private System.Windows.Forms.PictureBox imageResize; private System.Windows.Forms.PictureBox imageResize;
private System.Windows.Forms.PictureBox imageDownload; private System.Windows.Forms.PictureBox imageDownload;
private System.Windows.Forms.PictureBox imageClose; private System.Windows.Forms.PictureBox imageClose;
private System.Windows.Forms.TableLayoutPanel tablePanelCompactBottom;
private System.Windows.Forms.TableLayoutPanel tablePanelCompactTop;
} }
} }

View File

@@ -10,9 +10,17 @@ using WMPLib;
namespace TweetDuck.Video{ namespace TweetDuck.Video{
sealed partial class FormPlayer : Form{ sealed partial class FormPlayer : Form{
private bool IsCursorOverVideo{
get{
Point cursor = PointToClient(Cursor.Position);
return cursor.Y < (tablePanelFull.Enabled ? tablePanelFull.Location.Y : tablePanelCompactTop.Location.Y);
}
}
protected override bool ShowWithoutActivation => true; protected override bool ShowWithoutActivation => true;
private readonly IntPtr ownerHandle; private readonly IntPtr ownerHandle;
private readonly float ownerDpi;
private readonly string videoUrl; private readonly string videoUrl;
private readonly DuplexPipe pipe; private readonly DuplexPipe pipe;
@@ -23,10 +31,11 @@ namespace TweetDuck.Video{
private WindowsMediaPlayer Player => player.Ocx; private WindowsMediaPlayer Player => player.Ocx;
public FormPlayer(IntPtr handle, int volume, string url, string token){ public FormPlayer(IntPtr handle, int dpi, int volume, string url, string token){
InitializeComponent(); InitializeComponent();
this.ownerHandle = handle; this.ownerHandle = handle;
this.ownerDpi = dpi / 100F;
this.videoUrl = url; this.videoUrl = url;
this.pipe = DuplexPipe.CreateClient(token); this.pipe = DuplexPipe.CreateClient(token);
this.pipe.DataIn += pipe_DataIn; this.pipe.DataIn += pipe_DataIn;
@@ -78,6 +87,59 @@ namespace TweetDuck.Video{
Application.AddMessageFilter(new MessageFilter(this)); Application.AddMessageFilter(new MessageFilter(this));
} }
// Layout
private int DpiScaled(int value){
return (int)Math.Round(value*ownerDpi);
}
private void RefreshControlPanel(){
bool useCompactLayout = ClientSize.Width < DpiScaled(480);
bool needsUpdate = useCompactLayout ? tablePanelFull.Enabled : tablePanelCompactBottom.Enabled;
if (needsUpdate){
void Disable(TableLayoutPanel panel){
panel.Controls.Clear();
panel.Visible = false;
panel.Enabled = false;
}
tablePanelFull.SuspendLayout();
tablePanelCompactBottom.SuspendLayout();
tablePanelCompactTop.SuspendLayout();
if (useCompactLayout){
Disable(tablePanelFull);
tablePanelCompactBottom.Enabled = true;
tablePanelCompactBottom.Controls.Add(imageClose, 0, 0);
tablePanelCompactBottom.Controls.Add(trackBarVolume, 2, 0);
tablePanelCompactBottom.Controls.Add(imageDownload, 3, 0);
tablePanelCompactBottom.Controls.Add(imageResize, 4, 0);
tablePanelCompactTop.Enabled = true;
tablePanelCompactTop.Controls.Add(progressSeek, 0, 0);
tablePanelCompactTop.Controls.Add(labelTime, 1, 0);
}
else{
Disable(tablePanelCompactBottom);
Disable(tablePanelCompactTop);
tablePanelFull.Enabled = true;
tablePanelFull.Controls.Add(imageClose, 0, 0);
tablePanelFull.Controls.Add(progressSeek, 1, 0);
tablePanelFull.Controls.Add(labelTime, 2, 0);
tablePanelFull.Controls.Add(trackBarVolume, 3, 0);
tablePanelFull.Controls.Add(imageDownload, 4, 0);
tablePanelFull.Controls.Add(imageResize, 5, 0);
}
tablePanelFull.ResumeLayout();
tablePanelCompactBottom.ResumeLayout();
tablePanelCompactTop.ResumeLayout();
}
}
// Events // Events
private void FormPlayer_Load(object sender, EventArgs e){ private void FormPlayer_Load(object sender, EventArgs e){
@@ -138,26 +200,31 @@ namespace TweetDuck.Video{
int ownerWidth = rect.Right-rect.Left+1; int ownerWidth = rect.Right-rect.Left+1;
int ownerHeight = rect.Bottom-rect.Top+1; int ownerHeight = rect.Bottom-rect.Top+1;
// roughly matches MinimumSize for client bounds // roughly matches MinimumSize for client bounds, adjusted a bit for weirdness with higher DPI
const int minWidth = 334; int minWidth = DpiScaled(356);
const int minHeight = 388; int minHeight = DpiScaled(386);
int maxWidth = Math.Min(media.imageSourceWidth, ownerWidth*3/4); if (NativeMethods.GetClientRect(ownerHandle, out NativeMethods.RECT clientSize)){
int maxHeight = Math.Min(media.imageSourceHeight, ownerHeight*3/4); minWidth = Math.Min(minWidth, clientSize.Right);
minHeight = Math.Min(minHeight, clientSize.Bottom);
}
int maxWidth = Math.Min(DpiScaled(media.imageSourceWidth), ownerWidth*3/4);
int maxHeight = Math.Min(DpiScaled(media.imageSourceHeight), ownerHeight*3/4);
bool isCursorInside = ClientRectangle.Contains(PointToClient(Cursor.Position)); bool isCursorInside = ClientRectangle.Contains(PointToClient(Cursor.Position));
Size newSize = new Size(Math.Max(minWidth, maxWidth), Math.Max(minHeight, maxHeight)); Size newSize = new Size(Math.Max(minWidth+2, maxWidth), Math.Max(minHeight+2, maxHeight));
Point newLocation = new Point(ownerLeft+(ownerWidth-newSize.Width)/2, ownerTop+(ownerHeight-newSize.Height+SystemInformation.CaptionHeight)/2); Point newLocation = new Point(ownerLeft+(ownerWidth-newSize.Width)/2, ownerTop+(ownerHeight-newSize.Height+SystemInformation.CaptionHeight)/2);
if (ClientSize != newSize || Location != newLocation){ if (ClientSize != newSize || Location != newLocation){
ClientSize = newSize; ClientSize = newSize;
Location = newLocation; Location = newLocation;
RefreshControlPanel();
} }
tablePanel.Visible = isCursorInside || isDragging; if (isCursorInside || isDragging){
if (tablePanel.Visible){
labelTime.Text = $"{controls.currentPositionString} / {media.durationString}"; labelTime.Text = $"{controls.currentPositionString} / {media.durationString}";
int value = (int)Math.Round(progressSeek.Maximum*controls.currentPosition/media.duration); int value = (int)Math.Round(progressSeek.Maximum*controls.currentPosition/media.duration);
@@ -171,6 +238,19 @@ namespace TweetDuck.Video{
progressSeek.Value = value+1; progressSeek.Value = value+1;
progressSeek.Value = value; progressSeek.Value = value;
} }
if (tablePanelFull.Enabled){
tablePanelFull.Visible = true;
}
else{
tablePanelCompactBottom.Visible = true;
tablePanelCompactTop.Visible = true;
}
}
else{
tablePanelFull.Visible = false;
tablePanelCompactBottom.Visible = false;
tablePanelCompactTop.Visible = false;
} }
if (controls.currentPosition > media.duration){ // pausing near the end of the video causes WMP to play beyond the end of the video wtf if (controls.currentPosition > media.duration){ // pausing near the end of the video causes WMP to play beyond the end of the video wtf
@@ -186,6 +266,10 @@ namespace TweetDuck.Video{
if (isCursorInside && !wasCursorInside){ if (isCursorInside && !wasCursorInside){
wasCursorInside = true; wasCursorInside = true;
if (IsCursorOverVideo){
Cursor.Current = Cursors.Default;
}
} }
else if (!isCursorInside && wasCursorInside){ else if (!isCursorInside && wasCursorInside){
wasCursorInside = false; wasCursorInside = false;
@@ -302,26 +386,19 @@ namespace TweetDuck.Video{
internal sealed class MessageFilter : IMessageFilter{ internal sealed class MessageFilter : IMessageFilter{
private readonly FormPlayer form; private readonly FormPlayer form;
private bool IsCursorOverVideo{
get{
Point cursor = form.PointToClient(Cursor.Position);
return cursor.Y < form.tablePanel.Location.Y;
}
}
public MessageFilter(FormPlayer form){ public MessageFilter(FormPlayer form){
this.form = form; this.form = form;
} }
bool IMessageFilter.PreFilterMessage(ref Message m){ bool IMessageFilter.PreFilterMessage(ref Message m){
if (m.Msg == 0x0201){ // WM_LBUTTONDOWN if (m.Msg == 0x0201){ // WM_LBUTTONDOWN
if (IsCursorOverVideo){ if (form.IsCursorOverVideo){
form.TogglePause(); form.TogglePause();
return true; return true;
} }
} }
else if (m.Msg == 0x0203){ // WM_LBUTTONDBLCLK else if (m.Msg == 0x0203){ // WM_LBUTTONDBLCLK
if (IsCursorOverVideo){ if (form.IsCursorOverVideo){
form.TogglePause(); form.TogglePause();
form.Player.fullScreen = !form.Player.fullScreen; form.Player.fullScreen = !form.Player.fullScreen;
return true; return true;

View File

@@ -9,6 +9,10 @@ namespace TweetDuck.Video{
[return: MarshalAs(UnmanagedType.Bool)] [return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect); public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);
[DllImport("user32.dll")] [DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong); private static extern int SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong);

View File

@@ -5,7 +5,7 @@ using System.Windows.Forms;
namespace TweetDuck.Video{ namespace TweetDuck.Video{
static class Program{ static class Program{
internal const string Version = "1.4"; internal const string Version = "1.4.1";
// referenced in VideoPlayer // referenced in VideoPlayer
// set by task manager -- public const int CODE_PROCESS_KILLED = 1; // set by task manager -- public const int CODE_PROCESS_KILLED = 1;
@@ -25,21 +25,23 @@ namespace TweetDuck.Video{
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture; CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
IntPtr ownerHandle; IntPtr ownerHandle;
int ownerDpi;
int defaultVolume; int defaultVolume;
string videoUrl; string videoUrl;
string pipeToken; string pipeToken;
try{ try{
ownerHandle = new IntPtr(int.Parse(args[0], NumberStyles.Integer)); ownerHandle = new IntPtr(int.Parse(args[0], NumberStyles.Integer));
defaultVolume = int.Parse(args[1], NumberStyles.Integer); ownerDpi = int.Parse(args[1], NumberStyles.Integer);
videoUrl = new Uri(args[2], UriKind.Absolute).AbsoluteUri; defaultVolume = int.Parse(args[2], NumberStyles.Integer);
pipeToken = args[3]; videoUrl = new Uri(args[3], UriKind.Absolute).AbsoluteUri;
pipeToken = args[4];
}catch{ }catch{
return CODE_INVALID_ARGS; return CODE_INVALID_ARGS;
} }
try{ try{
Application.Run(new FormPlayer(ownerHandle, defaultVolume, videoUrl, pipeToken)); Application.Run(new FormPlayer(ownerHandle, ownerDpi, defaultVolume, videoUrl, pipeToken));
}catch(Exception e){ }catch(Exception e){
Console.Out.WriteLine(e); Console.Out.WriteLine(e);
return CODE_LAUNCH_FAIL; return CODE_LAUNCH_FAIL;