#ifndef PKE_STATIC_UI_HPP #define PKE_STATIC_UI_HPP #include "components-vk.hpp" #include struct MSDFGlyphSettings { float width; float height; float scale; float translate_em; float range_em; }; enum PKE_UI_BOX_FLAGS : uint64_t { PKE_UI_BOX_FLAG_NONE = 0, // position type [0-1] // exact screen coordinates PKE_UI_BOX_FLAG_POSITION_TYPE_FLEX = (1 << 0), PKE_UI_BOX_FLAG_POSITION_TYPE_STATIC = (1 << 1), PKE_UI_BOX_FLAG_POSITION_TYPE_DYNAMIC = (1 << 2), PKE_UI_BOX_FLAG_POSITION_TYPE_ALL = (1 << 0) | (1 << 1) | (1 << 2), /* // grow [2-3] PKE_UI_BOX_FLAG_GROW_HORIZONTAL = (1 << 3), PKE_UI_BOX_FLAG_GROW_VERTICAL = (1 << 4), PKE_UI_BOX_FLAG_GROW_BOTH = (1 << 3) | (1 << 4), */ // center [4-5] PKE_UI_BOX_FLAG_CENTER_HORIZONTAL = (1 << 5), PKE_UI_BOX_FLAG_CENTER_VERTICAL = (1 << 6), PKE_UI_BOX_FLAG_CENTER_BOTH = (1 << 5) | (1 << 6), }; typedef uint16_t pke_ui_box_count_T; struct pke_ui_box; struct pke_ui_box { PKE_UI_BOX_FLAGS flags; float pos_top_left_x, pos_top_left_y; float min_width, min_height; float max_width, max_height; uint8_t layer; struct pke_ui_box_internals { float px_corner_x, px_corner_y; float px_width, px_height; float px_offset_x, px_offset_y; pke_ui_box *parent; pke_ui_box **children; pke_ui_box_count_T h_children; pke_ui_box_count_T r_children; } internal; }; struct pke_ui_graphics_bindings { VkDeviceMemory deviceMemoryVert = VK_NULL_HANDLE; VkDeviceMemory deviceMemoryInst = VK_NULL_HANDLE; BufferBindingDetails bd_vertex; BufferBindingDetails bd_uv; BufferBindingDetails bd_index; BufferBindingDetails bd_instance; uint32_t index_count; uint32_t instance_counter; uint32_t instance_buffer_max_count; }; void pke_ui_init(); void pke_ui_init_bindings(); void pke_ui_tick(double delta); void pke_ui_teardown(); pke_ui_box *pke_ui_box_new_root(); pke_ui_box *pke_ui_box_new_child(pke_ui_box *parent); pke_ui_graphics_bindings *pke_ui_get_graphics_bindings(); #endif /* PKE_STATIC_UI_HPP */