#include "app.h" #include "app_ressources.h" #include #include #include #include #include #include #include #include #include #include #include #include const Theme defaultTheme = { .foreground = { 0xfb, 0xf1, 0xc7, 0xff }, .background = { 0x28, 0x28, 0x28, 0xff }, .linenumber = { 0x7c, 0x6f, 0x64, 0xff }, }; TextSize text_size(const char* text, void* font) { int w, h; TTF_SizeText(font, text, &w, &h); return (TextSize) { w, h }; } void render_text( SDL_Renderer* renderer, const char* text, TTF_Font* font, int x, int y, SDL_Color fg, SDL_Color bg) { SDL_Surface* surface = TTF_RenderUTF8_Shaded(font, text, fg, bg); SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface); TextSize size = text_size(text, font); SDL_RenderCopy( renderer, texture, nullptr, &(SDL_Rect) { x, y, size.width, size.height }); SDL_DestroyTexture(texture); SDL_FreeSurface(surface); } int main(int argc, char** argv) { App app_instance; App* app = &app_instance; app_init(app); for (int i = 1; i < argc; ++i) { app_open_file(app, argv[i]); } app_prepare(app); SDL_Init(SDL_INIT_VIDEO); TTF_Init(); app_ressources_load(app); SDL_Window* window = SDL_CreateWindow( "fed", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1000, 1000, SDL_WINDOW_RESIZABLE); SDL_Renderer* renderer = SDL_CreateRenderer(window, 0, 0); // SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_ADD); uint64_t before = SDL_GetTicks64(); while (true) { uint64_t now = SDL_GetTicks64(); uint64_t delta = now - before; (void)delta; SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: goto exit_game; case SDL_KEYDOWN: { switch (event.key.keysym.sym) { case SDLK_ESCAPE: goto exit_game; } } default: app_handle_keydown(app, event.key.keysym.sym); } } SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); SDL_RenderClear(renderer); app_render(app, renderer); SDL_RenderPresent(renderer); SDL_Delay(16); before = now; } exit_game:; printf("exitting...\n"); app_ressources_unload(app); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); TTF_Quit(); SDL_Quit(); app_deinit(app); }