diff --git a/ShareX.HelpersLib/Colors/GradientInfo.cs b/ShareX.HelpersLib/Colors/GradientInfo.cs index 10492cc91..4a75e086b 100644 --- a/ShareX.HelpersLib/Colors/GradientInfo.cs +++ b/ShareX.HelpersLib/Colors/GradientInfo.cs @@ -51,6 +51,11 @@ public GradientInfo() Colors = new List(); } + 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"; diff --git a/ShareX.HelpersLib/Forms/GradientPickerForm.Designer.cs b/ShareX.HelpersLib/Forms/GradientPickerForm.Designer.cs index 87dd20fcb..0cf535631 100644 --- a/ShareX.HelpersLib/Forms/GradientPickerForm.Designer.cs +++ b/ShareX.HelpersLib/Forms/GradientPickerForm.Designer.cs @@ -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; } } \ No newline at end of file diff --git a/ShareX.HelpersLib/Forms/GradientPickerForm.cs b/ShareX.HelpersLib/Forms/GradientPickerForm.cs index 94cd356ab..8921a4d95 100644 --- a/ShareX.HelpersLib/Forms/GradientPickerForm.cs +++ b/ShareX.HelpersLib/Forms/GradientPickerForm.cs @@ -45,24 +45,48 @@ public GradientPickerForm(GradientInfo gradient) cbGradientType.Items.AddRange(Helpers.GetEnumNamesProper()); 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; diff --git a/ShareX.HelpersLib/Forms/GradientPickerForm.resx b/ShareX.HelpersLib/Forms/GradientPickerForm.resx index 8fc975ac2..c64772f47 100644 --- a/ShareX.HelpersLib/Forms/GradientPickerForm.resx +++ b/ShareX.HelpersLib/Forms/GradientPickerForm.resx @@ -117,41 +117,13 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Location - - - - 76 - - - - 128, 8 - - - 80, 160 - 17, 17 + 16, 16 - - 8 - - - lvGradientPoints - - - ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=13.1.1.0, Culture=neutral, PublicKeyToken=null - - - $this - - - 12 - NoControl @@ -162,6 +134,7 @@ 112, 23 + 2 @@ -178,7 +151,7 @@ $this - 10 + 12 NoControl @@ -205,7 +178,7 @@ $this - 9 + 11 8, 144 @@ -229,7 +202,7 @@ $this - 8 + 10 True @@ -259,7 +232,7 @@ $this - 7 + 9 88, 176 @@ -280,7 +253,7 @@ $this - 6 + 8 True @@ -310,7 +283,7 @@ $this - 5 + 7 NoControl @@ -337,7 +310,7 @@ $this - 4 + 6 NoControl @@ -364,7 +337,7 @@ $this - 3 + 5 NoControl @@ -388,7 +361,7 @@ $this - 1 + 3 True @@ -418,7 +391,7 @@ $this - 2 + 4 NoControl @@ -445,6 +418,69 @@ $this + 2 + + + True + + + NoControl + + + 213, 8 + + + 45, 13 + + + 13 + + + Presets: + + + lblPresets + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + 109, 17 + + + 100, 25 + + + Gradient + + + 140 + + + 216, 24 + + + 136, 280 + + + 14 + + + lvPresets + + + System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 0 @@ -472,7 +508,34 @@ $this - 11 + 13 + + + Location + + + 76 + + + 128, 8 + + + 80, 160 + + + 8 + + + lvGradientPoints + + + ShareX.HelpersLib.MyListView, ShareX.HelpersLib, Version=13.1.1.0, Culture=neutral, PublicKeyToken=null + + + $this + + + 14 True @@ -481,19 +544,13 @@ 96, 96 - 219, 311 + 360, 311 CenterScreen - ShareX - Gradient - - - chLocation - - - System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + ShareX - Gradient picker ilColors @@ -501,6 +558,24 @@ System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ilPresets + + + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + chGradient + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + chLocation + + + System.Windows.Forms.ColumnHeader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + GradientPickerForm