UI core boiler plate
This commit is contained in:
67
engine/breeze/ui/ui.c
Normal file
67
engine/breeze/ui/ui.c
Normal file
@@ -0,0 +1,67 @@
|
||||
#include "ui.h"
|
||||
#include "../memory/memory.h"
|
||||
#include "../util/object_pool.h"
|
||||
#include "../util/string.h"
|
||||
|
||||
#include <stb_ds.h>
|
||||
|
||||
typedef struct BzUI {
|
||||
struct {
|
||||
BzUIKey key;
|
||||
BzUIWidget *value;
|
||||
} *widgetMap;
|
||||
BzObjectPool *widgets;
|
||||
BzUIWidget **widgetStack;
|
||||
BzUIWidget *root;
|
||||
} BzUI;
|
||||
|
||||
BzUIKey bzUIKeyNull() {
|
||||
return 0;
|
||||
}
|
||||
BzUIKey bzUIKeyFromString(const char *str) {
|
||||
return bzStringDefaultHash(str);
|
||||
}
|
||||
|
||||
BzUI *bzUICreate() {
|
||||
BzUI *ui = bzAlloc(sizeof(*ui));
|
||||
|
||||
ui->widgetMap = NULL;
|
||||
ui->widgetStack = NULL;
|
||||
|
||||
ui->widgets = bzObjectPoolCreate(&(BzObjectPoolDesc) {
|
||||
.objectsPerPage=128,
|
||||
.objectSize=sizeof(BzUIWidget),
|
||||
});
|
||||
|
||||
ui->root = bzObjectPool(ui->widgets);
|
||||
bzMemSet(ui->root, 0, sizeof(*ui->root));
|
||||
hmput(ui->widgetMap, bzUIKeyFromString("##root"), ui->root);
|
||||
return ui;
|
||||
}
|
||||
void bzUIDestroy(BzUI *ui) {
|
||||
hmfree(ui->widgetMap);
|
||||
ui->widgetMap = NULL;
|
||||
arrfree(ui->widgetStack);
|
||||
ui->widgetStack = NULL;
|
||||
bzObjectPoolDestroy(ui->widgets);
|
||||
ui->widgets = NULL;
|
||||
bzFree(ui);
|
||||
}
|
||||
|
||||
void bzUIBegin(BzUI *ui, i32 width, i32 height) {
|
||||
arrsetlen(ui->widgetStack, 0);
|
||||
arrpush(ui->widgetStack, ui->root);
|
||||
|
||||
ui->root->semanticSize[BZ_UI_AXIS_X] = (BzUISize){
|
||||
.kind = BZ_UI_SIZE_PIXELS,
|
||||
.value = width
|
||||
};
|
||||
ui->root->semanticSize[BZ_UI_AXIS_Y] = (BzUISize) {
|
||||
.kind = BZ_UI_SIZE_PIXELS,
|
||||
.value = height
|
||||
};
|
||||
|
||||
}
|
||||
void bzUIEnd(BzUI *ui) {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user