1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
#ifndef PKE_STATIC_UI_HPP
#define PKE_STATIC_UI_HPP
#include "components-vk.hpp"
#include <cstdint>
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 */
|