diff --git a/ShareX.HelpersLib/Controls/BlackStyle/BlackStyleLabel.cs b/ShareX.HelpersLib/Controls/BlackStyle/BlackStyleLabel.cs
index d794448db..f4b976b23 100644
--- a/ShareX.HelpersLib/Controls/BlackStyle/BlackStyleLabel.cs
+++ b/ShareX.HelpersLib/Controls/BlackStyle/BlackStyleLabel.cs
@@ -112,6 +112,23 @@ public bool DrawBorder
}
}
+ private Color borderColor = Color.Black;
+
+ [DefaultValue(typeof(Color), "Black")]
+ public Color BorderColor
+ {
+ get
+ {
+ return borderColor;
+ }
+ set
+ {
+ borderColor = value;
+
+ Invalidate();
+ }
+ }
+
private bool autoEllipsis;
[DefaultValue(false)]
@@ -150,7 +167,10 @@ protected override void OnPaint(PaintEventArgs pe)
if (drawBorder)
{
- g.DrawRectangleProper(Pens.Black, ClientRectangle);
+ using (Pen pen = new Pen(BorderColor, 1))
+ {
+ g.DrawRectangleProper(pen, ClientRectangle);
+ }
}
}
}
diff --git a/ShareX/Controls/TaskThumbnailPanel.Designer.cs b/ShareX/Controls/TaskThumbnailPanel.Designer.cs
index 6b8e29b94..ec133cca3 100644
--- a/ShareX/Controls/TaskThumbnailPanel.Designer.cs
+++ b/ShareX/Controls/TaskThumbnailPanel.Designer.cs
@@ -36,7 +36,9 @@ private void InitializeComponent()
this.ttMain = new System.Windows.Forms.ToolTip(this.components);
this.lblTitle = new ShareX.HelpersLib.BlackStyleLabel();
this.pThumbnail = new ShareX.TaskRoundedCornerPanel();
+ this.lblCombineVertical = new ShareX.HelpersLib.BlackStyleLabel();
this.lblError = new ShareX.HelpersLib.BlackStyleLabel();
+ this.lblCombineHorizontal = new ShareX.HelpersLib.BlackStyleLabel();
this.pbProgress = new ShareX.HelpersLib.BlackStyleProgressBar();
this.pbThumbnail = new System.Windows.Forms.PictureBox();
this.pThumbnail.SuspendLayout();
@@ -63,8 +65,11 @@ private void InitializeComponent()
//
// pThumbnail
//
+ this.pThumbnail.AllowDrop = true;
this.pThumbnail.BackColor = System.Drawing.Color.Transparent;
+ this.pThumbnail.Controls.Add(this.lblCombineVertical);
this.pThumbnail.Controls.Add(this.lblError);
+ this.pThumbnail.Controls.Add(this.lblCombineHorizontal);
this.pThumbnail.Controls.Add(this.pbProgress);
this.pThumbnail.Controls.Add(this.pbThumbnail);
resources.ApplyResources(this.pThumbnail, "pThumbnail");
@@ -73,6 +78,19 @@ private void InitializeComponent()
this.pThumbnail.Radius = 5F;
this.pThumbnail.Selected = false;
this.pThumbnail.StatusLocation = ShareX.ThumbnailTitleLocation.Top;
+ this.pThumbnail.DragDrop += new System.Windows.Forms.DragEventHandler(this.pThumbnail_DragDrop);
+ this.pThumbnail.DragEnter += new System.Windows.Forms.DragEventHandler(this.pThumbnail_DragEnter);
+ this.pThumbnail.DragLeave += new System.EventHandler(this.pThumbnail_DragLeave);
+ //
+ // lblCombineVertical
+ //
+ this.lblCombineVertical.BackColor = System.Drawing.Color.Transparent;
+ this.lblCombineVertical.BorderColor = System.Drawing.Color.Empty;
+ this.lblCombineVertical.DrawBorder = true;
+ resources.ApplyResources(this.lblCombineVertical, "lblCombineVertical");
+ this.lblCombineVertical.ForeColor = System.Drawing.Color.White;
+ this.lblCombineVertical.Name = "lblCombineVertical";
+ this.lblCombineVertical.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lblError
//
@@ -84,6 +102,16 @@ private void InitializeComponent()
this.lblError.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lblError.MouseClick += new System.Windows.Forms.MouseEventHandler(this.lblError_MouseClick);
//
+ // lblCombineHorizontal
+ //
+ this.lblCombineHorizontal.BackColor = System.Drawing.Color.Transparent;
+ this.lblCombineHorizontal.BorderColor = System.Drawing.Color.Empty;
+ this.lblCombineHorizontal.DrawBorder = true;
+ resources.ApplyResources(this.lblCombineHorizontal, "lblCombineHorizontal");
+ this.lblCombineHorizontal.ForeColor = System.Drawing.Color.White;
+ this.lblCombineHorizontal.Name = "lblCombineHorizontal";
+ this.lblCombineHorizontal.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ //
// pbProgress
//
resources.ApplyResources(this.pbProgress, "pbProgress");
@@ -125,5 +153,7 @@ private void InitializeComponent()
private System.Windows.Forms.PictureBox pbThumbnail;
private System.Windows.Forms.ToolTip ttMain;
private HelpersLib.BlackStyleLabel lblError;
+ private HelpersLib.BlackStyleLabel lblCombineHorizontal;
+ private HelpersLib.BlackStyleLabel lblCombineVertical;
}
}
diff --git a/ShareX/Controls/TaskThumbnailPanel.cs b/ShareX/Controls/TaskThumbnailPanel.cs
index e85cf3416..78c62d1df 100644
--- a/ShareX/Controls/TaskThumbnailPanel.cs
+++ b/ShareX/Controls/TaskThumbnailPanel.cs
@@ -257,6 +257,8 @@ public void UpdateTheme()
pThumbnail.PanelColor = ShareXResources.Theme.DarkBackgroundColor;
ttMain.BackColor = ShareXResources.Theme.BackgroundColor;
ttMain.ForeColor = ShareXResources.Theme.TextColor;
+ lblCombineHorizontal.BorderColor = ShareXResources.Theme.BorderColor;
+ lblCombineVertical.BorderColor = ShareXResources.Theme.BorderColor;
}
else
{
@@ -265,6 +267,8 @@ public void UpdateTheme()
pThumbnail.PanelColor = SystemColors.ControlLight;
ttMain.BackColor = SystemColors.Window;
ttMain.ForeColor = SystemColors.ControlText;
+ lblCombineHorizontal.BorderColor = Color.Black;
+ lblCombineVertical.BorderColor = Color.Black;
}
}
@@ -316,6 +320,11 @@ private void UpdateLayout()
lblTitle.Location = new Point(0, pThumbnail.Height + 2);
lblError.Location = new Point((ClientSize.Width - lblError.Width) / 2, pThumbnail.Height - lblError.Height - 1);
}
+
+ lblCombineHorizontal.Location = new Point(pbThumbnail.Left, pbThumbnail.Top);
+ lblCombineHorizontal.Size = new Size(pbThumbnail.Width, pbThumbnail.Height / 2);
+ lblCombineVertical.Location = new Point(pbThumbnail.Left, pbThumbnail.Top + pbThumbnail.Height / 2 - 1);
+ lblCombineVertical.Size = new Size(pbThumbnail.Width, pbThumbnail.Height / 2 + 1);
}
public void UpdateThumbnail(Bitmap bmp = null)
@@ -560,11 +569,20 @@ private void PbThumbnail_MouseMove(object sender, MouseEventArgs e)
{
if (Task.Info != null && !string.IsNullOrEmpty(Task.Info.FilePath) && File.Exists(Task.Info.FilePath))
{
+ pThumbnail.AllowDrop = false;
Program.MainForm.AllowDrop = false;
- IDataObject dataObject = new DataObject(DataFormats.FileDrop, new string[] { Task.Info.FilePath });
- dragBoxFromMouseDown = Rectangle.Empty;
- pbThumbnail.DoDragDrop(dataObject, DragDropEffects.Copy | DragDropEffects.Move);
- Program.MainForm.AllowDrop = true;
+
+ try
+ {
+ IDataObject dataObject = new DataObject(DataFormats.FileDrop, new string[] { Task.Info.FilePath });
+ dragBoxFromMouseDown = Rectangle.Empty;
+ pbThumbnail.DoDragDrop(dataObject, DragDropEffects.Copy | DragDropEffects.Move);
+ }
+ finally
+ {
+ pThumbnail.AllowDrop = true;
+ Program.MainForm.AllowDrop = true;
+ }
}
else
{
@@ -573,6 +591,55 @@ private void PbThumbnail_MouseMove(object sender, MouseEventArgs e)
}
}
+ private void pThumbnail_DragEnter(object sender, DragEventArgs e)
+ {
+ string filePath = Task.Info.FilePath;
+
+ if (FileHelpers.IsImageFile(filePath) && e.Data.GetDataPresent(DataFormats.FileDrop, false) &&
+ e.Data.GetData(DataFormats.FileDrop, false) is string[] files && files.Length > 0 && FileHelpers.IsImageFile(files[0]))
+ {
+ lblCombineHorizontal.Visible = true;
+ lblCombineVertical.Visible = true;
+
+ e.Effect = DragDropEffects.Copy;
+ }
+ else
+ {
+ e.Effect = DragDropEffects.None;
+ }
+ }
+
+ private void pThumbnail_DragLeave(object sender, EventArgs e)
+ {
+ lblCombineHorizontal.Visible = false;
+ lblCombineVertical.Visible = false;
+ }
+
+ private void pThumbnail_DragDrop(object sender, DragEventArgs e)
+ {
+ Orientation combineOrientation = Orientation.Horizontal;
+
+ Point vertical = lblCombineVertical.PointToScreen(lblCombineVertical.ClientRectangle.Location);
+
+ if (e.Y >= vertical.Y)
+ {
+ combineOrientation = Orientation.Vertical;
+ }
+
+ string filePath = Task.Info.FilePath;
+
+ if (FileHelpers.IsImageFile(filePath) && e.Data.GetDataPresent(DataFormats.FileDrop, false) &&
+ e.Data.GetData(DataFormats.FileDrop, false) is string[] files && files.Length > 0 && FileHelpers.IsImageFile(files[0]))
+ {
+ string filePathDrop = files[0];
+
+ TaskHelpers.CombineImages(new string[] { filePathDrop, filePath }, combineOrientation);
+ }
+
+ lblCombineHorizontal.Visible = false;
+ lblCombineVertical.Visible = false;
+ }
+
private void TtMain_Draw(object sender, DrawToolTipEventArgs e)
{
e.DrawBackground();
diff --git a/ShareX/Controls/TaskThumbnailPanel.resx b/ShareX/Controls/TaskThumbnailPanel.resx
index 258adaab8..ff41cd986 100644
--- a/ShareX/Controls/TaskThumbnailPanel.resx
+++ b/ShareX/Controls/TaskThumbnailPanel.resx
@@ -138,7 +138,7 @@
lblTitle
- ShareX.HelpersLib.BlackStyleLabel, ShareX.HelpersLib, Version=13.6.2.0, Culture=neutral, PublicKeyToken=null
+ ShareX.HelpersLib.BlackStyleLabel, ShareX.HelpersLib, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null
$this
@@ -146,6 +146,37 @@
1
+
+ Segoe UI, 14.25pt
+
+
+ 40, 128
+
+
+ 184, 80
+
+
+ 6
+
+
+ Combine images
+(Vertical)
+
+
+ False
+
+
+ lblCombineVertical
+
+
+ ShareX.HelpersLib.BlackStyleLabel, ShareX.HelpersLib, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null
+
+
+ pThumbnail
+
+
+ 0
+
Top
@@ -172,13 +203,44 @@
lblError
- ShareX.HelpersLib.BlackStyleLabel, ShareX.HelpersLib, Version=13.6.2.0, Culture=neutral, PublicKeyToken=null
+ ShareX.HelpersLib.BlackStyleLabel, ShareX.HelpersLib, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null
pThumbnail
- 0
+ 1
+
+
+ Segoe UI, 14.25pt
+
+
+ 40, 40
+
+
+ 184, 80
+
+
+ 5
+
+
+ Combine images
+(Horizontal)
+
+
+ False
+
+
+ lblCombineHorizontal
+
+
+ ShareX.HelpersLib.BlackStyleLabel, ShareX.HelpersLib, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null
+
+
+ pThumbnail
+
+
+ 2
Bottom, Left, Right
@@ -205,17 +267,20 @@
pbProgress
- ShareX.HelpersLib.BlackStyleProgressBar, ShareX.HelpersLib, Version=13.6.2.0, Culture=neutral, PublicKeyToken=null
+ ShareX.HelpersLib.BlackStyleProgressBar, ShareX.HelpersLib, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null
pThumbnail
- 1
+ 3
Fill
+
+ NoControl
+
4, 4
@@ -235,7 +300,7 @@
pThumbnail
- 2
+ 4
0, 24
@@ -253,7 +318,7 @@
pThumbnail
- ShareX.TaskRoundedCornerPanel, ShareX, Version=13.6.2.0, Culture=neutral, PublicKeyToken=null
+ ShareX.TaskRoundedCornerPanel, ShareX, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null
$this