Code/Elements/Widgets/Checkbox.cs
using Duccsoft.ImGui.Rendering;
using System;
namespace Duccsoft.ImGui.Elements;
public class Checkbox : Element
{
public Checkbox( Element parent, string label, ref bool isChecked ) : base( parent )
{
Checked = isChecked;
Label = label;
Id = ImGui.GetID( Label );
OnBegin();
OnEnd();
isChecked = Checked;
}
public string Label { get; set; }
public bool Checked { get; set; }
private Color32 CheckMarkColor => ImGui.GetColorU32( ImGuiCol.CheckMark );
private Rect CheckboxRect
{
get => new( ScreenPosition, new Vector2( ImGui.GetTextLineHeightWithSpacing() ) );
}
private Rect TextRect
{
get
{
var textPos = CheckboxRect.TopRight + new Vector2( Style.ItemInnerSpacing.x, 0f );
return new Rect( textPos, ImGui.CalcTextSize( Label ) );
}
}
public override Vector2 Size
{
get => new Vector2( CheckboxRect.Size.x, 0f )
+ new Vector2( Style.ItemInnerSpacing.x, 0f )
+ TextRect.Size;
}
public override void OnEnd()
{
base.OnEnd();
if ( IsReleased )
{
Checked = !Checked;
}
}
protected override void OnDrawSelf( ImDrawList drawList )
{
drawList.AddRectFilled( CheckboxRect.TopLeft, CheckboxRect.BottomRight, FrameColor );
if ( Checked )
{
drawList.AddText( CheckboxRect.Center, CheckMarkColor, "✓", TextFlag.Center );
}
drawList.AddText( TextRect.Position, TextColor, Label );
}
}