// // Created by bruno on 1.2.2025. // #include "font.h" BitmapFont prepText(SDL_Renderer *renderer, unsigned char pxSize, const char *file, uint8_t r, uint8_t g, uint8_t b, uint8_t a) { TTF_Font *gFont = TTF_OpenFont(file, pxSize); BitmapFont out; out.size = pxSize; out.color = (SDL_Color) {r, g, b, a}; unsigned int i = 1; do { if (i == 173) { //specifically this char is 0 width (IDK why) out.surface[i] = SDL_CreateRGBSurface(0,pxSize,pxSize,32,0,0,0,0); } else { char tmpOut[2] = {i, 0}; out.surface[i] = TTF_RenderText_Solid(gFont, tmpOut, out.color); } out.texture[i] = SDL_CreateTextureFromSurface(renderer, out.surface[i]); i++; } while (i < 256); TTF_CloseFont(gFont); return out; } void renderText(SDL_Renderer *renderer, BitmapFont font, char *string, uint16_t x, uint16_t y) { SDL_Rect charRect; charRect.x = 0; charRect.y = 0; charRect.w = font.size; charRect.h = font.size; SDL_Rect outRect = charRect; outRect.x = x; outRect.y = y; while (*string) { if (*string == '\n') { outRect.x = x; outRect.y += charRect.h + 4; string++; continue; } SDL_RenderCopy(renderer, font.texture[*string], &charRect, &outRect); outRect.x += charRect.w + 1; string++; } } void destroyFont(BitmapFont *font) { for (uint16_t i = 1; i < 256; i++) { SDL_DestroyTexture(font->texture[i]); SDL_FreeSurface(font->surface[i]); } }