add bindings

This commit is contained in:
2026-06-15 16:28:17 +02:00
commit 14a89ef1e3
11 changed files with 947 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
build
recovery
BeefSpace_User.toml
BeefSpace_Lock.toml
+3
View File
@@ -0,0 +1,3 @@
[submodule "microui"]
path = microui
url = https://github.com/rxi/microui.git
+10
View File
@@ -0,0 +1,10 @@
FileVersion = 1
[Project]
Name = "MicroUI"
TargetType = "BeefLib"
StartupObject = "MicroUI.Program"
[Dependencies]
corlib = "*"
"CxxBuildTool.git" = {Git = "https://git.unicon-gmbh.de/Rune/CxxBuildTool.git"}
+8
View File
@@ -0,0 +1,8 @@
FileVersion = 1
[Workspace]
StartupProject = "MicroUI"
[Projects]
MicroUI = {Path = "."}
"CxxBuildTool.git" = {Git = "https://git.unicon-gmbh.de/Rune/CxxBuildTool.git"}
+9
View File
@@ -0,0 +1,9 @@
FileVersion = 1
[Project]
Name = "MicroUI.Setup"
StartupObject = "MicroUI.Setup.Program"
[Dependencies]
corlib = "*"
"Cpp2Beef.git" = {Git = "https://git.unicon-gmbh.de/Rune/Cpp2Beef.git"}
+8
View File
@@ -0,0 +1,8 @@
FileVersion = 1
[Workspace]
StartupProject = "MicroUI.Setup"
[Projects]
"MicroUI.Setup" = {Path = "."}
"Cpp2Beef.git" = {Git = "https://git.unicon-gmbh.de/Rune/Cpp2Beef.git"}
+254
View File
@@ -0,0 +1,254 @@
using System;
using System.IO;
using System.Collections;
using System.Diagnostics;
using Cpp2Beef;
using LibClang;
namespace MicroUI.Setup;
class MicroUIGenerator : Cpp2BeefGenerator, this(Span<char8*> args)
{
protected override Span<char8*> Args => args;
protected override Flags Flags => .None;
StreamWriter writer = new .()..Create("../src/MicroUI.bf")..Write("""
// This file was generated by Cpp2Beef
using System;
using System.Interop;
namespace MicroUI;
""") ~ delete _;
protected override StreamWriter GetWriterForHeader(StringView header)
{
if (header.EndsWith("microui.h"))
return writer;
return null;
}
protected override Block GetCursorBlock(CXCursor cursor)
{
if (cursor.kind == .FunctionDecl)
return .CustomBlock("MicroUI");
return base.GetCursorBlock(cursor);
}
static int enumParentLen;
protected override void HandleCursor(CXCursor cursor)
{
switch (cursor.kind)
{
case .MacroDefinition:
let spelling = GetCursorSpelling!(cursor);
if (spelling == "MU_REAL")
return;
case .EnumDecl:
BeginCursor(cursor);
Clang.VisitChildren(cursor, (cursor, parent, client_data) =>
{
(Self self, int* parentLen) = *(.)client_data;
var spelling = GetCursorSpelling!(cursor);
Runtime.Assert(spelling.StartsWith("MU_"));
spelling.RemoveFromStart(3);
spelling = spelling[..<spelling.IndexOf('_')];
*parentLen = spelling.Length + 4;
self.str.Append("[CRepr] enum mu_");
self.str.Append(spelling);
return .Break;
}, &(this, &enumParentLen));
BeginBody!(cursor);
Clang.VisitChildren(cursor, (cursor, parent, client_data) =>
{
Self self = (.)Internal.UnsafeCastToObject(client_data);
self.HandleCursor(cursor);
return .Continue;
}, Internal.UnsafeCastToPtr(this));
enumParentLen = 0;
case .StructDecl:
if (Clang.GetCursorSemanticParent(cursor).kind == .StructDecl)
return;
if (Clang.VisitChildren(cursor, (cursor, parent, client_data) =>
{
return .Break;
}, null) == 0) return;
BeginCursor(cursor);
Record(cursor);
return;
case .FieldDecl:
let spelling = GetCursorSpelling!(cursor);
if (spelling.EndsWith("_stack") || spelling.EndsWith("_list"))
{
BeginCursor(cursor);
str.Append("[CRepr] ");
AccessSpecifier(cursor);
str.Append("struct { public c_int idx; public c_char[MU_");
for (let char in spelling)
if (char.IsLetter)
str.Append(char.ToUpper);
str.Append("_SIZE] items; } ", spelling);
str.Append(';');
return;
}
default:
}
base.HandleCursor(cursor);
}
protected override void GetNameInBindings(CXCursor cursor, String outString)
{
if (!cGetNameInBindings(cursor, outString))
base.GetNameInBindings(cursor, outString);
}
protected override void Type(CXType type, TypeParamMode paramMode = .None)
{
if (!cType(type, str, currentCursor))
base.Type(type, paramMode);
}
public static bool cGetNameInBindings(LibClang.CXCursor cursor, String outString)
{
switch (cursor.kind)
{
case .FunctionDecl:
var spelling = GetCursorSpelling!(cursor);
Runtime.Assert(spelling.StartsWith("mu_"));
spelling.RemoveFromStart(3);
UpperSnakeCase2PascalCase(spelling, outString);
case .EnumConstantDecl:
var spelling = GetCursorSpelling!(cursor);
spelling.RemoveFromStart(enumParentLen);
UpperSnakeCase2PascalCase(spelling, outString);
default:
return false;
}
return true;
}
public static bool cType(CXType type, String str, CXCursor cursor)
{
if (type.kind == .Int && cursor.kind == .FieldDecl || cursor.kind == .ParmDecl)
{
let spelling = GetCursorSpelling!(cursor);
switch (spelling)
{
case "key": str.Append("mu_KEY");
case "type": str.Append("mu_COMMAND");
case "colorid": str.Append("mu_COLOR");
case "opt": str.Append("mu_OPT");
case "icon": str.Append("mu_ICON");
case "btn": str.Append("mu_MOUSE");
default:
return false;
}
return true;
}
if (type.kind == .Int && cursor.kind == .FunctionDecl)
{
str.Append("mu_RES");
return true;
}
return false;
}
}
class MicroUIWrapperGenerator : Cpp2BeefGenerator, this(Span<char8*> args)
{
protected override Span<char8*> Args => args;
protected override Flags Flags => .None;
StreamWriter writer = new .()..Create("../src/Wrapper.bf")..Write("""
// This file was generated by Cpp2Beef
using System;
using System.Interop;
namespace MicroUI;
extension MicroUIContext
{
""") ~ delete _..Write("}\n");
protected override StreamWriter GetWriterForHeader(StringView header)
{
if (header.EndsWith("microui.h"))
return writer;
return null;
}
protected override Block GetCursorBlock(CXCursor cursor)
{
return .NoBlock;
}
protected override void GetNameInBindings(CXCursor cursor, String outString)
{
if (!MicroUIGenerator.cGetNameInBindings(cursor, outString))
base.GetNameInBindings(cursor, outString);
}
protected override void Type(CXType type, TypeParamMode paramMode = .None)
{
if (!MicroUIGenerator.cType(type, str, currentCursor))
base.Type(type, paramMode);
}
protected override void HandleCursor(CXCursor cursor)
{
if (cursor.kind != .FunctionDecl || GetCursorSpelling!(cursor) == "mu_init") return;
Flush();
Method_Parameters(cursor);
StringView parameters = scope String(str);
str.Clear();
if (!parameters.StartsWith("mu_Context* ctx"))
return;
parameters.RemoveFromStart("mu_Context* ctx".Length);
if (parameters.StartsWith(", "))
parameters.RemoveFromStart(2);
BeginCursor(cursor);
AccessSpecifier(cursor);
WriteTypeAndName(cursor, Clang.GetCursorResultType(cursor));
str.Append('(');
str.Append(parameters, ") => MicroUI.");
GetNameInBindings(cursor, str);
str.Append("(&");
let numArgs = Clang.Cursor_GetNumArguments(cursor);
for (let i < numArgs)
{
if (i > 0) str.Append(", ");
str.Append(GetCursorSpelling!(Clang.Cursor_GetArgument(cursor, (.)i)));
}
if (Clang.Cursor_IsVariadic(cursor) != 0)
{
if (numArgs > 0) str.Append(", ");
str.Append("...");
}
str.Append(");");
}
}
class Program
{
[CLink] static extern int32 system(char8*);
public static int Main(String[] args)
{
if (system("git -C .. submodule update") != 0)
{
Console.WriteLine("Failed to fetch microui, check your internet connection");
return 1;
}
scope MicroUIGenerator(char8*[?]("--language=c")).Generate("../microui/src/microui.h");
scope MicroUIWrapperGenerator(char8*[?]("--language=c")).Generate("../microui/src/microui.h");
return 0;
}
}
Submodule
+1
Submodule microui added at 0850aba860
+35
View File
@@ -0,0 +1,35 @@
using System;
using System.Interop;
using CxxBuildTool;
namespace MicroUI;
static class MicroUI
{
[OnCompile(.TypeDone)]
private static void Build()
{
if (!Compiler.IsBuilding) return;
CxxBuildTool.Ninja(Compiler.ProjectDir + "/microui/src", Compiler.BuildDir + "/" + Compiler.ProjectName, "microui", "", "microui.c");
}
}
class MicroUIContext
{
public mu_Context ctx;
public this()
{
MicroUI.Init(&ctx);
}
}
extension mu_RES
{
public static operator bool(Self s) => s != 0;
}
extension mu_Vec2 { public this(c_int x, c_int y) { this.x = x; this.y = y; } }
extension mu_Rect { public this(c_int x, c_int y, c_int w, c_int h) { this.x = x; this.y = y; this.w = w; this.h = h; } }
extension mu_Color { public this(c_uchar r, c_uchar g, c_uchar b, c_uchar a) { this.r = r; this.g = g; this.b = b; this.a = a; } }
+310
View File
@@ -0,0 +1,310 @@
// This file was generated by Cpp2Beef
using System;
using System.Interop;
namespace MicroUI;
static
{
/*
** Copyright (c) 2024 rxi
**
** This library is free software; you can redistribute it and/or modify it
** under the terms of the MIT license. See `microui.c` for details.
*/
public const let MU_VERSION = "2.02";
public const let MU_COMMANDLIST_SIZE = (256 * 1024);
public const let MU_ROOTLIST_SIZE = 32;
public const let MU_CONTAINERSTACK_SIZE = 32;
public const let MU_CLIPSTACK_SIZE = 32;
public const let MU_IDSTACK_SIZE = 32;
public const let MU_LAYOUTSTACK_SIZE = 16;
public const let MU_CONTAINERPOOL_SIZE = 48;
public const let MU_TREENODEPOOL_SIZE = 48;
public const let MU_MAX_WIDTHS = 16;
public const let MU_REAL_FMT = "%.3g";
public const let MU_SLIDER_FMT = "%.2f";
public const let MU_MAX_FMT = 127;
}
[CRepr] enum mu_CLIP {
Part = 1,
All,
}
[CRepr] enum mu_COMMAND {
Jump = 1,
Clip,
Rect,
Text,
Icon,
Max,
}
[CRepr] enum mu_COLOR {
Text,
Border,
Windowbg,
Titlebg,
Titletext,
Panelbg,
Button,
Buttonhover,
Buttonfocus,
Base,
Basehover,
Basefocus,
Scrollbase,
Scrollthumb,
Max,
}
[CRepr] enum mu_ICON {
Close = 1,
Check,
Collapsed,
Expanded,
Max,
}
[CRepr] enum mu_RES {
Active = (1 << 0),
Submit = (1 << 1),
Change = (1 << 2),
}
[CRepr] enum mu_OPT {
Aligncenter = (1 << 0),
Alignright = (1 << 1),
Nointeract = (1 << 2),
Noframe = (1 << 3),
Noresize = (1 << 4),
Noscroll = (1 << 5),
Noclose = (1 << 6),
Notitle = (1 << 7),
Holdfocus = (1 << 8),
Autosize = (1 << 9),
Popup = (1 << 10),
Closed = (1 << 11),
Expanded = (1 << 12),
}
[CRepr] enum mu_MOUSE {
Left = (1 << 0),
Right = (1 << 1),
Middle = (1 << 2),
}
[CRepr] enum mu_KEY {
Shift = (1 << 0),
Ctrl = (1 << 1),
Alt = (1 << 2),
Backspace = (1 << 3),
Return = (1 << 4),
}
public typealias mu_Id = c_uint;
public typealias mu_Real = float;
public typealias mu_Font = void*;
[CRepr] public struct mu_Vec2 { public c_int x; public c_int y; }
[CRepr] public struct mu_Rect { public c_int x; public c_int y; public c_int w; public c_int h; }
[CRepr] public struct mu_Color { public c_uchar r; public c_uchar g; public c_uchar b; public c_uchar a; }
[CRepr] public struct mu_PoolItem { public mu_Id id; public c_int last_update; }
[CRepr] public struct mu_BaseCommand { public mu_COMMAND type; public c_int size; }
[CRepr] public struct mu_JumpCommand { public mu_BaseCommand @base; public void* dst; }
[CRepr] public struct mu_ClipCommand { public mu_BaseCommand @base; public mu_Rect rect; }
[CRepr] public struct mu_RectCommand { public mu_BaseCommand @base; public mu_Rect rect; public mu_Color color; }
[CRepr] public struct mu_TextCommand { public mu_BaseCommand @base; public mu_Font font; public mu_Vec2 pos; public mu_Color color; public c_char[1] str; }
[CRepr] public struct mu_IconCommand { public mu_BaseCommand @base; public mu_Rect rect; public c_int id; public mu_Color color; }
[CRepr, Union] public struct mu_Command {
public mu_COMMAND type;
public mu_BaseCommand @base;
public mu_JumpCommand jump;
public mu_ClipCommand clip;
public mu_RectCommand rect;
public mu_TextCommand text;
public mu_IconCommand icon;
}
[CRepr] public struct mu_Layout {
public mu_Rect body;
public mu_Rect next;
public mu_Vec2 position;
public mu_Vec2 size;
public mu_Vec2 max;
public c_int[16] widths;
public c_int items;
public c_int item_index;
public c_int next_row;
public c_int next_type;
public c_int indent;
}
[CRepr] public struct mu_Container {
public mu_Command* head; public mu_Command* tail;
public mu_Rect rect;
public mu_Rect body;
public mu_Vec2 content_size;
public mu_Vec2 scroll;
public c_int zindex;
public c_int open;
}
[CRepr] public struct mu_Style {
public mu_Font font;
public mu_Vec2 size;
public c_int padding;
public c_int spacing;
public c_int indent;
public c_int title_height;
public c_int scrollbar_size;
public c_int thumb_size;
public mu_Color[14] colors;
}
[CRepr] public struct mu_Context {
/* callbacks */
public function c_int(mu_Font font, c_char* str, c_int len) text_width;
public function c_int(mu_Font font) text_height;
public function void(mu_Context* ctx, mu_Rect rect, c_int colorid) draw_frame;
/* core state */
public mu_Style _style;
public mu_Style* style;
public mu_Id hover;
public mu_Id focus;
public mu_Id last_id;
public mu_Rect last_rect;
public c_int last_zindex;
public c_int updated_focus;
public c_int frame;
public mu_Container* hover_root;
public mu_Container* next_hover_root;
public mu_Container* scroll_target;
public c_char[127] number_edit_buf;
public mu_Id number_edit;
/* stacks */
[CRepr] public struct { public c_int idx; public c_char[MU_COMMANDLIST_SIZE] items; } command_list;
[CRepr] public struct { public c_int idx; public c_char[MU_ROOTLIST_SIZE] items; } root_list;
[CRepr] public struct { public c_int idx; public c_char[MU_CONTAINERSTACK_SIZE] items; } container_stack;
[CRepr] public struct { public c_int idx; public c_char[MU_CLIPSTACK_SIZE] items; } clip_stack;
[CRepr] public struct { public c_int idx; public c_char[MU_IDSTACK_SIZE] items; } id_stack;
[CRepr] public struct { public c_int idx; public c_char[MU_LAYOUTSTACK_SIZE] items; } layout_stack;
/* retained state pools */
public mu_PoolItem[48] container_pool;
public mu_Container[48] containers;
public mu_PoolItem[48] treenode_pool;
/* input state */
public mu_Vec2 mouse_pos;
public mu_Vec2 last_mouse_pos;
public mu_Vec2 mouse_delta;
public mu_Vec2 scroll_delta;
public c_int mouse_down;
public c_int mouse_pressed;
public c_int key_down;
public c_int key_pressed;
public c_char[32] input_text;
}
extension MicroUI
{
[LinkName("mu_vec2")] public static extern mu_Vec2 Vec2(c_int x, c_int y);
[LinkName("mu_rect")] public static extern mu_Rect Rect(c_int x, c_int y, c_int w, c_int h);
[LinkName("mu_color")] public static extern mu_Color Color(c_int r, c_int g, c_int b, c_int a);
[LinkName("mu_init")] public static extern void Init(mu_Context* ctx);
[LinkName("mu_begin")] public static extern void Begin(mu_Context* ctx);
[LinkName("mu_end")] public static extern void End(mu_Context* ctx);
[LinkName("mu_set_focus")] public static extern void SetFocus(mu_Context* ctx, mu_Id id);
[LinkName("mu_get_id")] public static extern mu_Id GetId(mu_Context* ctx, void* data, c_int size);
[LinkName("mu_push_id")] public static extern void PushId(mu_Context* ctx, void* data, c_int size);
[LinkName("mu_pop_id")] public static extern void PopId(mu_Context* ctx);
[LinkName("mu_push_clip_rect")] public static extern void PushClipRect(mu_Context* ctx, mu_Rect rect);
[LinkName("mu_pop_clip_rect")] public static extern void PopClipRect(mu_Context* ctx);
[LinkName("mu_get_clip_rect")] public static extern mu_Rect GetClipRect(mu_Context* ctx);
[LinkName("mu_check_clip")] public static extern mu_RES CheckClip(mu_Context* ctx, mu_Rect r);
[LinkName("mu_get_current_container")] public static extern mu_Container* GetCurrentContainer(mu_Context* ctx);
[LinkName("mu_get_container")] public static extern mu_Container* GetContainer(mu_Context* ctx, c_char* name);
[LinkName("mu_bring_to_front")] public static extern void BringToFront(mu_Context* ctx, mu_Container* cnt);
[LinkName("mu_pool_init")] public static extern mu_RES PoolInit(mu_Context* ctx, mu_PoolItem* items, c_int len, mu_Id id);
[LinkName("mu_pool_get")] public static extern mu_RES PoolGet(mu_Context* ctx, mu_PoolItem* items, c_int len, mu_Id id);
[LinkName("mu_pool_update")] public static extern void PoolUpdate(mu_Context* ctx, mu_PoolItem* items, c_int idx);
[LinkName("mu_input_mousemove")] public static extern void InputMousemove(mu_Context* ctx, c_int x, c_int y);
[LinkName("mu_input_mousedown")] public static extern void InputMousedown(mu_Context* ctx, c_int x, c_int y, mu_MOUSE btn);
[LinkName("mu_input_mouseup")] public static extern void InputMouseup(mu_Context* ctx, c_int x, c_int y, mu_MOUSE btn);
[LinkName("mu_input_scroll")] public static extern void InputScroll(mu_Context* ctx, c_int x, c_int y);
[LinkName("mu_input_keydown")] public static extern void InputKeydown(mu_Context* ctx, mu_KEY key);
[LinkName("mu_input_keyup")] public static extern void InputKeyup(mu_Context* ctx, mu_KEY key);
[LinkName("mu_input_text")] public static extern void InputText(mu_Context* ctx, c_char* text);
[LinkName("mu_push_command")] public static extern mu_Command* PushCommand(mu_Context* ctx, mu_COMMAND type, c_int size);
[LinkName("mu_next_command")] public static extern mu_RES NextCommand(mu_Context* ctx, mu_Command** cmd);
[LinkName("mu_set_clip")] public static extern void SetClip(mu_Context* ctx, mu_Rect rect);
[LinkName("mu_draw_rect")] public static extern void DrawRect(mu_Context* ctx, mu_Rect rect, mu_Color color);
[LinkName("mu_draw_box")] public static extern void DrawBox(mu_Context* ctx, mu_Rect rect, mu_Color color);
[LinkName("mu_draw_text")] public static extern void DrawText(mu_Context* ctx, mu_Font font, c_char* str, c_int len, mu_Vec2 pos, mu_Color color);
[LinkName("mu_draw_icon")] public static extern void DrawIcon(mu_Context* ctx, c_int id, mu_Rect rect, mu_Color color);
[LinkName("mu_layout_row")] public static extern void LayoutRow(mu_Context* ctx, c_int items, c_int* widths, c_int height);
[LinkName("mu_layout_width")] public static extern void LayoutWidth(mu_Context* ctx, c_int width);
[LinkName("mu_layout_height")] public static extern void LayoutHeight(mu_Context* ctx, c_int height);
[LinkName("mu_layout_begin_column")] public static extern void LayoutBeginColumn(mu_Context* ctx);
[LinkName("mu_layout_end_column")] public static extern void LayoutEndColumn(mu_Context* ctx);
[LinkName("mu_layout_set_next")] public static extern void LayoutSetNext(mu_Context* ctx, mu_Rect r, c_int relative);
[LinkName("mu_layout_next")] public static extern mu_Rect LayoutNext(mu_Context* ctx);
[LinkName("mu_draw_control_frame")] public static extern void DrawControlFrame(mu_Context* ctx, mu_Id id, mu_Rect rect, mu_COLOR colorid, mu_OPT opt);
[LinkName("mu_draw_control_text")] public static extern void DrawControlText(mu_Context* ctx, c_char* str, mu_Rect rect, mu_COLOR colorid, mu_OPT opt);
[LinkName("mu_mouse_over")] public static extern mu_RES MouseOver(mu_Context* ctx, mu_Rect rect);
[LinkName("mu_update_control")] public static extern void UpdateControl(mu_Context* ctx, mu_Id id, mu_Rect rect, mu_OPT opt);
[LinkName("mu_text")] public static extern void Text(mu_Context* ctx, c_char* text);
[LinkName("mu_label")] public static extern void Label(mu_Context* ctx, c_char* text);
[LinkName("mu_button_ex")] public static extern mu_RES ButtonEx(mu_Context* ctx, c_char* label, mu_ICON icon, mu_OPT opt);
[LinkName("mu_checkbox")] public static extern mu_RES Checkbox(mu_Context* ctx, c_char* label, c_int* state);
[LinkName("mu_textbox_raw")] public static extern mu_RES TextboxRaw(mu_Context* ctx, c_char* buf, c_int bufsz, mu_Id id, mu_Rect r, mu_OPT opt);
[LinkName("mu_textbox_ex")] public static extern mu_RES TextboxEx(mu_Context* ctx, c_char* buf, c_int bufsz, mu_OPT opt);
[LinkName("mu_slider_ex")] public static extern mu_RES SliderEx(mu_Context* ctx, mu_Real* value, mu_Real low, mu_Real high, mu_Real step, c_char* fmt, mu_OPT opt);
[LinkName("mu_number_ex")] public static extern mu_RES NumberEx(mu_Context* ctx, mu_Real* value, mu_Real step, c_char* fmt, mu_OPT opt);
[LinkName("mu_header_ex")] public static extern mu_RES HeaderEx(mu_Context* ctx, c_char* label, mu_OPT opt);
[LinkName("mu_begin_treenode_ex")] public static extern mu_RES BeginTreenodeEx(mu_Context* ctx, c_char* label, mu_OPT opt);
[LinkName("mu_end_treenode")] public static extern void EndTreenode(mu_Context* ctx);
[LinkName("mu_begin_window_ex")] public static extern mu_RES BeginWindowEx(mu_Context* ctx, c_char* title, mu_Rect rect, mu_OPT opt);
[LinkName("mu_end_window")] public static extern void EndWindow(mu_Context* ctx);
[LinkName("mu_open_popup")] public static extern void OpenPopup(mu_Context* ctx, c_char* name);
[LinkName("mu_begin_popup")] public static extern mu_RES BeginPopup(mu_Context* ctx, c_char* name);
[LinkName("mu_end_popup")] public static extern void EndPopup(mu_Context* ctx);
[LinkName("mu_begin_panel_ex")] public static extern void BeginPanelEx(mu_Context* ctx, c_char* name, mu_OPT opt);
[LinkName("mu_end_panel")] public static extern void EndPanel(mu_Context* ctx);
}
+305
View File
@@ -0,0 +1,305 @@
// This file was generated by Cpp2Beef
using System;
using System.Interop;
namespace MicroUI;
extension MicroUIContext
{
/*
** Copyright (c) 2024 rxi
**
** This library is free software; you can redistribute it and/or modify it
** under the terms of the MIT license. See `microui.c` for details.
*/
/* callbacks */
/* core state */
/* stacks */
/* retained state pools */
/* input state */
public void Begin() => MicroUI.Begin(&ctx);
public void End() => MicroUI.End(&ctx);
public void SetFocus(mu_Id id) => MicroUI.SetFocus(&ctx, id);
public mu_Id GetId(void* data, c_int size) => MicroUI.GetId(&ctx, data, size);
public void PushId(void* data, c_int size) => MicroUI.PushId(&ctx, data, size);
public void PopId() => MicroUI.PopId(&ctx);
public void PushClipRect(mu_Rect rect) => MicroUI.PushClipRect(&ctx, rect);
public void PopClipRect() => MicroUI.PopClipRect(&ctx);
public mu_Rect GetClipRect() => MicroUI.GetClipRect(&ctx);
public mu_RES CheckClip(mu_Rect r) => MicroUI.CheckClip(&ctx, r);
public mu_Container* GetCurrentContainer() => MicroUI.GetCurrentContainer(&ctx);
public mu_Container* GetContainer(c_char* name) => MicroUI.GetContainer(&ctx, name);
public void BringToFront(mu_Container* cnt) => MicroUI.BringToFront(&ctx, cnt);
public mu_RES PoolInit(mu_PoolItem* items, c_int len, mu_Id id) => MicroUI.PoolInit(&ctx, items, len, id);
public mu_RES PoolGet(mu_PoolItem* items, c_int len, mu_Id id) => MicroUI.PoolGet(&ctx, items, len, id);
public void PoolUpdate(mu_PoolItem* items, c_int idx) => MicroUI.PoolUpdate(&ctx, items, idx);
public void InputMousemove(c_int x, c_int y) => MicroUI.InputMousemove(&ctx, x, y);
public void InputMousedown(c_int x, c_int y, mu_MOUSE btn) => MicroUI.InputMousedown(&ctx, x, y, btn);
public void InputMouseup(c_int x, c_int y, mu_MOUSE btn) => MicroUI.InputMouseup(&ctx, x, y, btn);
public void InputScroll(c_int x, c_int y) => MicroUI.InputScroll(&ctx, x, y);
public void InputKeydown(mu_KEY key) => MicroUI.InputKeydown(&ctx, key);
public void InputKeyup(mu_KEY key) => MicroUI.InputKeyup(&ctx, key);
public void InputText(c_char* text) => MicroUI.InputText(&ctx, text);
public mu_Command* PushCommand(mu_COMMAND type, c_int size) => MicroUI.PushCommand(&ctx, type, size);
public mu_RES NextCommand(mu_Command** cmd) => MicroUI.NextCommand(&ctx, cmd);
public void SetClip(mu_Rect rect) => MicroUI.SetClip(&ctx, rect);
public void DrawRect(mu_Rect rect, mu_Color color) => MicroUI.DrawRect(&ctx, rect, color);
public void DrawBox(mu_Rect rect, mu_Color color) => MicroUI.DrawBox(&ctx, rect, color);
public void DrawText(mu_Font font, c_char* str, c_int len, mu_Vec2 pos, mu_Color color) => MicroUI.DrawText(&ctx, font, str, len, pos, color);
public void DrawIcon(c_int id, mu_Rect rect, mu_Color color) => MicroUI.DrawIcon(&ctx, id, rect, color);
public void LayoutRow(c_int items, c_int* widths, c_int height) => MicroUI.LayoutRow(&ctx, items, widths, height);
public void LayoutWidth(c_int width) => MicroUI.LayoutWidth(&ctx, width);
public void LayoutHeight(c_int height) => MicroUI.LayoutHeight(&ctx, height);
public void LayoutBeginColumn() => MicroUI.LayoutBeginColumn(&ctx);
public void LayoutEndColumn() => MicroUI.LayoutEndColumn(&ctx);
public void LayoutSetNext(mu_Rect r, c_int relative) => MicroUI.LayoutSetNext(&ctx, r, relative);
public mu_Rect LayoutNext() => MicroUI.LayoutNext(&ctx);
public void DrawControlFrame(mu_Id id, mu_Rect rect, mu_COLOR colorid, mu_OPT opt) => MicroUI.DrawControlFrame(&ctx, id, rect, colorid, opt);
public void DrawControlText(c_char* str, mu_Rect rect, mu_COLOR colorid, mu_OPT opt) => MicroUI.DrawControlText(&ctx, str, rect, colorid, opt);
public mu_RES MouseOver(mu_Rect rect) => MicroUI.MouseOver(&ctx, rect);
public void UpdateControl(mu_Id id, mu_Rect rect, mu_OPT opt) => MicroUI.UpdateControl(&ctx, id, rect, opt);
public void Text(c_char* text) => MicroUI.Text(&ctx, text);
public void Label(c_char* text) => MicroUI.Label(&ctx, text);
public mu_RES ButtonEx(c_char* label, mu_ICON icon, mu_OPT opt) => MicroUI.ButtonEx(&ctx, label, icon, opt);
public mu_RES Checkbox(c_char* label, c_int* state) => MicroUI.Checkbox(&ctx, label, state);
public mu_RES TextboxRaw(c_char* buf, c_int bufsz, mu_Id id, mu_Rect r, mu_OPT opt) => MicroUI.TextboxRaw(&ctx, buf, bufsz, id, r, opt);
public mu_RES TextboxEx(c_char* buf, c_int bufsz, mu_OPT opt) => MicroUI.TextboxEx(&ctx, buf, bufsz, opt);
public mu_RES SliderEx(mu_Real* value, mu_Real low, mu_Real high, mu_Real step, c_char* fmt, mu_OPT opt) => MicroUI.SliderEx(&ctx, value, low, high, step, fmt, opt);
public mu_RES NumberEx(mu_Real* value, mu_Real step, c_char* fmt, mu_OPT opt) => MicroUI.NumberEx(&ctx, value, step, fmt, opt);
public mu_RES HeaderEx(c_char* label, mu_OPT opt) => MicroUI.HeaderEx(&ctx, label, opt);
public mu_RES BeginTreenodeEx(c_char* label, mu_OPT opt) => MicroUI.BeginTreenodeEx(&ctx, label, opt);
public void EndTreenode() => MicroUI.EndTreenode(&ctx);
public mu_RES BeginWindowEx(c_char* title, mu_Rect rect, mu_OPT opt) => MicroUI.BeginWindowEx(&ctx, title, rect, opt);
public void EndWindow() => MicroUI.EndWindow(&ctx);
public void OpenPopup(c_char* name) => MicroUI.OpenPopup(&ctx, name);
public mu_RES BeginPopup(c_char* name) => MicroUI.BeginPopup(&ctx, name);
public void EndPopup() => MicroUI.EndPopup(&ctx);
public void BeginPanelEx(c_char* name, mu_OPT opt) => MicroUI.BeginPanelEx(&ctx, name, opt);
public void EndPanel() => MicroUI.EndPanel(&ctx);
}