using System.Drawing;
using System.Drawing.Text;
using System.Windows.Forms;
using Microsoft.Drawing;
namespace Microsoft.Windows.Forms
{
///
/// 虚拟按钮
///
public class UIButton : UIControl
{
private Color m_HoveredBackColor = DefaultTheme.DarkDarkTransparent;
///
/// 鼠标悬停背景色
///
public virtual Color HoveredBackColor
{
get
{
return this.m_HoveredBackColor;
}
set
{
if (value != this.m_HoveredBackColor)
{
this.m_HoveredBackColor = value;
this.Invalidate();
}
}
}
private Color m_PressedBackColor = DefaultTheme.DarkTransparent;
///
/// 鼠标按下背景色
///
public virtual Color PressedBackColor
{
get
{
return this.m_PressedBackColor;
}
set
{
if (value != this.m_PressedBackColor)
{
this.m_PressedBackColor = value;
this.Invalidate();
}
}
}
private Image m_Image;
///
/// 图片
///
public virtual Image Image
{
get
{
return this.m_Image;
}
set
{
if (value != this.m_Image)
{
this.m_Image = value;
this.Invalidate();
}
}
}
private Image m_ImageHovered;
///
/// 图片
///
public virtual Image ImageHovered
{
get
{
return this.m_ImageHovered;
}
set
{
if (value != this.m_ImageHovered)
{
this.m_ImageHovered = value;
this.Invalidate();
}
}
}
private Image m_ImagePressed;
///
/// 图片
///
public virtual Image ImagePressed
{
get
{
return this.m_ImagePressed;
}
set
{
if (value != this.m_ImagePressed)
{
this.m_ImagePressed = value;
this.Invalidate();
}
}
}
private Image m_ImageDisabled;
///
/// 图片
///
public virtual Image ImageDisabled
{
get
{
return this.m_ImageDisabled;
}
set
{
if (value != this.m_ImageDisabled)
{
this.m_ImageDisabled = value;
this.Invalidate();
}
}
}
private Size m_ImageSize;
///
/// 图片大小
///
public virtual Size ImageSize
{
get
{
return this.m_ImageSize;
}
set
{
if (value != this.m_ImageSize)
{
this.m_ImageSize = value;
this.Invalidate();
}
}
}
private ContentAlignment m_ImageAlign = ContentAlignment.MiddleCenter;
///
/// 图片对齐方式
///
public virtual ContentAlignment ImageAlign
{
get
{
return this.m_ImageAlign;
}
set
{
if (value != this.m_ImageAlign)
{
this.m_ImageAlign = value;
this.Invalidate();
}
}
}
private TextRenderingHint m_TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
///
/// 文本呈现质量
///
public virtual TextRenderingHint TextRenderingHint
{
get
{
return this.m_TextRenderingHint;
}
set
{
if (value != this.m_TextRenderingHint)
{
this.m_TextRenderingHint = value;
this.Invalidate();
}
}
}
private ContentAlignment m_TextAlign = ContentAlignment.MiddleCenter;
///
/// 文本对齐方式
///
public virtual ContentAlignment TextAlign
{
get
{
return this.m_TextAlign;
}
set
{
if (value != this.m_TextAlign)
{
this.m_TextAlign = value;
this.Invalidate();
}
}
}
private TextImageRelation m_TextImageRelation = TextImageRelation.ImageBeforeText;
///
/// 文本图片关系
///
public virtual TextImageRelation TextImageRelation
{
get
{
return this.m_TextImageRelation;
}
set
{
if (value != this.m_TextImageRelation)
{
this.m_TextImageRelation = value;
this.Invalidate();
}
}
}
///
///
///
///
protected override State GetState()
{
if (this.Enabled)
{
if (this.Capture)
{
if ((Control.MouseButtons & MouseButtons.Left) != 0)//左键按下
return State.Pressed;
else
return State.Hovered;
}
else
{
return State.Normal;
}
}
else
{
return State.Disabled;
}
}
///
/// 构造函数
///
public UIButton()
{
this.BackColor = DefaultTheme.Transparent;
}
///
/// 渲染控件
///
/// 数据
protected override void RenderSelf(PaintEventArgs e)
{
//准备
Graphics g = e.Graphics;
Rectangle rect = RectangleEx.Subtract(this.ClientRectangle, this.Padding);
//渲染
this.Sprite.BorderVisibleStyle = BorderVisibleStyle.None;
this.Sprite.BackColor = this.BackColor;
this.Sprite.BackColorHovered = this.HoveredBackColor;
this.Sprite.BackColorPressed = this.PressedBackColor;
this.Sprite.Image = this.Image;
this.Sprite.ImageHovered = this.ImageHovered;
this.Sprite.ImagePressed = this.ImagePressed;
this.Sprite.ImageDisabled = this.ImageDisabled;
this.Sprite.ImageSize = this.ImageSize;
this.Sprite.ImageAlign = this.ImageAlign;
this.Sprite.Font = this.Font;
this.Sprite.ForeColor = this.ForeColor;
this.Sprite.ForeColorHovered = this.ForeColor;
this.Sprite.ForeColorPressed = this.ForeColor;
this.Sprite.ForeColorDisabled = this.ForeColor;
this.Sprite.Text = this.Text;
this.Sprite.TextRenderingHint = this.TextRenderingHint;
this.Sprite.TextAlign = this.TextAlign;
this.Sprite.TextImageRelation = this.TextImageRelation;
this.Sprite.State = this.State;
this.Sprite.BeginRender(g);
this.Sprite.RenderBackColor(rect);
this.Sprite.RenderTextAndImage(rect);
this.Sprite.EndRender();
}
}
}