UI
Graphical User Interface API.
Types
oc_key_state
typedef struct oc_key_state
{
u64 lastUpdate;
u32 transitionCount;
u32 repeatCount;
bool down;
bool sysClicked;
bool sysDoubleClicked;
bool sysTripleClicked;
} oc_key_state;
oc_keyboard_state
typedef struct oc_keyboard_state
{
oc_key_state keys[349];
oc_keymod_flags mods;
} oc_keyboard_state;
oc_mouse_state
typedef struct oc_mouse_state
{
u64 lastUpdate;
bool posValid;
oc_vec2 pos;
oc_vec2 delta;
oc_vec2 wheel;
union
{
oc_key_state buttons[5];
struct
{
oc_key_state left;
oc_key_state right;
oc_key_state middle;
oc_key_state ext1;
oc_key_state ext2;
};
};
} oc_mouse_state;
Anonymous enum
typedef enum
{
OC_INPUT_TEXT_BACKING_SIZE = 64
};
Enum Constants
OC_INPUT_TEXT_BACKING_SIZE
oc_text_state
typedef struct oc_text_state
{
u64 lastUpdate;
oc_utf32 backing[64];
oc_str32 codePoints;
} oc_text_state;
oc_clipboard_state
typedef struct oc_clipboard_state
{
u64 lastUpdate;
oc_str8 pastedText;
} oc_clipboard_state;
oc_input_state
typedef struct oc_input_state
{
u64 frameCounter;
oc_keyboard_state keyboard;
oc_mouse_state mouse;
oc_text_state text;
oc_clipboard_state clipboard;
} oc_input_state;
oc_ui_key
typedef struct oc_ui_key
{
u64 hash;
} oc_ui_key;
oc_ui_axis
typedef enum oc_ui_axis
{
OC_UI_AXIS_X = 0,
OC_UI_AXIS_Y = 1,
OC_UI_AXIS_COUNT = 2
} oc_ui_axis;
Enum Constants
OC_UI_AXIS_X
OC_UI_AXIS_Y
OC_UI_AXIS_COUNT
oc_ui_align
typedef enum oc_ui_align
{
OC_UI_ALIGN_START = 0,
OC_UI_ALIGN_END = 1,
OC_UI_ALIGN_CENTER = 2
} oc_ui_align;
Enum Constants
OC_UI_ALIGN_START
OC_UI_ALIGN_END
OC_UI_ALIGN_CENTER
oc_ui_layout_align
typedef union oc_ui_layout_align
{
struct
{
oc_ui_align x;
oc_ui_align y;
};
oc_ui_align c[2];
} oc_ui_layout_align;
oc_ui_layout
typedef struct oc_ui_layout
{
oc_ui_axis axis;
f32 spacing;
union
{
struct
{
f32 x;
f32 y;
};
f32 c[2];
} margin;
oc_ui_layout_align align;
} oc_ui_layout;
oc_ui_size_kind
typedef enum oc_ui_size_kind
{
OC_UI_SIZE_TEXT = 0,
OC_UI_SIZE_PIXELS = 1,
OC_UI_SIZE_CHILDREN = 2,
OC_UI_SIZE_PARENT = 3,
OC_UI_SIZE_PARENT_MINUS_PIXELS = 4
} oc_ui_size_kind;
Enum Constants
OC_UI_SIZE_TEXT
OC_UI_SIZE_PIXELS
OC_UI_SIZE_CHILDREN
OC_UI_SIZE_PARENT
OC_UI_SIZE_PARENT_MINUS_PIXELS
oc_ui_size
typedef struct oc_ui_size
{
oc_ui_size_kind kind;
f32 value;
f32 relax;
f32 minSize;
} oc_ui_size;
oc_ui_box_size
typedef union oc_ui_box_size
{
struct
{
oc_ui_size width;
oc_ui_size height;
};
oc_ui_size c[2];
} oc_ui_box_size;
oc_ui_box_floating
typedef union oc_ui_box_floating
{
struct
{
bool x;
bool y;
};
bool c[2];
} oc_ui_box_floating;
oc_ui_style_mask
typedef u64 oc_ui_style_mask;
Anonymous enum
typedef enum
{
OC_UI_STYLE_NONE = 0,
OC_UI_STYLE_SIZE_WIDTH = 2,
OC_UI_STYLE_SIZE_HEIGHT = 4,
OC_UI_STYLE_LAYOUT_AXIS = 8,
OC_UI_STYLE_LAYOUT_ALIGN_X = 16,
OC_UI_STYLE_LAYOUT_ALIGN_Y = 32,
OC_UI_STYLE_LAYOUT_SPACING = 64,
OC_UI_STYLE_LAYOUT_MARGIN_X = 128,
OC_UI_STYLE_LAYOUT_MARGIN_Y = 256,
OC_UI_STYLE_FLOAT_X = 512,
OC_UI_STYLE_FLOAT_Y = 1024,
OC_UI_STYLE_COLOR = 2048,
OC_UI_STYLE_BG_COLOR = 4096,
OC_UI_STYLE_BORDER_COLOR = 8192,
OC_UI_STYLE_BORDER_SIZE = 16384,
OC_UI_STYLE_ROUNDNESS = 32768,
OC_UI_STYLE_FONT = 65536,
OC_UI_STYLE_FONT_SIZE = 131072,
OC_UI_STYLE_ANIMATION_TIME = 262144,
OC_UI_STYLE_ANIMATION_MASK = 524288,
OC_UI_STYLE_SIZE = 6,
OC_UI_STYLE_LAYOUT_MARGINS = 384,
OC_UI_STYLE_LAYOUT = 504,
OC_UI_STYLE_FLOAT = 1536,
OC_UI_STYLE_MASK_INHERITED = 985088
};
Enum Constants
OC_UI_STYLE_NONE
OC_UI_STYLE_SIZE_WIDTH
OC_UI_STYLE_SIZE_HEIGHT
OC_UI_STYLE_LAYOUT_AXIS
OC_UI_STYLE_LAYOUT_ALIGN_X
OC_UI_STYLE_LAYOUT_ALIGN_Y
OC_UI_STYLE_LAYOUT_SPACING
OC_UI_STYLE_LAYOUT_MARGIN_X
OC_UI_STYLE_LAYOUT_MARGIN_Y
OC_UI_STYLE_FLOAT_X
OC_UI_STYLE_FLOAT_Y
OC_UI_STYLE_COLOR
OC_UI_STYLE_BG_COLOR
OC_UI_STYLE_BORDER_COLOR
OC_UI_STYLE_BORDER_SIZE
OC_UI_STYLE_ROUNDNESS
OC_UI_STYLE_FONT
OC_UI_STYLE_FONT_SIZE
OC_UI_STYLE_ANIMATION_TIME
OC_UI_STYLE_ANIMATION_MASK
OC_UI_STYLE_SIZE
OC_UI_STYLE_LAYOUT_MARGINS
OC_UI_STYLE_LAYOUT
OC_UI_STYLE_FLOAT
OC_UI_STYLE_MASK_INHERITED
oc_ui_style
typedef struct oc_ui_style
{
oc_ui_box_size size;
oc_ui_layout layout;
oc_ui_box_floating floating;
oc_vec2 floatTarget;
oc_color color;
oc_color bgColor;
oc_color borderColor;
oc_font font;
f32 fontSize;
f32 borderSize;
f32 roundness;
f32 animationTime;
oc_ui_style_mask animationMask;
} oc_ui_style;
oc_ui_palette
typedef struct oc_ui_palette
{
oc_color red0;
oc_color red1;
oc_color red2;
oc_color red3;
oc_color red4;
oc_color red5;
oc_color red6;
oc_color red7;
oc_color red8;
oc_color red9;
oc_color orange0;
oc_color orange1;
oc_color orange2;
oc_color orange3;
oc_color orange4;
oc_color orange5;
oc_color orange6;
oc_color orange7;
oc_color orange8;
oc_color orange9;
oc_color amber0;
oc_color amber1;
oc_color amber2;
oc_color amber3;
oc_color amber4;
oc_color amber5;
oc_color amber6;
oc_color amber7;
oc_color amber8;
oc_color amber9;
oc_color yellow0;
oc_color yellow1;
oc_color yellow2;
oc_color yellow3;
oc_color yellow4;
oc_color yellow5;
oc_color yellow6;
oc_color yellow7;
oc_color yellow8;
oc_color yellow9;
oc_color lime0;
oc_color lime1;
oc_color lime2;
oc_color lime3;
oc_color lime4;
oc_color lime5;
oc_color lime6;
oc_color lime7;
oc_color lime8;
oc_color lime9;
oc_color lightGreen0;
oc_color lightGreen1;
oc_color lightGreen2;
oc_color lightGreen3;
oc_color lightGreen4;
oc_color lightGreen5;
oc_color lightGreen6;
oc_color lightGreen7;
oc_color lightGreen8;
oc_color lightGreen9;
oc_color green0;
oc_color green1;
oc_color green2;
oc_color green3;
oc_color green4;
oc_color green5;
oc_color green6;
oc_color green7;
oc_color green8;
oc_color green9;
oc_color teal0;
oc_color teal1;
oc_color teal2;
oc_color teal3;
oc_color teal4;
oc_color teal5;
oc_color teal6;
oc_color teal7;
oc_color teal8;
oc_color teal9;
oc_color cyan0;
oc_color cyan1;
oc_color cyan2;
oc_color cyan3;
oc_color cyan4;
oc_color cyan5;
oc_color cyan6;
oc_color cyan7;
oc_color cyan8;
oc_color cyan9;
oc_color lightBlue0;
oc_color lightBlue1;
oc_color lightBlue2;
oc_color lightBlue3;
oc_color lightBlue4;
oc_color lightBlue5;
oc_color lightBlue6;
oc_color lightBlue7;
oc_color lightBlue8;
oc_color lightBlue9;
oc_color blue0;
oc_color blue1;
oc_color blue2;
oc_color blue3;
oc_color blue4;
oc_color blue5;
oc_color blue6;
oc_color blue7;
oc_color blue8;
oc_color blue9;
oc_color indigo0;
oc_color indigo1;
oc_color indigo2;
oc_color indigo3;
oc_color indigo4;
oc_color indigo5;
oc_color indigo6;
oc_color indigo7;
oc_color indigo8;
oc_color indigo9;
oc_color violet0;
oc_color violet1;
oc_color violet2;
oc_color violet3;
oc_color violet4;
oc_color violet5;
oc_color violet6;
oc_color violet7;
oc_color violet8;
oc_color violet9;
oc_color purple0;
oc_color purple1;
oc_color purple2;
oc_color purple3;
oc_color purple4;
oc_color purple5;
oc_color purple6;
oc_color purple7;
oc_color purple8;
oc_color purple9;
oc_color pink0;
oc_color pink1;
oc_color pink2;
oc_color pink3;
oc_color pink4;
oc_color pink5;
oc_color pink6;
oc_color pink7;
oc_color pink8;
oc_color pink9;
oc_color grey0;
oc_color grey1;
oc_color grey2;
oc_color grey3;
oc_color grey4;
oc_color grey5;
oc_color grey6;
oc_color grey7;
oc_color grey8;
oc_color grey9;
oc_color black;
oc_color white;
} oc_ui_palette;
oc_ui_theme
typedef struct oc_ui_theme
{
oc_color white;
oc_color primary;
oc_color primaryHover;
oc_color primaryActive;
oc_color border;
oc_color fill0;
oc_color fill1;
oc_color fill2;
oc_color bg0;
oc_color bg1;
oc_color bg2;
oc_color bg3;
oc_color bg4;
oc_color text0;
oc_color text1;
oc_color text2;
oc_color text3;
oc_color sliderThumbBorder;
oc_color elevatedBorder;
f32 roundnessSmall;
f32 roundnessMedium;
f32 roundnessLarge;
oc_ui_palette* palette;
} oc_ui_theme;
oc_ui_tag
typedef struct oc_ui_tag
{
u64 hash;
} oc_ui_tag;
oc_ui_selector_kind
typedef enum oc_ui_selector_kind
{
OC_UI_SEL_ANY = 0,
OC_UI_SEL_OWNER = 1,
OC_UI_SEL_TEXT = 2,
OC_UI_SEL_TAG = 3,
OC_UI_SEL_STATUS = 4,
OC_UI_SEL_KEY = 5
} oc_ui_selector_kind;
Enum Constants
OC_UI_SEL_ANY
OC_UI_SEL_OWNER
OC_UI_SEL_TEXT
OC_UI_SEL_TAG
OC_UI_SEL_STATUS
OC_UI_SEL_KEY
oc_ui_status
typedef u8 oc_ui_status;
oc_ui_status_enum
typedef enum oc_ui_status_enum
{
OC_UI_NONE = 0,
OC_UI_HOVER = 2,
OC_UI_HOT = 4,
OC_UI_ACTIVE = 8,
OC_UI_DRAGGING = 16
} oc_ui_status_enum;
Enum Constants
OC_UI_NONE
OC_UI_HOVER
OC_UI_HOT
OC_UI_ACTIVE
OC_UI_DRAGGING
oc_ui_selector_op
typedef enum oc_ui_selector_op
{
OC_UI_SEL_DESCENDANT = 0,
OC_UI_SEL_AND = 1
} oc_ui_selector_op;
Enum Constants
OC_UI_SEL_DESCENDANT
OC_UI_SEL_AND
oc_ui_selector
typedef struct oc_ui_selector
{
oc_list_elt listElt;
oc_ui_selector_kind kind;
oc_ui_selector_op op;
union
{
oc_str8 text;
oc_ui_key key;
oc_ui_tag tag;
oc_ui_status status;
};
} oc_ui_selector;
oc_ui_pattern
typedef struct oc_ui_pattern
{
oc_list l;
} oc_ui_pattern;
oc_ui_box
typedef struct oc_ui_box
{
oc_list_elt listElt;
oc_list children;
oc_ui_box* parent;
oc_list_elt overlayElt;
oc_list_elt bucketElt;
oc_ui_key key;
u64 frameCounter;
oc_ui_flags flags;
oc_str8 string;
oc_list tags;
oc_ui_box_draw_proc drawProc;
void* drawData;
oc_list beforeRules;
oc_list afterRules;
oc_ui_style* targetStyle;
oc_ui_style style;
u32 z;
oc_vec2 floatPos;
f32 childrenSum[2];
f32 spacing[2];
f32 minSize[2];
oc_rect rect;
oc_ui_sig* sig;
bool fresh;
bool closed;
bool parentClosed;
bool dragging;
bool hot;
bool active;
oc_vec2 scroll;
oc_vec2 pressedMouse;
f32 hotTransition;
f32 activeTransition;
} oc_ui_box;
oc_ui_style_rule
typedef struct oc_ui_style_rule
{
oc_list_elt boxElt;
oc_list_elt buildElt;
oc_list_elt tmpElt;
oc_ui_box* owner;
oc_ui_pattern pattern;
oc_ui_style_mask mask;
oc_ui_style* style;
} oc_ui_style_rule;
oc_ui_sig
typedef struct oc_ui_sig
{
oc_ui_box* box;
oc_vec2 mouse;
oc_vec2 delta;
oc_vec2 wheel;
bool pressed;
bool released;
bool clicked;
bool doubleClicked;
bool tripleClicked;
bool rightPressed;
bool dragging;
bool hovering;
bool pasted;
} oc_ui_sig;
oc_ui_box_draw_proc
typedef void (*oc_ui_box_draw_proc)((oc_ui_box* arg0, void* arg1));
oc_ui_flags
typedef enum oc_ui_flags
{
OC_UI_FLAG_NONE = 0,
OC_UI_FLAG_CLICKABLE = 1,
OC_UI_FLAG_SCROLL_WHEEL_X = 2,
OC_UI_FLAG_SCROLL_WHEEL_Y = 4,
OC_UI_FLAG_BLOCK_MOUSE = 8,
OC_UI_FLAG_HOT_ANIMATION = 16,
OC_UI_FLAG_ACTIVE_ANIMATION = 32,
OC_UI_FLAG_OVERFLOW_ALLOW_X = 64,
OC_UI_FLAG_OVERFLOW_ALLOW_Y = 128,
OC_UI_FLAG_CLIP = 256,
OC_UI_FLAG_DRAW_BACKGROUND = 512,
OC_UI_FLAG_DRAW_FOREGROUND = 1024,
OC_UI_FLAG_DRAW_BORDER = 2048,
OC_UI_FLAG_DRAW_TEXT = 4096,
OC_UI_FLAG_DRAW_PROC = 8192,
OC_UI_FLAG_OVERLAY = 65536
} oc_ui_flags;
Enum Constants
OC_UI_FLAG_NONE
OC_UI_FLAG_CLICKABLE
OC_UI_FLAG_SCROLL_WHEEL_X
OC_UI_FLAG_SCROLL_WHEEL_Y
OC_UI_FLAG_BLOCK_MOUSE
OC_UI_FLAG_HOT_ANIMATION
OC_UI_FLAG_ACTIVE_ANIMATION
OC_UI_FLAG_OVERFLOW_ALLOW_X
OC_UI_FLAG_OVERFLOW_ALLOW_Y
OC_UI_FLAG_CLIP
OC_UI_FLAG_DRAW_BACKGROUND
OC_UI_FLAG_DRAW_FOREGROUND
OC_UI_FLAG_DRAW_BORDER
OC_UI_FLAG_DRAW_TEXT
OC_UI_FLAG_DRAW_PROC
OC_UI_FLAG_OVERLAY
Anonymous enum
typedef enum
{
OC_UI_MAX_INPUT_CHAR_PER_FRAME = 64
};
Enum Constants
OC_UI_MAX_INPUT_CHAR_PER_FRAME
oc_ui_input_text
typedef struct oc_ui_input_text
{
u8 count;
oc_utf32 codePoints[64];
} oc_ui_input_text;
oc_ui_stack_elt
typedef struct oc_ui_stack_elt
{
oc_ui_stack_elt* parent;
union
{
oc_ui_box* box;
oc_ui_size size;
oc_rect clip;
};
} oc_ui_stack_elt;
oc_ui_tag_elt
typedef struct oc_ui_tag_elt
{
oc_list_elt listElt;
oc_ui_tag tag;
} oc_ui_tag_elt;
Anonymous enum
typedef enum
{
OC_UI_BOX_MAP_BUCKET_COUNT = 1024
};
Enum Constants
OC_UI_BOX_MAP_BUCKET_COUNT
oc_ui_edit_move
typedef enum oc_ui_edit_move
{
OC_UI_EDIT_MOVE_NONE = 0,
OC_UI_EDIT_MOVE_CHAR = 1,
OC_UI_EDIT_MOVE_WORD = 2,
OC_UI_EDIT_MOVE_LINE = 3
} oc_ui_edit_move;
Enum Constants
OC_UI_EDIT_MOVE_NONE
OC_UI_EDIT_MOVE_CHAR
OC_UI_EDIT_MOVE_WORD
OC_UI_EDIT_MOVE_LINE
oc_ui_context
typedef struct oc_ui_context
{
bool init;
oc_input_state input;
u64 frameCounter;
f64 frameTime;
f64 lastFrameDuration;
oc_arena frameArena;
oc_pool boxPool;
oc_list boxMap[1024];
oc_ui_box* root;
oc_ui_box* overlay;
oc_list overlayList;
oc_ui_stack_elt* boxStack;
oc_ui_stack_elt* clipStack;
oc_list nextBoxBeforeRules;
oc_list nextBoxAfterRules;
oc_list nextBoxTags;
u32 z;
oc_ui_box* hovered;
oc_ui_box* focus;
i32 editCursor;
i32 editMark;
i32 editFirstDisplayedChar;
f64 editCursorBlinkStart;
oc_ui_edit_move editSelectionMode;
i32 editWordSelectionInitialCursor;
i32 editWordSelectionInitialMark;
oc_ui_theme* theme;
} oc_ui_context;
oc_ui_text_box_result
typedef struct oc_ui_text_box_result
{
bool changed;
bool accepted;
oc_str8 text;
} oc_ui_text_box_result;
oc_ui_select_popup_info
typedef struct oc_ui_select_popup_info
{
bool changed;
i32 selectedIndex;
i32 optionCount;
oc_str8* options;
oc_str8 placeholder;
} oc_ui_select_popup_info;
oc_ui_radio_group_info
typedef struct oc_ui_radio_group_info
{
bool changed;
i32 selectedIndex;
i32 optionCount;
oc_str8* options;
} oc_ui_radio_group_info;
Functions
oc_input_process_event
void oc_input_process_event(oc_arena* arena, oc_input_state* state, oc_event* event);
oc_input_next_frame
void oc_input_next_frame(oc_input_state* state);
oc_key_down
bool oc_key_down(oc_input_state* state, oc_key_code key);
oc_key_press_count
u8 oc_key_press_count(oc_input_state* state, oc_key_code key);
oc_key_release_count
u8 oc_key_release_count(oc_input_state* state, oc_key_code key);
oc_key_repeat_count
u8 oc_key_repeat_count(oc_input_state* state, oc_key_code key);
oc_key_down_scancode
bool oc_key_down_scancode(oc_input_state* state, oc_scan_code key);
oc_key_press_count_scancode
u8 oc_key_press_count_scancode(oc_input_state* state, oc_scan_code key);
oc_key_release_count_scancode
u8 oc_key_release_count_scancode(oc_input_state* state, oc_scan_code key);
oc_key_repeat_count_scancode
u8 oc_key_repeat_count_scancode(oc_input_state* state, oc_scan_code key);
oc_mouse_down
bool oc_mouse_down(oc_input_state* state, oc_mouse_button button);
oc_mouse_pressed
u8 oc_mouse_pressed(oc_input_state* state, oc_mouse_button button);
oc_mouse_released
u8 oc_mouse_released(oc_input_state* state, oc_mouse_button button);
oc_mouse_clicked
bool oc_mouse_clicked(oc_input_state* state, oc_mouse_button button);
oc_mouse_double_clicked
bool oc_mouse_double_clicked(oc_input_state* state, oc_mouse_button button);
oc_mouse_position
oc_vec2 oc_mouse_position(oc_input_state* state);
oc_mouse_delta
oc_vec2 oc_mouse_delta(oc_input_state* state);
oc_mouse_wheel
oc_vec2 oc_mouse_wheel(oc_input_state* state);
oc_input_text_utf32
oc_str32 oc_input_text_utf32(oc_arena* arena, oc_input_state* state);
oc_input_text_utf8
oc_str8 oc_input_text_utf8(oc_arena* arena, oc_input_state* state);
oc_clipboard_pasted
bool oc_clipboard_pasted(oc_input_state* state);
oc_clipboard_pasted_text
oc_str8 oc_clipboard_pasted_text(oc_input_state* state);
oc_key_mods
oc_keymod_flags oc_key_mods(oc_input_state* state);
oc_ui_init
void oc_ui_init(oc_ui_context* context);
oc_ui_get_context
oc_ui_context* oc_ui_get_context();
oc_ui_set_context
void oc_ui_set_context(oc_ui_context* context);
oc_ui_process_event
void oc_ui_process_event(oc_event* event);
oc_ui_begin_frame
void oc_ui_begin_frame(oc_vec2 size, oc_ui_style* defaultStyle, oc_ui_style_mask mask);
oc_ui_end_frame
void oc_ui_end_frame();
oc_ui_draw
void oc_ui_draw();
oc_ui_set_theme
void oc_ui_set_theme(oc_ui_theme* theme);
oc_ui_key_make_str8
oc_ui_key oc_ui_key_make_str8(oc_str8 string);
oc_ui_key_make_path
oc_ui_key oc_ui_key_make_path(oc_str8_list path);
oc_ui_box_make_str8
oc_ui_box* oc_ui_box_make_str8(oc_str8 string, oc_ui_flags flags);
oc_ui_box_begin_str8
oc_ui_box* oc_ui_box_begin_str8(oc_str8 string, oc_ui_flags flags);
oc_ui_box_end
oc_ui_box* oc_ui_box_end();
oc_ui_box_push
void oc_ui_box_push(oc_ui_box* box);
oc_ui_box_pop
void oc_ui_box_pop();
oc_ui_box_top
oc_ui_box* oc_ui_box_top();
oc_ui_box_lookup_key
oc_ui_box* oc_ui_box_lookup_key(oc_ui_key key);
oc_ui_box_lookup_str8
oc_ui_box* oc_ui_box_lookup_str8(oc_str8 string);
oc_ui_box_set_draw_proc
void oc_ui_box_set_draw_proc(oc_ui_box* box, oc_ui_box_draw_proc proc, void* data);
oc_ui_box_closed
bool oc_ui_box_closed(oc_ui_box* box);
oc_ui_box_set_closed
void oc_ui_box_set_closed(oc_ui_box* box, bool closed);
oc_ui_box_active
bool oc_ui_box_active(oc_ui_box* box);
oc_ui_box_activate
void oc_ui_box_activate(oc_ui_box* box);
oc_ui_box_deactivate
void oc_ui_box_deactivate(oc_ui_box* box);
oc_ui_box_hot
bool oc_ui_box_hot(oc_ui_box* box);
oc_ui_box_set_hot
void oc_ui_box_set_hot(oc_ui_box* box, bool hot);
oc_ui_box_sig
oc_ui_sig oc_ui_box_sig(oc_ui_box* box);
oc_ui_tag_make_str8
oc_ui_tag oc_ui_tag_make_str8(oc_str8 string);
oc_ui_tag_box_str8
void oc_ui_tag_box_str8(oc_ui_box* box, oc_str8 string);
oc_ui_tag_next_str8
void oc_ui_tag_next_str8(oc_str8 string);
oc_ui_apply_style_with_mask
void oc_ui_apply_style_with_mask(oc_ui_style* dst, oc_ui_style* src, oc_ui_style_mask mask);
oc_ui_pattern_push
void oc_ui_pattern_push(oc_arena* arena, oc_ui_pattern* pattern, oc_ui_selector selector);
oc_ui_pattern_all
oc_ui_pattern oc_ui_pattern_all();
oc_ui_pattern_owner
oc_ui_pattern oc_ui_pattern_owner();
oc_ui_style_next
void oc_ui_style_next(oc_ui_style* style, oc_ui_style_mask mask);
oc_ui_style_match_before
void oc_ui_style_match_before(oc_ui_pattern pattern, oc_ui_style* style, oc_ui_style_mask mask);
oc_ui_style_match_after
void oc_ui_style_match_after(oc_ui_pattern pattern, oc_ui_style* style, oc_ui_style_mask mask);
oc_ui_label
oc_ui_sig oc_ui_label(char* label);
oc_ui_label_str8
oc_ui_sig oc_ui_label_str8(oc_str8 label);
oc_ui_button
oc_ui_sig oc_ui_button(char* label);
oc_ui_checkbox
oc_ui_sig oc_ui_checkbox(char* name, bool* checked);
oc_ui_slider
oc_ui_box* oc_ui_slider(char* name, f32* value);
oc_ui_scrollbar
oc_ui_box* oc_ui_scrollbar(char* name, f32 thumbRatio, f32* scrollValue);
oc_ui_tooltip
void oc_ui_tooltip(char* label);
oc_ui_panel_begin
void oc_ui_panel_begin(char* name, oc_ui_flags flags);
oc_ui_panel_end
void oc_ui_panel_end();
oc_ui_menu_bar_begin
void oc_ui_menu_bar_begin(char* name);
oc_ui_menu_bar_end
void oc_ui_menu_bar_end();
oc_ui_menu_begin
void oc_ui_menu_begin(char* label);
oc_ui_menu_end
void oc_ui_menu_end();
oc_ui_menu_button
oc_ui_sig oc_ui_menu_button(char* label);
oc_ui_text_box
oc_ui_text_box_result oc_ui_text_box(char* name, oc_arena* arena, oc_str8 text);
oc_ui_select_popup
oc_ui_select_popup_info oc_ui_select_popup(char* name, oc_ui_select_popup_info* info);
oc_ui_radio_group
oc_ui_radio_group_info oc_ui_radio_group(char* name, oc_ui_radio_group_info* info);