Skip to content

Commit b88884f

Browse files
committed
[ref][update] new layout headers, added more template-constexpr utils functions
1 parent 9b8d9d7 commit b88884f

File tree

17 files changed

+736
-664
lines changed

17 files changed

+736
-664
lines changed

include/ekg/gpu/allocator.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ namespace ekg::gpu {
3939
static bool high_priority;
4040
static uint64_t current_rendering_data_count;
4141
protected:
42-
std::vector<ekg::gpu::data_t> data_list {};
42+
std::vector<ekg::io::gpu_data_t> data_list {};
4343
std::vector<float> geometry_resource_list {};
4444

45-
std::vector<ekg::gpu::data_t> high_priority_data_list {};
45+
std::vector<ekg::io::gpu_data_t> high_priority_data_list {};
4646
std::vector<float> high_priority_geometry_resource_list {};
4747

4848
uint64_t high_priority_data_instance_index {};
@@ -74,7 +74,7 @@ namespace ekg::gpu {
7474
/*
7575
* Bind a new gpu data.
7676
*/
77-
ekg::gpu::data_t &bind_current_data();
77+
ekg::io::gpu_data_t &bind_current_data();
7878

7979
/*
8080
* Clear current gpu data active.
@@ -84,7 +84,7 @@ namespace ekg::gpu {
8484
/*
8585
* Find registered gpu data in allocator's batch.
8686
*/
87-
ekg::gpu::data_t *get_data_by_id(int32_t id);
87+
ekg::io::gpu_data_t *get_data_by_id(int32_t id);
8888

8989
/*
9090
* Get current gpu data.

include/ekg/io/input.hpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,22 @@ namespace ekg {
3737
no_auto_set_viewport_when_resize = 2 << 1
3838
};
3939

40+
struct input_t {
41+
public:
42+
ekg::timing_t timing_last_interact {};
43+
ekg::vec4_t<float> interact {};
44+
bool was_pressed {};
45+
bool was_released {};
46+
bool has_motion {};
47+
bool was_wheel {};
48+
bool was_typed {};
49+
};
50+
4051
bool fire();
4152
bool input(std::string_view input);
4253
void bind(std::string_view tag, std::string_view input);
4354
void bind(std::string_view tag, std::vector<std::string_view> inputs);
55+
ekg::input_t &input();
4456
}
4557

4658
namespace ekg::io {

include/ekg/io/memory.hpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
#define EKG_MEMORY_MUST_FREE_TASKS_AUTOMATICALLY true
2929
#define EKG_MEMORY_ACTIONS_SIZE 7
3030

31-
#define ekg_static_cast_to_any_as_ptr(t, any) static_cast<t*>((void*)&any)
32-
3331
#include <cstdint>
3432

3533
namespace ekg {
@@ -97,6 +95,11 @@ namespace ekg {
9795

9896
enum ekg::io {
9997
constexpr uint64_t invalid_unique_id {static_cast<uint64_t>(0)};
98+
99+
template<typename t>
100+
constexpr t &any_static_cast(void *p_any) {
101+
return *static_cast<t*>(p_any);
102+
}
100103
}
101104

102-
#endif
105+
#endif

include/ekg/io/safety.hpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,8 @@ namespace ekg::io {
6161

6262
switch (descriptor.type) {
6363
case ekg::type::frame: {
64-
ekg::frame_t *p_descriptor {
65-
ekg_static_cast_to_any_as_ptr(
66-
ekg::frame_t,
64+
ekg::frame_t &frame {
65+
ekg::io::any_static_cast<ekg::frame_t>(
6766
descriptor
6867
)
6968
};
@@ -72,8 +71,8 @@ namespace ekg::io {
7271
ekg::io::new_widget_instance<ekg::ui::frame>()
7372
};
7473

75-
p_frame->descriptor = *p_descriptor;
76-
properties.p_descriptor = &p_frame->descriptor;
74+
p_frame->descriptor = frame;
75+
properties.descriptor = &p_frame->descriptor;
7776
properties.p_widget = &p_frame;
7877

7978
p_created_widget = p_frame;
@@ -102,4 +101,4 @@ namespace ekg::io {
102101
}
103102
}
104103

105-
#endif
104+
#endif

include/ekg/layout/dimension.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef EKG_LAYOUT_DIMENSION_HPP
2+
#define EKG_LAYOUT_DIMENSION_HPP
3+
4+
namespace ekg {
5+
/**
6+
* Estimate height from a container children list.
7+
* Note: Recursive.
8+
**/
9+
float estimate_height(
10+
ekg::ui::abstract_widget *p_parent_widget
11+
);
12+
}
13+
14+
#endif

include/ekg/layout/docknize.hpp

Lines changed: 17 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -61,107 +61,36 @@
6161
) \
6262

