#include "events.h" #include "glad.h" #include "graphics.h" #include "text.h" #include "utils.h" #include "window.h" #define WAYC_APP_NAME "Wayclock" #define WAYC_APP_WIDTH 1280 #define WAYC_APP_HEIGHT 1080 #define WAYC_FONT "AdwaitaMono-Regular.ttf" struct app_s { struct renderer_s* renderer; struct font_context_s* fctx; }; void wayc_frame(struct renderer_s* renderer, struct window_s* window, struct eventloop_s* loop) { wayc_notnull(window); wayc_notnull(loop); wayc_notnull(renderer); glClearColor(0.1f, 0.2f, 0.2f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); wayc_renderer_swap(renderer); } void wayc_handle(u8* user, struct eventloop_s* loop, struct event_s* event) { wayc_notnull(loop); wayc_notnull(event); struct app_s* app = (struct app_s*)user; struct renderer_s* renderer = app->renderer; struct window_s* window = event->window; union event_data_u data = event->data; switch (event->kind) { case EVENT_KIND_CLOSE: wayc_eventloop_unregister(loop, window->id); break; case EVENT_KIND_RESIZE: { struct event_resize_s resize = data.resize; wayc_renderer_resize(renderer, resize.width, resize.height); } break; case EVENT_KIND_FRAME: wayc_frame(renderer, window, loop); break; default: break; } } int main() { struct font_context_s fctx; if (wayc_font_context_init(&fctx) != FONT_CONTEXT_ERROR_NONE) wayc_panic("Failed to initialize font context"); wayc_defer(wayc_font_context_deinit(&fctx)); struct font_s font; if (wayc_font_init(&font, &fctx, WAYC_FONT) != FONT_ERROR_NONE) wayc_panic("Failed to load font"); wayc_defer(wayc_font_deinit(&font)); struct eventloop_s loop; if (wayc_eventloop_init(&loop, wayc_handle) != EVENTLOOP_ERROR_NONE) wayc_panic("Failed to initialize event loop"); wayc_defer(wayc_eventloop_deinit(&loop)); struct graphics_s graphics; if (wayc_graphics_init(&graphics, &loop.state) != GRAPHICS_ERROR_NONE) wayc_panic("Failed to initialize graphics"); wayc_defer(wayc_graphics_deinit(&graphics)); struct window_s window; if (wayc_window_init(&window, WAYC_APP_NAME, &loop) != WINDOW_ERROR_NONE) wayc_panic("Failed to initialize window"); window_id_t winid = wayc_eventloop_register(&loop, &window); window.id = winid; wayc_defer({ wayc_eventloop_unregister(&loop, winid); wayc_window_deinit(&window); }); struct renderer_s renderer; if (wayc_renderer_init(&renderer, &window, &graphics, WAYC_APP_WIDTH, WAYC_APP_HEIGHT) != RENDERER_ERROR_NONE) wayc_panic("Failed to initialize renderer"); wayc_defer(wayc_renderer_deinit(&renderer)); wayc_renderer_use(&renderer); wayc_window_redraw(&window, &loop); struct app_s app = { &renderer, &fctx, }; while (wayc_eventloop_running(&loop)) { wayc_eventloop_update(&loop, (u8*)&app); wayc_window_redraw(&window, &loop); } return 0; }