-#include <SDL2/SDL.h>
-#include <assert.h>
+#include <SDL.h>
+#include "system/stacktrace.h"
#include <stdio.h>
#include <string.h>
#include "math/rect.h"
#include "sdl/renderer.h"
#include "sprite_font.h"
-#include "system/error.h"
#include "system/lt.h"
#include "system/nth_alloc.h"
+#include "system/log.h"
#define FONT_ROW_SIZE 18
Sprite_font *create_sprite_font_from_file(const char *bmp_file_path,
SDL_Renderer *renderer)
{
- assert(bmp_file_path);
- assert(renderer);
+ trace_assert(bmp_file_path);
+ trace_assert(renderer);
- Lt * const lt = create_lt();
- if (lt == NULL) {
- return NULL;
- }
+ Lt *lt = create_lt();
- Sprite_font * const sprite_font = PUSH_LT(lt, nth_alloc(sizeof(Sprite_font)), free);
+ Sprite_font * const sprite_font = PUSH_LT(lt, nth_calloc(1, sizeof(Sprite_font)), free);
if (sprite_font == NULL) {
- throw_error(ERROR_TYPE_LIBC);
RETURN_LT(lt, NULL);
}
SDL_Surface * const surface = PUSH_LT(lt, SDL_LoadBMP(bmp_file_path), SDL_FreeSurface);
if (surface == NULL) {
- throw_error(ERROR_TYPE_SDL2);
+ log_fail("Could not load %s: %s\n", bmp_file_path, SDL_GetError());
RETURN_LT(lt, NULL);
}
SDL_TRUE,
SDL_MapRGB(surface->format,
0, 0, 0)) < 0) {
- throw_error(ERROR_TYPE_SDL2);
+ log_fail("SDL_SetColorKey: %s\n", SDL_GetError());
RETURN_LT(lt, NULL);
}
SDL_CreateTextureFromSurface(renderer, surface),
SDL_DestroyTexture);
if (sprite_font->texture == NULL) {
- throw_error(ERROR_TYPE_SDL2);
+ log_fail("SDL_CreateTextureFromSurface: %s\n", SDL_GetError());
RETURN_LT(lt, NULL);
}
void destroy_sprite_font(Sprite_font *sprite_font)
{
- assert(sprite_font);
+ trace_assert(sprite_font);
RETURN_LT0(sprite_font->lt);
}
static SDL_Rect sprite_font_char_rect(const Sprite_font *sprite_font, char x)
{
- assert(sprite_font);
+ trace_assert(sprite_font);
if (32 <= x && x <= 126) {
const SDL_Rect rect = {
int sprite_font_render_text(const Sprite_font *sprite_font,
SDL_Renderer *renderer,
- Vec position,
- Vec size,
+ Vec2f position,
+ Vec2f size,
Color color,
const char *text)
{
- assert(sprite_font);
- assert(renderer);
- assert(text);
+ trace_assert(sprite_font);
+ trace_assert(renderer);
+ trace_assert(text);
const SDL_Color sdl_color = color_for_sdl(color);
if (SDL_SetTextureColorMod(sprite_font->texture, sdl_color.r, sdl_color.g, sdl_color.b) < 0) {
- throw_error(ERROR_TYPE_SDL2);
+ log_fail("SDL_SetTextureColorMod: %s\n", SDL_GetError());
return -1;
}
if (SDL_SetTextureAlphaMod(sprite_font->texture, sdl_color.a) < 0) {
- throw_error(ERROR_TYPE_SDL2);
+ log_fail("SDL_SetTextureAlphaMod: %s\n", SDL_GetError());
return -1;
}
}
Rect sprite_font_boundary_box(const Sprite_font *sprite_font,
- Vec position,
- Vec size,
+ Vec2f position,
+ Vec2f size,
const char *text)
{
- assert(sprite_font);
- assert(text);
+ trace_assert(sprite_font);
+ trace_assert(text);
return rect(
position.x, position.y,
size.x * FONT_CHAR_WIDTH * (float) strlen(text),