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); } } }