Added the get_line_height to font_renderer_driver_t and a first implementation of it in gl_raster (\n) and bitmapfont

This commit is contained in:
Nathan SALAUN 2015-05-27 12:20:31 +02:00
parent 0e23908b78
commit b756111aac
5 changed files with 60 additions and 1 deletions

View File

@ -172,7 +172,7 @@ static void gl_raster_font_draw_vertices(gl_t *gl, const gl_coords_t *coords)
glDrawArrays(GL_TRIANGLES, 0, coords->vertices);
}
static void gl_raster_font_render_message(
static void gl_raster_font_render_line(
gl_raster_t *font, const char *msg, GLfloat scale,
const GLfloat color[4], GLfloat pos_x, GLfloat pos_y,
unsigned text_align)
@ -262,6 +262,41 @@ static void gl_raster_font_render_message(
}
}
//TODO Support scale
//TODO Line height
//TODO Adapt this to all drivers
static void gl_raster_font_render_message(
gl_raster_t *font, const char *msg, GLfloat scale,
const GLfloat color[4], GLfloat pos_x, GLfloat pos_y,
unsigned text_align)
{
//If the font height is not supported just draw like as usual
if (!font->font_driver->get_line_height)
{
gl_raster_font_render_line(font, msg, scale, color, pos_x, pos_y, text_align);
return;
}
char* copy = strdup(msg);
char* next_line = strtok(copy, "\n");
int lines = 0;
float line_height = scale * 1/(float)font->font_driver->get_line_height(font->font_data);
while (next_line != NULL)
{
//Draw the line
gl_raster_font_render_line(font, next_line, scale, color, pos_x, pos_y - (float)lines*line_height, text_align);
//Continue to split
next_line = strtok(NULL, "\n");
lines++;
}
free(copy);
}
static void gl_raster_font_setup_viewport(gl_raster_t *font, bool full_screen)
{
unsigned width, height;

View File

@ -128,6 +128,16 @@ static const char *font_renderer_bmp_get_default_font(void)
return "";
}
static int font_renderer_bmp_get_line_height(void* data)
{
bm_renderer_t *handle = (bm_renderer_t*)data;
if (!handle)
return FONT_HEIGHT;
return FONT_HEIGHT * handle->scale_factor;
}
font_renderer_driver_t bitmap_font_renderer = {
font_renderer_bmp_init,
font_renderer_bmp_get_atlas,
@ -135,5 +145,6 @@ font_renderer_driver_t bitmap_font_renderer = {
font_renderer_bmp_free,
font_renderer_bmp_get_default_font,
"bitmap",
font_renderer_bmp_get_line_height,
};

View File

@ -293,4 +293,5 @@ font_renderer_driver_t coretext_font_renderer = {
font_renderer_ct_free,
font_renderer_ct_get_default_font,
"coretext",
NULL, /*get_line_height*/
};

View File

@ -226,6 +226,15 @@ static const char *font_renderer_ft_get_default_font(void)
return NULL;
}
static int font_renderer_ft_get_line_height(void* data)
{
ft_font_renderer_t *handle = (ft_font_renderer_t*)data;
if (!handle)
return 0;
return handle->face->size->metrics->height;
}
font_renderer_driver_t freetype_font_renderer = {
font_renderer_ft_init,
font_renderer_ft_get_atlas,
@ -233,4 +242,5 @@ font_renderer_driver_t freetype_font_renderer = {
font_renderer_ft_free,
font_renderer_ft_get_default_font,
"freetype",
NULL, /*get_line_height*/
};

View File

@ -94,6 +94,8 @@ typedef struct font_renderer_driver
const char *(*get_default_font)(void);
const char *ident;
int (*get_line_height)(void* data);
} font_renderer_driver_t;
extern font_renderer_driver_t freetype_font_renderer;