Properties:
Source Code:
Variables
Properties
Constructor
Overriding OnPaintBackground method
Drawing Image
Drawing Text
Other Helping Methods
For Complete source mail me at : sandeepparekh9@gmail.com
Source Code:
Variables
PointF pf;
SizeF sf = new SizeF();
public enum ImageAlign
{
Custom,
TopLeft,
TopCenter,
TopRight,
MiddleLeft,
MiddleCenter,
MiddleRight,
BottomLeft,
BottomCenter,
BottomRight
}
public enum TextAlign
{
Custom,
TopLeft,
TopCenter,
TopRight,
MiddleLeft,
MiddleCenter,
MiddleRight,
BottomLeft,
BottomCenter,
BottomRight
}
Properties
TextAlign _TextAlign = TextAlign.TopLeft;
[Browsable(true), Category("GradientPanel")]
public TextAlign TxtAlign
{
get { return _TextAlign; }
set { _TextAlign = value; Invalidate(); }
}
String _Text;
[Browsable(true), Category("GradientPanel")]
public override string Text
{
get { return _Text; }
set { _Text = value; Invalidate(); }
}
private float _TextMargin = 1.0f;
[Browsable(true), Category("GradientPanel")]
[DefaultValue("1.0f")]
public float TextMargin
{
get { return _TextMargin; }
set { _TextMargin = value; Invalidate(); }
}
ImageAlign _ImageAlign= ImageAlign.TopLeft;
[Browsable(true), Category("GradientPanel")]
public ImageAlign ImgAlign
{
get { return _ImageAlign; }
set { _ImageAlign = value; Invalidate(); }
}
Image _Image;
[Browsable(true), Category("GradientPanel")]
public Image Image
{
get { return _Image; }
set { _Image = value; Invalidate(); }
}
Point _ImageLocation = new Point(4, 4);
[Browsable(true), Category("GradientPanel")]
[DefaultValue("4,4")]
public Point ImageLocation
{
get { return _ImageLocation; }
set { _ImageLocation = value; Invalidate(); }
}
private float _ImageMargin = 1.0f;
[Browsable(true), Category("GradientPanel")]
[DefaultValue("1.0f")]
public float ImageMargin
{
get { return _ImageMargin; }
set { _ImageMargin = value; Invalidate(); }
}
int _BorderWidth = 1;
[Browsable(true), Category("GradientPanel")]
[DefaultValue(1)]
public int BorderWidth
{
get { return _BorderWidth; }
set { _BorderWidth = value; Invalidate(); }
}
int _ShadowOffSet = 5;
[Browsable(true), Category("GradientPanel")]
[DefaultValue(5)]
public int Shadow
{
get
{
return _ShadowOffSet;
}
set { _ShadowOffSet = Math.Abs(value); Invalidate(); }
}
int _RoundCornerRadius = 4;
[Browsable(true), Category("GradientPanel")]
[DefaultValue(4)]
public int CornerRadius
{
get { return _RoundCornerRadius; }
set { _RoundCornerRadius = Math.Abs(value); Invalidate(); }
}
Color _BorderColor = Color.Gray;
[Browsable(true), Category("GradientPanel")]
[DefaultValue("Color.Gray")]
public Color BorderColor
{
get { return _BorderColor; }
set { _BorderColor = value; Invalidate(); }
}
Color _GradientStartColor = Color.White;
[Browsable(true), Category("GradientPanel")]
[DefaultValue("Color.White")]
public Color GradientStartColor
{
get { return _GradientStartColor; }
set { _GradientStartColor = value; Invalidate(); }
}
Color _GradientEndColor = Color.Gray;
[Browsable(true), Category("GradientPanel")]
[DefaultValue("Color.Gray")]
public Color GradientEndColor
{
get { return _GradientEndColor; }
set { _GradientEndColor = value; Invalidate(); }
}
LinearGradientMode _LinearGradientMode = LinearGradientMode.Vertical;
[Browsable(true), Category("GradientPanel")]
public LinearGradientMode GradientMode
{
get { return _LinearGradientMode; }
set { _LinearGradientMode = value; Invalidate(); }
}
Boolean _DrawLine = false;
[Browsable(true), Category("GradientPanel")]
public Boolean DrawLine
{
get { return _DrawLine; }
set { _DrawLine = value; Invalidate(); }
}
Color _LineColor = Color.Black;
[Browsable(true), Category("GradientPanel")]
public Color LineColor
{
get { return _LineColor; }
set { _LineColor = value; Invalidate(); }
}
Constructor
public GradientPanelR()
{
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
InitializeComponent();
}
Overriding OnPaintBackground method
protected override void OnPaintBackground(PaintEventArgs e)
{
base.OnPaintBackground(e);
int tmpShadowOffSet = Math.Min(Math.Min(_ShadowOffSet, this.Width - 2), this.Height - 2);
int tmpSoundCornerRadius = Math.Min(Math.Min(_RoundCornerRadius, this.Width - 2), this.Height - 2);
if (this.Width > 1 && this.Height > 1)
{
e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
Rectangle rect = new Rectangle(0, 0, this.Width - tmpShadowOffSet - 1, this.Height - tmpShadowOffSet - 1);
Rectangle rectShadow = new Rectangle(tmpShadowOffSet, tmpShadowOffSet, this.Width - tmpShadowOffSet - 1, this.Height - tmpShadowOffSet - 1);
GraphicsPath graphPathShadow = GetRoundPath(rectShadow, tmpSoundCornerRadius);
GraphicsPath graphPath = GetRoundPath(rect, tmpSoundCornerRadius);
if (tmpSoundCornerRadius > 0)
{
using (PathGradientBrush gBrush = new PathGradientBrush(graphPathShadow))
{
gBrush.WrapMode = WrapMode.Clamp;
ColorBlend colorBlend = new ColorBlend(3);
colorBlend.Colors = new Color[]{Color.Transparent,
Color.FromArgb(180, Color.DimGray),
Color.FromArgb(180, Color.DimGray)};
colorBlend.Positions = new float[] { 0f, .1f, 1f };
gBrush.InterpolationColors = colorBlend;
e.Graphics.FillPath(gBrush, graphPathShadow);
}
}
// Draw backgroud
LinearGradientBrush brush = new LinearGradientBrush(rect,
this._GradientStartColor,
this._GradientEndColor,
GradientMode);
e.Graphics.FillPath(brush, graphPath);
e.Graphics.DrawPath(new Pen(Color.FromArgb(180, this._BorderColor), _BorderWidth), graphPath);
// Draw Image
if (_Image != null)
{
//e.Graphics.DrawImageUnscaled(_Image, _ImageLocation);
DrawImage(e.Graphics);
}
}
DrawText(e.Graphics);
}
Drawing Image
#region DrawImage
public void DrawImage(Graphics g)
{
if (this.Image != null && _ImageAlign != ImageAlign.Custom)
{
pf = new PointF(0, 0);
if (_ImageAlign == ImageAlign.TopLeft)
{
pf.X = 1; pf.Y = 1;
pf.X += _ImageMargin;
pf.Y += _ImageMargin;
if (_DrawLine)
{
// HatchBrush hbr = new HatchBrush(HatchStyle.ZigZag , _LineColor );
Pen P = new Pen(_LineColor, 3);
g.DrawLine(P, new PointF(Image.Width + pf.X + 2 + 10, Image.Height + pf.Y + 2), new PointF(Width - 10, Image.Height + pf.Y + 2));
}
}
if (_ImageAlign == ImageAlign.TopCenter)
{
pf.X = ((float)Width - (float)Image.Width) / 2;
pf.Y += _ImageMargin;
}
if (_ImageAlign == ImageAlign.TopRight)
{
pf.X = (float)Width - (float)Image.Width;
pf.Y = 1;
pf.X -= _ImageMargin;
pf.Y += _ImageMargin;
}
if (_ImageAlign == ImageAlign.MiddleLeft)
{
pf.X = 1;
pf.Y = ((float)Height - (float)Image.Height) / 2;
pf.X += _ImageMargin;
}
if (_ImageAlign == ImageAlign.MiddleCenter)
{
pf.X = ((float)Width - (float)Image.Width) / 2;
pf.Y = ((float)Height - (float)Image.Height) / 2;
}
if (_ImageAlign == ImageAlign.MiddleRight)
{
pf.X = (float)Width - (float)Image.Width;
pf.Y = ((float)Height - (float)Image.Height) / 2;
pf.X -= _ImageMargin;
}
if (_ImageAlign == ImageAlign.BottomLeft)
{
pf.X = 1;
pf.Y = ((float)Height - (float)Image.Height);
pf.X += _ImageMargin;
pf.Y -= _ImageMargin;
}
if (_ImageAlign == ImageAlign.BottomCenter)
{
pf.X = ((float)Width - (float)Image.Width) / 2;
pf.Y = ((float)Height - (float)Image.Height);
pf.Y -= _ImageMargin;
}
if (_ImageAlign == ImageAlign.BottomRight)
{
pf.X = (float)Width - (float)Image.Width;
pf.Y = ((float)Height - (float)Image.Height);
pf.X -= _ImageMargin;
pf.Y -= _ImageMargin;
}
g.DrawImage(this.Image, pf);
}
if (this.Image != null && _ImageAlign == ImageAlign.Custom)
{
pf = new PointF(0, 0);
pf.X = _ImageLocation.X ;
pf.Y = _ImageLocation.Y;
g.DrawImage(this.Image, pf);
}
}
#endregion
Drawing Text
#region DrawText
public void DrawText(Graphics g)
{
SolidBrush b = new SolidBrush(this.ForeColor);
pf = new PointF();
sf = g.MeasureString(this.Text, this.Font);
//calculate textalign
if (_TextAlign == TextAlign.TopLeft)
{
pf.X = 1 + _TextMargin ; pf.Y = 1 + _TextMargin ;
}
if (this._TextAlign == TextAlign.TopCenter)
{
pf.X = ((float)Width - sf.Width) / 2;
pf.Y =1 + _TextMargin ;
}
if (this._TextAlign == TextAlign.TopRight)
{
pf.X = (float)Width - sf.Width - _TextMargin ;
pf.Y = 1 + _TextMargin ;
}
if (this._TextAlign == TextAlign.MiddleLeft)
{
pf.X = 1 + _TextMargin ;
pf.Y =( (float)Height - sf.Height) / 2;
}
if (this._TextAlign == TextAlign.MiddleCenter)
{
pf.X = ((float)Width - sf.Width) / 2;
pf.Y = ((float)Height - sf.Height) / 2;
}
if (this._TextAlign == TextAlign.MiddleRight)
{
pf.X = (float)Width - sf.Width - _TextMargin ;
pf.Y = ((float)Height - sf.Height) / 2;
}
if (this._TextAlign == TextAlign.BottomLeft)
{
pf.X = 1 + _TextMargin ;
pf.Y = ((float)Height - sf.Height) - _TextMargin ;
}
if (this._TextAlign == TextAlign.BottomCenter)
{
pf.X = ((float)Width - sf.Width) / 2;
pf.Y = ((float)Height - sf.Height) - _TextMargin ;
}
if (this._TextAlign == TextAlign.BottomRight)
{
pf.X = (float)Width - sf.Width - _TextMargin;
pf.Y = ((float)Height - sf.Height) - _TextMargin ;
}
//g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias ;
g.DrawString(this.Text, this.Font, b, pf);
}
#endregion
Other Helping Methods
public static GraphicsPath GetRoundPath(Rectangle r, int depth)
{
GraphicsPath graphPath = new GraphicsPath();
graphPath.AddArc(r.X, r.Y, depth, depth, 180, 90);
graphPath.AddArc(r.X + r.Width - depth, r.Y, depth, depth, 270, 90);
graphPath.AddArc(r.X + r.Width - depth, r.Y + r.Height - depth, depth, depth, 0, 90);
graphPath.AddArc(r.X, r.Y + r.Height - depth, depth, depth, 90, 90);
graphPath.AddLine(r.X, r.Y + r.Height - depth, r.X, r.Y + depth / 2);
return graphPath;
}
For Complete source mail me at : sandeepparekh9@gmail.com
1 comments:
adding gradient background with Panel WinForms control
Post a Comment