Merge pull request #6528 from ShareX/quick-combine

Quick image combine with drag & drop
This commit is contained in:
Jaex 2022-10-01 06:49:39 +03:00 committed by GitHub
commit 66731e0314
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 194 additions and 12 deletions

View file

@ -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);
}
}
}
}

View file

@ -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;
}
}

View file

@ -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();

View file

@ -138,7 +138,7 @@
<value>lblTitle</value>
</data>
<data name="&gt;&gt;lblTitle.Type" xml:space="preserve">
<value>ShareX.HelpersLib.BlackStyleLabel, ShareX.HelpersLib, Version=13.6.2.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.BlackStyleLabel, ShareX.HelpersLib, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lblTitle.Parent" xml:space="preserve">
<value>$this</value>
@ -146,6 +146,37 @@
<data name="&gt;&gt;lblTitle.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="lblCombineVertical.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 14.25pt</value>
</data>
<data name="lblCombineVertical.Location" type="System.Drawing.Point, System.Drawing">
<value>40, 128</value>
</data>
<data name="lblCombineVertical.Size" type="System.Drawing.Size, System.Drawing">
<value>184, 80</value>
</data>
<data name="lblCombineVertical.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="lblCombineVertical.Text" xml:space="preserve">
<value>Combine images
(Vertical)</value>
</data>
<data name="lblCombineVertical.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;lblCombineVertical.Name" xml:space="preserve">
<value>lblCombineVertical</value>
</data>
<data name="&gt;&gt;lblCombineVertical.Type" xml:space="preserve">
<value>ShareX.HelpersLib.BlackStyleLabel, ShareX.HelpersLib, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lblCombineVertical.Parent" xml:space="preserve">
<value>pThumbnail</value>
</data>
<data name="&gt;&gt;lblCombineVertical.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="lblError.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top</value>
@ -172,13 +203,44 @@
<value>lblError</value>
</data>
<data name="&gt;&gt;lblError.Type" xml:space="preserve">
<value>ShareX.HelpersLib.BlackStyleLabel, ShareX.HelpersLib, Version=13.6.2.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.BlackStyleLabel, ShareX.HelpersLib, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lblError.Parent" xml:space="preserve">
<value>pThumbnail</value>
</data>
<data name="&gt;&gt;lblError.ZOrder" xml:space="preserve">
<value>0</value>
<value>1</value>
</data>
<data name="lblCombineHorizontal.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 14.25pt</value>
</data>
<data name="lblCombineHorizontal.Location" type="System.Drawing.Point, System.Drawing">
<value>40, 40</value>
</data>
<data name="lblCombineHorizontal.Size" type="System.Drawing.Size, System.Drawing">
<value>184, 80</value>
</data>
<data name="lblCombineHorizontal.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="lblCombineHorizontal.Text" xml:space="preserve">
<value>Combine images
(Horizontal)</value>
</data>
<data name="lblCombineHorizontal.Visible" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;lblCombineHorizontal.Name" xml:space="preserve">
<value>lblCombineHorizontal</value>
</data>
<data name="&gt;&gt;lblCombineHorizontal.Type" xml:space="preserve">
<value>ShareX.HelpersLib.BlackStyleLabel, ShareX.HelpersLib, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lblCombineHorizontal.Parent" xml:space="preserve">
<value>pThumbnail</value>
</data>
<data name="&gt;&gt;lblCombineHorizontal.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="pbProgress.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Left, Right</value>
@ -205,17 +267,20 @@
<value>pbProgress</value>
</data>
<data name="&gt;&gt;pbProgress.Type" xml:space="preserve">
<value>ShareX.HelpersLib.BlackStyleProgressBar, ShareX.HelpersLib, Version=13.6.2.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.HelpersLib.BlackStyleProgressBar, ShareX.HelpersLib, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pbProgress.Parent" xml:space="preserve">
<value>pThumbnail</value>
</data>
<data name="&gt;&gt;pbProgress.ZOrder" xml:space="preserve">
<value>1</value>
<value>3</value>
</data>
<data name="pbThumbnail.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="pbThumbnail.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="pbThumbnail.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 4</value>
</data>
@ -235,7 +300,7 @@
<value>pThumbnail</value>
</data>
<data name="&gt;&gt;pbThumbnail.ZOrder" xml:space="preserve">
<value>2</value>
<value>4</value>
</data>
<data name="pThumbnail.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 24</value>
@ -253,7 +318,7 @@
<value>pThumbnail</value>
</data>
<data name="&gt;&gt;pThumbnail.Type" xml:space="preserve">
<value>ShareX.TaskRoundedCornerPanel, ShareX, Version=13.6.2.0, Culture=neutral, PublicKeyToken=null</value>
<value>ShareX.TaskRoundedCornerPanel, ShareX, Version=14.1.3.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;pThumbnail.Parent" xml:space="preserve">
<value>$this</value>