mirror of
https://github.com/mRemoteNG/mRemoteNG.git
synced 2026-02-17 22:11:48 +08:00
114 lines
4.2 KiB
C#
114 lines
4.2 KiB
C#
using mRemoteNG.Themes;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Drawing.Drawing2D;
|
|
using System.Drawing.Text;
|
|
using System.Windows.Forms;
|
|
|
|
|
|
namespace mRemoteNG.UI.Controls.Base
|
|
{
|
|
[ToolboxBitmap(typeof(Button))]
|
|
public class NGButton : Button
|
|
{
|
|
private ThemeManager _themeManager ;
|
|
|
|
public enum MouseState
|
|
{
|
|
HOVER,
|
|
DOWN,
|
|
OUT
|
|
}
|
|
|
|
public MouseState _mice { get; set; }
|
|
|
|
protected override void OnCreateControl()
|
|
{
|
|
base.OnCreateControl();
|
|
if (Tools.DesignModeTest.IsInDesignMode(this)) return;
|
|
_themeManager = ThemeManager.getInstance();
|
|
_mice = MouseState.OUT;
|
|
MouseEnter += (sender, args) =>
|
|
{
|
|
_mice = MouseState.HOVER;
|
|
Invalidate();
|
|
};
|
|
MouseLeave += (sender, args) =>
|
|
{
|
|
_mice = MouseState.OUT;
|
|
Invalidate();
|
|
};
|
|
MouseDown += (sender, args) =>
|
|
{
|
|
if (args.Button == MouseButtons.Left)
|
|
{
|
|
_mice = MouseState.DOWN;
|
|
Invalidate();
|
|
}
|
|
};
|
|
MouseUp += (sender, args) =>
|
|
{
|
|
_mice = MouseState.OUT;
|
|
|
|
Invalidate();
|
|
};
|
|
}
|
|
|
|
protected override void OnPaint(PaintEventArgs e)
|
|
{
|
|
if (Tools.DesignModeTest.IsInDesignMode(this))
|
|
{
|
|
base.OnPaint(e);
|
|
return;
|
|
}
|
|
Color back;
|
|
Color fore;
|
|
Color border;
|
|
if (Enabled)
|
|
{
|
|
|
|
switch (_mice)
|
|
{
|
|
case MouseState.HOVER:
|
|
back = _themeManager.ActiveTheme.ExtendedPalette.getColor("Button_Hover_Background");
|
|
fore = _themeManager.ActiveTheme.ExtendedPalette.getColor("Button_Hover_Foreground");
|
|
border = _themeManager.ActiveTheme.ExtendedPalette.getColor("Button_Hover_Border");
|
|
break;
|
|
case MouseState.DOWN:
|
|
back = _themeManager.ActiveTheme.ExtendedPalette.getColor("Button_Pressed_Background");
|
|
fore = _themeManager.ActiveTheme.ExtendedPalette.getColor("Button_Pressed_Foreground");
|
|
border = _themeManager.ActiveTheme.ExtendedPalette.getColor("Button_Pressed_Border");
|
|
break;
|
|
default:
|
|
back = _themeManager.ActiveTheme.ExtendedPalette.getColor("Button_Background");
|
|
fore = _themeManager.ActiveTheme.ExtendedPalette.getColor("Button_Foreground");
|
|
border = _themeManager.ActiveTheme.ExtendedPalette.getColor("Button_Border");
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
back = _themeManager.ActiveTheme.ExtendedPalette.getColor("Button_Disabled_Background");
|
|
fore = _themeManager.ActiveTheme.ExtendedPalette.getColor("Button_Disabled_Foreground");
|
|
border = _themeManager.ActiveTheme.ExtendedPalette.getColor("Button_Disabled_Border");
|
|
}
|
|
|
|
|
|
|
|
e.Graphics.FillRectangle(new SolidBrush(back), e.ClipRectangle);
|
|
e.Graphics.DrawRectangle(new Pen(border, 1), 0, 0, base.Width - 1, base.Height - 1);
|
|
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
|
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
|
|
//Warning. the app doesnt use many images in buttons so this positions are kinda tailored just for the used by the app
|
|
//not by general usage of iamges in buttons
|
|
if (Image != null)
|
|
{
|
|
SizeF stringSize = e.Graphics.MeasureString(Text, Font);
|
|
|
|
e.Graphics.DrawImageUnscaled(Image, Width / 2 - (int)stringSize.Width / 2 - Image.Width + 2, Height / 2 - Image.Height/2);
|
|
}
|
|
TextRenderer.DrawText(e.Graphics, this.Text, Font, ClientRectangle, fore, TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter);
|
|
}
|
|
}
|
|
}
|