Added gradient presets list to gradient picker form

This commit is contained in:
Jaex 2020-07-27 18:45:34 +03:00
parent 67c638dc1d
commit d1614950ae
4 changed files with 250 additions and 76 deletions

View file

@ -51,6 +51,11 @@ public GradientInfo()
Colors = new List<GradientStop>();
}
public GradientInfo(params GradientStop[] colors) : this()
{
Colors = colors.ToList();
}
public void Sort()
{
Colors.Sort((x, y) => x.Location.CompareTo(y.Location));
@ -110,6 +115,21 @@ public LinearGradientBrush GetGradientBrush(Rectangle rect)
return brush;
}
public Bitmap CreateGradientPreview(int width, int height)
{
Bitmap bmp = new Bitmap(width, height);
Rectangle rect = new Rectangle(0, 0, width, height);
using (Graphics g = Graphics.FromImage(bmp))
using (LinearGradientBrush brush = GetGradientBrush(rect))
{
g.FillRectangle(brush, rect);
g.DrawRectangleProper(Pens.Black, rect);
}
return bmp;
}
public override string ToString()
{
return "Gradient";

View file

@ -30,8 +30,6 @@ private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GradientPickerForm));
this.lvGradientPoints = new ShareX.HelpersLib.MyListView();
this.chLocation = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.ilColors = new System.Windows.Forms.ImageList(this.components);
this.btnAdd = new System.Windows.Forms.Button();
this.btnRemove = new System.Windows.Forms.Button();
@ -44,32 +42,17 @@ private void InitializeComponent()
this.pbPreview = new System.Windows.Forms.PictureBox();
this.lblPreview = new System.Windows.Forms.Label();
this.btnReverse = new System.Windows.Forms.Button();
this.lblPresets = new System.Windows.Forms.Label();
this.ilPresets = new System.Windows.Forms.ImageList(this.components);
this.lvPresets = new System.Windows.Forms.ListView();
this.chGradient = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.cbtnCurrentColor = new ShareX.HelpersLib.ColorButton();
this.lvGradientPoints = new ShareX.HelpersLib.MyListView();
this.chLocation = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
((System.ComponentModel.ISupportInitialize)(this.nudLocation)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbPreview)).BeginInit();
this.SuspendLayout();
//
// lvGradientPoints
//
this.lvGradientPoints.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chLocation});
this.lvGradientPoints.DisableDeselect = true;
this.lvGradientPoints.FullRowSelect = true;
this.lvGradientPoints.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.lvGradientPoints.HideSelection = false;
resources.ApplyResources(this.lvGradientPoints, "lvGradientPoints");
this.lvGradientPoints.MultiSelect = false;
this.lvGradientPoints.Name = "lvGradientPoints";
this.lvGradientPoints.SmallImageList = this.ilColors;
this.lvGradientPoints.UseCompatibleStateImageBehavior = false;
this.lvGradientPoints.View = System.Windows.Forms.View.Details;
this.lvGradientPoints.SelectedIndexChanged += new System.EventHandler(this.lvGradientPoints_SelectedIndexChanged);
this.lvGradientPoints.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lvGradientPoints_MouseDoubleClick);
//
// chLocation
//
resources.ApplyResources(this.chLocation, "chLocation");
//
// ilColors
//
this.ilColors.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
@ -149,6 +132,36 @@ private void InitializeComponent()
this.btnReverse.UseVisualStyleBackColor = true;
this.btnReverse.Click += new System.EventHandler(this.btnReverse_Click);
//
// lblPresets
//
resources.ApplyResources(this.lblPresets, "lblPresets");
this.lblPresets.Name = "lblPresets";
//
// ilPresets
//
this.ilPresets.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit;
resources.ApplyResources(this.ilPresets, "ilPresets");
this.ilPresets.TransparentColor = System.Drawing.Color.Transparent;
//
// lvPresets
//
this.lvPresets.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chGradient});
this.lvPresets.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.lvPresets.LargeImageList = this.ilPresets;
resources.ApplyResources(this.lvPresets, "lvPresets");
this.lvPresets.MultiSelect = false;
this.lvPresets.Name = "lvPresets";
this.lvPresets.SmallImageList = this.ilPresets;
this.lvPresets.TileSize = new System.Drawing.Size(110, 28);
this.lvPresets.UseCompatibleStateImageBehavior = false;
this.lvPresets.View = System.Windows.Forms.View.Tile;
this.lvPresets.SelectedIndexChanged += new System.EventHandler(this.lvPresets_SelectedIndexChanged);
//
// chGradient
//
resources.ApplyResources(this.chGradient, "chGradient");
//
// cbtnCurrentColor
//
this.cbtnCurrentColor.Color = System.Drawing.Color.White;
@ -157,12 +170,35 @@ private void InitializeComponent()
this.cbtnCurrentColor.UseVisualStyleBackColor = true;
this.cbtnCurrentColor.ColorChanged += new ShareX.HelpersLib.ColorButton.ColorChangedEventHandler(this.cbtnCurrentColor_ColorChanged);
//
// lvGradientPoints
//
this.lvGradientPoints.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.chLocation});
this.lvGradientPoints.DisableDeselect = true;
this.lvGradientPoints.FullRowSelect = true;
this.lvGradientPoints.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.lvGradientPoints.HideSelection = false;
resources.ApplyResources(this.lvGradientPoints, "lvGradientPoints");
this.lvGradientPoints.MultiSelect = false;
this.lvGradientPoints.Name = "lvGradientPoints";
this.lvGradientPoints.SmallImageList = this.ilColors;
this.lvGradientPoints.UseCompatibleStateImageBehavior = false;
this.lvGradientPoints.View = System.Windows.Forms.View.Details;
this.lvGradientPoints.SelectedIndexChanged += new System.EventHandler(this.lvGradientPoints_SelectedIndexChanged);
this.lvGradientPoints.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.lvGradientPoints_MouseDoubleClick);
//
// chLocation
//
resources.ApplyResources(this.chLocation, "chLocation");
//
// GradientPickerForm
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.BackColor = System.Drawing.SystemColors.Window;
this.CancelButton = this.btnCancel;
this.Controls.Add(this.lvPresets);
this.Controls.Add(this.lblPresets);
this.Controls.Add(this.btnReverse);
this.Controls.Add(this.pbPreview);
this.Controls.Add(this.lblPreview);
@ -203,5 +239,9 @@ private void InitializeComponent()
private System.Windows.Forms.Label lblPreview;
private System.Windows.Forms.Button btnReverse;
private System.Windows.Forms.ImageList ilColors;
private System.Windows.Forms.Label lblPresets;
private System.Windows.Forms.ImageList ilPresets;
private System.Windows.Forms.ListView lvPresets;
private System.Windows.Forms.ColumnHeader chGradient;
}
}

