UI Core
Graphical User Interface Core API.
Types
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_size_kind
typedef enum oc_ui_size_kind
{
OC_UI_SIZE_CHILDREN = 0,
OC_UI_SIZE_TEXT = 1,
OC_UI_SIZE_PIXELS = 2,
OC_UI_SIZE_PARENT = 3,
OC_UI_SIZE_PARENT_MINUS_PIXELS = 4
} oc_ui_size_kind;
Enum Constants
OC_UI_SIZE_CHILDREN
OC_UI_SIZE_TEXT
OC_UI_SIZE_PIXELS
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_overflow
typedef enum oc_ui_overflow
{
OC_UI_OVERFLOW_CLIP = 0,
OC_UI_OVERFLOW_ALLOW = 1,
OC_UI_OVERFLOW_SCROLL = 2
} oc_ui_overflow;
Enum Constants
OC_UI_OVERFLOW_CLIP
OC_UI_OVERFLOW_ALLOW
OC_UI_OVERFLOW_SCROLL
oc_ui_attribute
typedef enum oc_ui_attribute
{
OC_UI_WIDTH = 0,
OC_UI_HEIGHT = 1,
OC_UI_AXIS = 2,
OC_UI_MARGIN_X = 3,
OC_UI_MARGIN_Y = 4,
OC_UI_SPACING = 5,
OC_UI_ALIGN_X = 6,
OC_UI_ALIGN_Y = 7,
OC_UI_FLOATING_X = 8,
OC_UI_FLOATING_Y = 9,
OC_UI_FLOAT_TARGET_X = 10,
OC_UI_FLOAT_TARGET_Y = 11,
OC_UI_OVERFLOW_X = 12,
OC_UI_OVERFLOW_Y = 13,
OC_UI_CONSTRAIN_X = 14,
OC_UI_CONSTRAIN_Y = 15,
OC_UI_COLOR = 16,
OC_UI_BG_COLOR = 17,
OC_UI_BORDER_COLOR = 18,
OC_UI_FONT = 19,
OC_UI_TEXT_SIZE = 20,
OC_UI_BORDER_SIZE = 21,
OC_UI_ROUNDNESS = 22,
OC_UI_DRAW_MASK = 23,
OC_UI_ANIMATION_TIME = 24,
OC_UI_ANIMATION_MASK = 25,
OC_UI_CLICK_THROUGH = 26,
OC_UI_ATTRIBUTE_COUNT = 27
} oc_ui_attribute;
Enum Constants
OC_UI_WIDTH
OC_UI_HEIGHT
OC_UI_AXIS
OC_UI_MARGIN_X
OC_UI_MARGIN_Y
OC_UI_SPACING
OC_UI_ALIGN_X
OC_UI_ALIGN_Y
OC_UI_FLOATING_X
OC_UI_FLOATING_Y
OC_UI_FLOAT_TARGET_X
OC_UI_FLOAT_TARGET_Y
OC_UI_OVERFLOW_X
OC_UI_OVERFLOW_Y
OC_UI_CONSTRAIN_X
OC_UI_CONSTRAIN_Y
OC_UI_COLOR
OC_UI_BG_COLOR
OC_UI_BORDER_COLOR
OC_UI_FONT
OC_UI_TEXT_SIZE
OC_UI_BORDER_SIZE
OC_UI_ROUNDNESS
OC_UI_DRAW_MASK
OC_UI_ANIMATION_TIME
OC_UI_ANIMATION_MASK
OC_UI_CLICK_THROUGH
OC_UI_ATTRIBUTE_COUNT
oc_ui_attribute_mask
typedef enum oc_ui_attribute_mask
{
OC_UI_MASK_NONE = 0,
OC_UI_MASK_SIZE_WIDTH = 1,
OC_UI_MASK_SIZE_HEIGHT = 2,
OC_UI_MASK_LAYOUT_AXIS = 4,
OC_UI_MASK_LAYOUT_ALIGN_X = 64,
OC_UI_MASK_LAYOUT_ALIGN_Y = 128,
OC_UI_MASK_LAYOUT_SPACING = 32,
OC_UI_MASK_LAYOUT_MARGIN_X = 8,
OC_UI_MASK_LAYOUT_MARGIN_Y = 16,
OC_UI_MASK_FLOATING_X = 256,
OC_UI_MASK_FLOATING_Y = 512,
OC_UI_MASK_FLOAT_TARGET_X = 1024,
OC_UI_MASK_FLOAT_TARGET_Y = 2048,
OC_UI_MASK_OVERFLOW_X = 4096,
OC_UI_MASK_OVERFLOW_Y = 8192,
OC_UI_MASK_CONSTRAIN_X = 16384,
OC_UI_MASK_CONSTRAIN_Y = 32768,
OC_UI_MASK_COLOR = 65536,
OC_UI_MASK_BG_COLOR = 131072,
OC_UI_MASK_BORDER_COLOR = 262144,
OC_UI_MASK_BORDER_SIZE = 2097152,
OC_UI_MASK_ROUNDNESS = 4194304,
OC_UI_MASK_FONT = 524288,
OC_UI_MASK_FONT_SIZE = 1048576,
OC_UI_MASK_DRAW_MASK = 8388608,
OC_UI_MASK_ANIMATION_TIME = 16777216,
OC_UI_MASK_ANIMATION_MASK = 33554432,
OC_UI_MASK_CLICK_THROUGH = 67108864
} oc_ui_attribute_mask;
Enum Constants
OC_UI_MASK_NONE
OC_UI_MASK_SIZE_WIDTH
OC_UI_MASK_SIZE_HEIGHT
OC_UI_MASK_LAYOUT_AXIS
OC_UI_MASK_LAYOUT_ALIGN_X
OC_UI_MASK_LAYOUT_ALIGN_Y
OC_UI_MASK_LAYOUT_SPACING
OC_UI_MASK_LAYOUT_MARGIN_X
OC_UI_MASK_LAYOUT_MARGIN_Y
OC_UI_MASK_FLOATING_X
OC_UI_MASK_FLOATING_Y
OC_UI_MASK_FLOAT_TARGET_X
OC_UI_MASK_FLOAT_TARGET_Y
OC_UI_MASK_OVERFLOW_X
OC_UI_MASK_OVERFLOW_Y
OC_UI_MASK_CONSTRAIN_X
OC_UI_MASK_CONSTRAIN_Y
OC_UI_MASK_COLOR
OC_UI_MASK_BG_COLOR
OC_UI_MASK_BORDER_COLOR
OC_UI_MASK_BORDER_SIZE
OC_UI_MASK_ROUNDNESS
OC_UI_MASK_FONT
OC_UI_MASK_FONT_SIZE
OC_UI_MASK_DRAW_MASK
OC_UI_MASK_ANIMATION_TIME
OC_UI_MASK_ANIMATION_MASK
OC_UI_MASK_CLICK_THROUGH
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;
union
{
struct
{
oc_ui_overflow x;
oc_ui_overflow y;
};
oc_ui_overflow c[2];
} overflow;
union
{
struct
{
bool x;
bool y;
};
bool c[2];
} constrain;
} oc_ui_layout;
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_draw_mask
typedef enum oc_ui_draw_mask
{
OC_UI_DRAW_MASK_BACKGROUND = 1,
OC_UI_DRAW_MASK_BORDER = 2,
OC_UI_DRAW_MASK_TEXT = 4,
OC_UI_DRAW_MASK_PROC = 8
} oc_ui_draw_mask;
Enum Constants
OC_UI_DRAW_MASK_BACKGROUND
OC_UI_DRAW_MASK_BORDER
OC_UI_DRAW_MASK_TEXT
OC_UI_DRAW_MASK_PROC
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;
u32 drawMask;
f32 animationTime;
oc_ui_attribute_mask animationMask;
bool clickThrough;
} oc_ui_style;
oc_ui_box
typedef struct oc_ui_box
{
} oc_ui_box;
oc_ui_context
typedef struct oc_ui_context
{
} oc_ui_context;
oc_ui_sig
typedef struct oc_ui_sig
{
oc_ui_box* box;
oc_vec2 mouse;
oc_vec2 delta;
oc_vec2 wheel;
oc_vec2 lastPressedMouse;
bool pressed;
bool released;
bool clicked;
bool doubleClicked;
bool tripleClicked;
bool rightPressed;
bool closed;
bool active;
bool hover;
bool focus;
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_key
typedef struct oc_ui_key
{
u64 hash;
} oc_ui_key;
oc_ui_box
typedef struct oc_ui_box
{
oc_list_elt listElt;
oc_list children;
oc_ui_box* parent;
oc_list_elt overlayElt;
bool overlay;
oc_list_elt bucketElt;
oc_ui_key key;
u64 frameCounter;
oc_str8 keyString;
oc_str8 text;
oc_list tags;
oc_ui_box_draw_proc drawProc;
void* drawData;
oc_list rules;
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_list styleVariables;
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;
Functions
oc_ui_context_create
oc_ui_context* oc_ui_context_create(oc_font defaultFont);
oc_ui_context_destroy
void oc_ui_context_destroy(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_frame_begin
void oc_ui_frame_begin(oc_vec2 size);
oc_ui_frame_end
void oc_ui_frame_end();
oc_ui_draw
void oc_ui_draw();
oc_ui_input
oc_input_state* oc_ui_input();
oc_ui_frame_arena
oc_arena* oc_ui_frame_arena();
oc_ui_frame_time
f64 oc_ui_frame_time();
oc_ui_box_begin_str8
oc_ui_box* oc_ui_box_begin_str8(oc_str8 string);
oc_ui_box_end
oc_ui_box* oc_ui_box_end();
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_set_text
void oc_ui_box_set_text(oc_ui_box* box, oc_str8 text);
oc_ui_box_set_overlay
void oc_ui_box_set_overlay(oc_ui_box* box, bool overlay);
oc_ui_box_set_closed
void oc_ui_box_set_closed(oc_ui_box* box, bool closed);
oc_ui_box_user_data_get
char* oc_ui_box_user_data_get(oc_ui_box* box);
oc_ui_box_user_data_push
char* oc_ui_box_user_data_push(oc_ui_box* box, u64 size);
oc_ui_box_request_focus
void oc_ui_box_request_focus(oc_ui_box* box);
oc_ui_box_release_focus
void oc_ui_box_release_focus(oc_ui_box* box);
oc_ui_box_get_sig
oc_ui_sig oc_ui_box_get_sig(oc_ui_box* box);
oc_ui_set_draw_proc
void oc_ui_set_draw_proc(oc_ui_box_draw_proc proc, void* data);
oc_ui_set_text
void oc_ui_set_text(oc_str8 text);
oc_ui_set_overlay
void oc_ui_set_overlay(bool overlay);
oc_ui_set_closed
void oc_ui_set_closed(bool closed);
oc_ui_user_data_get
char* oc_ui_user_data_get();
oc_ui_user_data_push
char* oc_ui_user_data_push(u64 size);
oc_ui_request_focus
void oc_ui_request_focus();
oc_ui_release_focus
void oc_ui_release_focus();
oc_ui_get_sig
oc_ui_sig oc_ui_get_sig();
oc_ui_box_tag_str8
void oc_ui_box_tag_str8(oc_ui_box* box, oc_str8 string);
oc_ui_tag_str8
void oc_ui_tag_str8(oc_str8 string);
oc_ui_tag_next_str8
void oc_ui_tag_next_str8(oc_str8 string);
oc_ui_style_rule_begin
void oc_ui_style_rule_begin(oc_str8 pattern);
oc_ui_style_rule_end
void oc_ui_style_rule_end();
oc_ui_style_set_i32
void oc_ui_style_set_i32(oc_ui_attribute attr, i32 i);
oc_ui_style_set_f32
void oc_ui_style_set_f32(oc_ui_attribute attr, f32 f);
oc_ui_style_set_color
void oc_ui_style_set_color(oc_ui_attribute attr, oc_color color);
oc_ui_style_set_font
void oc_ui_style_set_font(oc_ui_attribute attr, oc_font font);
oc_ui_style_set_size
void oc_ui_style_set_size(oc_ui_attribute attr, oc_ui_size size);
oc_ui_style_set_var_str8
void oc_ui_style_set_var_str8(oc_ui_attribute attr, oc_str8 var);
oc_ui_style_set_var
void oc_ui_style_set_var(oc_ui_attribute attr, char* var);
oc_ui_var_default_i32_str8
void oc_ui_var_default_i32_str8(oc_str8 name, i32 i);
oc_ui_var_default_f32_str8
void oc_ui_var_default_f32_str8(oc_str8 name, f32 f);
oc_ui_var_default_size_str8
void oc_ui_var_default_size_str8(oc_str8 name, oc_ui_size size);
oc_ui_var_default_color_str8
void oc_ui_var_default_color_str8(oc_str8 name, oc_color color);
oc_ui_var_default_font_str8
void oc_ui_var_default_font_str8(oc_str8 name, oc_font font);
oc_ui_var_default_str8
void oc_ui_var_default_str8(oc_str8 name, oc_str8 src);
oc_ui_var_default_i32
void oc_ui_var_default_i32(char* name, i32 i);
oc_ui_var_default_f32
void oc_ui_var_default_f32(char* name, f32 f);
oc_ui_var_default_size
void oc_ui_var_default_size(char* name, oc_ui_size size);
oc_ui_var_default_color
void oc_ui_var_default_color(char* name, oc_color color);
oc_ui_var_default_font
void oc_ui_var_default_font(char* name, oc_font font);
oc_ui_var_default
void oc_ui_var_default(char* name, char* src);
oc_ui_var_set_i32_str8
void oc_ui_var_set_i32_str8(oc_str8 name, i32 i);
oc_ui_var_set_f32_str8
void oc_ui_var_set_f32_str8(oc_str8 name, f32 f);
oc_ui_var_set_size_str8
void oc_ui_var_set_size_str8(oc_str8 name, oc_ui_size size);
oc_ui_var_set_color_str8
void oc_ui_var_set_color_str8(oc_str8 name, oc_color color);
oc_ui_var_set_font_str8
void oc_ui_var_set_font_str8(oc_str8 name, oc_font font);
oc_ui_var_set_str8
void oc_ui_var_set_str8(oc_str8 name, oc_str8 src);
oc_ui_var_set_i32
void oc_ui_var_set_i32(char* name, i32 i);
oc_ui_var_set_f32
void oc_ui_var_set_f32(char* name, f32 f);
oc_ui_var_set_size
void oc_ui_var_set_size(char* name, oc_ui_size size);
oc_ui_var_set_color
void oc_ui_var_set_color(char* name, oc_color color);
oc_ui_var_set_font
void oc_ui_var_set_font(char* name, oc_font font);
oc_ui_var_set
void oc_ui_var_set(char* name, char* src);
oc_ui_var_get_i32_str8
i32 oc_ui_var_get_i32_str8(oc_str8 name);
oc_ui_var_get_f32_str8
f32 oc_ui_var_get_f32_str8(oc_str8 name);
oc_ui_var_get_size_str8
oc_ui_size oc_ui_var_get_size_str8(oc_str8 name);
oc_ui_var_get_color_str8
oc_color oc_ui_var_get_color_str8(oc_str8 name);
oc_ui_var_get_font_str8
oc_font oc_ui_var_get_font_str8(oc_str8 name);
oc_ui_var_get_i32
i32 oc_ui_var_get_i32(char* name);
oc_ui_var_get_f32
f32 oc_ui_var_get_f32(char* name);
oc_ui_var_get_size
oc_ui_size oc_ui_var_get_size(char* name);
oc_ui_var_get_color
oc_color oc_ui_var_get_color(char* name);
oc_ui_var_get_font
oc_font oc_ui_var_get_font(char* name);
oc_ui_theme_dark
void oc_ui_theme_dark();
oc_ui_theme_light
void oc_ui_theme_light();