(PSFont) Add PS Font renderer for font abstraction interface

This commit is contained in:
twinaphex 2012-12-14 22:35:23 +01:00
parent e517a09b42
commit fcb31db218
4 changed files with 54 additions and 18 deletions

View File

@ -203,15 +203,12 @@ FONTS
#endif
#include "../../gfx/fonts/fonts.c"
#ifdef HAVE_OPENGL
#include "../../gfx/fonts/gl_font.c"
#endif
#if defined(ANDROID)
#include "../../gfx/fonts/bitmapfont.c"
#elif defined(HAVE_LIBDBGFONT)
#if defined(HAVE_LIBDBGFONT)
#include "../../gfx/fonts/ps_libdbgfont.c"
#elif defined(HAVE_OPENGL)
#include "../../gfx/fonts/gl_font.c"
#elif defined(_XBOX1)
#include "../../gfx/fonts/xdk1_xfonts.c"
#elif defined(_XBOX360)

View File

@ -23,6 +23,9 @@
static const font_renderer_driver_t *backends[] = {
#ifdef HAVE_FREETYPE
&ft_font_renderer,
#endif
#ifdef HAVE_LIBDBGFONT
&libdbgps_font_renderer,
#endif
&bitmap_font_renderer,
};

View File

@ -50,6 +50,7 @@ typedef struct font_renderer_driver
extern const font_renderer_driver_t ft_font_renderer;
extern const font_renderer_driver_t bitmap_font_renderer;
extern const font_renderer_driver_t libdbgps_font_renderer;
bool font_renderer_create_default(const font_renderer_driver_t **driver, void **handle);

View File

@ -14,7 +14,7 @@
* If not, see <http://www.gnu.org/licenses/>.
*/
#include "../gl_common.h"
#include "fonts.h"
#if defined(SN_TARGET_PSP2)
#include <libdbgfont.h>
@ -33,16 +33,20 @@
#define DbgFontDraw cellDbgFontDraw
#endif
void gl_init_font(void *data, const char *font_path, unsigned font_size)
static void *libdbgpsfont_renderer_init(const char *font_path, unsigned font_size)
{
(void)font_path;
(void)font_size;
font_renderer_t *handle = (font_renderer_t*)calloc(1, sizeof(*handle));
if (!handle)
return NULL;
DbgFontConfig cfg;
#if defined(SN_TARGET_PSP2)
cfg.fontSize = SCE_DBGFONT_FONTSIZE_LARGE;
#elif defined(__CELLOS_LV2__)
gl_t *gl = (gl_t*)data;
gl_t *gl = (gl_t*)driver.video_data;
cfg.bufSize = SCE_DBGFONT_BUFSIZE_LARGE;
cfg.screenWidth = gl->win_width;
@ -50,26 +54,57 @@ void gl_init_font(void *data, const char *font_path, unsigned font_size)
#endif
DbgFontInit(&cfg);
return handle;
}
void gl_deinit_font(void *data)
static void libdbgpsfont_renderer_free(void *data)
{
(void)data;
DbgFontExit();
}
void gl_render_msg(void *data, const char *msg)
static void libdbgpsfont_renderer_free_output(void *data, struct font_output_list *output)
{
(void)data;
DbgFontPrint(g_settings.video.msg_pos_x, 0.76f, 1.04f, SILVER, msg);
DbgFontPrint(g_settings.video.msg_pos_x, 0.76f, 1.03f, WHITE, msg);
DbgFontDraw();
}
void gl_render_msg_place(void *data, float x, float y, float scale, uint32_t color, const char *msg)
static void libdbgpsfont_renderer_msg(void *data, const char *msg, struct font_output_list *output)
{
(void)data;
float x, y, scale;
unsigned color;
if(!output)
{
x = g_settings.video.msg_pos_x;
y = 0.76f;
scale = 1.04f;
color = SILVER;
}
else
{
x = output->head->off_x;
y = output->head->off_y;
scale = output->head->scaling_factor;
color = WHITE;
}
DbgFontPrint(x, y, scale, color, msg);
DbgFontPrint(x, y, scale - 0.01f, WHITE, msg);
DbgFontDraw();
}
static const char *libdbgpsfont_renderer_get_default_font(void)
{
return "";
}
const font_renderer_driver_t libdbgps_font_renderer = {
libdbgpsfont_renderer_init,
libdbgpsfont_renderer_msg,
libdbgpsfont_renderer_free_output,
libdbgpsfont_renderer_free,
libdbgpsfont_renderer_get_default_font,
"libdbgpsfont",
};