int blackwhite_mode;
point_t position;
SDL_Renderer *renderer;
+ sprite_font_t *font;
};
static vec_t effective_ratio(const SDL_Rect *view_port);
const SDL_Rect *view_port,
const triangle_t t);
-camera_t *create_camera_from_renderer(SDL_Renderer *renderer)
+camera_t *create_camera(SDL_Renderer *renderer,
+ sprite_font_t *font)
{
camera_t *camera = malloc(sizeof(camera_t));
camera->debug_mode = 0;
camera->blackwhite_mode = 0;
camera->renderer = renderer;
+ camera->font = font;
return camera;
}
const SDL_Color sdl_color = color_for_sdl(camera->blackwhite_mode ? color_desaturate(color) : color);
-
if (camera->debug_mode) {
if (SDL_SetRenderDrawColor(camera->renderer, sdl_color.r, sdl_color.g, sdl_color.b, sdl_color.a / 2) < 0) {
throw_error(ERROR_TYPE_SDL2);
return 0;
}
+int camera_render_text(camera_t *camera,
+ const char *text,
+ vec_t size,
+ color_t color,
+ vec_t position)
+{
+ SDL_Rect view_port;
+ SDL_RenderGetViewport(camera->renderer, &view_port);
+
+ const vec_t scale = effective_scale(&view_port);
+ const vec_t screen_position = camera_point(camera, &view_port, position);
+
+ if (sprite_font_render_text(
+ camera->font,
+ camera->renderer,
+ screen_position,
+ vec(size.x * scale.x, size.y * scale.y),
+ camera->blackwhite_mode ? color_desaturate(color) : color,
+ text) < 0) {
+ return -1;
+ }
+
+ return 0;
+}
+
int camera_clear_background(camera_t *camera,
color_t color)
{
w, h);
}
+int camera_is_text_visible(const camera_t *camera,
+ vec_t size,
+ vec_t position,
+ const char *text)
+{
+ assert(camera);
+ assert(text);
+ (void) size;
+ (void) position;
+
+ /* TODO: camera_is_text_visible not implemented */
+
+ return 0;
+}
/* ---------- Private Function ---------- */