diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-06-17 11:12:54 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-06-17 11:12:54 -0400 |
| commit | 48f56a7e5db638fb3526277513b8f14cbe405398 (patch) | |
| tree | 36d3b013d704a35d0a0a9315df887f4857ed224e /src | |
| parent | 66ebed74456f76277597b3b07f3e67cc45388ece (diff) | |
pke: expose colors for FontRender and pke_ui_box
Diffstat (limited to 'src')
| -rw-r--r-- | src/font.cpp | 8 | ||||
| -rw-r--r-- | src/font.hpp | 2 | ||||
| -rw-r--r-- | src/serialization-font.cpp | 56 | ||||
| -rw-r--r-- | src/serialization-static-ui.cpp | 54 | ||||
| -rw-r--r-- | src/serialization.hpp | 4 | ||||
| -rw-r--r-- | src/static-ui.cpp | 9 | ||||
| -rw-r--r-- | src/static-ui.hpp | 6 |
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) |
