mirror of
https://github.com/libretro/RetroArch
synced 2025-02-26 15:39:55 +00:00
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:
parent
0e23908b78
commit
b756111aac
@ -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);
|
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,
|
gl_raster_t *font, const char *msg, GLfloat scale,
|
||||||
const GLfloat color[4], GLfloat pos_x, GLfloat pos_y,
|
const GLfloat color[4], GLfloat pos_x, GLfloat pos_y,
|
||||||
unsigned text_align)
|
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)
|
static void gl_raster_font_setup_viewport(gl_raster_t *font, bool full_screen)
|
||||||
{
|
{
|
||||||
unsigned width, height;
|
unsigned width, height;
|
||||||
|
@ -128,6 +128,16 @@ static const char *font_renderer_bmp_get_default_font(void)
|
|||||||
return "";
|
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_driver_t bitmap_font_renderer = {
|
||||||
font_renderer_bmp_init,
|
font_renderer_bmp_init,
|
||||||
font_renderer_bmp_get_atlas,
|
font_renderer_bmp_get_atlas,
|
||||||
@ -135,5 +145,6 @@ font_renderer_driver_t bitmap_font_renderer = {
|
|||||||
font_renderer_bmp_free,
|
font_renderer_bmp_free,
|
||||||
font_renderer_bmp_get_default_font,
|
font_renderer_bmp_get_default_font,
|
||||||
"bitmap",
|
"bitmap",
|
||||||
|
font_renderer_bmp_get_line_height,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -293,4 +293,5 @@ font_renderer_driver_t coretext_font_renderer = {
|
|||||||
font_renderer_ct_free,
|
font_renderer_ct_free,
|
||||||
font_renderer_ct_get_default_font,
|
font_renderer_ct_get_default_font,
|
||||||
"coretext",
|
"coretext",
|
||||||
|
NULL, /*get_line_height*/
|
||||||
};
|
};
|
||||||
|
@ -226,6 +226,15 @@ static const char *font_renderer_ft_get_default_font(void)
|
|||||||
return NULL;
|
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_driver_t freetype_font_renderer = {
|
||||||
font_renderer_ft_init,
|
font_renderer_ft_init,
|
||||||
font_renderer_ft_get_atlas,
|
font_renderer_ft_get_atlas,
|
||||||
@ -233,4 +242,5 @@ font_renderer_driver_t freetype_font_renderer = {
|
|||||||
font_renderer_ft_free,
|
font_renderer_ft_free,
|
||||||
font_renderer_ft_get_default_font,
|
font_renderer_ft_get_default_font,
|
||||||
"freetype",
|
"freetype",
|
||||||
|
NULL, /*get_line_height*/
|
||||||
};
|
};
|
||||||
|
@ -94,6 +94,8 @@ typedef struct font_renderer_driver
|
|||||||
const char *(*get_default_font)(void);
|
const char *(*get_default_font)(void);
|
||||||
|
|
||||||
const char *ident;
|
const char *ident;
|
||||||
|
|
||||||
|
int (*get_line_height)(void* data);
|
||||||
} font_renderer_driver_t;
|
} font_renderer_driver_t;
|
||||||
|
|
||||||
extern font_renderer_driver_t freetype_font_renderer;
|
extern font_renderer_driver_t freetype_font_renderer;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user