Login Register






[C#] HCButton Class filter_list
Author
Message
[C#] HCButton Class #2
Preview *Note: Gif is actually really f*cked up. The button looks nothing like that almost with the gradient. And much sharper of course. Smile
[Image: Yrf6Hkm.gif]

Source
Code:
// HCButton - (c)Arkphaze // Released: May 09/2013 // http://hackcommunity.net using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; sealed class HCButton : Button { private readonly SolidBrush _pressedBgBrush = new SolidBrush(Color.FromArgb(20, 20, 20)); private readonly Pen _penTop = new Pen(Color.Black); private readonly Pen _penBorder = new Pen(Color.Black); private readonly SolidBrush _textBrush = new SolidBrush(Color.White); private readonly Color _normalTopLine = Color.FromArgb(65, 65, 65); private readonly Color _normalSideEdge = Color.FromArgb(40, 40, 40); private readonly Color _normalTopGrd = Color.FromArgb(33, 33, 33); private readonly Color _normalBottomGrd = Color.FromArgb(28, 28, 28); private readonly Color _hoverTopLine = Color.FromArgb(75, 75, 75); private readonly Color _hoverSideEdge = Color.FromArgb(50, 50, 50); private readonly Color _hoverTopGrd = Color.FromArgb(54, 54, 54); private readonly Color _hoverBottomGrd = Color.FromArgb(50, 50, 50); private readonly Color _pressedSideEdge = Color.FromArgb(35, 35, 35); private MouseState _mouseState = MouseState.Normal; enum MouseState { Normal, Hover, Pressed } public HCButton() { DoubleBuffered = true; } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); e.Graphics.Clear(Color.Black); e.Graphics.SmoothingMode = SmoothingMode.HighQuality; switch (_mouseState) { case MouseState.Hover: using ( LinearGradientBrush lgb = new LinearGradientBrush(Point.Empty, new Point(0, Height), _hoverTopGrd, _hoverBottomGrd)) { e.Graphics.FillRectangle(lgb, DisplayRectangle); } _penTop.Color = _hoverTopLine; _penBorder.Color = _hoverSideEdge; _textBrush.Color = Color.White; break; case MouseState.Pressed: e.Graphics.FillRectangle(_pressedBgBrush, DisplayRectangle); _penTop.Color = _pressedSideEdge; _penBorder.Color = _pressedSideEdge; _textBrush.Color = Color.FromArgb(145, 145, 145); break; default: using ( LinearGradientBrush lgb = new LinearGradientBrush(Point.Empty, new Point(0, Height), _normalTopGrd, _normalBottomGrd)) { e.Graphics.FillRectangle(lgb, DisplayRectangle); } _penTop.Color = _normalTopLine; _penBorder.Color = _normalSideEdge; _textBrush.Color = Color.White; break; } // Draw top line e.Graphics.DrawLine(_penTop, 0f, 0f, Width, 0f); // Draw other border lines e.Graphics.DrawLine(_penBorder, 0f, 0f, 0f, Height - 1); // Left e.Graphics.DrawLine(_penBorder, 0f, Height - 1, Width - 1, Height - 1); // Bottom e.Graphics.DrawLine(_penBorder, Width - 1, 0f, Width - 1, Height - 1); // Right DrawText(e.Graphics); } protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); _mouseState = MouseState.Pressed; } protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); _mouseState = MouseState.Hover; Invalidate(); } protected override void OnMouseMove(MouseEventArgs mevent) { base.OnMouseMove(mevent); _mouseState = MouseState.Hover; } protected override void OnMouseLeave(EventArgs e) { base.OnMouseLeave(e); _mouseState = MouseState.Normal; } private void DrawText(Graphics graphics) { SizeF textSize = graphics.MeasureString(Text, Font); graphics.DrawString(Text, Font, _textBrush, Width / 2 - textSize.Width / 2, Height / 2 - textSize.Height / 2); } }

Simple, clean, and nice looking... Designed for darker backgrounds. :ok:
ArkPhaze
"Object oriented way to get rich? Inheritance"
Getting Started: C/C++ | Common Mistakes
[ Assembly / C++ / .NET / Haskell / J Programmer ]

Reply





Messages In This Thread
[C#] HCButton Class - by ArkPhaze - 05-10-2013, 03:22 AM
[C#] HCButton Class - by ArkPhaze - 05-10-2013, 03:22 AM