6363
namespace ekg::layout {
64-
/**
65-
* The between widgets offset: Auto-scaled & pixel-fixed.
66-
**/
67-
extern float offset;
68-
69-
/**
70-
* Column and row store extent values, used to calculate
71-
* the remains size for `ekg::dock::fill`.
72-
**/
73-
struct extent_t {
74-
public:
75-
int64_t end_index {};
76-
int64_t begin_index {};
77-
int64_t count {};
78-
float extent {};
79-
};
80-
81-
extern ekg::layout::extent_t h_extent;
82-
extern ekg::layout::extent_t v_extent;
83-
84-
struct fill_align_t {
85-
public:
86-
bool was_last_fill_found {};
87-
bool was_found {};
88-
bool must_calculate_pixel_perfect {};
89-
bool was_pixel_perfect_calculated {};
90-
91-
float align {static_cast<float>(UINT32_MAX)}; // idk may i duwmb
92-
int64_t index {};
93-
int64_t end_fill_index {};
94-
};
95-
96-
/**
97-
* The between rects from widgets can be docknized
98-
* and return a rect mask (the bouding limits of docknization action).
99-
*
100-
* The use is simple:
101-
* set a preset,
102-
* insert dock rects (rect with dock),
103-
* docknize,
104-
* get the rect mask.
105-
**/
106-
struct mask {
107-
public:
108-
struct rect {
109-
public:
110-
ekg::rect *p_rect {};
111-
ekg::flags flags {};
112-
};
64+
class mask {
11365
protected:
114-
std::vector<ekg::layout::mask::rect> dock_rect_list {};
66+
std::vector<ekg::rect_descriptor_t> rect_descriptor_list {};
11567
float respective_all {};
11668
float respective_center {};
117-
ekg::axis axis {};
118-
ekg::vec3 offset {};
119-
ekg::rect mask {};
120-
ekg::layout::extent_t v_extent {};
121-
ekg::layout::extent_t h_extent {};
122-
protected:
123-
void extentnize(
124-
float &extent,
125-
ekg::flags flag_ok,
126-
ekg::flags flag_stop,
127-
int64_t &begin_and_count,
128-
ekg::axis axis
129-
);
69+
ekg::flags_t axis {};
70+
ekg::vec3_t<float> offset {};
71+
ekg::rect_t<float> mask {};
13072
public:
131-
void preset(const ekg::vec3 &mask_offset, ekg::axis mask_axis, float initial_respective_size = 0.0f);
132-
void insert(const ekg::layout::mask::rect &dock_rect);
73+
void preset(
74+
ekg::vec3_t<float> offset,
75+
ekg::flags_t axis,
76+
float initial_respective_size = 0.0f
77+
);
78+
79+
void insert(
80+
ekg::rect_descriptor_t rect_descriptor
81+
);
82+
13383
void docknize();
134-
ekg::rect &get_rect();
84+
ekg::rect_t<float> &get_rect();
13585
};
13686

137-
/**
138-
* Obtain the remain extent size, from the latest widget index.
139-
**/
140-
void extentnize(
141-
float &extent,
142-
fill_align_t *p_fill_align,
143-
ekg::ui::abstract_widget *p_widget,
144-
ekg::flags flag_ok,
145-
ekg::flags flag_stop,
146-
int64_t &begin_and_count,
147-
ekg::axis axis
148-
);
149-
15087
/**
15188
* A mid-functional feature to process dock position from widgets.
15289
* Note: Recursive.
15390
**/
15491
void docknize(
15592
ekg::ui::abstract_widget *p_parent_widget
15693
);
157-
158-
/**
159-
* Estimate height from a container children list.
160-
* Note: Recursive.
161-
**/
162-
float height(
163-
ekg::ui::abstract_widget *p_parent_widget
164-
);
16594
}
16695

167-
#endif
96+
#endif

include/ekg/layout/extentnize.hpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#ifndef EKG_LAYOUT_EXTENTNIZE_HPP
2+
#define EKG_LAYOUT_EXTENTNIZE_HPP
3+
4+
namespace ekg::layout {
5+
struct fill_align_t {
6+
public:
7+
bool was_last_fill_found {};
8+
bool was_found {};
9+
bool must_calculate_pixel_perfect {};
10+
bool was_pixel_perfect_calculated {};
11+
12+
float align {static_cast<float>(UINT32_MAX)}; // idk may i duwmb
13+
int64_t index {};
14+
int64_t end_fill_index {};
15+
};
16+
17+
struct extent_t {
18+
public:
19+
static ekg::layout::extent_t v_widget;
20+
static ekg::layout::extent_t h_widget;
21+
static ekg::layout::extent_t v_rect_descriptor;
22+
static ekg::layout::extent_t h_rect_descriptor;
23+
public:
24+
int64_t end_index {};
25+
int64_t begin_index {};
26+
int64_t count {};
27+
float extent {};
28+
};
29+
30+
/**
31+
* Obtain the remain extent size, from the latest rect descriptor list index.
32+
**/
33+
void extentnize_rect_descriptor(
34+
std::vector<ekg::rect_descriptor_t> &rect_descriptor_list,
35+
float &extent,
36+
ekg::flags flag_ok,
37+
ekg::flags flag_stop,
38+
int64_t &begin_and_count,
39+
ekg::axis axis
40+
);
41+
42+
/**
43+
* Obtain the remain extent size, from the latest widget index.
44+
**/
45+
void extentnize_widget(
46+
ekg::ui::abstract_widget *p_widget,
47+
float &extent,
48+
fill_align_t *p_fill_align,
49+
ekg::flags flag_ok,
50+
ekg::flags flag_stop,
51+
int64_t &begin_and_count,
52+
ekg::axis axis
53+
);
54+
}
55+
56+
#endif

include/ekg/math/geometry.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,12 @@ namespace ekg {
109109
// TODO: add non-useless rect (aka vector 4 properties) operators
110110
};
111111

112+
struct rect_descriptor_t {
113+
public:
114+
ekg::rect_t<float> *p_rect {};
115+
ekg::flags_t flags {};
116+
};
117+
112118
template<typename t>
113119
ekg::vec4_t<float> color(
114120
t r,

include/ekg/service/input.hpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,6 @@
3333
#include "ekg/util/geometry.hpp"
3434
#include "ekg/os/platform.hpp"
3535

36-
namespace ekg {
37-
struct input_t {
38-
public:
39-
ekg::timing_t timing_last_interact {};
40-
ekg::vec4 interact {};
41-
bool was_pressed {};
42-
bool was_released {};
43-
bool has_motion {};
44-
bool was_wheel {};
45-
bool was_typed {};
46-
};
47-
48-
ekg::input_t &input();
49-
};
50-
5136
namespace ekg::service {
5237
class input {
5338
protected:

include/ekg/util/geometry.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,4 +207,4 @@ namespace ekg {
207207
int32_t find_collide_dock(ekg::docker &docker, uint16_t flags, const ekg::vec4 &vec);
208208
}
209209

210-
#endif
210+
#endif

0 commit comments

Comments
 (0)