#include "core/renderer.h" #include "core/window.h" #include "core/event.h" #include #include 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; }