#include "cglm/types.h" #include "events.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 "assets/AdwaitaMono-Regular.ttf" #define WAYC_ATLAS_WIDTH 512 #define WAYC_ATLAS_HEIGHT 512 #define WAYC_FONT_SIZE 48 #define WAYC_CLEAR_COLOR vec4{0.1f, 0.2f, 0.2f, 1.0f} struct app_s { struct renderer_s* renderer; struct font_s* font; }; void wayc_frame(struct app_s* app, struct window_s* window, struct eventloop_s* loop) { wayc_notnull(window); wayc_notnull(loop); wayc_notnull(app); struct renderer_s* renderer = app->renderer; struct font_s* font = app->font; (void)font; wayc_renderer_begin(renderer); wayc_renderer_end(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(app, window, loop); break; default: break; } } int main() { 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, WAYC_CLEAR_COLOR) != 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 font_context_s font_context; if (wayc_font_context_init(&font_context) != FONT_CONTEXT_ERROR_NONE) wayc_panic("Failed to initialize font context"); wayc_defer(wayc_font_context_deinit(&font_context)); struct font_s font; if (wayc_font_init(&font, &font_context, WAYC_FONT, WAYC_FONT_SIZE, WAYC_ATLAS_WIDTH, WAYC_ATLAS_HEIGHT) != FONT_ERROR_NONE) wayc_panic("Failed to initialize font"); wayc_defer(wayc_font_deinit(&font)); struct app_s app = {&renderer, &font}; while (wayc_eventloop_running(&loop)) { wayc_eventloop_update(&loop, (u8*)&app); wayc_window_redraw(&window, &loop); } return 0; }