[C#] HCButton Class 05-10-2013, 03:22 AM
#1
Preview *Note: Gif is actually really f*cked up. The button looks nothing like that almost with the gradient. And much sharper of course. 
![[Image: Yrf6Hkm.gif]](http://i.imgur.com/Yrf6Hkm.gif)
Source
Simple, clean, and nice looking... Designed for darker backgrounds. :ok:

![[Image: Yrf6Hkm.gif]](http://i.imgur.com/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 ]
"Object oriented way to get rich? Inheritance"
Getting Started: C/C++ | Common Mistakes
[ Assembly / C++ / .NET / Haskell / J Programmer ]


![[+]](https://sinister.li/images/modern/collapse_collapsed.png)
![[Image: OilyCostlyEwe.gif]](http://fat.gfycat.com/OilyCostlyEwe.gif)

