#pragma once #include "pxl8_gfx.h" #include "pxl8_types.h" typedef struct pxl8_ui pxl8_ui; typedef struct pxl8_ui_theme { u8 text; u8 border; u8 window_bg; u8 title_bg; u8 title_text; u8 panel_bg; u8 button; u8 button_hover; u8 button_focus; u8 base; u8 base_hover; u8 base_focus; u8 scroll_base; u8 scroll_thumb; } pxl8_ui_theme; typedef struct pxl8_frame_theme { u8 bg_color; u32 sprite_id; i32 corner_size; i32 edge_size; i32 padding; } pxl8_frame_theme; typedef struct pxl8_menu_item { bool enabled; const char* label; } pxl8_menu_item; typedef enum pxl8_ui_options { PXL8_UI_NOCLOSE = 1 << 0, PXL8_UI_NOFRAME = 1 << 1, PXL8_UI_NORESIZE = 1 << 2, PXL8_UI_NOTITLE = 1 << 3 } pxl8_ui_options; #ifdef __cplusplus extern "C" { #endif pxl8_ui* pxl8_ui_create(pxl8_gfx* gfx); void pxl8_ui_destroy(pxl8_ui* ui); void pxl8_ui_frame_begin(pxl8_ui* ui); void pxl8_ui_frame_end(pxl8_ui* ui); void pxl8_ui_input_keydown(pxl8_ui* ui, i32 key); void pxl8_ui_input_keyup(pxl8_ui* ui, i32 key); void pxl8_ui_input_mousedown(pxl8_ui* ui, i32 x, i32 y, i32 button); void pxl8_ui_input_mousemove(pxl8_ui* ui, i32 x, i32 y); void pxl8_ui_input_mouseup(pxl8_ui* ui, i32 x, i32 y, i32 button); void pxl8_ui_input_scroll(pxl8_ui* ui, i32 x, i32 y); void pxl8_ui_input_text(pxl8_ui* ui, const char* text); bool pxl8_ui_button(pxl8_ui* ui, const char* label); bool pxl8_ui_checkbox(pxl8_ui* ui, const char* label, bool* state); void pxl8_ui_indent(pxl8_ui* ui, i32 amount); void pxl8_ui_label(pxl8_ui* ui, const char* text); void pxl8_ui_layout_row(pxl8_ui* ui, i32 item_count, const i32* widths, i32 height); i32 pxl8_ui_menu(pxl8_ui* ui, pxl8_menu_item* items, i32 item_count); void pxl8_ui_panel(pxl8_ui* ui, pxl8_bounds rect, pxl8_frame_theme* theme); bool pxl8_ui_window_begin(pxl8_ui* ui, const char* title, pxl8_bounds rect, i32 options); void pxl8_ui_window_end(pxl8_ui* ui); void pxl8_ui_window_set_open(pxl8_ui* ui, const char* title, bool open); pxl8_frame_theme pxl8_ui_theme_default(void); #ifdef __cplusplus } #endif