#include #include #include #include #include #include akerr_ErrorContext AKERR_NOIGNORE *akgl_text_loadfont(char *name, char *filepath, int size) { TTF_Font *font = NULL; PREPARE_ERROR(errctx); FAIL_ZERO_RETURN(errctx, name, AKERR_NULLPOINTER, "Null font name"); FAIL_ZERO_RETURN(errctx, name, AKERR_NULLPOINTER, "Null filepath"); font = TTF_OpenFont(filepath, size); FAIL_ZERO_RETURN(errctx, font, AKGL_ERR_SDL, "%s", SDL_GetError()); FAIL_ZERO_RETURN( errctx, SDL_SetPointerProperty(AKGL_REGISTRY_FONT, name, (void *)font), AKERR_KEY, "Unable to add font %p to registry as %s : %s", (void *)font, name, SDL_GetError()); SUCCEED_RETURN(errctx); } akerr_ErrorContext AKERR_NOIGNORE *akgl_text_rendertextat(TTF_Font *font, char *text, SDL_Color color, int wraplength, int x, int y) { SDL_Surface *textsurf = NULL; SDL_Texture *texture = NULL; SDL_FRect dest; PREPARE_ERROR(errctx); FAIL_ZERO_RETURN(errctx, font, AKERR_NULLPOINTER, "NULL font"); FAIL_ZERO_RETURN(errctx, text, AKERR_NULLPOINTER, "NULL text string"); if ( wraplength > 0 ) { textsurf = TTF_RenderText_Blended_Wrapped( font, text, 0, color, wraplength); } else { textsurf = TTF_RenderText_Blended( font, text, 0, color); } FAIL_ZERO_RETURN(errctx, textsurf, AKERR_NULLPOINTER, "%s", SDL_GetError()); texture = SDL_CreateTextureFromSurface(renderer.sdl_renderer, textsurf); FAIL_ZERO_RETURN(errctx, texture, AKERR_NULLPOINTER, "%s", SDL_GetError()); dest.x = x; dest.y = y; SDL_GetTextureSize(texture, &dest.w, &dest.h); PASS(errctx, renderer.draw_texture(&renderer, texture, NULL, &dest, 0, NULL, SDL_FLIP_NONE)); SDL_DestroyTexture(texture); SDL_DestroySurface(textsurf); SUCCEED_RETURN(errctx); }