#include #include #include #include #include #include SaffronWindow* saffron_window_new(const char* title, int w, int h) { SaffronWindow* window = malloc(sizeof(SaffronWindow)); window->root = saffron_widget_new(); // frick, need to implement this. window->title = title; window->w = window->root->w = w; window->h = window->root->h = h; window->sdl_window = SDL_CreateWindow(title, w, h, SDL_WINDOW_RESIZABLE); window->renderer = SDL_CreateRenderer(window->sdl_window, NULL); return window; } void saffron_window_free(SaffronWindow* window) { SDL_DestroyRenderer(window->renderer); SDL_DestroyWindow(window->sdl_window); saffron_widget_free(window->root); free(window); } void saffron_window_main(SaffronWindow *window) { if (!window) return; bool running = true; SDL_Event event; while (running) { while (SDL_PollEvent(&event)) { if (event.type == SDL_EVENT_QUIT) { running = false; } if (event.type == SDL_EVENT_MOUSE_BUTTON_DOWN) { printf("[saffron] mouse down!\n"); if (event.button.button == SDL_BUTTON_LEFT) { printf("[saffron] left click at %f, %f!\n", event.button.x, event.button.y); printf("[saffron] calling hit test at coordinates\n"); SaffronWidget* hit = saffron_widget_hit_test(window->root, (int)event.button.x, (int)event.button.y); if (hit && hit->on_click) hit->on_click(hit); } } } SDL_SetRenderDrawColor(window->renderer, 0, 0, 0, 255); SDL_RenderClear(window->renderer); saffron_widget_draw(window->root, window->renderer); SDL_RenderPresent(window->renderer); SDL_Delay(16); // around 60fps or so } }