Mega Code Archive

 
Categories / C# / 2D Graphics
 

Gradient Label Host

/* User Interfaces in C#: Windows Forms and Custom Controls by Matthew MacDonald Publisher: Apress ISBN: 1590590457 */ using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Design; using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace GradientLabelHost {     /// <summary>     /// Summary description for GradientLabelHost.     /// </summary>     public class GradientLabelHost : System.Windows.Forms.Form     {         private GradientLabel gradientLabel1;         /// <summary>         /// Required designer variable.         /// </summary>         private System.ComponentModel.Container components = null;         public GradientLabelHost()         {             //             // Required for Windows Form Designer support             //             InitializeComponent();             //             // TODO: Add any constructor code after InitializeComponent call             //         }         /// <summary>         /// Clean up any resources being used.         /// </summary>         protected override void Dispose( bool disposing )         {             if( disposing )             {                 if (components != null)                  {                     components.Dispose();                 }             }             base.Dispose( disposing );         }         #region Windows Form Designer generated code         /// <summary>         /// Required method for Designer support - do not modify         /// the contents of this method with the code editor.         /// </summary>         private void InitializeComponent()         {             this.gradientLabel1 = new GradientLabel();             this.SuspendLayout();             //              // gradientLabel1             //              this.gradientLabel1.Dock = System.Windows.Forms.DockStyle.Fill;             this.gradientLabel1.Font = new System.Drawing.Font("Tahoma", 36F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));             this.gradientLabel1.ForeColor = System.Drawing.Color.White;             this.gradientLabel1.GradientFill.ColorA = System.Drawing.SystemColors.Info;             this.gradientLabel1.GradientFill.ColorB = System.Drawing.Color.DarkViolet;             this.gradientLabel1.GradientFill.GradientFillStyle = System.Drawing.Drawing2D.LinearGradientMode.BackwardDiagonal;             this.gradientLabel1.Name = "gradientLabel1";             this.gradientLabel1.Size = new System.Drawing.Size(596, 118);             this.gradientLabel1.TabIndex = 0;             this.gradientLabel1.Text = "Gradient Label Test";             //              // GradientLabelHost             //              this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);             this.ClientSize = new System.Drawing.Size(596, 118);             this.Controls.AddRange(new System.Windows.Forms.Control[] {                                                                           this.gradientLabel1});             this.Name = "GradientLabelHost";             this.Text = "GradientLabelHost";             this.ResumeLayout(false);         }         #endregion         /// <summary>         /// The main entry point for the application.         /// </summary>         [STAThread]         static void Main()          {             Application.Run(new GradientLabelHost());         }     }     /// <summary>     /// Summary description for GradientLabel.     /// </summary>     public class GradientLabel : System.Windows.Forms.UserControl     {         /// <summary>          /// Required designer variable.         /// </summary>         private System.ComponentModel.Container components = null;         public GradientLabel()         {             // This call is required by the Windows.Forms Form Designer.             InitializeComponent();             // TODO: Add any initialization after the InitForm call         }         /// <summary>          /// Clean up any resources being used.         /// </summary>         protected override void Dispose( bool disposing )         {             if( disposing )             {                 if(components != null)                 {                     components.Dispose();                 }             }             base.Dispose( disposing );         }         #region Component Designer generated code         /// <summary>          /// Required method for Designer support - do not modify          /// the contents of this method with the code editor.         /// </summary>         private void InitializeComponent()         {             //              // GradientLabel             //              this.Name = "GradientLabel";             this.Size = new System.Drawing.Size(372, 128);             this.Load += new System.EventHandler(this.GradientLabel_Load);             gradient.GradientChanged += new EventHandler(GradientChanged);         }         #endregion         private string text;         private GradientFill gradient = new GradientFill();         [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]         public GradientFill GradientFill         {             get             {                 return gradient;             }             set             {                 gradient = value;                 gradient.GradientChanged += new EventHandler(GradientChanged);                 this.Invalidate();             }         }         private void GradientLabel_Load(object sender, System.EventArgs e)         {             this.ResizeRedraw=true;         }         [Browsable(true),         DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]          public override string Text         {             get             {                 return text;             }             set             {                 text = value;                 this.Invalidate();             }         }         protected override void OnPaintBackground(             System.Windows.Forms.PaintEventArgs e)         {             LinearGradientBrush brush = new LinearGradientBrush(e.ClipRectangle, gradient.ColorA,                                      gradient.ColorB, gradient.GradientFillStyle);             // Draw the gradient background.             e.Graphics.FillRectangle(brush, e.ClipRectangle);         }         protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)         {             base.OnPaint(e);             // Draw the label text.             e.Graphics.DrawString(text, this.Font, new SolidBrush(this.ForeColor), 0, 0);         }         private void GradientChanged(object sender, EventArgs e)         {             this.Invalidate();         }     }     [TypeConverter(typeof(ExpandableObjectConverter)),      Editor(typeof(GradientFillEditor), typeof(UITypeEditor))]     public class GradientFill     {         private Color colorA = Color.LightBlue;         private Color colorB = Color.Purple;         private LinearGradientMode gradientStyle= LinearGradientMode.ForwardDiagonal;              public event EventHandler GradientChanged;         public Color ColorA         {             get             {                 return colorA;             }             set             {                 colorA = value;                 OnGradientChanged(new EventArgs());             }         }         public Color ColorB         {             get             {                 return colorB;             }             set             {                 colorB = value;                 OnGradientChanged(new EventArgs());             }         }         [System.ComponentModel.RefreshProperties(RefreshProperties.Repaint)]         public LinearGradientMode GradientFillStyle         {             get             {                 return gradientStyle;             }             set             {                 gradientStyle = value;                 OnGradientChanged(new EventArgs());             }         }         private void OnGradientChanged(EventArgs e)         {             if (GradientChanged != null)             {                 GradientChanged(this, e);             }         }     }     public class GradientFillEditor : UITypeEditor     {         public override bool GetPaintValueSupported(             System.ComponentModel.ITypeDescriptorContext context)         {             return true;         }         public override void PaintValue(             System.Drawing.Design.PaintValueEventArgs e)         {             GradientFill fill = (GradientFill)e.Value;             LinearGradientBrush brush = new LinearGradientBrush(e.Bounds,                 fill.ColorA, fill.ColorB, fill.GradientFillStyle);             // Paint the thumbnail.             e.Graphics.FillRectangle(brush, e.Bounds);         }     } }