#ifndef BREEZE_UI_CORE_H #define BREEZE_UI_CORE_H #include "../defines.h" #include typedef u32 BzUIFlags; typedef u32 BzUIKey; typedef enum BzUISizeKind { BZ_UI_SIZE_NULL, BZ_UI_SIZE_PIXELS, BZ_UI_SIZE_FIT, BZ_UI_SIZE_PARENT_PERCENT, BZ_UI_SIZE_CHILD_SUM, BZ_UI_SIZE_CHILD_MAX, } BzUISizeKind; typedef struct BzUISize { BzUISizeKind kind; f32 value; } BzUISize; typedef enum BzUILayoutType { BZ_UI_LAYOUT_NONE, BZ_UI_LAYOUT_UNIDIR, BZ_UI_LAYOUT_FLEX_BOX } BzUILayoutType; enum { // UNIDIRECTIONAL BZ_UI_UNIDIR_NONE = 0, BZ_UI_UNIDIR_ROW = (1 << 0), BZ_UI_UNIDIR_COLUMN = (1 << 1), BZ_UI_UNIDIR_WRAP = (1 << 2), // FLEX BOX BZ_UI_FLEX_NONE = 0, BZ_UI_FLEX_DIR_ROW = (1 << 0), BZ_UI_FLEX_DIR_COLUMN = (1 << 1), BZ_UI_FLEX_ALIGN_START = (1 << 2), BZ_UI_FLEX_ALIGN_CENTER = (1 << 3), BZ_UI_FLEX_ALIGN_END = (1 << 4), BZ_UI_FLEX_JUSTIFY_START = (1 << 5), BZ_UI_FLEX_JUSTIFY_CENTER = (1 << 6), BZ_UI_FLEX_JUSTIFY_END = (1 << 7), BZ_UI_FLEX_JUSTIFY_SPACE_BETWEEN = (1 << 8), BZ_UI_FLEX_JUSTIFY_SPACE_AROUND = (1 << 9), BZ_UI_FLEX_JUSTIFY_SPACE_EVENLY = (1 << 10), }; typedef struct BzUILayout { BzUILayoutType type; BzUIFlags flags; } BzUILayout; typedef struct BzUIStyle { Font font; f32 fontSize; f32 fontSpacing; f32 borderThickness; f32 roundness; Color textColor; Color textHoverColor; Color textActiveColor; Color bgColor; Color bgHoverColor; Color bgActiveColor; Color borderColor; Color borderHoverColor; Color borderActiveColor; } BzUIStyle; typedef enum BzUIAxis { BZ_UI_AXIS_X, BZ_UI_AXIS_Y, BZ_UI_AXIS_COUNT, } BzUIAxis; enum { BZ_UI_NONE = 0, BZ_UI_CLICKABLE = (1 << 0), BZ_UI_DRAW_TEXT = (1 << 1), BZ_UI_DRAW_BORDER = (1 << 2), BZ_UI_DRAW_BACKGROUND = (1 << 3), //BZ_UI_DRAW_SPRITE = (1 << 4), BZ_UI_ALIGN_HORIZ_START = (1 << 5), BZ_UI_ALIGN_HORIZ_CENTER = (1 << 6), BZ_UI_ALIGN_HORIZ_END = (1 << 7), BZ_UI_ALIGN_VERT_START = (1 << 8), BZ_UI_ALIGN_VERT_CENTER = (1 << 9), BZ_UI_ALIGN_VERT_END = (1 << 10), BZ_UI_ALIGN_CENTER = BZ_UI_ALIGN_HORIZ_CENTER | BZ_UI_ALIGN_VERT_CENTER, }; typedef struct BzUINode BzUINode; typedef struct BzUIInteraction { bool pressed : 1; bool down : 1; bool released : 1; bool clicked : 1; //bool dragging : 1; bool hovering : 1; } BzUIInteraction; typedef struct BzUI BzUI; BzUIKey bzUIKeyNull(); BzUIKey bzUIKeyFromString(const char *str); BzUI *bzUICreate(); void bzUIDestroy(BzUI *ui); void bzUIBegin(BzUI *ui, i32 width, i32 height); void bzUIEnd(BzUI *ui); BzUIKey bzUIGetUniqueKey(BzUI *ui); BzUINode *bzUINodeMake(BzUI *ui, BzUIKey key, BzUIFlags flags); BzUINode *bzUIPushParent(BzUI *ui, BzUINode *node); BzUINode *bzUIPopParent(BzUI *ui); void bzUISetParentLayout(BzUI *ui, BzUILayout layout); BzUIInteraction bzUIGetInteraction(BzUI *ui, BzUINode *node); bool bzUIButton(BzUI *ui, const char *string, BzUIStyle *style); #endif //BREEZE_UI_CORE_H