Compare commits

...

2 Commits

  1. 9
      Makefile
  2. 2
      compile_flags.txt
  3. 8
      get_raylib.sh
  4. 115
      ugui.c

@ -1,13 +1,10 @@
CFLAGS = -Wall -Wextra -pedantic -std=c11 -g -Iraylib/src CFLAGS = -Wall -Wextra -pedantic -std=c11 -g -Iraylib/include
CC = gcc CC = gcc
LDFLAGS = -Lraylib/src -lm LDFLAGS = -Lraylib/lib -lm
all: ugui all: ugui
raylib/src/libraylib.a: raylib/src/Makefile ugui: ugui.o vectree.o cache.o raylib/lib/libraylib.a
cd raylib/src; $(MAKE) PLATFORM=PLATFORM_DESKTOP
ugui: ugui.o vectree.o cache.o raylib/src/libraylib.a
ugui.o: ugui.c ugui.h ugui.o: ugui.c ugui.h

@ -1,4 +1,4 @@
-Iraylib/src -Iraylib/include
-Wall -Wall
-Wextra -Wextra
-pedantic -pedantic

@ -0,0 +1,8 @@
#!/bin/sh
mkdir -p raylib
wget https://github.com/raysan5/raylib/releases/download/5.0/raylib-5.0_linux_amd64.tar.gz
tar -xvf raylib-5.0_linux_amd64.tar.gz
mv ./raylib-5.0_linux_amd64/* ./raylib/
rm -rf raylib-5.0_linux_amd64 raylib-5.0_linux_amd64.tar.gz

115
ugui.c

@ -35,79 +35,91 @@ typedef struct _UgCmd {
}; };
} UgCmd; } UgCmd;
typedef struct _UgStack { typedef struct _UgFifo {
int size, count; int size, in, out, count;
UgCmd *stack; UgCmd *vec;
} UgStack; } UgFifo;
int ug_stack_init(UgStack *stack, uint32_t size); int ug_fifo_init(UgFifo *fifo, uint32_t size);
int ug_stack_free(UgStack *stack); int ug_fifo_free(UgFifo *fifo);
int ug_stack_push(UgStack *stack, UgCmd *cmd); int ug_fifo_enqueue(UgFifo *fifo, UgCmd *cmd);
int ug_stack_pop(UgStack *stack, UgCmd *cmd); int ug_fifo_dequeue(UgFifo *fifo, UgCmd *cmd);
int ug_stack_init(UgStack *stack, uint32_t size) int ug_fifo_init(UgFifo *fifo, uint32_t size)
{ {
if (stack == NULL) { if (fifo == NULL) {
return -1; return -1;
} }
stack->size = size; fifo->size = size;
stack->count = 0; fifo->in = 0;
stack->stack = calloc(size, sizeof(UgCmd)); fifo->out = 0;
fifo->count = 0;
fifo->vec = calloc(size, sizeof(UgCmd));
if (stack->stack == NULL) { if (fifo->vec == NULL) {
return -1; return -1;
} }
return 0; return 0;
} }
int ug_stack_free(UgStack *stack) int ug_fifo_free(UgFifo *fifo)
{ {
if (stack != NULL && stack->stack != NULL) { if (fifo != NULL && fifo->vec != NULL) {
free(stack->stack); free(fifo->vec);
stack->size = 0; fifo->size = 0;
stack->count = 0; fifo->in = 0;
fifo->out = 0;
fifo->count = 0;
} }
return 0; return 0;
} }
int ug_stack_push(UgStack *stack, UgCmd *cmd) #define FIFO_STEP 10
int ug_fifo_enqueue(UgFifo *fifo, UgCmd *cmd)
{ {
if (stack == NULL || cmd == NULL) { if (fifo == NULL || cmd == NULL) {
return -1; return -1;
} }
if (stack->count >= stack->size) { if (fifo->count >= fifo->size) {
// UgCmd *tmp = reallocarray(stack->stack, stack->size + // UgCmd *tmp = reallocarray(fifo->vec, fifo->size +
// STACK_STEP, sizeof(UgCmd)); if (tmp == NULL) { return -1; // fifo_STEP, sizeof(UgCmd)); if (tmp == NULL) { return -1;
// } // }
// stack->stack = tmp; // fifo->vec = tmp;
// stack->size += STACK_STEP; // fifo->size += fifo_STEP;
return -1; return -1;
} }
stack->stack[stack->count++] = *cmd; fifo->vec[fifo->in] = *cmd;
fifo->in = (fifo->in + 1) % fifo->size;
fifo->count++;
return 0; return 0;
} }
int ug_stack_pop(UgStack *stack, UgCmd *cmd) int ug_fifo_dequeue(UgFifo *fifo, UgCmd *cmd)
{ {
if (stack == NULL || cmd == NULL) { if (fifo == NULL || cmd == NULL) {
return -1; return -1;
} }
if (stack->count <= 0) { if (fifo->count <= 0) {
// UgCmd *tmp = reallocarray(stack->stack, stack->size + // UgCmd *tmp = reallocarray(fifo->vec, fifo->size +
// STACK_STEP, sizeof(UgCmd)); if (tmp == NULL) { return -1; // fifo_STEP, sizeof(UgCmd)); if (tmp == NULL) { return -1;
// } // }
// stack->stack = tmp; // fifo->vec = tmp;
// stack->size += STACK_STEP; // fifo->size += fifo_STEP;
return -1; return -1;
} }
*cmd = stack->stack[--stack->count]; *cmd = fifo->vec[fifo->out];
fifo->out = (fifo->out + 1) % fifo->size;
fifo->count--;
return 0; return 0;
} }
@ -125,7 +137,7 @@ struct _UgCtx {
UgTree tree; UgTree tree;
UgElemCache cache; UgElemCache cache;
UgStack stack; UgFifo fifo;
struct { struct {
int width, height; int width, height;
@ -153,7 +165,6 @@ UgId djb2(const char *str);
int ug_button(UgCtx *ctx, const char *label, UgRect size); int ug_button(UgCtx *ctx, const char *label, UgRect size);
int main(void) int main(void)
{ {
UgCtx ctx; UgCtx ctx;
@ -180,8 +191,8 @@ int main(void)
// main div, fill the whole window // main div, fill the whole window
ug_div_begin(&ctx, "main", DIV_FILL); ug_div_begin(&ctx, "main", DIV_FILL);
ug_button(&ctx, "button0", (UgRect){.w = 100, .h = 16}); ug_button(&ctx, "button0", (UgRect) {.w = 100, .h = 16});
ug_div_end(&ctx); ug_div_end(&ctx);
ug_frame_end(&ctx); ug_frame_end(&ctx);
@ -191,16 +202,15 @@ int main(void)
ClearBackground(BLACK); ClearBackground(BLACK);
Color c; Color c;
for (UgCmd cmd; ug_stack_pop(&ctx.stack, &cmd) >= 0;) { for (UgCmd cmd; ug_fifo_dequeue(&ctx.fifo, &cmd) >= 0;) {
printf("bruh\n");
switch (cmd.type) { switch (cmd.type) {
case CMD_RECT: case CMD_RECT:
//printf( // printf(
// "rect x=%d y=%d w=%d h=%d\n", // "rect x=%d y=%d w=%d h=%d\n",
// cmd.rect.rect.x, // cmd.rect.rect.x,
// cmd.rect.rect.y, // cmd.rect.rect.y,
// cmd.rect.rect.w, // cmd.rect.rect.w,
// cmd.rect.rect.h // cmd.rect.rect.h
//); //);
c = (Color) { c = (Color) {
.r = cmd.rect.color.r, .r = cmd.rect.color.r,
@ -240,7 +250,7 @@ int ug_init(UgCtx *ctx)
} }
ug_tree_init(&ctx->tree, MAX_ELEMS); ug_tree_init(&ctx->tree, MAX_ELEMS);
ug_stack_init(&ctx->stack, MAX_CMDS); ug_fifo_init(&ctx->fifo, MAX_CMDS);
ctx->cache = ug_cache_init(); ctx->cache = ug_cache_init();
ctx->layout = row; ctx->layout = row;
@ -257,6 +267,7 @@ int ug_destroy(UgCtx *ctx)
ug_tree_destroy(&ctx->tree); ug_tree_destroy(&ctx->tree);
ug_cache_free(&ctx->cache); ug_cache_free(&ctx->cache);
ug_fifo_free(&ctx->fifo);
return 0; return 0;
} }
@ -313,7 +324,7 @@ int ug_frame_begin(UgCtx *ctx)
return -1; return -1;
} }
//print_tree(ctx); // print_tree(ctx);
// The root element does not push anything to the stack // The root element does not push anything to the stack
// TODO: add a background color taken from a theme or config // TODO: add a background color taken from a theme or config
@ -407,7 +418,7 @@ int ug_div_begin(UgCtx *ctx, const char *label, UgRect div)
} }
ctx->div_using = div_node; ctx->div_using = div_node;
//print_tree(ctx); // print_tree(ctx);
// layouting // layouting
// TODO: do layout // TODO: do layout
@ -481,7 +492,7 @@ int ug_div_begin(UgCtx *ctx, const char *label, UgRect div)
.color = c_elem->div.color_bg, .color = c_elem->div.color_bg,
}, },
}; };
ug_stack_push(&ctx->stack, &cmd); ug_fifo_enqueue(&ctx->fifo, &cmd);
return 0; return 0;
} }
@ -584,7 +595,7 @@ int ug_button(UgCtx *ctx, const char *label, UgRect size)
.color = RGBA(0x0000ffff), .color = RGBA(0x0000ffff),
}, },
}; };
ug_stack_push(&ctx->stack, &cmd); ug_fifo_enqueue(&ctx->fifo, &cmd);
return 0; return 0;
} }

Loading…
Cancel
Save