diff options
| author | Roberto Esteves <contact@robertoesteves.dev> | 2025-11-22 16:35:06 +0000 |
|---|---|---|
| committer | Roberto Esteves <contact@robertoesteves.dev> | 2025-11-22 16:35:06 +0000 |
| commit | e7c2ec9719349f7a20dd1d4854869c10d8836a11 (patch) | |
| tree | af5b34d8d21cabd4ec6d4206ce5a6fd4651de56c /test/example_core.c | |
| parent | d84537c52f537920369618028f84b48296811fd0 (diff) | |
Diffstat (limited to 'test/example_core.c')
| -rw-r--r-- | test/example_core.c | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/test/example_core.c b/test/example_core.c new file mode 100644 index 0000000..e9c78c8 --- /dev/null +++ b/test/example_core.c @@ -0,0 +1,93 @@ +#include "core/renderer.h" +#include "core/window.h" + +#include "core/event.h" + +#include <stdio.h> +#include <string.h> + +void treat_xcb_error(int code) { + switch (code) { + + case XCB_CONN_ERROR: { + printf("Connection error\n"); + } break; + case XCB_CONN_CLOSED_MEM_INSUFFICIENT: { + printf("Memory insufficient error\n"); + } break; + case XCB_CONN_CLOSED_REQ_LEN_EXCEED: { + printf("Request length exceeded error\n"); + } break; + case XCB_CONN_CLOSED_PARSE_ERR: { + printf("Parse error\n"); + } break; + case XCB_CONN_CLOSED_INVALID_SCREEN: { + printf("Invalid Screen error\n"); + } break; + } +} + +int main(int argc, char **argv) { + struct ruim_rendererGLES renderer; + int width, height, needsRender, shouldClose = 0; + RuimToplevelBackend backend; + RuimToplevel toplevel; + RuimEvent event; + int err; + + memset(&backend, 0, sizeof(backend)); + memset(&toplevel, 0, sizeof(toplevel)); + memset(&event, 0, sizeof(event)); + + if ((err = RuimToplevelBackendInit(&backend)) != 0) { + treat_xcb_error(err); + return 1; + } + + toplevel.backend = &backend; + if ((err = RuimToplevelCreate(&toplevel, RUIM_TOPLEVEL_WINDOW)) != 0) { + treat_xcb_error(err); + return 1; + } + + RuimToplevelDisplay(&toplevel); + RuimInitEGL(&toplevel); + renderer = RuimSetupGLES(); + + while (!shouldClose) { + int has_events = 0; + + while (RuimToplevelBackendPoll(&backend, &event)) { + has_events = 1; + switch (event.type) { + case RUIM_EVENT_REDRAW: { + needsRender = 1; + } break; + case RUIM_EVENT_WINDOW: { + width = event.data.window.width; + height = event.data.window.height; + } break; + case RUIM_EVENT_MOUSEDOWN: { + } break; + case RUIM_EVENT_QUIT: { + shouldClose = 1; + } break; + } + } + + if (needsRender) { + RuimResizeGLES(&renderer, width, height); + RuimRenderGLES(&renderer); + RuimSwapEGL(&toplevel); + + needsRender = 0; + } else if (!has_events) { + RuimToplevelWaitForEvent(&toplevel); + } + } + + RuimToplevelDestroy(&toplevel); + RuimToplevelBackendDeinit(&backend); + + return 0; +} |