View file

@ -45,24 +45,48 @@ public GradientPickerForm(GradientInfo gradient)
cbGradientType.Items.AddRange(Helpers.GetEnumNamesProper<LinearGradientMode>());
cbGradientType.SelectedIndex = (int)Gradient.Type;
UpdateGradientList();
if (lvGradientPoints.Items.Count > 0)
UpdateGradientList(true);
AddPresets();
}
private void AddPresets()
{
GradientInfo[] gradients = new GradientInfo[]
{
lvGradientPoints.SelectedIndex = 0;
new GradientInfo(new GradientStop(Color.FromArgb(184, 11, 195), 0f), new GradientStop(Color.FromArgb(98, 54, 255), 100f)),
new GradientInfo(new GradientStop(Color.FromArgb(255, 3, 135), 0f), new GradientStop(Color.FromArgb(255, 143, 3), 100f)),
new GradientInfo(new GradientStop(Color.FromArgb(0, 187, 138), 0f), new GradientStop(Color.FromArgb(0, 105, 163), 100f))
};
for (int i = 0; i < gradients.Length; i++)
{
GradientInfo gradient = gradients[i];
gradient.Type = Gradient.Type;
ilPresets.Images.Add(gradient.CreateGradientPreview(100, 25));
ListViewItem lvi = new ListViewItem();
lvi.ImageIndex = i;
lvi.Tag = gradient;
lvPresets.Items.Add(lvi);
}
}
private void UpdateGradientList()
private void UpdateGradientList(bool selectFirst = false)
{
isReady = false;
Gradient.Sort();
isReady = false;
lvGradientPoints.Items.Clear();
foreach (GradientStop gradientStop in Gradient.Colors)
{
AddGradientStop(gradientStop);
}
if (selectFirst && lvGradientPoints.Items.Count > 0)
{
lvGradientPoints.SelectedIndex = 0;
}
isReady = true;
UpdatePreview();
}
@ -233,6 +257,21 @@ private void lvGradientPoints_MouseDoubleClick(object sender, MouseEventArgs e)
}
}
private void lvPresets_SelectedIndexChanged(object sender, EventArgs e)
{
if (isReady && lvPresets.SelectedItems.Count > 0)
{
ListViewItem lvi = lvPresets.SelectedItems[0];
GradientInfo gradientInfo = lvi.Tag as GradientInfo;
if (gradientInfo != null)
{
Gradient = gradientInfo;
UpdateGradientList(true);
lvi.Selected = false;
}
}
}
private void btnOK_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.OK;

View file

