mirror of
https://github.com/libretro/RetroArch
synced 2025-03-03 04:14:00 +00:00
(Menu Widgets) Add scaling
This commit is contained in:
parent
e0cfa01e99
commit
e8a2a39d72
@ -502,6 +502,8 @@ MSG_HASH(MENU_ENUM_LABEL_CONTENT_DIR,
|
|||||||
"content_directory")
|
"content_directory")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_MENU_SCALE_FACTOR,
|
MSG_HASH(MENU_ENUM_LABEL_MENU_SCALE_FACTOR,
|
||||||
"menu_scale_factor")
|
"menu_scale_factor")
|
||||||
|
MSG_HASH(MENU_ENUM_LABEL_MENU_WIDGET_SCALE_FACTOR,
|
||||||
|
"menu_widget_scale_factor")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_DRIVER_SETTINGS,
|
MSG_HASH(MENU_ENUM_LABEL_DRIVER_SETTINGS,
|
||||||
"driver_settings")
|
"driver_settings")
|
||||||
MSG_HASH(MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE,
|
MSG_HASH(MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE,
|
||||||
|
@ -916,6 +916,14 @@ MSG_HASH(
|
|||||||
MENU_ENUM_SUBLABEL_MENU_SCALE_FACTOR,
|
MENU_ENUM_SUBLABEL_MENU_SCALE_FACTOR,
|
||||||
"Applies a global scaling factor when drawing the menu. Can be used to increase or decrease the size of the user interface."
|
"Applies a global scaling factor when drawing the menu. Can be used to increase or decrease the size of the user interface."
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_LABEL_VALUE_MENU_WIDGET_SCALE_FACTOR,
|
||||||
|
"Menu Widget Scale Factor"
|
||||||
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_MENU_WIDGET_SCALE_FACTOR,
|
||||||
|
"Applies a scaling factor when drawing menu widgets. Can be used to increase or decrease the size of decorated notifications, indicators and controls."
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS,
|
MENU_ENUM_LABEL_VALUE_DRIVER_SETTINGS,
|
||||||
"Drivers"
|
"Drivers"
|
||||||
|
@ -523,6 +523,7 @@ default_sublabel_macro(action_bind_sublabel_ozone_truncate_playlist_name,
|
|||||||
default_sublabel_macro(action_bind_sublabel_ozone_scroll_content_metadata, MENU_ENUM_SUBLABEL_OZONE_SCROLL_CONTENT_METADATA)
|
default_sublabel_macro(action_bind_sublabel_ozone_scroll_content_metadata, MENU_ENUM_SUBLABEL_OZONE_SCROLL_CONTENT_METADATA)
|
||||||
default_sublabel_macro(action_bind_sublabel_menu_use_preferred_system_color_theme, MENU_ENUM_SUBLABEL_MENU_USE_PREFERRED_SYSTEM_COLOR_THEME)
|
default_sublabel_macro(action_bind_sublabel_menu_use_preferred_system_color_theme, MENU_ENUM_SUBLABEL_MENU_USE_PREFERRED_SYSTEM_COLOR_THEME)
|
||||||
default_sublabel_macro(action_bind_sublabel_menu_scale_factor, MENU_ENUM_SUBLABEL_MENU_SCALE_FACTOR)
|
default_sublabel_macro(action_bind_sublabel_menu_scale_factor, MENU_ENUM_SUBLABEL_MENU_SCALE_FACTOR)
|
||||||
|
default_sublabel_macro(action_bind_sublabel_menu_widget_scale_factor, MENU_ENUM_SUBLABEL_MENU_WIDGET_SCALE_FACTOR)
|
||||||
default_sublabel_macro(action_bind_sublabel_menu_wallpaper_opacity, MENU_ENUM_SUBLABEL_MENU_WALLPAPER_OPACITY)
|
default_sublabel_macro(action_bind_sublabel_menu_wallpaper_opacity, MENU_ENUM_SUBLABEL_MENU_WALLPAPER_OPACITY)
|
||||||
default_sublabel_macro(action_bind_sublabel_menu_framebuffer_opacity, MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY)
|
default_sublabel_macro(action_bind_sublabel_menu_framebuffer_opacity, MENU_ENUM_SUBLABEL_MENU_FRAMEBUFFER_OPACITY)
|
||||||
default_sublabel_macro(action_bind_sublabel_menu_horizontal_animation, MENU_ENUM_SUBLABEL_MENU_HORIZONTAL_ANIMATION)
|
default_sublabel_macro(action_bind_sublabel_menu_horizontal_animation, MENU_ENUM_SUBLABEL_MENU_HORIZONTAL_ANIMATION)
|
||||||
@ -1740,7 +1741,15 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
|||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_xmb_animation_opening_main_menu);
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_xmb_animation_opening_main_menu);
|
||||||
break;
|
break;
|
||||||
case MENU_ENUM_LABEL_MENU_SCALE_FACTOR:
|
case MENU_ENUM_LABEL_MENU_SCALE_FACTOR:
|
||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_scale_factor);
|
settings = config_get_ptr();
|
||||||
|
if (string_is_equal(settings->arrays.menu_driver, "rgui"))
|
||||||
|
{
|
||||||
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_widget_scale_factor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_scale_factor);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY:
|
case MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY:
|
||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_wallpaper_opacity);
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_wallpaper_opacity);
|
||||||
|
@ -2045,6 +2045,45 @@ void menu_display_unset_framebuffer_dirty_flag(void)
|
|||||||
menu_display_framebuf_dirty = false;
|
menu_display_framebuf_dirty = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float menu_display_get_pixel_scale(unsigned width, unsigned height)
|
||||||
|
{
|
||||||
|
static unsigned last_width = 0;
|
||||||
|
static unsigned last_height = 0;
|
||||||
|
static float scale = 0.0f;
|
||||||
|
static bool scale_cached = false;
|
||||||
|
settings_t *settings = config_get_ptr();
|
||||||
|
|
||||||
|
/* We need to perform a square root here, which
|
||||||
|
* can be slow on some platforms (not *slow*, but
|
||||||
|
* it involves enough work that it's worth trying
|
||||||
|
* to optimise). We therefore cache the pixel scale,
|
||||||
|
* and only update on first run or when the video
|
||||||
|
* size changes */
|
||||||
|
if (!scale_cached ||
|
||||||
|
(width != last_width) ||
|
||||||
|
(height != last_height))
|
||||||
|
{
|
||||||
|
/* Baseline reference is a 1080p display */
|
||||||
|
scale = (float)(
|
||||||
|
sqrt((double)((width * width) + (height * height))) /
|
||||||
|
DIAGONAL_PIXELS_1080P);
|
||||||
|
|
||||||
|
scale_cached = true;
|
||||||
|
last_width = width;
|
||||||
|
last_height = height;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Apply user scaling factor */
|
||||||
|
if (settings)
|
||||||
|
{
|
||||||
|
float menu_scale_factor = settings->floats.menu_scale_factor;
|
||||||
|
return scale * ((menu_scale_factor > 0.0001f) ?
|
||||||
|
menu_scale_factor : 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
return scale;
|
||||||
|
}
|
||||||
|
|
||||||
float menu_display_get_dpi_scale(unsigned width, unsigned height)
|
float menu_display_get_dpi_scale(unsigned width, unsigned height)
|
||||||
{
|
{
|
||||||
static unsigned last_width = 0;
|
static unsigned last_width = 0;
|
||||||
|
@ -594,6 +594,7 @@ void menu_display_unset_viewport(unsigned width, unsigned height);
|
|||||||
bool menu_display_get_framebuffer_dirty_flag(void);
|
bool menu_display_get_framebuffer_dirty_flag(void);
|
||||||
void menu_display_set_framebuffer_dirty_flag(void);
|
void menu_display_set_framebuffer_dirty_flag(void);
|
||||||
void menu_display_unset_framebuffer_dirty_flag(void);
|
void menu_display_unset_framebuffer_dirty_flag(void);
|
||||||
|
float menu_display_get_pixel_scale(unsigned width, unsigned height);
|
||||||
float menu_display_get_dpi_scale(unsigned width, unsigned height);
|
float menu_display_get_dpi_scale(unsigned width, unsigned height);
|
||||||
bool menu_display_init_first_driver(bool video_is_threaded);
|
bool menu_display_init_first_driver(bool video_is_threaded);
|
||||||
bool menu_display_restore_clear_color(void);
|
bool menu_display_restore_clear_color(void);
|
||||||
|
@ -12844,15 +12844,29 @@ static bool setting_append_list(
|
|||||||
|
|
||||||
START_SUB_GROUP(list, list_info, "Display", &group_info, &subgroup_info, parent_group);
|
START_SUB_GROUP(list, list_info, "Display", &group_info, &subgroup_info, parent_group);
|
||||||
|
|
||||||
/* Only implemented for GLUI, XMB and Ozone at present */
|
/* > MaterialUI, XMB and Ozone all support menu scaling
|
||||||
|
* > RGUI does not, but since scale factor is also used
|
||||||
|
* for menu widgets, show the setting if widgets are
|
||||||
|
* enabled */
|
||||||
if (string_is_equal(settings->arrays.menu_driver, "glui") ||
|
if (string_is_equal(settings->arrays.menu_driver, "glui") ||
|
||||||
string_is_equal(settings->arrays.menu_driver, "xmb") ||
|
string_is_equal(settings->arrays.menu_driver, "xmb") ||
|
||||||
|
#ifdef HAVE_MENU_WIDGETS
|
||||||
|
string_is_equal(settings->arrays.menu_driver, "ozone") ||
|
||||||
|
(string_is_equal(settings->arrays.menu_driver, "rgui") &&
|
||||||
|
settings->bools.menu_enable_widgets))
|
||||||
|
#else
|
||||||
string_is_equal(settings->arrays.menu_driver, "ozone"))
|
string_is_equal(settings->arrays.menu_driver, "ozone"))
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
enum msg_hash_enums menu_scale_factor_label_value =
|
||||||
|
string_is_equal(settings->arrays.menu_driver, "rgui") ?
|
||||||
|
MENU_ENUM_LABEL_VALUE_MENU_WIDGET_SCALE_FACTOR : MENU_ENUM_LABEL_VALUE_MENU_SCALE_FACTOR;
|
||||||
|
|
||||||
CONFIG_FLOAT(
|
CONFIG_FLOAT(
|
||||||
list, list_info,
|
list, list_info,
|
||||||
&settings->floats.menu_scale_factor,
|
&settings->floats.menu_scale_factor,
|
||||||
MENU_ENUM_LABEL_MENU_SCALE_FACTOR,
|
MENU_ENUM_LABEL_MENU_SCALE_FACTOR,
|
||||||
MENU_ENUM_LABEL_VALUE_MENU_SCALE_FACTOR,
|
menu_scale_factor_label_value,
|
||||||
DEFAULT_MENU_SCALE_FACTOR,
|
DEFAULT_MENU_SCALE_FACTOR,
|
||||||
"%.2fx",
|
"%.2fx",
|
||||||
&group_info,
|
&group_info,
|
||||||
@ -12862,6 +12876,7 @@ static bool setting_append_list(
|
|||||||
general_read_handler);
|
general_read_handler);
|
||||||
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||||
menu_settings_list_current_add_range(list, list_info, 0.2, 5.0, 0.01, true, true);
|
menu_settings_list_current_add_range(list, list_info, 0.2, 5.0, 0.01, true, true);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_XMB
|
#ifdef HAVE_XMB
|
||||||
if (string_is_equal(settings->arrays.menu_driver, "xmb"))
|
if (string_is_equal(settings->arrays.menu_driver, "xmb"))
|
||||||
|
@ -289,10 +289,16 @@ static unsigned libretro_message_width = 0;
|
|||||||
static char libretro_message[LIBRETRO_MESSAGE_SIZE] = {'\0'};
|
static char libretro_message[LIBRETRO_MESSAGE_SIZE] = {'\0'};
|
||||||
|
|
||||||
/* Metrics */
|
/* Metrics */
|
||||||
|
#define BASE_FONT_SIZE 32.0f
|
||||||
|
#define OZONE_SIDEBAR_WIDTH 408
|
||||||
|
|
||||||
|
static bool is_ozone;
|
||||||
|
static bool is_xmb;
|
||||||
|
|
||||||
|
static float widget_font_size;
|
||||||
static unsigned simple_widget_padding = 0;
|
static unsigned simple_widget_padding = 0;
|
||||||
static unsigned simple_widget_height;
|
static unsigned simple_widget_height;
|
||||||
static unsigned glyph_width;
|
static unsigned glyph_width;
|
||||||
static unsigned line_height;
|
|
||||||
|
|
||||||
static unsigned msg_queue_height;
|
static unsigned msg_queue_height;
|
||||||
static unsigned msg_queue_icon_size_x;
|
static unsigned msg_queue_icon_size_x;
|
||||||
@ -316,6 +322,16 @@ static unsigned msg_queue_task_hourglass_x;
|
|||||||
|
|
||||||
static unsigned generic_message_height; /* used for both generic and libretro messages */
|
static unsigned generic_message_height; /* used for both generic and libretro messages */
|
||||||
|
|
||||||
|
static unsigned load_content_animation_icon_size_initial;
|
||||||
|
static unsigned load_content_animation_icon_size_target;
|
||||||
|
|
||||||
|
static unsigned divider_width_1px;
|
||||||
|
|
||||||
|
static unsigned last_video_width;
|
||||||
|
static unsigned last_video_height;
|
||||||
|
static float last_scale_factor;
|
||||||
|
static float capped_scale_factor;
|
||||||
|
|
||||||
static void msg_widget_msg_transition_animation_done(void *userdata)
|
static void msg_widget_msg_transition_animation_done(void *userdata)
|
||||||
{
|
{
|
||||||
menu_widget_msg_t *msg = (menu_widget_msg_t*) userdata;
|
menu_widget_msg_t *msg = (menu_widget_msg_t*) userdata;
|
||||||
@ -423,9 +439,8 @@ void menu_widgets_msg_queue_push(
|
|||||||
unsigned width = menu_driver_is_alive() ?
|
unsigned width = menu_driver_is_alive() ?
|
||||||
msg_queue_default_rect_width_menu_alive : msg_queue_default_rect_width;
|
msg_queue_default_rect_width_menu_alive : msg_queue_default_rect_width;
|
||||||
unsigned text_width = font_driver_get_message_width(font_regular, title, title_length, msg_queue_text_scale_factor);
|
unsigned text_width = font_driver_get_message_width(font_regular, title, title_length, msg_queue_text_scale_factor);
|
||||||
settings_t *settings = config_get_ptr();
|
|
||||||
|
|
||||||
msg_widget->text_height = msg_queue_text_scale_factor * settings->floats.video_font_size;
|
msg_widget->text_height = msg_queue_text_scale_factor * widget_font_size;
|
||||||
|
|
||||||
/* Text is too wide, split it into two lines */
|
/* Text is too wide, split it into two lines */
|
||||||
if (text_width > width)
|
if (text_width > width)
|
||||||
@ -863,10 +878,38 @@ static void menu_widgets_hourglass_tick(void *userdata)
|
|||||||
menu_animation_push(&entry);
|
menu_animation_push(&entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
void menu_widgets_iterate(unsigned width, unsigned height)
|
/* Forward declaration */
|
||||||
|
static void menu_widgets_layout(
|
||||||
|
bool is_threaded, const char *dir_assets, char *font_path);
|
||||||
|
|
||||||
|
void menu_widgets_iterate(
|
||||||
|
unsigned width, unsigned height,
|
||||||
|
const char *dir_assets, char *font_path)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
|
/* Check whether screen dimensions or menu scale
|
||||||
|
* factor have changed */
|
||||||
|
float scale_factor = is_xmb ?
|
||||||
|
menu_display_get_pixel_scale(width, height) :
|
||||||
|
menu_display_get_dpi_scale(width, height);
|
||||||
|
|
||||||
|
if ((scale_factor != last_scale_factor) ||
|
||||||
|
(width != last_video_width) ||
|
||||||
|
(height != last_video_height))
|
||||||
|
{
|
||||||
|
last_scale_factor = scale_factor;
|
||||||
|
last_video_width = width;
|
||||||
|
last_video_height = height;
|
||||||
|
|
||||||
|
/* Note: We don't need a full context reset here
|
||||||
|
* > Just rescale layout, and reset frame time counter */
|
||||||
|
menu_widgets_layout(
|
||||||
|
video_driver_is_threaded(),
|
||||||
|
dir_assets, font_path);
|
||||||
|
video_driver_monitor_reset();
|
||||||
|
}
|
||||||
|
|
||||||
/* Messages queue */
|
/* Messages queue */
|
||||||
|
|
||||||
/* Consume one message if available */
|
/* Consume one message if available */
|
||||||
@ -944,8 +987,6 @@ void menu_widgets_iterate(unsigned width, unsigned height)
|
|||||||
if (screenshot_filename[0] != '\0')
|
if (screenshot_filename[0] != '\0')
|
||||||
{
|
{
|
||||||
menu_timer_ctx_entry_t timer;
|
menu_timer_ctx_entry_t timer;
|
||||||
settings_t *settings = config_get_ptr();
|
|
||||||
float video_font_size = settings->floats.video_font_size;
|
|
||||||
|
|
||||||
video_driver_texture_unload(&screenshot_texture);
|
video_driver_texture_unload(&screenshot_texture);
|
||||||
|
|
||||||
@ -953,7 +994,7 @@ void menu_widgets_iterate(unsigned width, unsigned height)
|
|||||||
"", &screenshot_texture, TEXTURE_FILTER_MIPMAP_LINEAR,
|
"", &screenshot_texture, TEXTURE_FILTER_MIPMAP_LINEAR,
|
||||||
&screenshot_texture_width, &screenshot_texture_height);
|
&screenshot_texture_width, &screenshot_texture_height);
|
||||||
|
|
||||||
screenshot_height = video_font_size * 4;
|
screenshot_height = widget_font_size * 4;
|
||||||
screenshot_width = width;
|
screenshot_width = width;
|
||||||
|
|
||||||
screenshot_scale_factor = menu_widgets_get_thumbnail_scale_factor(
|
screenshot_scale_factor = menu_widgets_get_thumbnail_scale_factor(
|
||||||
@ -1013,8 +1054,6 @@ static int menu_widgets_draw_indicator(video_frame_info_t *video_info,
|
|||||||
{
|
{
|
||||||
unsigned height = simple_widget_height;
|
unsigned height = simple_widget_height;
|
||||||
const char *txt = msg_hash_to_str(msg);
|
const char *txt = msg_hash_to_str(msg);
|
||||||
settings_t *settings = config_get_ptr();
|
|
||||||
float video_font_size = settings->floats.video_font_size;
|
|
||||||
|
|
||||||
width = font_driver_get_message_width(font_regular, txt, (unsigned)strlen(txt), 1) + simple_widget_padding*2;
|
width = font_driver_get_message_width(font_regular, txt, (unsigned)strlen(txt), 1) + simple_widget_padding*2;
|
||||||
|
|
||||||
@ -1027,7 +1066,7 @@ static int menu_widgets_draw_indicator(video_frame_info_t *video_info,
|
|||||||
|
|
||||||
menu_display_draw_text(font_regular,
|
menu_display_draw_text(font_regular,
|
||||||
txt,
|
txt,
|
||||||
top_right_x_advance - width + simple_widget_padding, video_font_size + simple_widget_padding/4,
|
top_right_x_advance - width + simple_widget_padding, widget_font_size + simple_widget_padding/4,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
0xFFFFFFFF, TEXT_ALIGN_LEFT,
|
0xFFFFFFFF, TEXT_ALIGN_LEFT,
|
||||||
1.0f,
|
1.0f,
|
||||||
@ -1054,8 +1093,6 @@ static void menu_widgets_draw_task_msg(menu_widget_msg_t *msg, video_frame_info_
|
|||||||
bool draw_msg_new = false;
|
bool draw_msg_new = false;
|
||||||
unsigned task_percentage_offset = 0;
|
unsigned task_percentage_offset = 0;
|
||||||
char task_percentage[256] = {0};
|
char task_percentage[256] = {0};
|
||||||
settings_t *settings = config_get_ptr();
|
|
||||||
float video_font_size = settings->floats.video_font_size;
|
|
||||||
|
|
||||||
if (msg->msg_new)
|
if (msg->msg_new)
|
||||||
draw_msg_new = !string_is_equal(msg->msg_new, msg->msg);
|
draw_msg_new = !string_is_equal(msg->msg_new, msg->msg);
|
||||||
@ -1143,7 +1180,7 @@ static void menu_widgets_draw_task_msg(menu_widget_msg_t *msg, video_frame_info_
|
|||||||
menu_display_draw_text(font_regular,
|
menu_display_draw_text(font_regular,
|
||||||
msg->msg_new,
|
msg->msg_new,
|
||||||
msg_queue_task_text_start_x,
|
msg_queue_task_text_start_x,
|
||||||
video_info->height - msg->offset_y + msg_queue_text_scale_factor * video_font_size + msg_queue_height/4 - video_font_size/2.25f - msg_queue_height/2 + msg->msg_transition_animation,
|
video_info->height - msg->offset_y + msg_queue_text_scale_factor * widget_font_size + msg_queue_height/4 - widget_font_size/2.25f - msg_queue_height/2 + msg->msg_transition_animation,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
text_color,
|
text_color,
|
||||||
TEXT_ALIGN_LEFT,
|
TEXT_ALIGN_LEFT,
|
||||||
@ -1157,7 +1194,7 @@ static void menu_widgets_draw_task_msg(menu_widget_msg_t *msg, video_frame_info_
|
|||||||
menu_display_draw_text(font_regular,
|
menu_display_draw_text(font_regular,
|
||||||
msg->msg,
|
msg->msg,
|
||||||
msg_queue_task_text_start_x,
|
msg_queue_task_text_start_x,
|
||||||
video_info->height - msg->offset_y + msg_queue_text_scale_factor * video_font_size + msg_queue_height/4 - video_font_size/2.25f + msg->msg_transition_animation,
|
video_info->height - msg->offset_y + msg_queue_text_scale_factor * widget_font_size + msg_queue_height/4 - widget_font_size/2.25f + msg->msg_transition_animation,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
text_color,
|
text_color,
|
||||||
TEXT_ALIGN_LEFT,
|
TEXT_ALIGN_LEFT,
|
||||||
@ -1180,7 +1217,7 @@ static void menu_widgets_draw_task_msg(menu_widget_msg_t *msg, video_frame_info_
|
|||||||
menu_display_draw_text(font_regular,
|
menu_display_draw_text(font_regular,
|
||||||
task_percentage,
|
task_percentage,
|
||||||
msg_queue_rect_start_x - msg_queue_icon_size_x + rect_width - msg_queue_glyph_width,
|
msg_queue_rect_start_x - msg_queue_icon_size_x + rect_width - msg_queue_glyph_width,
|
||||||
video_info->height - msg->offset_y + msg_queue_text_scale_factor * video_font_size + msg_queue_height/4 - video_font_size/2.25f,
|
video_info->height - msg->offset_y + msg_queue_text_scale_factor * widget_font_size + msg_queue_height/4 - widget_font_size/2.25f,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
text_color,
|
text_color,
|
||||||
TEXT_ALIGN_RIGHT,
|
TEXT_ALIGN_RIGHT,
|
||||||
@ -1300,12 +1337,11 @@ static void menu_widgets_draw_backdrop(video_frame_info_t *video_info, float alp
|
|||||||
|
|
||||||
static void menu_widgets_draw_load_content_animation(video_frame_info_t *video_info)
|
static void menu_widgets_draw_load_content_animation(video_frame_info_t *video_info)
|
||||||
{
|
{
|
||||||
/* TODO: scale this right ? (change metrics) */
|
/* TODO: change metrics? */
|
||||||
|
|
||||||
int icon_size = (int) load_content_animation_icon_size;
|
int icon_size = (int) load_content_animation_icon_size;
|
||||||
uint32_t text_alpha = load_content_animation_fade_alpha * 255.0f;
|
uint32_t text_alpha = load_content_animation_fade_alpha * 255.0f;
|
||||||
uint32_t text_color = COLOR_TEXT_ALPHA(0xB8B8B800, text_alpha);
|
uint32_t text_color = COLOR_TEXT_ALPHA(0xB8B8B800, text_alpha);
|
||||||
unsigned text_offset = -25 * load_content_animation_fade_alpha;
|
unsigned text_offset = -25 * capped_scale_factor * load_content_animation_fade_alpha;
|
||||||
float *icon_color = load_content_animation_icon_color;
|
float *icon_color = load_content_animation_icon_color;
|
||||||
|
|
||||||
/* Fade out */
|
/* Fade out */
|
||||||
@ -1328,7 +1364,7 @@ static void menu_widgets_draw_load_content_animation(video_frame_info_t *video_i
|
|||||||
menu_display_draw_text(font_bold,
|
menu_display_draw_text(font_bold,
|
||||||
load_content_animation_content_name,
|
load_content_animation_content_name,
|
||||||
video_info->width/2,
|
video_info->width/2,
|
||||||
video_info->height/2 + 175 + 25 + text_offset,
|
video_info->height/2 + (175 + 25) * capped_scale_factor + text_offset,
|
||||||
video_info->width,
|
video_info->width,
|
||||||
video_info->height,
|
video_info->height,
|
||||||
text_color,
|
text_color,
|
||||||
@ -1356,8 +1392,6 @@ void menu_widgets_frame(void *data)
|
|||||||
video_frame_info_t *video_info = (video_frame_info_t*)data;
|
video_frame_info_t *video_info = (video_frame_info_t*)data;
|
||||||
int top_right_x_advance = video_info->width;
|
int top_right_x_advance = video_info->width;
|
||||||
int scissor_me_timbers = 0;
|
int scissor_me_timbers = 0;
|
||||||
settings_t *settings = config_get_ptr();
|
|
||||||
float video_font_size = settings->floats.video_font_size;
|
|
||||||
|
|
||||||
menu_widgets_frame_count++;
|
menu_widgets_frame_count++;
|
||||||
|
|
||||||
@ -1391,28 +1425,28 @@ void menu_widgets_frame(void *data)
|
|||||||
/* top line */
|
/* top line */
|
||||||
menu_display_draw_quad(video_info,
|
menu_display_draw_quad(video_info,
|
||||||
0, 0,
|
0, 0,
|
||||||
video_info->width, 1,
|
video_info->width, divider_width_1px,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
outline_color
|
outline_color
|
||||||
);
|
);
|
||||||
/* bottom line */
|
/* bottom line */
|
||||||
menu_display_draw_quad(video_info,
|
menu_display_draw_quad(video_info,
|
||||||
0, video_info->height-1,
|
0, video_info->height-divider_width_1px,
|
||||||
video_info->width, 1,
|
video_info->width, divider_width_1px,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
outline_color
|
outline_color
|
||||||
);
|
);
|
||||||
/* left line */
|
/* left line */
|
||||||
menu_display_draw_quad(video_info,
|
menu_display_draw_quad(video_info,
|
||||||
0, 0,
|
0, 0,
|
||||||
1, video_info->height,
|
divider_width_1px, video_info->height,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
outline_color
|
outline_color
|
||||||
);
|
);
|
||||||
/* right line */
|
/* right line */
|
||||||
menu_display_draw_quad(video_info,
|
menu_display_draw_quad(video_info,
|
||||||
video_info->width-1, 0,
|
video_info->width-divider_width_1px, 0,
|
||||||
1, video_info->height,
|
divider_width_1px, video_info->height,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
outline_color
|
outline_color
|
||||||
);
|
);
|
||||||
@ -1436,7 +1470,7 @@ void menu_widgets_frame(void *data)
|
|||||||
|
|
||||||
menu_display_draw_text(font_regular, libretro_message,
|
menu_display_draw_text(font_regular, libretro_message,
|
||||||
simple_widget_padding,
|
simple_widget_padding,
|
||||||
video_info->height - generic_message_height/2 + line_height/4,
|
video_info->height - generic_message_height/2 + widget_font_size/4,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
text_color, TEXT_ALIGN_LEFT,
|
text_color, TEXT_ALIGN_LEFT,
|
||||||
1, false, 0, false);
|
1, false, 0, false);
|
||||||
@ -1456,7 +1490,7 @@ void menu_widgets_frame(void *data)
|
|||||||
|
|
||||||
menu_display_draw_text(font_regular, generic_message,
|
menu_display_draw_text(font_regular, generic_message,
|
||||||
video_info->width/2,
|
video_info->width/2,
|
||||||
video_info->height - generic_message_height/2 + line_height/4,
|
video_info->height - generic_message_height/2 + widget_font_size/4,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
text_color, TEXT_ALIGN_CENTER,
|
text_color, TEXT_ALIGN_CENTER,
|
||||||
1, false, 0, false);
|
1, false, 0, false);
|
||||||
@ -1488,7 +1522,7 @@ void menu_widgets_frame(void *data)
|
|||||||
|
|
||||||
menu_display_draw_text(font_regular,
|
menu_display_draw_text(font_regular,
|
||||||
msg_hash_to_str(MSG_SCREENSHOT_SAVED),
|
msg_hash_to_str(MSG_SCREENSHOT_SAVED),
|
||||||
screenshot_thumbnail_width + simple_widget_padding, video_font_size * 1.9f + screenshot_y,
|
screenshot_thumbnail_width + simple_widget_padding, widget_font_size * 1.9f + screenshot_y,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
text_color_faint,
|
text_color_faint,
|
||||||
TEXT_ALIGN_LEFT,
|
TEXT_ALIGN_LEFT,
|
||||||
@ -1505,7 +1539,7 @@ void menu_widgets_frame(void *data)
|
|||||||
|
|
||||||
menu_display_draw_text(font_regular,
|
menu_display_draw_text(font_regular,
|
||||||
shotname,
|
shotname,
|
||||||
screenshot_thumbnail_width + simple_widget_padding, video_font_size * 2.9f + screenshot_y,
|
screenshot_thumbnail_width + simple_widget_padding, widget_font_size * 2.9f + screenshot_y,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
text_color_info,
|
text_color_info,
|
||||||
TEXT_ALIGN_LEFT,
|
TEXT_ALIGN_LEFT,
|
||||||
@ -1569,7 +1603,7 @@ void menu_widgets_frame(void *data)
|
|||||||
/* Title */
|
/* Title */
|
||||||
menu_display_draw_text(font_regular,
|
menu_display_draw_text(font_regular,
|
||||||
msg_hash_to_str(MSG_ACHIEVEMENT_UNLOCKED),
|
msg_hash_to_str(MSG_ACHIEVEMENT_UNLOCKED),
|
||||||
cheevo_height + simple_widget_padding - unfold_offet, video_font_size * 1.9f + cheevo_y,
|
cheevo_height + simple_widget_padding - unfold_offet, widget_font_size * 1.9f + cheevo_y,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
text_color_faint,
|
text_color_faint,
|
||||||
TEXT_ALIGN_LEFT,
|
TEXT_ALIGN_LEFT,
|
||||||
@ -1582,7 +1616,7 @@ void menu_widgets_frame(void *data)
|
|||||||
|
|
||||||
menu_display_draw_text(font_regular,
|
menu_display_draw_text(font_regular,
|
||||||
cheevo_title,
|
cheevo_title,
|
||||||
cheevo_height + simple_widget_padding - unfold_offet, video_font_size * 2.9f + cheevo_y,
|
cheevo_height + simple_widget_padding - unfold_offet, widget_font_size * 2.9f + cheevo_y,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
text_color_info,
|
text_color_info,
|
||||||
TEXT_ALIGN_LEFT,
|
TEXT_ALIGN_LEFT,
|
||||||
@ -1606,13 +1640,13 @@ void menu_widgets_frame(void *data)
|
|||||||
menu_texture_item volume_icon = 0;
|
menu_texture_item volume_icon = 0;
|
||||||
|
|
||||||
unsigned volume_width = video_info->width / 3;
|
unsigned volume_width = video_info->width / 3;
|
||||||
unsigned volume_height = video_font_size * 4;
|
unsigned volume_height = widget_font_size * 4;
|
||||||
unsigned icon_size = menu_widgets_icons_textures[MENU_WIDGETS_ICON_VOLUME_MED] ? volume_height : simple_widget_padding;
|
unsigned icon_size = menu_widgets_icons_textures[MENU_WIDGETS_ICON_VOLUME_MED] ? volume_height : simple_widget_padding;
|
||||||
unsigned text_color = COLOR_TEXT_ALPHA(0xffffffff, (unsigned)(volume_text_alpha*255.0f));
|
unsigned text_color = COLOR_TEXT_ALPHA(0xffffffff, (unsigned)(volume_text_alpha*255.0f));
|
||||||
unsigned text_color_db = COLOR_TEXT_ALPHA(text_color_faint, (unsigned)(volume_text_alpha*255.0f));
|
unsigned text_color_db = COLOR_TEXT_ALPHA(text_color_faint, (unsigned)(volume_text_alpha*255.0f));
|
||||||
|
|
||||||
unsigned bar_x = icon_size;
|
unsigned bar_x = icon_size;
|
||||||
unsigned bar_height = video_font_size / 2;
|
unsigned bar_height = widget_font_size / 2;
|
||||||
unsigned bar_width = volume_width - bar_x - simple_widget_padding;
|
unsigned bar_width = volume_width - bar_x - simple_widget_padding;
|
||||||
unsigned bar_y = volume_height / 2 + bar_height/2;
|
unsigned bar_y = volume_height / 2 + bar_height/2;
|
||||||
|
|
||||||
@ -1688,7 +1722,7 @@ void menu_widgets_frame(void *data)
|
|||||||
const char *text = msg_hash_to_str(MSG_AUDIO_MUTED);
|
const char *text = msg_hash_to_str(MSG_AUDIO_MUTED);
|
||||||
menu_display_draw_text(font_regular,
|
menu_display_draw_text(font_regular,
|
||||||
text,
|
text,
|
||||||
volume_width/2, volume_height/2 + video_font_size / 3,
|
volume_width/2, volume_height/2 + widget_font_size / 3,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
text_color, TEXT_ALIGN_CENTER,
|
text_color, TEXT_ALIGN_CENTER,
|
||||||
1, false, 0, false
|
1, false, 0, false
|
||||||
@ -1724,7 +1758,7 @@ void menu_widgets_frame(void *data)
|
|||||||
|
|
||||||
menu_display_draw_text(font_regular,
|
menu_display_draw_text(font_regular,
|
||||||
msg,
|
msg,
|
||||||
volume_width - simple_widget_padding, video_font_size * 2,
|
volume_width - simple_widget_padding, widget_font_size * 2,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
text_color_db,
|
text_color_db,
|
||||||
TEXT_ALIGN_RIGHT,
|
TEXT_ALIGN_RIGHT,
|
||||||
@ -1733,7 +1767,7 @@ void menu_widgets_frame(void *data)
|
|||||||
|
|
||||||
menu_display_draw_text(font_regular,
|
menu_display_draw_text(font_regular,
|
||||||
percentage_msg,
|
percentage_msg,
|
||||||
icon_size, video_font_size * 2,
|
icon_size, widget_font_size * 2,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
text_color,
|
text_color,
|
||||||
TEXT_ALIGN_LEFT,
|
TEXT_ALIGN_LEFT,
|
||||||
@ -1779,7 +1813,7 @@ void menu_widgets_frame(void *data)
|
|||||||
|
|
||||||
menu_display_draw_text(font_regular,
|
menu_display_draw_text(font_regular,
|
||||||
text,
|
text,
|
||||||
top_right_x_advance - simple_widget_padding - text_width, video_font_size + simple_widget_padding/4,
|
top_right_x_advance - simple_widget_padding - text_width, widget_font_size + simple_widget_padding/4,
|
||||||
video_info->width, video_info->height,
|
video_info->width, video_info->height,
|
||||||
0xFFFFFFFF,
|
0xFFFFFFFF,
|
||||||
TEXT_ALIGN_LEFT,
|
TEXT_ALIGN_LEFT,
|
||||||
@ -1835,7 +1869,7 @@ void menu_widgets_frame(void *data)
|
|||||||
menu_display_unset_viewport(video_info->width, video_info->height);
|
menu_display_unset_viewport(video_info->width, video_info->height);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool menu_widgets_init(bool video_is_threaded)
|
bool menu_widgets_init(bool video_is_threaded, const char *menu_driver)
|
||||||
{
|
{
|
||||||
if (!menu_display_init_first_driver(video_is_threaded))
|
if (!menu_display_init_first_driver(video_is_threaded))
|
||||||
goto error;
|
goto error;
|
||||||
@ -1855,6 +1889,19 @@ bool menu_widgets_init(bool video_is_threaded)
|
|||||||
if (!file_list_reserve(current_msgs, MSG_QUEUE_ONSCREEN_MAX))
|
if (!file_list_reserve(current_msgs, MSG_QUEUE_ONSCREEN_MAX))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
/* Initialise scaling parameters
|
||||||
|
* NOTE - special cases:
|
||||||
|
* > Ozone has a capped scale factor
|
||||||
|
* > XMB uses pixel based scaling - all other drivers
|
||||||
|
* use DPI based scaling */
|
||||||
|
is_ozone = string_is_equal(menu_driver, "ozone");
|
||||||
|
is_xmb = string_is_equal(menu_driver, "xmb");
|
||||||
|
|
||||||
|
video_driver_get_size(&last_video_width, &last_video_height);
|
||||||
|
last_scale_factor = is_xmb ?
|
||||||
|
menu_display_get_pixel_scale(last_video_width, last_video_height) :
|
||||||
|
menu_display_get_dpi_scale(last_video_width, last_video_height);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
@ -1863,93 +1910,75 @@ error:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void menu_widgets_context_reset(bool is_threaded,
|
static void menu_widgets_layout(
|
||||||
unsigned width, unsigned height)
|
bool is_threaded, const char *dir_assets, char *font_path)
|
||||||
{
|
{
|
||||||
int i;
|
int font_height = 0;
|
||||||
char xmb_path[PATH_MAX_LENGTH];
|
|
||||||
char monochrome_png_path[PATH_MAX_LENGTH];
|
|
||||||
char menu_widgets_path[PATH_MAX_LENGTH];
|
|
||||||
char theme_path[PATH_MAX_LENGTH];
|
|
||||||
char ozone_path[PATH_MAX_LENGTH];
|
|
||||||
char font_path[PATH_MAX_LENGTH];
|
|
||||||
settings_t *settings = config_get_ptr();
|
|
||||||
float video_font_size = settings->floats.video_font_size;
|
|
||||||
|
|
||||||
/* Textures paths */
|
/* Ozone is a unique case, in that it has a capped
|
||||||
fill_pathname_join(
|
* scale factor */
|
||||||
menu_widgets_path,
|
if (is_ozone)
|
||||||
settings->paths.directory_assets,
|
capped_scale_factor =
|
||||||
"menu_widgets",
|
(OZONE_SIDEBAR_WIDTH * last_scale_factor) > (last_video_width * 0.3333333f) ?
|
||||||
sizeof(menu_widgets_path)
|
((float)last_video_width * 0.3333333f / (float)OZONE_SIDEBAR_WIDTH) : last_scale_factor;
|
||||||
);
|
else
|
||||||
|
capped_scale_factor = last_scale_factor;
|
||||||
|
|
||||||
fill_pathname_join(
|
/* Base font size must be determined first */
|
||||||
xmb_path,
|
widget_font_size = BASE_FONT_SIZE * capped_scale_factor;
|
||||||
settings->paths.directory_assets,
|
|
||||||
"xmb",
|
|
||||||
sizeof(xmb_path)
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Monochrome */
|
/* Initialise fonts */
|
||||||
fill_pathname_join(
|
|
||||||
theme_path,
|
|
||||||
xmb_path,
|
|
||||||
"monochrome",
|
|
||||||
sizeof(theme_path)
|
|
||||||
);
|
|
||||||
|
|
||||||
fill_pathname_join(
|
/* > Free existing */
|
||||||
monochrome_png_path,
|
if (font_regular)
|
||||||
theme_path,
|
|
||||||
"png",
|
|
||||||
sizeof(monochrome_png_path)
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Load textures */
|
|
||||||
/* Icons */
|
|
||||||
for (i = 0; i < MENU_WIDGETS_ICON_LAST; i++)
|
|
||||||
{
|
{
|
||||||
menu_display_reset_textures_list(menu_widgets_icons_names[i], monochrome_png_path, &menu_widgets_icons_textures[i], TEXTURE_FILTER_MIPMAP_LINEAR, NULL, NULL);
|
menu_display_font_free(font_regular);
|
||||||
|
font_regular = NULL;
|
||||||
|
}
|
||||||
|
if (font_bold)
|
||||||
|
{
|
||||||
|
menu_display_font_free(font_bold);
|
||||||
|
font_bold = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Message queue */
|
/* > Create new */
|
||||||
menu_display_reset_textures_list("msg_queue_icon.png", menu_widgets_path, &msg_queue_icon, TEXTURE_FILTER_LINEAR, NULL, NULL);
|
if (string_is_empty(font_path))
|
||||||
menu_display_reset_textures_list("msg_queue_icon_outline.png", menu_widgets_path, &msg_queue_icon_outline, TEXTURE_FILTER_LINEAR, NULL, NULL);
|
|
||||||
menu_display_reset_textures_list("msg_queue_icon_rect.png", menu_widgets_path, &msg_queue_icon_rect, TEXTURE_FILTER_NEAREST, NULL, NULL);
|
|
||||||
|
|
||||||
msg_queue_has_icons = msg_queue_icon && msg_queue_icon_outline && msg_queue_icon_rect;
|
|
||||||
|
|
||||||
/* Fonts paths */
|
|
||||||
fill_pathname_join(
|
|
||||||
ozone_path,
|
|
||||||
settings->paths.directory_assets,
|
|
||||||
"ozone",
|
|
||||||
sizeof(ozone_path)
|
|
||||||
);
|
|
||||||
|
|
||||||
/* Fonts */
|
|
||||||
if (settings->paths.path_font[0] == '\0')
|
|
||||||
{
|
{
|
||||||
fill_pathname_join(font_path, ozone_path, "regular.ttf", sizeof(font_path));
|
char ozone_path[PATH_MAX_LENGTH];
|
||||||
font_regular = menu_display_font_file(font_path, video_font_size, is_threaded);
|
char font_path[PATH_MAX_LENGTH];
|
||||||
|
|
||||||
|
ozone_path[0] = '\0';
|
||||||
|
font_path[0] = '\0';
|
||||||
|
|
||||||
|
/* Base path */
|
||||||
|
fill_pathname_join(ozone_path, dir_assets, "ozone", sizeof(ozone_path));
|
||||||
|
|
||||||
|
/* Create regular font */
|
||||||
|
fill_pathname_join(font_path, ozone_path, "regular.ttf", sizeof(font_path));
|
||||||
|
font_regular = menu_display_font_file(font_path, widget_font_size, is_threaded);
|
||||||
|
|
||||||
|
/* Create bold font */
|
||||||
fill_pathname_join(font_path, ozone_path, "bold.ttf", sizeof(font_path));
|
fill_pathname_join(font_path, ozone_path, "bold.ttf", sizeof(font_path));
|
||||||
font_bold = menu_display_font_file(font_path, video_font_size, is_threaded);
|
font_bold = menu_display_font_file(font_path, widget_font_size, is_threaded);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
font_regular = menu_display_font_file(settings->paths.path_font, video_font_size, is_threaded);
|
/* Load fonts from user-supplied path */
|
||||||
font_bold = menu_display_font_file(settings->paths.path_font, video_font_size, is_threaded);
|
font_regular = menu_display_font_file(font_path, widget_font_size, is_threaded);
|
||||||
|
font_bold = menu_display_font_file(font_path, widget_font_size, is_threaded);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Metrics */
|
/* > Get actual font size */
|
||||||
simple_widget_padding = video_font_size * 2/3;
|
font_height = font_driver_get_line_height(font_regular, 1.0f);
|
||||||
simple_widget_height = video_font_size + simple_widget_padding;
|
if (font_height > 0)
|
||||||
glyph_width = font_driver_get_message_width(font_regular, "a", 1, 1);
|
widget_font_size = (float)font_height;
|
||||||
line_height = font_driver_get_line_height(font_regular, 1);
|
|
||||||
|
|
||||||
msg_queue_height = video_font_size * 2.5f;
|
/* Calculate dimensions */
|
||||||
|
simple_widget_padding = widget_font_size * 2.0f/3.0f;
|
||||||
|
simple_widget_height = widget_font_size + simple_widget_padding;
|
||||||
|
glyph_width = font_driver_get_message_width(font_regular, "a", 1, 1);
|
||||||
|
|
||||||
|
msg_queue_height = widget_font_size * 2.5f;
|
||||||
|
|
||||||
if (msg_queue_has_icons)
|
if (msg_queue_has_icons)
|
||||||
{
|
{
|
||||||
@ -1984,14 +2013,89 @@ void menu_widgets_context_reset(bool is_threaded,
|
|||||||
msg_queue_task_text_start_x -= msg_queue_glyph_width*2;
|
msg_queue_task_text_start_x -= msg_queue_glyph_width*2;
|
||||||
|
|
||||||
msg_queue_regular_text_start = msg_queue_rect_start_x + msg_queue_regular_padding_x;
|
msg_queue_regular_text_start = msg_queue_rect_start_x + msg_queue_regular_padding_x;
|
||||||
msg_queue_regular_text_base_y = video_font_size * msg_queue_text_scale_factor + msg_queue_height/2;
|
msg_queue_regular_text_base_y = widget_font_size * msg_queue_text_scale_factor + msg_queue_height/2;
|
||||||
|
|
||||||
msg_queue_task_hourglass_x = msg_queue_rect_start_x - msg_queue_icon_size_x;
|
msg_queue_task_hourglass_x = msg_queue_rect_start_x - msg_queue_icon_size_x;
|
||||||
|
|
||||||
generic_message_height = video_font_size * 2;
|
generic_message_height = widget_font_size * 2;
|
||||||
|
|
||||||
msg_queue_default_rect_width_menu_alive = msg_queue_glyph_width * 40;
|
msg_queue_default_rect_width_menu_alive = msg_queue_glyph_width * 40;
|
||||||
msg_queue_default_rect_width = width - msg_queue_regular_text_start - (2 * simple_widget_padding);
|
msg_queue_default_rect_width = last_video_width - msg_queue_regular_text_start - (2 * simple_widget_padding);
|
||||||
|
|
||||||
|
load_content_animation_icon_size_initial = LOAD_CONTENT_ANIMATION_INITIAL_ICON_SIZE * capped_scale_factor;
|
||||||
|
load_content_animation_icon_size_target = LOAD_CONTENT_ANIMATION_TARGET_ICON_SIZE * capped_scale_factor;
|
||||||
|
|
||||||
|
divider_width_1px = (capped_scale_factor > 1.0f) ? (unsigned)(capped_scale_factor + 0.5f) : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu_widgets_context_reset(bool is_threaded,
|
||||||
|
unsigned width, unsigned height,
|
||||||
|
const char *dir_assets, char *font_path)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char xmb_path[PATH_MAX_LENGTH];
|
||||||
|
char monochrome_png_path[PATH_MAX_LENGTH];
|
||||||
|
char menu_widgets_path[PATH_MAX_LENGTH];
|
||||||
|
char theme_path[PATH_MAX_LENGTH];
|
||||||
|
|
||||||
|
xmb_path[0] = '\0';
|
||||||
|
monochrome_png_path[0] = '\0';
|
||||||
|
menu_widgets_path[0] = '\0';
|
||||||
|
theme_path[0] = '\0';
|
||||||
|
|
||||||
|
/* Textures paths */
|
||||||
|
fill_pathname_join(
|
||||||
|
menu_widgets_path,
|
||||||
|
dir_assets,
|
||||||
|
"menu_widgets",
|
||||||
|
sizeof(menu_widgets_path)
|
||||||
|
);
|
||||||
|
|
||||||
|
fill_pathname_join(
|
||||||
|
xmb_path,
|
||||||
|
dir_assets,
|
||||||
|
"xmb",
|
||||||
|
sizeof(xmb_path)
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Monochrome */
|
||||||
|
fill_pathname_join(
|
||||||
|
theme_path,
|
||||||
|
xmb_path,
|
||||||
|
"monochrome",
|
||||||
|
sizeof(theme_path)
|
||||||
|
);
|
||||||
|
|
||||||
|
fill_pathname_join(
|
||||||
|
monochrome_png_path,
|
||||||
|
theme_path,
|
||||||
|
"png",
|
||||||
|
sizeof(monochrome_png_path)
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Load textures */
|
||||||
|
/* Icons */
|
||||||
|
for (i = 0; i < MENU_WIDGETS_ICON_LAST; i++)
|
||||||
|
{
|
||||||
|
menu_display_reset_textures_list(menu_widgets_icons_names[i], monochrome_png_path, &menu_widgets_icons_textures[i], TEXTURE_FILTER_MIPMAP_LINEAR, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Message queue */
|
||||||
|
menu_display_reset_textures_list("msg_queue_icon.png", menu_widgets_path, &msg_queue_icon, TEXTURE_FILTER_LINEAR, NULL, NULL);
|
||||||
|
menu_display_reset_textures_list("msg_queue_icon_outline.png", menu_widgets_path, &msg_queue_icon_outline, TEXTURE_FILTER_LINEAR, NULL, NULL);
|
||||||
|
menu_display_reset_textures_list("msg_queue_icon_rect.png", menu_widgets_path, &msg_queue_icon_rect, TEXTURE_FILTER_NEAREST, NULL, NULL);
|
||||||
|
|
||||||
|
msg_queue_has_icons = msg_queue_icon && msg_queue_icon_outline && msg_queue_icon_rect;
|
||||||
|
|
||||||
|
/* Update scaling/dimensions */
|
||||||
|
last_video_width = width;
|
||||||
|
last_video_height = height;
|
||||||
|
last_scale_factor = is_xmb ?
|
||||||
|
menu_display_get_pixel_scale(last_video_width, last_video_height) :
|
||||||
|
menu_display_get_dpi_scale(last_video_width, last_video_height);
|
||||||
|
menu_widgets_layout(is_threaded, dir_assets, font_path);
|
||||||
|
|
||||||
|
video_driver_monitor_reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
void menu_widgets_context_destroy(void)
|
void menu_widgets_context_destroy(void)
|
||||||
@ -2009,8 +2113,10 @@ void menu_widgets_context_destroy(void)
|
|||||||
video_driver_texture_unload(&msg_queue_icon_rect);
|
video_driver_texture_unload(&msg_queue_icon_rect);
|
||||||
|
|
||||||
/* Fonts */
|
/* Fonts */
|
||||||
menu_display_font_free(font_regular);
|
if (font_regular)
|
||||||
menu_display_font_free(font_bold);
|
menu_display_font_free(font_regular);
|
||||||
|
if (font_bold)
|
||||||
|
menu_display_font_free(font_bold);
|
||||||
|
|
||||||
font_regular = NULL;
|
font_regular = NULL;
|
||||||
font_bold = NULL;
|
font_bold = NULL;
|
||||||
@ -2122,12 +2228,10 @@ static void menu_widgets_volume_timer_end(void *userdata)
|
|||||||
menu_animation_push(&entry);
|
menu_animation_push(&entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
void menu_widgets_volume_update_and_show(void)
|
void menu_widgets_volume_update_and_show(float new_volume)
|
||||||
{
|
{
|
||||||
menu_timer_ctx_entry_t entry;
|
menu_timer_ctx_entry_t entry;
|
||||||
settings_t *settings = config_get_ptr();
|
bool mute = *(audio_get_bool_ptr(AUDIO_ACTION_MUTE_ENABLE));
|
||||||
bool mute = *(audio_get_bool_ptr(AUDIO_ACTION_MUTE_ENABLE));
|
|
||||||
float new_volume = settings->floats.audio_volume;
|
|
||||||
|
|
||||||
menu_animation_kill_by_tag(&volume_tag);
|
menu_animation_kill_by_tag(&volume_tag);
|
||||||
|
|
||||||
@ -2245,7 +2349,6 @@ void menu_widgets_cleanup_load_content_animation(void)
|
|||||||
void menu_widgets_start_load_content_animation(const char *content_name, bool remove_extension)
|
void menu_widgets_start_load_content_animation(const char *content_name, bool remove_extension)
|
||||||
{
|
{
|
||||||
/* TODO: finish the animation based on design, correct all timings */
|
/* TODO: finish the animation based on design, correct all timings */
|
||||||
/* TODO: scale the icon correctly */
|
|
||||||
menu_animation_ctx_entry_t entry;
|
menu_animation_ctx_entry_t entry;
|
||||||
menu_timer_ctx_entry_t timer_entry;
|
menu_timer_ctx_entry_t timer_entry;
|
||||||
int i;
|
int i;
|
||||||
@ -2270,7 +2373,7 @@ void menu_widgets_start_load_content_animation(const char *content_name, bool re
|
|||||||
path_remove_extension(load_content_animation_content_name);
|
path_remove_extension(load_content_animation_content_name);
|
||||||
|
|
||||||
/* Reset animation state */
|
/* Reset animation state */
|
||||||
load_content_animation_icon_size = LOAD_CONTENT_ANIMATION_INITIAL_ICON_SIZE;
|
load_content_animation_icon_size = load_content_animation_icon_size_initial;
|
||||||
load_content_animation_icon_alpha = 0.0f;
|
load_content_animation_icon_alpha = 0.0f;
|
||||||
load_content_animation_fade_alpha = 0.0f;
|
load_content_animation_fade_alpha = 0.0f;
|
||||||
load_content_animation_final_fade_alpha = 0.0f;
|
load_content_animation_final_fade_alpha = 0.0f;
|
||||||
@ -2287,7 +2390,7 @@ void menu_widgets_start_load_content_animation(const char *content_name, bool re
|
|||||||
/* Position */
|
/* Position */
|
||||||
entry.duration = ANIMATION_LOAD_CONTENT_DURATION;
|
entry.duration = ANIMATION_LOAD_CONTENT_DURATION;
|
||||||
entry.subject = &load_content_animation_icon_size;
|
entry.subject = &load_content_animation_icon_size;
|
||||||
entry.target_value = LOAD_CONTENT_ANIMATION_TARGET_ICON_SIZE;
|
entry.target_value = load_content_animation_icon_size_target;
|
||||||
|
|
||||||
menu_animation_push(&entry);
|
menu_animation_push(&entry);
|
||||||
|
|
||||||
@ -2404,8 +2507,7 @@ static void menu_widgets_achievement_unfold(void *userdata)
|
|||||||
static void menu_widgets_start_achievement_notification(void)
|
static void menu_widgets_start_achievement_notification(void)
|
||||||
{
|
{
|
||||||
menu_animation_ctx_entry_t entry;
|
menu_animation_ctx_entry_t entry;
|
||||||
settings_t *settings = config_get_ptr();
|
cheevo_height = widget_font_size * 4;
|
||||||
cheevo_height = settings->floats.video_font_size * 4;
|
|
||||||
cheevo_width = MAX(
|
cheevo_width = MAX(
|
||||||
font_driver_get_message_width(font_regular, msg_hash_to_str(MSG_ACHIEVEMENT_UNLOCKED), 0, 1),
|
font_driver_get_message_width(font_regular, msg_hash_to_str(MSG_ACHIEVEMENT_UNLOCKED), 0, 1),
|
||||||
font_driver_get_message_width(font_regular, cheevo_title, 0, 1)
|
font_driver_get_message_width(font_regular, cheevo_title, 0, 1)
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
#define HOURGLASS_DURATION 1000
|
#define HOURGLASS_DURATION 1000
|
||||||
#define GENERIC_MESSAGE_DURATION 3000
|
#define GENERIC_MESSAGE_DURATION 3000
|
||||||
|
|
||||||
bool menu_widgets_init(bool video_is_threaded);
|
bool menu_widgets_init(bool video_is_threaded, const char *menu_driver);
|
||||||
|
|
||||||
void menu_widgets_free(void);
|
void menu_widgets_free(void);
|
||||||
|
|
||||||
@ -48,9 +48,11 @@ void menu_widgets_msg_queue_push(
|
|||||||
enum message_queue_category category,
|
enum message_queue_category category,
|
||||||
unsigned prio, bool flush);
|
unsigned prio, bool flush);
|
||||||
|
|
||||||
void menu_widgets_volume_update_and_show(void);
|
void menu_widgets_volume_update_and_show(float new_volume);
|
||||||
|
|
||||||
void menu_widgets_iterate(unsigned width, unsigned height);
|
void menu_widgets_iterate(
|
||||||
|
unsigned width, unsigned height,
|
||||||
|
const char *dir_assets, char *font_path);
|
||||||
|
|
||||||
void menu_widgets_screenshot_taken(const char *shotname, const char *filename);
|
void menu_widgets_screenshot_taken(const char *shotname, const char *filename);
|
||||||
|
|
||||||
@ -70,7 +72,8 @@ void menu_widgets_start_load_content_animation(
|
|||||||
void menu_widgets_cleanup_load_content_animation(void);
|
void menu_widgets_cleanup_load_content_animation(void);
|
||||||
|
|
||||||
void menu_widgets_context_reset(bool is_threaded,
|
void menu_widgets_context_reset(bool is_threaded,
|
||||||
unsigned width, unsigned height);
|
unsigned width, unsigned height,
|
||||||
|
const char *dir_assets, char *font_path);
|
||||||
|
|
||||||
void menu_widgets_context_destroy(void);
|
void menu_widgets_context_destroy(void);
|
||||||
|
|
||||||
|
@ -517,6 +517,7 @@ enum msg_hash_enums
|
|||||||
MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END = MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN + RARCH_BIND_LIST_END,
|
MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_END = MENU_ENUM_LABEL_INPUT_HOTKEY_BIND_BEGIN + RARCH_BIND_LIST_END,
|
||||||
|
|
||||||
MENU_LABEL(MENU_SCALE_FACTOR),
|
MENU_LABEL(MENU_SCALE_FACTOR),
|
||||||
|
MENU_LABEL(MENU_WIDGET_SCALE_FACTOR),
|
||||||
MENU_LABEL(MENU_WALLPAPER_OPACITY),
|
MENU_LABEL(MENU_WALLPAPER_OPACITY),
|
||||||
MENU_LABEL(MENU_FRAMEBUFFER_OPACITY),
|
MENU_LABEL(MENU_FRAMEBUFFER_OPACITY),
|
||||||
MENU_LABEL(MENU_USE_PREFERRED_SYSTEM_COLOR_THEME),
|
MENU_LABEL(MENU_USE_PREFERRED_SYSTEM_COLOR_THEME),
|
||||||
|
16
retroarch.c
16
retroarch.c
@ -5415,7 +5415,7 @@ static void command_event_set_volume(float gain)
|
|||||||
|
|
||||||
#if defined(HAVE_MENU) && defined(HAVE_MENU_WIDGETS)
|
#if defined(HAVE_MENU) && defined(HAVE_MENU_WIDGETS)
|
||||||
if (menu_widgets_inited)
|
if (menu_widgets_inited)
|
||||||
menu_widgets_volume_update_and_show();
|
menu_widgets_volume_update_and_show(settings->floats.audio_volume);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
runloop_msg_queue_push(msg, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
|
runloop_msg_queue_push(msg, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
|
||||||
@ -6895,7 +6895,7 @@ TODO: Add a setting for these tweaks */
|
|||||||
|
|
||||||
#if defined(HAVE_MENU) && defined(HAVE_MENU_WIDGETS)
|
#if defined(HAVE_MENU) && defined(HAVE_MENU_WIDGETS)
|
||||||
if (menu_widgets_inited)
|
if (menu_widgets_inited)
|
||||||
menu_widgets_volume_update_and_show();
|
menu_widgets_volume_update_and_show(configuration_settings->floats.audio_volume);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
runloop_msg_queue_push(msg, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
|
runloop_msg_queue_push(msg, 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
|
||||||
@ -23435,11 +23435,14 @@ static void drivers_init(int flags)
|
|||||||
&& video_driver_has_widgets())
|
&& video_driver_has_widgets())
|
||||||
{
|
{
|
||||||
if (!menu_widgets_inited)
|
if (!menu_widgets_inited)
|
||||||
menu_widgets_inited = menu_widgets_init(video_is_threaded);
|
menu_widgets_inited = menu_widgets_init(
|
||||||
|
video_is_threaded, settings->arrays.menu_driver);
|
||||||
|
|
||||||
if (menu_widgets_inited)
|
if (menu_widgets_inited)
|
||||||
menu_widgets_context_reset(video_is_threaded,
|
menu_widgets_context_reset(video_is_threaded,
|
||||||
video_driver_width, video_driver_height);
|
video_driver_width, video_driver_height,
|
||||||
|
settings->paths.directory_assets,
|
||||||
|
settings->paths.path_font);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -27274,7 +27277,10 @@ static enum runloop_state runloop_check_state(void)
|
|||||||
if (menu_widgets_inited)
|
if (menu_widgets_inited)
|
||||||
{
|
{
|
||||||
runloop_msg_queue_lock();
|
runloop_msg_queue_lock();
|
||||||
menu_widgets_iterate(video_driver_width, video_driver_height);
|
menu_widgets_iterate(
|
||||||
|
video_driver_width, video_driver_height,
|
||||||
|
settings->paths.directory_assets,
|
||||||
|
settings->paths.path_font);
|
||||||
runloop_msg_queue_unlock();
|
runloop_msg_queue_unlock();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user