game->font = PUSH_LT(
lt,
create_sprite_font_from_file("fonts/charmap-oldschool_white.bmp",
- color(1.0f, 0.0f, 0.0f, 1.0f),
renderer),
destroy_sprite_font);
if (game->font == NULL) {
return -1;
}
- if (camera_render_text(game->camera, "hello world", 4, vec(-30.0f, 0.0f)) < 0) {
+ if (camera_render_text(game->camera, "hello world", 4, color(1.0f, 0.0f, 0.0f, 1.0f), vec(-30.0f, 0.0f)) < 0) {
return -1;
}
return 0;
}
+int camera_render_text(camera_t *camera,
+ const char *text,
+ int size,
+ color_t color,
+ vec_t position)
+{
+ SDL_Rect view_port;
+ SDL_RenderGetViewport(camera->renderer, &view_port);
+
+ const vec_t screen_position = camera_point(camera, &view_port, position);
+
+ if (sprite_font_render_text(
+ camera->font,
+ camera->renderer,
+ screen_position,
+ size,
+ camera->blackwhite_mode ? color_desaturate(color) : color,
+ text) < 0) {
+ return -1;
+ }
+
+ return 0;
+}
+
int camera_clear_background(camera_t *camera,
color_t color)
{
effective_scale(view_port),
vec(rect.w, rect.h)));
}
-
-int camera_render_text(camera_t *camera,
- const char *text,
- int size,
- vec_t position)
-{
- SDL_Rect view_port;
- SDL_RenderGetViewport(camera->renderer, &view_port);
-
- const vec_t screen_position = camera_point(camera, &view_port, position);
-
- if (sprite_font_render_text(camera->font, camera->renderer, screen_position, size, text) < 0) {
- return -1;
- }
-
- return 0;
-}
int camera_render_text(camera_t *camera,
const char *text,
int size,
+ color_t color,
vec_t position);
void camera_center_at(camera_t *camera, point_t position);
};
sprite_font_t *create_sprite_font_from_file(const char *bmp_file_path,
- color_t color,
SDL_Renderer *renderer)
{
assert(bmp_file_path);
RETURN_LT(lt, NULL);
}
- const SDL_Color text_color = color_for_sdl(color);
- const Uint32 actual_text_color =
- SDL_MapRGB(sprite_font->surface->format,
- text_color.r,
- text_color.g,
- text_color.b);
- SDL_LockSurface(sprite_font->surface);
- for (int y = 0; y < sprite_font->surface->h; ++y) {
- for (int x = 0; x < sprite_font->surface->w; ++x) {
- if (getpixel(sprite_font->surface, x, y) == SDL_MapRGB(sprite_font->surface->format, 255, 255, 255)) {
- putpixel(sprite_font->surface, x, y, actual_text_color);
- }
- }
- }
- SDL_UnlockSurface(sprite_font->surface);
-
sprite_font->texture = PUSH_LT(
lt,
SDL_CreateTextureFromSurface(renderer, sprite_font->surface),
SDL_Renderer *renderer,
vec_t position,
int size,
+ color_t color,
const char *text)
{
assert(sprite_font);
assert(renderer);
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);
+ return -1;
+ }
+
const size_t text_size = strlen(text);
const int px = (int) roundf(position.x);
const int py = (int) roundf(position.y);
typedef struct sprite_font_t sprite_font_t;
sprite_font_t *create_sprite_font_from_file(const char *bmp_file_path,
- color_t color,
SDL_Renderer *renderer);
void destroy_sprite_font(sprite_font_t *sprite_font);
SDL_Renderer *renderer,
vec_t position,
int size,
+ color_t color,
const char *text);
#endif // SPRITE_FONT_H_