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