@ -117,41 +117,13 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="chLocation.Text" xml:space="preserve">
<value>Location</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="chLocation.Width" type="System.Int32, mscorlib">
<value>76</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="lvGradientPoints.Location" type="System.Drawing.Point, System.Drawing">
<value>128, 8</value>
</data>
<data name="lvGradientPoints.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 160</value>
</data>
<metadata name="ilColors.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="ilColors.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>16, 16</value>
</data>
<data name="lvGradientPoints.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;lvGradientPoints.Name" xml:space="preserve">
<value>lvGradientPoints</value>
</data>
<data name="&gt;&gt;lvGradientPoints.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=13.1.1.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lvGradientPoints.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lvGradientPoints.ZOrder" xml:space="preserve">
<value>12</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnAdd.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@ -162,6 +134,7 @@
<data name="btnAdd.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 23</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="btnAdd.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
@ -178,7 +151,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnAdd.ZOrder" xml:space="preserve">
<value>10</value>
<value>12</value>
</data>
<data name="btnRemove.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@ -205,7 +178,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnRemove.ZOrder" xml:space="preserve">
<value>9</value>
<value>11</value>
</data>
<data name="nudLocation.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 144</value>
@ -229,7 +202,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;nudLocation.ZOrder" xml:space="preserve">
<value>8</value>
<value>10</value>
</data>
<data name="lblLocation.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -259,7 +232,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblLocation.ZOrder" xml:space="preserve">
<value>7</value>
<value>9</value>
</data>
<data name="cbGradientType.Location" type="System.Drawing.Point, System.Drawing">
<value>88, 176</value>
@ -280,7 +253,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;cbGradientType.ZOrder" xml:space="preserve">
<value>6</value>
<value>8</value>
</data>
<data name="lblGradientType.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -310,7 +283,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblGradientType.ZOrder" xml:space="preserve">
<value>5</value>
<value>7</value>
</data>
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@ -337,7 +310,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>4</value>
<value>6</value>
</data>
<data name="btnCancel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@ -364,7 +337,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnCancel.ZOrder" xml:space="preserve">
<value>3</value>
<value>5</value>
</data>
<data name="pbPreview.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@ -388,7 +361,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;pbPreview.ZOrder" xml:space="preserve">
<value>1</value>
<value>3</value>
</data>
<data name="lblPreview.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -418,7 +391,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblPreview.ZOrder" xml:space="preserve">
<value>2</value>
<value>4</value>
</data>
<data name="btnReverse.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@ -445,6 +418,69 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnReverse.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="lblPresets.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblPresets.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblPresets.Location" type="System.Drawing.Point, System.Drawing">
<value>213, 8</value>
</data>
<data name="lblPresets.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 13</value>
</data>
<data name="lblPresets.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="lblPresets.Text" xml:space="preserve">
<value>Presets:</value>
</data>
<data name="&gt;&gt;lblPresets.Name" xml:space="preserve">
<value>lblPresets</value>
</data>
<data name="&gt;&gt;lblPresets.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblPresets.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lblPresets.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<metadata name="ilPresets.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>109, 17</value>
</metadata>
<data name="ilPresets.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>100, 25</value>
</data>
<data name="chGradient.Text" xml:space="preserve">
<value>Gradient</value>
</data>
<data name="chGradient.Width" type="System.Int32, mscorlib">
<value>140</value>
</data>
<data name="lvPresets.Location" type="System.Drawing.Point, System.Drawing">
<value>216, 24</value>
</data>
<data name="lvPresets.Size" type="System.Drawing.Size, System.Drawing">
<value>136, 280</value>
</data>
<data name="lvPresets.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="&gt;&gt;lvPresets.Name" xml:space="preserve">
<value>lvPresets</value>
</data>
<data name="&gt;&gt;lvPresets.Type" xml:space="preserve">
<value>System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lvPresets.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lvPresets.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="cbtnCurrentColor.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
@ -472,7 +508,34 @@
<value>$this</value>
</data>
<data name="&gt;&gt;cbtnCurrentColor.ZOrder" xml:space="preserve">
<value>11</value>
<value>13</value>
</data>
<data name="chLocation.Text" xml:space="preserve">
<value>Location</value>
</data>
<data name="chLocation.Width" type="System.Int32, mscorlib">
<value>76</value>
</data>
<data name="lvGradientPoints.Location" type="System.Drawing.Point, System.Drawing">
<value>128, 8</value>
</data>
<data name="lvGradientPoints.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 160</value>
</data>
<data name="lvGradientPoints.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;lvGradientPoints.Name" xml:space="preserve">
<value>lvGradientPoints</value>
</data>
<data name="&gt;&gt;lvGradientPoints.Type" xml:space="preserve">
<value>ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=13.1.1.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;lvGradientPoints.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lvGradientPoints.ZOrder" xml:space="preserve">
<value>14</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
@ -481,19 +544,13 @@
<value>96, 96</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>219, 311</value>
<value>360, 311</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterScreen</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>ShareX - Gradient</value>
</data>
<data name="&gt;&gt;chLocation.Name" xml:space="preserve">
<value>chLocation</value>
</data>
<data name="&gt;&gt;chLocation.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<value>ShareX - Gradient picker</value>
</data>
<data name="&gt;&gt;ilColors.Name" xml:space="preserve">
<value>ilColors</value>
@ -501,6 +558,24 @@
<data name="&gt;&gt;ilColors.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;ilPresets.Name" xml:space="preserve">
<value>ilPresets</value>
</data>
<data name="&gt;&gt;ilPresets.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;chGradient.Name" xml:space="preserve">
<value>chGradient</value>
</data>
<data name="&gt;&gt;chGradient.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;chLocation.Name" xml:space="preserve">
<value>chLocation</value>
</data>
<data name="&gt;&gt;chLocation.Type" xml:space="preserve">
<value>System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>GradientPickerForm</value>
</data>