1
0
mirror of https://github.com/libretro/RetroArch synced 2024-07-08 12:15:49 +00:00

Fix Arabic, Chinese and Korean font rendering

This commit is contained in:
Guo Yunhe 2020-05-24 17:19:22 +03:00
parent 2f836f786f
commit b6561ee9ca
3 changed files with 118 additions and 11 deletions

View File

@ -63,6 +63,7 @@
#include "configuration.h"
#include "file_path_special.h"
#include "msg_hash.h"
#include "paths.h"
#include "verbosity.h"
@ -165,6 +166,17 @@ void fill_pathname_application_special(char *s,
fill_pathname_basedir(s, path_get(RARCH_PATH_CONFIG), len);
}
break;
case APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG:
{
char *s1 = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
s1[0] = '\0';
settings_t *settings = config_get_ptr();
const char *dir_assets = settings->paths.directory_assets;
fill_pathname_join(s1, dir_assets, "pkg", PATH_MAX_LENGTH * sizeof(char));
strlcpy(s, s1, len);
free(s1);
}
break;
case APPLICATION_SPECIAL_DIRECTORY_ASSETS_XMB_ICONS:
#ifdef HAVE_XMB
{
@ -327,10 +339,32 @@ void fill_pathname_application_special(char *s,
s1[0] = '\0';
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_MATERIALUI);
fill_pathname_join(s, s1, "font.ttf", len);
switch (*msg_hash_get_uint(MSG_HASH_USER_LANGUAGE)) {
case RETRO_LANGUAGE_ARABIC:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG);
fill_pathname_join(s, s1, "fallback-font.ttf", len);
break;
case RETRO_LANGUAGE_CHINESE_SIMPLIFIED:
case RETRO_LANGUAGE_CHINESE_TRADITIONAL:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG);
fill_pathname_join(s, s1, "chinese-fallback-font.ttf", len);
break;
case RETRO_LANGUAGE_KOREAN:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG);
fill_pathname_join(s, s1, "korean-fallback-font.ttf", len);
break;
default:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_MATERIALUI);
fill_pathname_join(s, s1, "font.ttf", len);
}
free(s1);
}
@ -350,10 +384,32 @@ void fill_pathname_application_special(char *s,
s1[0] = '\0';
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_XMB);
fill_pathname_join(s, s1, "font.ttf", len);
switch (*msg_hash_get_uint(MSG_HASH_USER_LANGUAGE)) {
case RETRO_LANGUAGE_ARABIC:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG);
fill_pathname_join(s, s1, "fallback-font.ttf", len);
break;
case RETRO_LANGUAGE_CHINESE_SIMPLIFIED:
case RETRO_LANGUAGE_CHINESE_TRADITIONAL:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG);
fill_pathname_join(s, s1, "chinese-fallback-font.ttf", len);
break;
case RETRO_LANGUAGE_KOREAN:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG);
fill_pathname_join(s, s1, "korean-fallback-font.ttf", len);
break;
default:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_XMB);
fill_pathname_join(s, s1, "font.ttf", len);
}
free(s1);
}
}

View File

@ -104,6 +104,9 @@ enum application_special_type
APPLICATION_SPECIAL_NONE = 0,
APPLICATION_SPECIAL_DIRECTORY_AUTOCONFIG,
APPLICATION_SPECIAL_DIRECTORY_CONFIG,
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG,
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG_AR_FONT,
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG_CJK_FONT,
APPLICATION_SPECIAL_DIRECTORY_ASSETS_MATERIALUI,
APPLICATION_SPECIAL_DIRECTORY_ASSETS_MATERIALUI_FONT,
APPLICATION_SPECIAL_DIRECTORY_ASSETS_MATERIALUI_ICONS,

View File

@ -636,13 +636,61 @@ static void ozone_set_layout(ozone_handle_t *ozone, bool is_threaded)
ozone->pointer_active_delta = CURSOR_ACTIVE_DELTA * scale_factor;
/* Initialise fonts */
fill_pathname_join(font_path, ozone->assets_path, "bold.ttf", sizeof(font_path));
char *s1 = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
s1[0] = '\0';
switch (*msg_hash_get_uint(MSG_HASH_USER_LANGUAGE)) {
case RETRO_LANGUAGE_ARABIC:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG);
fill_pathname_join(font_path, s1, "fallback-font.ttf", sizeof(font_path));
break;
case RETRO_LANGUAGE_CHINESE_SIMPLIFIED:
case RETRO_LANGUAGE_CHINESE_TRADITIONAL:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG);
fill_pathname_join(font_path, s1, "chinese-fallback-font.ttf", sizeof(font_path));
break;
case RETRO_LANGUAGE_KOREAN:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG);
fill_pathname_join(font_path, s1, "korean-fallback-font.ttf", sizeof(font_path));
break;
default:
fill_pathname_join(font_path, ozone->assets_path, "bold.ttf", sizeof(font_path));
}
font_inited = ozone_init_font(&ozone->fonts.title,
is_threaded, font_path, FONT_SIZE_TITLE * scale_factor);
ozone->has_all_assets = ozone->has_all_assets && font_inited;
fill_pathname_join(font_path, ozone->assets_path, "regular.ttf", sizeof(font_path));
switch (*msg_hash_get_uint(MSG_HASH_USER_LANGUAGE)) {
case RETRO_LANGUAGE_ARABIC:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG);
fill_pathname_join(font_path, s1, "fallback-font.ttf", sizeof(font_path));
break;
case RETRO_LANGUAGE_CHINESE_SIMPLIFIED:
case RETRO_LANGUAGE_CHINESE_TRADITIONAL:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG);
fill_pathname_join(font_path, s1, "chinese-fallback-font.ttf", sizeof(font_path));
break;
case RETRO_LANGUAGE_KOREAN:
fill_pathname_application_special(s1,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_PKG);
fill_pathname_join(font_path, s1, "korean-fallback-font.ttf", sizeof(font_path));
break;
default:
fill_pathname_join(font_path, ozone->assets_path, "regular.ttf", sizeof(font_path));
}
free(s1);
font_inited = ozone_init_font(&ozone->fonts.footer,
is_threaded, font_path, FONT_SIZE_FOOTER * scale_factor);
@ -1542,7 +1590,7 @@ static void ozone_draw_header(ozone_handle_t *ozone,
unsigned logo_icon_size = 60 * scale_factor;
unsigned status_icon_size = 92 * scale_factor;
unsigned seperator_margin = 30 * scale_factor;
enum gfx_animation_ticker_type
enum gfx_animation_ticker_type
menu_ticker_type = (enum gfx_animation_ticker_type)settings->uints.menu_ticker_type;
/* Initial ticker configuration */