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(QuikDraw draw) { QuikRectangle bounds = AbsoluteBounds; switch (_class) { default: case ButtonClass.Normal: 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); } } }