#include "core/window.h" #include "core/event.h" #include "core/renderer.h" #include "core/types.h" #include "internal/utils.h" /* other stuff */ int RuimToplevelBackendInit(RuimToplevelBackend *backend) { if (backend == NULL) { crash_error("backend must be non-null"); } if (backend->type == 0) { /* TODO: select default one based on platform */ backend->type = RUIM_TOPLEVEL_X11; } switch (backend->type) { #ifdef RUIM_PLATFORM_LINUX case RUIM_TOPLEVEL_X11: { return _init_xcb_backend(backend); } break; #endif default: printf("%d\n", backend->type); crash_error("unrecognized backend type"); } crash_error("unreachable"); return -1; } int RuimToplevelBackendDeinit(RuimToplevelBackend *backend) { if (backend == NULL || backend->type == 0) { crash_error("some crash"); } switch (backend->type) { #ifdef RUIM_PLATFORM_LINUX case RUIM_TOPLEVEL_X11: { return _deinit_xcb_backend(backend); } break; #endif default: crash_error("some crash"); } return 0; } int RuimToplevelCreate(RuimToplevel *toplevel, RuimToplevelType type) { if (type && type != RUIM_TOPLEVEL_WINDOW) { crash_error("TODO: toplevel must be a window"); } if (toplevel->backend == NULL) { crash_error("TODO: backend must be set"); } switch (toplevel->backend->type) { #ifdef RUIM_PLATFORM_LINUX case RUIM_TOPLEVEL_X11: { return _create_toplevel_xcb(toplevel); } break; #endif default: crash_error("unknown backend type"); } return 0; } int RuimToplevelDisplay(RuimToplevel *toplevel) { if (toplevel == NULL) { crash_error("toplevel must be non-null"); } switch (toplevel->backend->type) { #ifdef RUIM_PLATFORM_LINUX case RUIM_TOPLEVEL_X11: { return _display_toplevel_xcb(toplevel); } break; #endif default: crash_error("some crash"); } return 0; } int RuimToplevelBackendPoll(RuimToplevelBackend *backend, RuimEvent *event) { switch (backend->type) { #ifdef RUIM_PLATFORM_LINUX case RUIM_TOPLEVEL_X11: { if (_poll_event_xcb(backend, event) != 0) { crash_error("xcb connection error"); } } break; #endif default: crash_error("unknown backend type"); } if (event->type == RUIM_EVENT_NOTHING) { return 0; } else { return 1; } } int RuimToplevelWaitForEvent(RuimToplevel *toplevel) { switch (toplevel->backend->type) { #ifdef RUIM_PLATFORM_LINUX case RUIM_TOPLEVEL_X11: { return _wait_event_xcb(toplevel); } break; #endif default: crash_error("unknown backend type"); } crash_error("unreachable"); return -1; } int RuimToplevelDestroy(RuimToplevel *toplevel) { switch (toplevel->backend->type) { #ifdef RUIM_PLATFORM_LINUX case RUIM_TOPLEVEL_X11: { return _destroy_toplevel_xcb(toplevel); } break; #endif default: crash_error("unknown backend type"); } crash_error("unreachable"); return -1; }