diff --git a/video/FormPlayer.Designer.cs b/video/FormPlayer.Designer.cs index aab7b586..4df4511c 100644 --- a/video/FormPlayer.Designer.cs +++ b/video/FormPlayer.Designer.cs @@ -26,16 +26,18 @@ private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.timerSync = new System.Windows.Forms.Timer(this.components); 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.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.imageDownload = 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(); - this.tablePanel.SuspendLayout(); + this.tablePanelFull.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.imageResize)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.imageDownload)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.imageClose)).BeginInit(); @@ -64,31 +66,31 @@ private void InitializeComponent() { this.trackBarVolume.MouseDown += new System.Windows.Forms.MouseEventHandler(this.trackBarVolume_MouseDown); this.trackBarVolume.MouseUp += new System.Windows.Forms.MouseEventHandler(this.trackBarVolume_MouseUp); // - // tablePanel + // tablePanelFull // - this.tablePanel.BackColor = System.Drawing.SystemColors.Control; - this.tablePanel.ColumnCount = 6; - this.tablePanel.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.tablePanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 74F)); - this.tablePanel.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.tablePanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28F)); - this.tablePanel.Controls.Add(this.trackBarVolume, 3, 0); - this.tablePanel.Controls.Add(this.progressSeek, 1, 0); - this.tablePanel.Controls.Add(this.labelTime, 2, 0); - this.tablePanel.Controls.Add(this.imageResize, 5, 0); - this.tablePanel.Controls.Add(this.imageDownload, 4, 0); - this.tablePanel.Controls.Add(this.imageClose, 0, 0); - this.tablePanel.Dock = System.Windows.Forms.DockStyle.Bottom; - this.tablePanel.Location = new System.Drawing.Point(0, 86); - this.tablePanel.Name = "tablePanel"; - this.tablePanel.Padding = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.tablePanel.RowCount = 1; - this.tablePanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tablePanel.Size = new System.Drawing.Size(400, 34); - this.tablePanel.TabIndex = 1; - this.tablePanel.Visible = false; + this.tablePanelFull.BackColor = System.Drawing.SystemColors.Control; + this.tablePanelFull.ColumnCount = 6; + this.tablePanelFull.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.Percent, 100F)); + this.tablePanelFull.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 80F)); + this.tablePanelFull.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, 28F)); + this.tablePanelFull.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 28F)); + this.tablePanelFull.Controls.Add(this.trackBarVolume, 3, 0); + this.tablePanelFull.Controls.Add(this.progressSeek, 1, 0); + this.tablePanelFull.Controls.Add(this.labelTime, 2, 0); + this.tablePanelFull.Controls.Add(this.imageResize, 5, 0); + this.tablePanelFull.Controls.Add(this.imageDownload, 4, 0); + this.tablePanelFull.Controls.Add(this.imageClose, 0, 0); + this.tablePanelFull.Dock = System.Windows.Forms.DockStyle.Bottom; + this.tablePanelFull.Location = new System.Drawing.Point(0, 86); + this.tablePanelFull.Name = "tablePanelFull"; + this.tablePanelFull.Padding = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.tablePanelFull.RowCount = 1; + this.tablePanelFull.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tablePanelFull.Size = new System.Drawing.Size(400, 34); + this.tablePanelFull.TabIndex = 0; + this.tablePanelFull.Visible = false; // // progressSeek // @@ -99,7 +101,7 @@ private void InitializeComponent() { this.progressSeek.Margin = new System.Windows.Forms.Padding(9, 10, 8, 10); this.progressSeek.Maximum = 5000; 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.TabIndex = 0; this.progressSeek.MouseDown += new System.Windows.Forms.MouseEventHandler(this.progressSeek_MouseDown); @@ -108,31 +110,13 @@ private void InitializeComponent() { // this.labelTime.Dock = System.Windows.Forms.DockStyle.Fill; 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.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.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 // this.imageResize.Cursor = System.Windows.Forms.Cursors.Hand; @@ -179,6 +163,66 @@ private void InitializeComponent() { this.imageClose.WaitOnLoad = true; 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 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -187,7 +231,9 @@ private void InitializeComponent() { this.ClientSize = new System.Drawing.Size(400, 120); this.ControlBox = false; 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.Location = new System.Drawing.Point(-32000, -32000); this.MaximizeBox = false; @@ -199,7 +245,7 @@ private void InitializeComponent() { this.Text = "TweetDuck Video"; this.Load += new System.EventHandler(this.FormPlayer_Load); ((System.ComponentModel.ISupportInitialize)(this.trackBarVolume)).EndInit(); - this.tablePanel.ResumeLayout(false); + this.tablePanelFull.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.imageResize)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.imageDownload)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.imageClose)).EndInit(); @@ -212,7 +258,7 @@ private void InitializeComponent() { private System.Windows.Forms.Timer timerSync; private System.Windows.Forms.TrackBar trackBarVolume; - private System.Windows.Forms.TableLayoutPanel tablePanel; + private System.Windows.Forms.TableLayoutPanel tablePanelFull; private Controls.SeekBar progressSeek; private System.Windows.Forms.Label labelTime; private System.Windows.Forms.Timer timerData; @@ -220,6 +266,8 @@ private void InitializeComponent() { private System.Windows.Forms.PictureBox imageResize; private System.Windows.Forms.PictureBox imageDownload; private System.Windows.Forms.PictureBox imageClose; + private System.Windows.Forms.TableLayoutPanel tablePanelCompactBottom; + private System.Windows.Forms.TableLayoutPanel tablePanelCompactTop; } } diff --git a/video/FormPlayer.cs b/video/FormPlayer.cs index 8a7a1b69..f19f2114 100644 --- a/video/FormPlayer.cs +++ b/video/FormPlayer.cs @@ -13,7 +13,7 @@ sealed partial class FormPlayer : Form{ private bool IsCursorOverVideo{ get{ Point cursor = PointToClient(Cursor.Position); - return cursor.Y < tablePanel.Location.Y; + return cursor.Y < (tablePanelFull.Enabled ? tablePanelFull.Location.Y : tablePanelCompactTop.Location.Y); } } @@ -87,10 +87,59 @@ public FormPlayer(IntPtr handle, int dpi, int volume, string url, string token){ 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 private void FormPlayer_Load(object sender, EventArgs e){ @@ -171,11 +220,11 @@ private void timerSync_Tick(object sender, EventArgs e){ if (ClientSize != newSize || Location != newLocation){ ClientSize = newSize; Location = newLocation; + + RefreshControlPanel(); } - - tablePanel.Visible = isCursorInside || isDragging; - - if (tablePanel.Visible){ + + if (isCursorInside || isDragging){ labelTime.Text = $"{controls.currentPositionString} / {media.durationString}"; int value = (int)Math.Round(progressSeek.Maximum*controls.currentPosition/media.duration); @@ -189,6 +238,19 @@ private void timerSync_Tick(object sender, EventArgs e){ progressSeek.Value = value+1; 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