fed/main.c
2025-07-04 02:48:44 +02:00

123 lines
2.8 KiB
C

#include "app.h"
#include "app_ressources.h"
#include <SDL2/SDL.h>
#include <SDL2/SDL_blendmode.h>
#include <SDL2/SDL_error.h>
#include <SDL2/SDL_pixels.h>
#include <SDL2/SDL_render.h>
#include <SDL2/SDL_stdinc.h>
#include <SDL2/SDL_surface.h>
#include <SDL2/SDL_ttf.h>
#include <SDL2/SDL_video.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
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);
}