From 2e39fd2614f7e7285ebcc52f3e5523bf35448b3e Mon Sep 17 00:00:00 2001 From: Klemen Plestenjak Date: Thu, 21 Dec 2023 18:23:45 +0100 Subject: [PATCH] Add descriptor for creating node --- engine/breeze/memory/memory.c | 4 ++-- engine/breeze/memory/memory.h | 4 ++-- engine/breeze/ui/ui.c | 20 +++++++++++++++----- engine/breeze/ui/ui.h | 14 ++++++++++++-- 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/engine/breeze/memory/memory.c b/engine/breeze/memory/memory.c index 72090c4..f70b8e6 100644 --- a/engine/breeze/memory/memory.c +++ b/engine/breeze/memory/memory.c @@ -28,9 +28,9 @@ void *bzResize(void *ptr, size_t newSize) { void *bzMemSet(void *ptr, int value, size_t numBytes) { return memset(ptr, value, numBytes); } -void *bzMemMove(void *dst, void *src, size_t numBytes) { +void *bzMemMove(void *dst, const void *src, size_t numBytes) { return memmove(dst, src, numBytes); } -void *bzMemCpy(void *dst, void *src, size_t numBytes) { +void *bzMemCpy(void *dst, const void *src, size_t numBytes) { return memcpy(dst, src, numBytes); } diff --git a/engine/breeze/memory/memory.h b/engine/breeze/memory/memory.h index 2baecf1..2b53fab 100644 --- a/engine/breeze/memory/memory.h +++ b/engine/breeze/memory/memory.h @@ -9,8 +9,8 @@ void *bzCalloc(size_t numBytes, size_t count); void *bzResize(void *ptr, size_t newSize); void *bzMemSet(void *ptr, int value, size_t numBytes); -void *bzMemMove(void *dst, void *src, size_t numBytes); -void *bzMemCpy(void *dst, void *src, size_t numBytes); +void *bzMemMove(void *dst, const void *src, size_t numBytes); +void *bzMemCpy(void *dst, const void *src, size_t numBytes); #endif //BREEZE_MEMORY_H diff --git a/engine/breeze/ui/ui.c b/engine/breeze/ui/ui.c index 3a942a3..00abef3 100644 --- a/engine/breeze/ui/ui.c +++ b/engine/breeze/ui/ui.c @@ -385,7 +385,7 @@ BzUIKey bzUIGetUniqueKey(BzUI *ui) { return ui->keyIdCount++; } -BzUINode *bzUINodeMake(BzUI *ui, BzUIKey key, BzUIFlags flags) { +BzUINode *bzUINodeMake(BzUI *ui, BzUIKey key, const BzUINodeDesc *desc) { BzUINode *node = NULL; if (key != bzUIKeyNull()) node = hmget(ui->nodeMap, key); @@ -412,7 +412,15 @@ BzUINode *bzUINodeMake(BzUI *ui, BzUIKey key, BzUIFlags flags) { } node->parent = parent; - node->flags = flags; + + node->layout = desc->layout; + node->style = desc->style; + node->flags = desc->flags; + node->string = desc->string; + + bzMemCpy(node->semanticSize, desc->semanticSize, sizeof(node->semanticSize)); + bzMemCpy(node->padding, desc->padding, sizeof(node->padding)); + bzMemCpy(node->margin, desc->margin, sizeof(node->margin)); return node; } @@ -458,9 +466,11 @@ bool bzUIButton(BzUI *ui, const char *string, BzUIStyle *style) { s = *style; } BzUINode *node = bzUINodeMake(ui, bzUIKeyFromString(string), - BZ_UI_CLICKABLE | BZ_UI_DRAW_TEXT | - BZ_UI_DRAW_BACKGROUND | - BZ_UI_DRAW_BORDER | BZ_UI_ALIGN_CENTER); + &(BzUINodeDesc) { + .flags = BZ_UI_CLICKABLE | BZ_UI_DRAW_TEXT | + BZ_UI_DRAW_BACKGROUND | + BZ_UI_DRAW_BORDER | BZ_UI_ALIGN_CENTER + }); node->string = string; node->semanticSize[BZ_UI_AXIS_X] = (BzUISize) { .kind = BZ_UI_SIZE_FIT, diff --git a/engine/breeze/ui/ui.h b/engine/breeze/ui/ui.h index 6e5e4bf..01adec7 100644 --- a/engine/breeze/ui/ui.h +++ b/engine/breeze/ui/ui.h @@ -96,9 +96,19 @@ enum { BZ_UI_ALIGN_CENTER = BZ_UI_ALIGN_HORIZ_CENTER | BZ_UI_ALIGN_VERT_CENTER, }; - typedef struct BzUINode BzUINode; +typedef struct BzUINodeDesc { + BzUILayout layout; + BzUIStyle style; + BzUIFlags flags; + const char *string; + + BzUISize semanticSize[BZ_UI_AXIS_COUNT]; + f32 padding[BZ_UI_AXIS_COUNT * 2]; + f32 margin[BZ_UI_AXIS_COUNT * 2]; +} BzUINodeDesc; + typedef struct BzUIInteraction { bool pressed : 1; bool down : 1; @@ -121,7 +131,7 @@ void bzUIEnd(BzUI *ui); BzUIKey bzUIGetUniqueKey(BzUI *ui); -BzUINode *bzUINodeMake(BzUI *ui, BzUIKey key, BzUIFlags flags); +BzUINode *bzUINodeMake(BzUI *ui, BzUIKey key, const BzUINodeDesc *desc); BzUINode *bzUIPushParent(BzUI *ui, BzUINode *node); BzUINode *bzUIPopParent(BzUI *ui);