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