107 lines
3.2 KiB
C#
107 lines
3.2 KiB
C#
using Quik.CommandMachine;
|
|
using Quik.Typography;
|
|
|
|
namespace Quik.Controls
|
|
{
|
|
public class Button : Control
|
|
{
|
|
public string Text { get; set; } = "Button";
|
|
public float Padding { get; set; } = 4.0f;
|
|
|
|
// public QuikFont Font { get; set; }
|
|
|
|
public QuikStrokeStyle NormalStroke { get; set; }
|
|
public QuikFillStyle NormalFill { get; set; }
|
|
public QuikStrokeStyle HoverStroke { get; set; }
|
|
public QuikFillStyle HoverFill { get; set; }
|
|
public QuikStrokeStyle ActiveStroke { get; set; }
|
|
public QuikFillStyle ActiveFill { get; set; }
|
|
|
|
private ButtonClass _class = ButtonClass.Normal;
|
|
|
|
private enum ButtonClass
|
|
{
|
|
Normal,
|
|
Hover,
|
|
Active
|
|
}
|
|
|
|
|
|
protected override void OnMouseEnter(MouseMoveEventArgs args)
|
|
{
|
|
base.OnMouseEnter(args);
|
|
|
|
if (_class == ButtonClass.Normal)
|
|
_class = ButtonClass.Hover;
|
|
}
|
|
|
|
protected override void OnMouseLeave(MouseMoveEventArgs args)
|
|
{
|
|
base.OnMouseLeave(args);
|
|
|
|
if (_class == ButtonClass.Hover)
|
|
_class = ButtonClass.Normal;
|
|
}
|
|
|
|
protected override void OnMouseDown(MouseButtonEventArgs args)
|
|
{
|
|
base.OnMouseDown(args);
|
|
|
|
if (_class == ButtonClass.Hover)
|
|
_class = ButtonClass.Active;
|
|
}
|
|
|
|
protected override void OnMouseUp(MouseButtonEventArgs args)
|
|
{
|
|
base.OnMouseUp(args);
|
|
|
|
if (_class == ButtonClass.Active)
|
|
{
|
|
_class = ButtonClass.Hover;
|
|
}
|
|
}
|
|
|
|
protected override void OnPaint(CommandQueue draw)
|
|
{
|
|
QRectangle bounds = AbsoluteBounds;
|
|
|
|
switch (_class)
|
|
{
|
|
default:
|
|
case ButtonClass.Normal:
|
|
draw.Rectangle(bounds);
|
|
// draw.Commands.Enqueue(new QuikCommandRectangle(bounds) {
|
|
// StrokeStyle = NormalStroke,
|
|
// FillStyle = NormalFill
|
|
// });
|
|
break;
|
|
// case ButtonClass.Hover:
|
|
// draw.Commands.Enqueue(new QuikCommandRectangle(bounds) {
|
|
// StrokeStyle = HoverStroke,
|
|
// FillStyle = HoverFill
|
|
// });
|
|
// break;
|
|
// case ButtonClass.Active:
|
|
// draw.Commands.Enqueue(new QuikCommandRectangle(bounds) {
|
|
// StrokeStyle = ActiveStroke,
|
|
// FillStyle = ActiveFill
|
|
// });
|
|
// break;
|
|
}
|
|
|
|
// Position the text so that it is centered.
|
|
// float ascender = Root.Context.DefaultFont.Ascender;
|
|
// float descender = -Root.Context.DefaultFont.Descender;
|
|
// QuikVec2 position =
|
|
// bounds.Min +
|
|
// new QuikVec2(
|
|
// Padding,
|
|
// (
|
|
// (bounds.Size.Y - ascender - descender) /
|
|
// 2)
|
|
// + descender);
|
|
|
|
// draw.PutText(Text, position);
|
|
}
|
|
}
|
|
} |