summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-06-17 11:12:54 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-06-17 11:12:54 -0400
commit48f56a7e5db638fb3526277513b8f14cbe405398 (patch)
tree36d3b013d704a35d0a0a9315df887f4857ed224e /src
parent66ebed74456f76277597b3b07f3e67cc45388ece (diff)
pke: expose colors for FontRender and pke_ui_box
Diffstat (limited to 'src')
-rw-r--r--src/font.cpp8
-rw-r--r--src/font.hpp2
-rw-r--r--src/serialization-font.cpp56
-rw-r--r--src/serialization-static-ui.cpp54
-rw-r--r--src/serialization.hpp4
-rw-r--r--src/static-ui.cpp9
-rw-r--r--src/static-ui.hpp6
7 files changed, 123 insertions, 16 deletions
diff --git a/src/font.cpp b/src/font.cpp
index 9a0692c..737e86d 100644
--- a/src/font.cpp
+++ b/src/font.cpp
@@ -42,8 +42,8 @@ struct FontTypeData {
struct FontInstanceBufferItem {
glm::mat4 pos_scale;
- glm::vec4 fg_color;
- glm::vec4 bg_color;
+ glm::vec4 color_foreground;
+ glm::vec4 color_background;
glm::vec2 sprite_region_min;
glm::vec2 sprite_region_max;
glm::vec2 bounding_region_min;
@@ -218,8 +218,8 @@ void FontType_Inner_CalcTransforms(const FontType *ft, FontRender *fr, FontInsta
buf_item = &ptr_dst[i];
buf_item->pos_scale = glm::translate(glm::mat4(1), translate);
buf_item->pos_scale = glm::scale(buf_item->pos_scale, scale);
- buf_item->fg_color = glm::vec4(0.4, 0.9, 0.5, 0.8);
- buf_item->bg_color = glm::vec4(0.0, 0.0, 0.0, 0.0);
+ buf_item->color_foreground = fr->settings.color_foreground;
+ buf_item->color_background = fr->settings.color_background;
buf_item->sprite_region_min = fgc->sprite_region_min;
buf_item->sprite_region_max = fgc->sprite_region_max;
diff --git a/src/font.hpp b/src/font.hpp
index 567062e..9d766df 100644
--- a/src/font.hpp
+++ b/src/font.hpp
@@ -50,6 +50,8 @@ struct FontGlyphChar {
FONT_GLYPH_CHAR_FLAG flags;
};
struct FontRenderSettings {
+ glm::vec4 color_foreground = glm::vec4(0.4, 0.9, 0.5, 0.8);
+ glm::vec4 color_background = glm::vec4(0.0, 0.0, 0.0, 0.0);
float char_scale;
float line_height_scale;
float char_spacing_scale;
diff --git a/src/serialization-font.cpp b/src/serialization-font.cpp
index 4ccc55e..f31016e 100644
--- a/src/serialization-font.cpp
+++ b/src/serialization-font.cpp
@@ -31,7 +31,7 @@ pk_handle pke_serialize_font_render(srlztn_serialize_helper *h, FontRender *fr)
h->handle_head.itemIndex++;
pk_arr_append_t(&kvec.child_handles, font_render_settings_handle);
- compt_a<128==sizeof(FontRender)>();
+ compt_a<160==sizeof(FontRender)>();
{
kve.key = SRLZTN_UI_FONT_RENDER_UUID;
s = pk_new<char>(37, h->bkt);
@@ -80,7 +80,7 @@ void pke_deserialize_font_render(srlztn_deserialize_helper *h, pke_kve_container
uint32_t i;
char *s;
- compt_a<128==sizeof(FontRender)>();
+ compt_a<160==sizeof(FontRender)>();
for (i = 0; i < kvec->arr.next; ++i) {
kve = &kvec->arr[i];
if (strcmp(kve->key, SRLZTN_UI_FONT_RENDER_UUID) == 0) {
@@ -127,7 +127,7 @@ pk_handle pke_serialize_font_render_settings(srlztn_serialize_helper *h, FontRen
kvec.child_handles.bkt = h->bkt;
h->handle_head.itemIndex++;
- compt_a<32==sizeof(FontRenderSettings)>();
+ compt_a<64==sizeof(FontRenderSettings)>();
{
kve.key = SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SCALE;
len = snprintf(NULL, 0, "%f", frs->char_scale);
@@ -181,6 +181,24 @@ pk_handle pke_serialize_font_render_settings(srlztn_serialize_helper *h, FontRen
kve.end = SRLZTN_KVE_END;
pk_arr_append_t(&kvec.arr, kve);
}
+ {
+ kve.key = SRLZTN_UI_FONT_RENDER_SETTINGS_COLOR_FOREGROUND;
+ len = snprintf(NULL, 0, "%f%s%f%s%f%s%f", frs->color_foreground[0], SRLZTN_NUM_SEPARATOR, frs->color_foreground[1], SRLZTN_NUM_SEPARATOR, frs->color_foreground[2], SRLZTN_NUM_SEPARATOR, frs->color_foreground[3]);
+ s = pk_new<char>(len+1, h->bkt);
+ sprintf(s, "%f%s%f%s%f%s%f", frs->color_foreground[0], SRLZTN_NUM_SEPARATOR, frs->color_foreground[1], SRLZTN_NUM_SEPARATOR, frs->color_foreground[2], SRLZTN_NUM_SEPARATOR, frs->color_foreground[3]);
+ kve.val = s;
+ kve.end = SRLZTN_KVE_END;
+ pk_arr_append_t(&kvec.arr, kve);
+ }
+ {
+ kve.key = SRLZTN_UI_FONT_RENDER_SETTINGS_COLOR_BACKGROUND;
+ len = snprintf(NULL, 0, "%f%s%f%s%f%s%f", frs->color_background[0], SRLZTN_NUM_SEPARATOR, frs->color_background[1], SRLZTN_NUM_SEPARATOR, frs->color_background[2], SRLZTN_NUM_SEPARATOR, frs->color_background[3]);
+ s = pk_new<char>(len+1, h->bkt);
+ sprintf(s, "%f%s%f%s%f%s%f", frs->color_background[0], SRLZTN_NUM_SEPARATOR, frs->color_background[1], SRLZTN_NUM_SEPARATOR, frs->color_background[2], SRLZTN_NUM_SEPARATOR, frs->color_background[3]);
+ kve.val = s;
+ kve.end = SRLZTN_KVE_END;
+ pk_arr_append_t(&kvec.arr, kve);
+ }
pk_arr_append_t(&h->kvp_containers, kvec);
kvec.arr.data = nullptr;
@@ -195,7 +213,7 @@ void pke_deserialize_font_render_settings(srlztn_deserialize_helper *h, pke_kve_
const char *starting_char;
PK_STN_RES stn_res;
char *str_end;
- compt_a<32==sizeof(FontRenderSettings)>();
+ compt_a<64==sizeof(FontRenderSettings)>();
for (i = 0; i < kvec->arr.next; ++i) {
if (strncmp(kvec->arr[i].key, SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SCALE, strlen(SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SCALE)) == 0) {
stn_res = pk_stn(&frs->char_scale, kvec->arr[i].val, &str_end);
@@ -256,5 +274,35 @@ void pke_deserialize_font_render_settings(srlztn_deserialize_helper *h, pke_kve_
frs->surface_area_type_flags = FONT_RENDER_SURFACE_AREA_TYPE_FLAG(flags);
continue;
}
+ if (strstr(SRLZTN_UI_FONT_RENDER_SETTINGS_COLOR_FOREGROUND, kvec->arr[i].key)) {
+ starting_char = kvec->arr[i].val;
+ index = 0;
+ do {
+ assert(index < 4);
+ stn_res = pk_stn(&frs->color_foreground[index], starting_char, &str_end);
+ if (stn_res != PK_STN_RES_SUCCESS) break;
+ starting_char = str_end + 1;
+ ++index;
+ } while (*str_end != '\0');
+ if (stn_res != PK_STN_RES_SUCCESS) {
+ fprintf(stderr, "[pke_deserialize_ui_box] Failed to parse value for: '%s', err: %i\n", SRLZTN_UI_FONT_RENDER_SETTINGS_COLOR_FOREGROUND, stn_res);
+ }
+ continue;
+ }
+ if (strstr(SRLZTN_UI_FONT_RENDER_SETTINGS_COLOR_BACKGROUND, kvec->arr[i].key)) {
+ starting_char = kvec->arr[i].val;
+ index = 0;
+ do {
+ assert(index < 4);
+ stn_res = pk_stn(&frs->color_background[index], starting_char, &str_end);
+ if (stn_res != PK_STN_RES_SUCCESS) break;
+ starting_char = str_end + 1;
+ ++index;
+ } while (*str_end != '\0');
+ if (stn_res != PK_STN_RES_SUCCESS) {
+ fprintf(stderr, "[pke_deserialize_ui_box] Failed to parse value for: '%s', err: %i\n", SRLZTN_UI_FONT_RENDER_SETTINGS_COLOR_BACKGROUND, stn_res);
+ }
+ continue;
+ }
}
}
diff --git a/src/serialization-static-ui.cpp b/src/serialization-static-ui.cpp
index e68f2ed..49dceaa 100644
--- a/src/serialization-static-ui.cpp
+++ b/src/serialization-static-ui.cpp
@@ -75,7 +75,7 @@ pk_handle pke_serialize_ui_box(srlztn_serialize_helper *h, pke_ui_box *box) {
kvec.children.bkt = h->bkt;
h->handle_head.itemIndex++;
- compt_a<160==sizeof(pke_ui_box)>();
+ compt_a<192==sizeof(pke_ui_box)>();
if (box->uuid != pk_uuid_zed && box->uuid != pk_uuid_max) {
kve.key = SRLZTN_UI_BOX_UUID;
s = pk_new<char>(37, h->bkt);
@@ -160,6 +160,26 @@ pk_handle pke_serialize_ui_box(srlztn_serialize_helper *h, pke_ui_box *box) {
kve.end = SRLZTN_KVE_END;
pk_arr_append_t(&kvec.arr, kve);
}
+ if (PK_HAS_FLAG(box->flags, PKE_UI_BOX_FLAG_VISIBILITY_INVISIBLE) == false)
+ {
+ kve.key = SRLZTN_UI_BOX_COLOR_BORDER;
+ len = snprintf(NULL, 0, "%f%s%f%s%f%s%f", box->color_border[0], SRLZTN_NUM_SEPARATOR, box->color_border[1], SRLZTN_NUM_SEPARATOR, box->color_border[2], SRLZTN_NUM_SEPARATOR, box->color_border[3]);
+ s = pk_new<char>(len+1, h->bkt);
+ sprintf(s, "%f%s%f%s%f%s%f", box->color_border[0], SRLZTN_NUM_SEPARATOR, box->color_border[1], SRLZTN_NUM_SEPARATOR, box->color_border[2], SRLZTN_NUM_SEPARATOR, box->color_border[3]);
+ kve.val = s;
+ kve.end = SRLZTN_KVE_END;
+ pk_arr_append_t(&kvec.arr, kve);
+ }
+ if (PK_HAS_FLAG(box->flags, PKE_UI_BOX_FLAG_VISIBILITY_INVISIBLE) == false)
+ {
+ kve.key = SRLZTN_UI_BOX_COLOR_BACKGROUND;
+ len = snprintf(NULL, 0, "%f%s%f%s%f%s%f", box->color_background[0], SRLZTN_NUM_SEPARATOR, box->color_background[1], SRLZTN_NUM_SEPARATOR, box->color_background[2], SRLZTN_NUM_SEPARATOR, box->color_background[3]);
+ s = pk_new<char>(len+1, h->bkt);
+ sprintf(s, "%f%s%f%s%f%s%f", box->color_background[0], SRLZTN_NUM_SEPARATOR, box->color_background[1], SRLZTN_NUM_SEPARATOR, box->color_background[2], SRLZTN_NUM_SEPARATOR, box->color_background[3]);
+ kve.val = s;
+ kve.end = SRLZTN_KVE_END;
+ pk_arr_append_t(&kvec.arr, kve);
+ }
pk_arr_append_t(&h->kvp_containers, kvec);
pke_kve_container *kvec_ptr = &h->kvp_containers[h->kvp_containers.next-1];
@@ -196,7 +216,7 @@ void pke_deserialize_ui_box(srlztn_deserialize_helper *h, pke_kve_container *kve
pke_ui_box *parent_box = nullptr;
bx.type_data = nullptr;
- compt_a<160==sizeof(pke_ui_box)>();
+ compt_a<192==sizeof(pke_ui_box)>();
for (i = 0; i < kvec->arr.next; ++i) {
kve = &kvec->arr[i];
if (strstr(SRLZTN_UI_BOX_UUID, kve->key)) {
@@ -312,6 +332,36 @@ void pke_deserialize_ui_box(srlztn_deserialize_helper *h, pke_kve_container *kve
}
continue;
}
+ if (strstr(SRLZTN_UI_BOX_COLOR_BORDER, kve->key)) {
+ starting_char = kve->val;
+ index = 0;
+ do {
+ assert(index < 4);
+ res = pk_stn(&bx.color_border[index], starting_char, &stn_end);
+ if (res != PK_STN_RES_SUCCESS) break;
+ starting_char = stn_end + 1;
+ ++index;
+ } while (*stn_end != '\0');
+ if (res != PK_STN_RES_SUCCESS) {
+ fprintf(stderr, "[pke_deserialize_ui_box] Failed to parse value for: '%s', err: %i\n", SRLZTN_UI_BOX_COLOR_BORDER, res);
+ }
+ continue;
+ }
+ if (strstr(SRLZTN_UI_BOX_COLOR_BACKGROUND, kve->key)) {
+ starting_char = kve->val;
+ index = 0;
+ do {
+ assert(index < 4);
+ res = pk_stn(&bx.color_background[index], starting_char, &stn_end);
+ if (res != PK_STN_RES_SUCCESS) break;
+ starting_char = stn_end + 1;
+ ++index;
+ } while (*stn_end != '\0');
+ if (res != PK_STN_RES_SUCCESS) {
+ fprintf(stderr, "[pke_deserialize_ui_box] Failed to parse value for: '%s', err: %i\n", SRLZTN_UI_BOX_COLOR_BACKGROUND, res);
+ }
+ continue;
+ }
}
// deserialize data
diff --git a/src/serialization.hpp b/src/serialization.hpp
index fe7d427..9e592e0 100644
--- a/src/serialization.hpp
+++ b/src/serialization.hpp
@@ -58,11 +58,15 @@ iccsc SRLZTN_UI_BOX_FLEX_WEIGHT = "FlexWeight:";
iccsc SRLZTN_UI_BOX_FLEX_DIRECTION = "FlexDirection:";
iccsc SRLZTN_UI_BOX_LAYER = "Layer:";
iccsc SRLZTN_UI_BOX_TYPE = "Type:";
+iccsc SRLZTN_UI_BOX_COLOR_BORDER = "ColorBorder:";
+iccsc SRLZTN_UI_BOX_COLOR_BACKGROUND = "ColorBackground:";
iccsc SRLZTN_UI_BOX_DATA_TEXT_FONT_RENDER_UUID = "FontRenderUUID:";
iccsc SRLZTN_UI_FONT_RENDER_UUID = "UUID:";
iccsc SRLZTN_UI_FONT_RENDER_FONT_TYPE_TITLE = "FontTypeTitle:";
iccsc SRLZTN_UI_FONT_RENDER_TEXT_BEGIN = "TextBegin::";
+iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_COLOR_FOREGROUND = "ColorForeground:";
+iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_COLOR_BACKGROUND = "ColorBackground:";
iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SCALE = "CharScale:";
iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_LINE_HEIGHT_SCALE = "LineHeightScale:";
iccsc SRLZTN_UI_FONT_RENDER_SETTINGS_CHAR_SPACING_SCALE = "CharSpacingScale:";
diff --git a/src/static-ui.cpp b/src/static-ui.cpp
index 81e0511..68fd551 100644
--- a/src/static-ui.cpp
+++ b/src/static-ui.cpp
@@ -19,8 +19,8 @@ TypeSafeInt_B(PKE_UI_BOX_FLAG);
struct pke_ui_box_instance_buffer_item {
glm::mat4 pos_scale;
- glm::vec4 border_color;
- glm::vec4 background_color;
+ glm::vec4 color_border;
+ glm::vec4 color_background;
glm::vec2 px_scale;
float depth;
float padding[1];
@@ -242,8 +242,8 @@ void pke_ui_calc_px(pk_arr_t<pke_ui_box_instance_buffer_item> &buffer, pke_ui_fl
pke_ui_box_instance_buffer_item tmp{};
tmp.pos_scale = glm::translate(glm::mat4(1), translate);
tmp.pos_scale = glm::scale(tmp.pos_scale, scale);
- tmp.border_color = glm::vec4(1.0, 0.0, 0.0, 1.0);
- tmp.background_color = glm::vec4(0.2, 0.3, 0.2, 0.5);
+ tmp.color_border = box->color_border;
+ tmp.color_background = box->color_background;
tmp.px_scale.x = (2.0 / (float)Extent.width);
tmp.px_scale.y = (2.0 / (float)Extent.height);
tmp.depth = (float)box->layer;
@@ -471,6 +471,7 @@ void pke_ui_internal_new_typed_box(pke_ui_box *box, const PKE_UI_BOX_TYPE type)
case PKE_UI_BOX_TYPE_INPUT_TEXT:
break;
default:
+ assert(true == false && "unknown pke_ui_box::type");
break;
}
}
diff --git a/src/static-ui.hpp b/src/static-ui.hpp
index 6d5c61c..fa1ecf7 100644
--- a/src/static-ui.hpp
+++ b/src/static-ui.hpp
@@ -23,12 +23,12 @@ TypeSafeInt_H(PKE_UI_BOX_FLAG, uint64_t, 0xFFFFFFFFFFFFFFFF);
// layouts
const PKE_UI_BOX_TYPE PKE_UI_BOX_TYPE_STANDARD
- = PKE_UI_BOX_TYPE(000);
+ = PKE_UI_BOX_TYPE(0);
// TODO columns, rows, tabs, etc
// special (content)
const PKE_UI_BOX_TYPE PKE_UI_BOX_TYPE_TEXT
- = PKE_UI_BOX_TYPE(050);
+ = PKE_UI_BOX_TYPE(50);
// TODO image, render target, etc
// inputs
@@ -74,6 +74,8 @@ struct pke_ui_box : public Entity_Base {
PKE_UI_BOX_TYPE type;
uint8_t flex_direction;
uint8_t layer;
+ glm::vec4 color_border = glm::vec4(1.0, 0.0, 0.0, 1.0);
+ glm::vec4 color_background = glm::vec4(0.2, 0.3, 0.2, 0.5);
union pke_ui_box_type_data *type_data;
struct pke_ui_box_internals {
// the exact px to translate (shader)