Move thumbnail_path_data to menu_st - cut down on code duplication in

menu_drivers
This commit is contained in:
libretroadmin 2023-07-16 09:46:08 +02:00
parent c72bcd96e9
commit ba492e9614
8 changed files with 347 additions and 424 deletions

View File

@ -1494,10 +1494,8 @@ int generic_action_ok_displaylist_push(const char *path,
fill_pathname_base(lpl_basename, path, sizeof(lpl_basename)); fill_pathname_base(lpl_basename, path, sizeof(lpl_basename));
path_remove_extension(lpl_basename); path_remove_extension(lpl_basename);
if ( menu_st->driver_ctx menu_driver_set_thumbnail_system(
&& menu_st->driver_ctx->set_thumbnail_system) menu_st->userdata, lpl_basename, sizeof(lpl_basename));
menu_st->driver_ctx->set_thumbnail_system(
menu_st->userdata, lpl_basename, sizeof(lpl_basename));
info.directory_ptr = idx; info.directory_ptr = idx;
info_path = tmp; info_path = tmp;
@ -7963,10 +7961,8 @@ static int action_ok_pl_entry_content_thumbnails(const char *path,
if (!playlist || !menu) if (!playlist || !menu)
return -1; return -1;
if ( menu_st->driver_ctx menu_driver_get_thumbnail_system(
&& menu_st->driver_ctx->get_thumbnail_system) menu_st->userdata, system, sizeof(system));
menu_st->driver_ctx->get_thumbnail_system(
menu_st->userdata, system, sizeof(system));
task_push_pl_entry_thumbnail_download(system, task_push_pl_entry_thumbnail_download(system,
playlist, menu->rpl_entry_selection_ptr, playlist, menu->rpl_entry_selection_ptr,

View File

@ -594,9 +594,6 @@ typedef struct materialui_handle
const char *src, size_t src_len, const char *src, size_t src_len,
int line_width, int wideglyph_width, unsigned max_lines); int line_width, int wideglyph_width, unsigned max_lines);
/* Thumbnail helpers */
gfx_thumbnail_path_data_t *thumbnail_path_data;
struct struct
{ {
materialui_playlist_icons_t playlist; /* ptr alignment */ materialui_playlist_icons_t playlist; /* ptr alignment */
@ -3224,6 +3221,7 @@ static INLINE void materialui_kill_scroll_animation(
* is detected */ * is detected */
static bool materialui_render_process_entry_default( static bool materialui_render_process_entry_default(
materialui_handle_t* mui, materialui_handle_t* mui,
struct menu_state *menu_st,
materialui_node_t *node, materialui_node_t *node,
size_t entry_idx, size_t selection, size_t playlist_idx, size_t entry_idx, size_t selection, size_t playlist_idx,
bool first_entry_found, bool last_entry_found, bool first_entry_found, bool last_entry_found,
@ -3243,6 +3241,7 @@ static bool materialui_render_process_entry_default(
* Always returns true */ * Always returns true */
static bool materialui_render_process_entry_playlist_thumb_list( static bool materialui_render_process_entry_playlist_thumb_list(
materialui_handle_t* mui, materialui_handle_t* mui,
struct menu_state *menu_st,
materialui_node_t *node, materialui_node_t *node,
size_t entry_idx, size_t selection, size_t playlist_idx, size_t entry_idx, size_t selection, size_t playlist_idx,
bool first_entry_found, bool last_entry_found, bool first_entry_found, bool last_entry_found,
@ -3256,7 +3255,7 @@ static bool materialui_render_process_entry_playlist_thumb_list(
* and free thumbnails for all off-screen entries */ * and free thumbnails for all off-screen entries */
if (mui->flags & MUI_FLAG_SECONDARY_THUMBNAIL_ENABLED) if (mui->flags & MUI_FLAG_SECONDARY_THUMBNAIL_ENABLED)
gfx_thumbnail_process_streams( gfx_thumbnail_process_streams(
mui->thumbnail_path_data, menu_st->thumbnail_path_data,
p_anim, p_anim,
mui->playlist, playlist_idx, mui->playlist, playlist_idx,
&node->thumbnails.primary, &node->thumbnails.primary,
@ -3266,7 +3265,7 @@ static bool materialui_render_process_entry_playlist_thumb_list(
network_on_demand_thumbnails); network_on_demand_thumbnails);
else else
gfx_thumbnail_process_stream( gfx_thumbnail_process_stream(
mui->thumbnail_path_data, menu_st->thumbnail_path_data,
p_anim, p_anim,
GFX_THUMBNAIL_RIGHT, GFX_THUMBNAIL_RIGHT,
mui->playlist, playlist_idx, mui->playlist, playlist_idx,
@ -3285,6 +3284,7 @@ static bool materialui_render_process_entry_playlist_thumb_list(
* Always returns true */ * Always returns true */
static bool materialui_render_process_entry_playlist_dual_icon( static bool materialui_render_process_entry_playlist_dual_icon(
materialui_handle_t* mui, materialui_handle_t* mui,
struct menu_state *menu_st,
materialui_node_t *node, materialui_node_t *node,
size_t entry_idx, size_t selection, size_t playlist_idx, size_t entry_idx, size_t selection, size_t playlist_idx,
bool first_entry_found, bool last_entry_found, bool first_entry_found, bool last_entry_found,
@ -3299,7 +3299,7 @@ static bool materialui_render_process_entry_playlist_dual_icon(
* > Note that secondary thumbnail is force * > Note that secondary thumbnail is force
* enabled in dual icon mode */ * enabled in dual icon mode */
gfx_thumbnail_process_streams( gfx_thumbnail_process_streams(
mui->thumbnail_path_data, menu_st->thumbnail_path_data,
p_anim, p_anim,
mui->playlist, playlist_idx, mui->playlist, playlist_idx,
&node->thumbnails.primary, &node->thumbnails.primary,
@ -3318,6 +3318,7 @@ static bool materialui_render_process_entry_playlist_dual_icon(
* Always returns true */ * Always returns true */
static bool materialui_render_process_entry_playlist_desktop( static bool materialui_render_process_entry_playlist_desktop(
materialui_handle_t* mui, materialui_handle_t* mui,
struct menu_state *menu_st,
materialui_node_t *node, materialui_node_t *node,
size_t entry_idx, size_t selection, size_t playlist_idx, size_t entry_idx, size_t selection, size_t playlist_idx,
bool first_entry_found, bool last_entry_found, bool first_entry_found, bool last_entry_found,
@ -3343,7 +3344,7 @@ static bool materialui_render_process_entry_playlist_desktop(
* > Note that secondary thumbnail is force * > Note that secondary thumbnail is force
* enabled */ * enabled */
gfx_thumbnail_process_streams( gfx_thumbnail_process_streams(
mui->thumbnail_path_data, menu_st->thumbnail_path_data,
p_anim, p_anim,
mui->playlist, playlist_idx, mui->playlist, playlist_idx,
&node->thumbnails.primary, &node->thumbnails.primary,
@ -3518,6 +3519,7 @@ static bool materialui_render_process_entry_playlist_desktop(
static bool (*materialui_render_process_entry)( static bool (*materialui_render_process_entry)(
materialui_handle_t* mui, materialui_handle_t* mui,
struct menu_state *menu_st,
materialui_node_t *node, materialui_node_t *node,
size_t entry_idx, size_t selection, size_t playlist_idx, size_t entry_idx, size_t selection, size_t playlist_idx,
bool first_entry_found, bool last_entry_found, bool first_entry_found, bool last_entry_found,
@ -3537,6 +3539,7 @@ static void materialui_init_font(
static void materialui_layout( static void materialui_layout(
materialui_handle_t *mui, materialui_handle_t *mui,
struct menu_state *menu_st,
gfx_display_t *p_disp, gfx_display_t *p_disp,
settings_t *settings, settings_t *settings,
bool video_is_threaded); bool video_is_threaded);
@ -3627,7 +3630,7 @@ static void materialui_render(void *data,
/* Note: We don't need a full context reset here /* Note: We don't need a full context reset here
* > Just rescale layout, and reset frame time counter */ * > Just rescale layout, and reset frame time counter */
materialui_layout(mui, p_disp, materialui_layout(mui, menu_st, p_disp,
settings, video_driver_is_threaded()); settings, video_driver_is_threaded());
video_driver_monitor_reset(); video_driver_monitor_reset();
} }
@ -3824,7 +3827,7 @@ static void materialui_render(void *data,
/* Perform any additional processing required /* Perform any additional processing required
* for the current entry */ * for the current entry */
if (!materialui_render_process_entry( if (!materialui_render_process_entry(
mui, node, i, selection, mui, menu_st, node, i, selection,
list->list[i].entry_idx, list->list[i].entry_idx,
first_entry_found, last_entry_found, first_entry_found, last_entry_found,
thumbnail_upscale_threshold, thumbnail_upscale_threshold,
@ -7288,6 +7291,7 @@ static void materialui_frame(void *data, video_frame_info_t *video_info)
* user has enabled playlist thumbnails */ * user has enabled playlist thumbnails */
static void materialui_set_list_view_type( static void materialui_set_list_view_type(
materialui_handle_t *mui, materialui_handle_t *mui,
struct menu_state *menu_st,
unsigned thumbnail_view_portrait, unsigned thumbnail_view_portrait,
unsigned thumbnail_view_landscape) unsigned thumbnail_view_landscape)
{ {
@ -7306,7 +7310,7 @@ static void materialui_set_list_view_type(
mui->list_view_type = MUI_LIST_VIEW_PLAYLIST; mui->list_view_type = MUI_LIST_VIEW_PLAYLIST;
/* Check whether primary thumbnail is enabled */ /* Check whether primary thumbnail is enabled */
if (gfx_thumbnail_is_enabled(mui->thumbnail_path_data, if (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data,
GFX_THUMBNAIL_RIGHT)) GFX_THUMBNAIL_RIGHT))
{ {
mui->flags |= MUI_FLAG_PRIMARY_THUMBNAIL_AVAILABLE; mui->flags |= MUI_FLAG_PRIMARY_THUMBNAIL_AVAILABLE;
@ -7697,12 +7701,14 @@ static void materialui_set_thumbnail_dimensions(materialui_handle_t *mui)
* - Returns false if secondary thumbnails cannot be * - Returns false if secondary thumbnails cannot be
* enabled (due to per-playlist override) */ * enabled (due to per-playlist override) */
static bool materialui_force_enable_secondary_thumbnail( static bool materialui_force_enable_secondary_thumbnail(
materialui_handle_t *mui, settings_t *settings) materialui_handle_t *mui,
struct menu_state *menu_st,
settings_t *settings)
{ {
/* If secondary thumbnail is already enabled, /* If secondary thumbnail is already enabled,
* do nothing */ * do nothing */
if (gfx_thumbnail_is_enabled( if (gfx_thumbnail_is_enabled(
mui->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
return true; return true;
/* Secondary thumbnail is disabled /* Secondary thumbnail is disabled
@ -7733,14 +7739,16 @@ static bool materialui_force_enable_secondary_thumbnail(
/* Final check - this will return true unless a /* Final check - this will return true unless a
* per-playlist override is in place */ * per-playlist override is in place */
return gfx_thumbnail_is_enabled( return gfx_thumbnail_is_enabled(
mui->thumbnail_path_data, GFX_THUMBNAIL_LEFT); menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT);
} }
/* Determines whether dual thumbnails should be enabled /* Determines whether dual thumbnails should be enabled
* based on current list view mode, thumbnail dimensions * based on current list view mode, thumbnail dimensions
* and screen size */ * and screen size */
static void materialui_set_secondary_thumbnail_enable( static void materialui_set_secondary_thumbnail_enable(
materialui_handle_t *mui, settings_t *settings) materialui_handle_t *mui,
struct menu_state *menu_st,
settings_t *settings)
{ {
switch (mui->list_view_type) switch (mui->list_view_type)
{ {
@ -7764,7 +7772,7 @@ static void materialui_set_secondary_thumbnail_enable(
/* Attempt to force enable secondary thumbnails if /* Attempt to force enable secondary thumbnails if
* global 'Secondary Thumbnail' type is set to OFF */ * global 'Secondary Thumbnail' type is set to OFF */
if (!materialui_force_enable_secondary_thumbnail(mui, settings)) if (!materialui_force_enable_secondary_thumbnail(mui, menu_st, settings))
return; return;
/* Secondary thumbnails are supported/enabled /* Secondary thumbnails are supported/enabled
@ -7807,7 +7815,7 @@ static void materialui_set_secondary_thumbnail_enable(
* want 'missing thumbnail' images if * want 'missing thumbnail' images if
* thumbnails are actively disabled via * thumbnails are actively disabled via
* a per-playlist override */ * a per-playlist override */
materialui_force_enable_secondary_thumbnail(mui, settings); materialui_force_enable_secondary_thumbnail(mui, menu_st, settings);
mui->flags |= MUI_FLAG_SECONDARY_THUMBNAIL_ENABLED; mui->flags |= MUI_FLAG_SECONDARY_THUMBNAIL_ENABLED;
break; break;
case MUI_LIST_VIEW_PLAYLIST: case MUI_LIST_VIEW_PLAYLIST:
@ -7825,15 +7833,17 @@ static void materialui_set_secondary_thumbnail_enable(
* and calculates appropriate thumbnail dimensions/settings. * and calculates appropriate thumbnail dimensions/settings.
* Must be called when updating menu layout and * Must be called when updating menu layout and
* populating menu lists. */ * populating menu lists. */
static void materialui_update_list_view(materialui_handle_t *mui, settings_t *settings) static void materialui_update_list_view(materialui_handle_t *mui,
struct menu_state *menu_st,
settings_t *settings)
{ {
materialui_set_list_view_type(mui, materialui_set_list_view_type(mui, menu_st,
settings->uints.menu_materialui_thumbnail_view_portrait, settings->uints.menu_materialui_thumbnail_view_portrait,
settings->uints.menu_materialui_thumbnail_view_landscape); settings->uints.menu_materialui_thumbnail_view_landscape);
materialui_set_landscape_optimisations_enable(mui); materialui_set_landscape_optimisations_enable(mui);
materialui_status_bar_init(mui, settings); materialui_status_bar_init(mui, settings);
materialui_set_thumbnail_dimensions(mui); materialui_set_thumbnail_dimensions(mui);
materialui_set_secondary_thumbnail_enable(mui, settings); materialui_set_secondary_thumbnail_enable(mui, menu_st, settings);
/* Miscellaneous post-list-switch configuration: /* Miscellaneous post-list-switch configuration:
* > Set appropriate thumbnail stream delay */ * > Set appropriate thumbnail stream delay */
@ -7940,6 +7950,7 @@ static void materialui_init_font(
/* Compute the positions of the widgets */ /* Compute the positions of the widgets */
static void materialui_layout( static void materialui_layout(
materialui_handle_t *mui, materialui_handle_t *mui,
struct menu_state *menu_st,
gfx_display_t *p_disp, gfx_display_t *p_disp,
settings_t *settings, settings_t *settings,
bool video_is_threaded) bool video_is_threaded)
@ -8032,7 +8043,7 @@ static void materialui_layout(
mui->sys_bar_cache.timedate_str[0] = '\0'; mui->sys_bar_cache.timedate_str[0] = '\0';
mui->sys_bar_cache.timedate_width = 0; mui->sys_bar_cache.timedate_width = 0;
materialui_update_list_view(mui, settings); materialui_update_list_view(mui, menu_st, settings);
mui->flags |= MUI_FLAG_NEED_COMPUTE; mui->flags |= MUI_FLAG_NEED_COMPUTE;
} }
@ -8114,10 +8125,6 @@ static void *materialui_init(void **userdata, bool video_is_threaded)
*userdata = mui; *userdata = mui;
/* Initialise thumbnail path data */
if (!(mui->thumbnail_path_data = gfx_thumbnail_path_init()))
goto error;
/* Get DPI/screen-size-aware base unit size for /* Get DPI/screen-size-aware base unit size for
* UI elements */ * UI elements */
video_driver_get_size(&width, &height); video_driver_get_size(&width, &height);
@ -8241,9 +8248,6 @@ static void materialui_free(void *data)
font_driver_bind_block(NULL, NULL); font_driver_bind_block(NULL, NULL);
if (mui->thumbnail_path_data)
free(mui->thumbnail_path_data);
materialui_free_playlist_icon_list(mui); materialui_free_playlist_icon_list(mui);
p_anim->updatetime_cb = NULL; p_anim->updatetime_cb = NULL;
@ -8733,7 +8737,7 @@ static void materialui_populate_entries(
materialui_populate_nav_bar(mui, menu_st, label, settings); materialui_populate_nav_bar(mui, menu_st, label, settings);
/* Update list view/thumbnail parameters */ /* Update list view/thumbnail parameters */
materialui_update_list_view(mui, settings); materialui_update_list_view(mui, menu_st, settings);
/* Reset touch feedback parameters /* Reset touch feedback parameters
* (i.e. there should be no leftover highlight * (i.e. there should be no leftover highlight
@ -8800,11 +8804,12 @@ static void materialui_context_reset(void *data, bool is_threaded)
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
const char *path_menu_wallpaper = settings ? settings->paths.path_menu_wallpaper : NULL; const char *path_menu_wallpaper = settings ? settings->paths.path_menu_wallpaper : NULL;
gfx_display_t *p_disp = disp_get_ptr(); gfx_display_t *p_disp = disp_get_ptr();
struct menu_state *menu_st = menu_state_get_ptr();
if (!mui) if (!mui)
return; return;
materialui_layout(mui, p_disp, settings, is_threaded); materialui_layout(mui, menu_st, p_disp, settings, is_threaded);
materialui_context_bg_destroy(mui); materialui_context_bg_destroy(mui);
gfx_display_deinit_white_texture(); gfx_display_deinit_white_texture();
gfx_display_init_white_texture(); gfx_display_init_white_texture();
@ -9047,7 +9052,9 @@ static int materialui_switch_tabs(
/* If viewing a playlist with thumbnails enabled, /* If viewing a playlist with thumbnails enabled,
* cycles current thumbnail view mode */ * cycles current thumbnail view mode */
static void materialui_switch_list_view(materialui_handle_t *mui, settings_t *settings) static void materialui_switch_list_view(materialui_handle_t *mui,
struct menu_state *menu_st,
settings_t *settings)
{ {
bool secondary_thumbnail_enabled_prev = mui->flags & bool secondary_thumbnail_enabled_prev = mui->flags &
MUI_FLAG_SECONDARY_THUMBNAIL_ENABLED; MUI_FLAG_SECONDARY_THUMBNAIL_ENABLED;
@ -9091,7 +9098,7 @@ static void materialui_switch_list_view(materialui_handle_t *mui, settings_t *se
} }
/* Update list view parameters */ /* Update list view parameters */
materialui_update_list_view(mui, settings); materialui_update_list_view(mui, menu_st, settings);
/* If the new list view does not have thumbnails /* If the new list view does not have thumbnails
* enabled, or last view had dual thumbnails and * enabled, or last view had dual thumbnails and
@ -9275,7 +9282,7 @@ static enum menu_action materialui_parse_menu_entry_action(
{ {
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
if (settings) if (settings)
materialui_switch_list_view(mui, settings); materialui_switch_list_view(mui, menu_st, settings);
new_action = MENU_ACTION_NOOP; new_action = MENU_ACTION_NOOP;
} }
else if (!materialui_entry_onscreen(mui, selection)) else if (!materialui_entry_onscreen(mui, selection))
@ -10079,7 +10086,7 @@ static int materialui_pointer_up(void *userdata,
{ {
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
if (settings) if (settings)
materialui_switch_list_view(mui, settings); materialui_switch_list_view(mui, menu_st, settings);
return 0; return 0;
} }
/* Fall back to normal cancel action */ /* Fall back to normal cancel action */
@ -11044,25 +11051,6 @@ static void materialui_list_clear(file_list_t *list)
} }
} }
static void materialui_set_thumbnail_system(void *userdata, char *s, size_t len)
{
materialui_handle_t *mui = (materialui_handle_t*)userdata;
if (mui)
gfx_thumbnail_set_system(
mui->thumbnail_path_data, s, playlist_get_cached());
}
static size_t materialui_get_thumbnail_system(void *userdata, char *s, size_t len)
{
materialui_handle_t *mui = (materialui_handle_t*)userdata;
const char *system = NULL;
if (!mui)
return 0;
if (!gfx_thumbnail_get_system(mui->thumbnail_path_data, &system))
return 0;
return strlcpy(s, system, len);
}
static void materialui_refresh_thumbnail_image(void *userdata, unsigned i) static void materialui_refresh_thumbnail_image(void *userdata, unsigned i)
{ {
materialui_handle_t *mui = (materialui_handle_t*)userdata; materialui_handle_t *mui = (materialui_handle_t*)userdata;
@ -11150,8 +11138,6 @@ menu_ctx_driver_t menu_ctx_mui = {
NULL, NULL,
NULL, NULL,
materialui_refresh_thumbnail_image, materialui_refresh_thumbnail_image,
materialui_set_thumbnail_system,
materialui_get_thumbnail_system,
NULL, NULL,
gfx_display_osk_ptr_at_pos, gfx_display_osk_ptr_at_pos,
NULL, /* update_savestate_thumbnail_path */ NULL, /* update_savestate_thumbnail_path */

View File

@ -451,7 +451,6 @@ struct ozone_handle
menu_input_pointer_t pointer; /* retro_time_t alignment */ menu_input_pointer_t pointer; /* retro_time_t alignment */
ozone_theme_t *theme; ozone_theme_t *theme;
gfx_thumbnail_path_data_t *thumbnail_path_data;
char *pending_message; char *pending_message;
file_list_t selection_buf_old; /* ptr alignment */ file_list_t selection_buf_old; /* ptr alignment */
file_list_t horizontal_list; /* console tabs */ /* ptr alignment */ file_list_t horizontal_list; /* console tabs */ /* ptr alignment */
@ -4038,7 +4037,7 @@ static void ozone_update_content_metadata(ozone_handle_t *ozone)
/* Must check whether core corresponds to 'viewer' /* Must check whether core corresponds to 'viewer'
* content even when not using a playlist, otherwise * content even when not using a playlist, otherwise
* file browser image updates are mishandled */ * file browser image updates are mishandled */
if (gfx_thumbnail_get_core_name(ozone->thumbnail_path_data, &core_name)) if (gfx_thumbnail_get_core_name(menu_st->thumbnail_path_data, &core_name))
{ {
if ( string_is_equal(core_name, "imageviewer") if ( string_is_equal(core_name, "imageviewer")
|| string_is_equal(core_name, "musicplayer") || string_is_equal(core_name, "musicplayer")
@ -6037,6 +6036,7 @@ border_iterate:
static void ozone_draw_thumbnail_bar( static void ozone_draw_thumbnail_bar(
ozone_handle_t *ozone, ozone_handle_t *ozone,
struct menu_state *menu_st,
gfx_display_t *p_disp, gfx_display_t *p_disp,
gfx_animation_t *p_anim, gfx_animation_t *p_anim,
settings_t *settings, settings_t *settings,
@ -6120,10 +6120,10 @@ static void ozone_draw_thumbnail_bar(
/* Thumbnails */ /* Thumbnails */
show_right_thumbnail = show_right_thumbnail =
(ozone->thumbnails.right.status != GFX_THUMBNAIL_STATUS_MISSING) (ozone->thumbnails.right.status != GFX_THUMBNAIL_STATUS_MISSING)
&& gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT); && gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT);
show_left_thumbnail = show_left_thumbnail =
(ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_MISSING) (ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_MISSING)
&& gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT) && gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT)
&& (!(ozone->flags2 & OZONE_FLAG2_SELECTION_CORE_IS_VIEWER)); && (!(ozone->flags2 & OZONE_FLAG2_SELECTION_CORE_IS_VIEWER));
/* Special "viewer" mode for savestate thumbnails */ /* Special "viewer" mode for savestate thumbnails */
@ -7045,25 +7045,25 @@ static void ozone_show_fullscreen_thumbnails(ozone_handle_t *ozone)
{ {
/* imageviewer content requires special treatment, /* imageviewer content requires special treatment,
* since only the right thumbnail is ever loaded */ * since only the right thumbnail is ever loaded */
if (!gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)) if (!gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT))
return; return;
} }
else else
{ {
bool left_thumbnail_enabled = gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT); bool left_thumbnail_enabled = gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT);
if (!left_thumbnail_enabled && !gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)) if (!left_thumbnail_enabled && !gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT))
return; return;
if ((ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE) && if ( (ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE)
(left_thumbnail_enabled && && (left_thumbnail_enabled
((ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_MISSING) && && ((ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_MISSING)
(ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_AVAILABLE)))) && (ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_AVAILABLE))))
return; return;
if ((ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_MISSING) && if ( (ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_MISSING)
(!(ozone->flags & OZONE_FLAG_IS_STATE_SLOT)) && && (!(ozone->flags & OZONE_FLAG_IS_STATE_SLOT))
(!left_thumbnail_enabled || (ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_AVAILABLE))) && (!left_thumbnail_enabled || (ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_AVAILABLE)))
return; return;
} }
@ -7474,20 +7474,20 @@ static void ozone_set_thumbnail_content(void *data, const char *s)
size_t selection = menu_st->selection_ptr; size_t selection = menu_st->selection_ptr;
size_t list_size = MENU_LIST_GET_SELECTION(menu_list, 0)->size; size_t list_size = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
file_list_t *list = MENU_LIST_GET_SELECTION(menu_list, 0); file_list_t *list = MENU_LIST_GET_SELECTION(menu_list, 0);
playlist_t *pl = NULL;
/* Get playlist index corresponding /* Get playlist index corresponding
* to the selected entry */ * to the selected entry */
if (list if ( list
&& (selection < list_size) && (selection < list_size)
&& (list->list[selection].type == FILE_TYPE_RPL_ENTRY)) && (list->list[selection].type == FILE_TYPE_RPL_ENTRY))
{ {
size_t playlist_index = list->list[selection].entry_idx; selection = list->list[selection].entry_idx;
gfx_thumbnail_set_content_playlist(ozone->thumbnail_path_data, pl = playlist_get_cached();
playlist_get_cached(), playlist_index);
} }
else
gfx_thumbnail_set_content_playlist(ozone->thumbnail_path_data, gfx_thumbnail_set_content_playlist(menu_st->thumbnail_path_data,
NULL, selection); pl, selection);
switch (ozone->tabs[ozone->categories_selection_ptr]) switch (ozone->tabs[ozone->categories_selection_ptr])
{ {
@ -7516,7 +7516,7 @@ static void ozone_set_thumbnail_content(void *data, const char *s)
menu_entry_get(&entry, 0, menu_st->selection_ptr, NULL, true); menu_entry_get(&entry, 0, menu_st->selection_ptr, NULL, true);
if (!string_is_empty(entry.path)) if (!string_is_empty(entry.path))
gfx_thumbnail_set_content(ozone->thumbnail_path_data, entry.path); gfx_thumbnail_set_content(menu_st->thumbnail_path_data, entry.path);
} }
} }
#if defined(HAVE_LIBRETRODB) #if defined(HAVE_LIBRETRODB)
@ -7532,7 +7532,7 @@ static void ozone_set_thumbnail_content(void *data, const char *s)
entry.flags |= MENU_ENTRY_FLAG_PATH_ENABLED; entry.flags |= MENU_ENTRY_FLAG_PATH_ENABLED;
menu_entry_get(&entry, 0, menu_st->selection_ptr, NULL, true); menu_entry_get(&entry, 0, menu_st->selection_ptr, NULL, true);
if (menu_explore_set_playlist_thumbnail(entry.type, ozone->thumbnail_path_data) >= 0) if (menu_explore_set_playlist_thumbnail(entry.type, menu_st->thumbnail_path_data) >= 0)
ozone->flags |= OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE; ozone->flags |= OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE;
else else
ozone->flags &= ~OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE; ozone->flags &= ~OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE;
@ -7560,7 +7560,7 @@ static void ozone_set_thumbnail_content(void *data, const char *s)
menu_entry_get(&entry, 0, selection, NULL, true); menu_entry_get(&entry, 0, selection, NULL, true);
if (!string_is_empty(entry.path) && !string_is_empty(node->fullpath)) if (!string_is_empty(entry.path) && !string_is_empty(node->fullpath))
gfx_thumbnail_set_content_image(ozone->thumbnail_path_data, node->fullpath, entry.path); gfx_thumbnail_set_content_image(menu_st->thumbnail_path_data, node->fullpath, entry.path);
} }
} }
else if (!string_is_empty(s)) else if (!string_is_empty(s))
@ -7571,7 +7571,7 @@ static void ozone_set_thumbnail_content(void *data, const char *s)
* the sublevels of database manager lists. * the sublevels of database manager lists.
* Showing thumbnails on database entries is a * Showing thumbnails on database entries is a
* pointless nuisance and a waste of CPU cycles, IMHO... */ * pointless nuisance and a waste of CPU cycles, IMHO... */
gfx_thumbnail_set_content(ozone->thumbnail_path_data, s); gfx_thumbnail_set_content(menu_st->thumbnail_path_data, s);
} }
ozone_update_content_metadata(ozone); ozone_update_content_metadata(ozone);
@ -7653,20 +7653,21 @@ static bool INLINE ozone_metadata_override_available(ozone_handle_t *ozone, sett
(ozone->thumbnails_right_status_prev <= GFX_THUMBNAIL_STATUS_AVAILABLE))); (ozone->thumbnails_right_status_prev <= GFX_THUMBNAIL_STATUS_AVAILABLE)));
} }
static bool INLINE ozone_fullscreen_thumbnails_available(ozone_handle_t *ozone) static bool INLINE ozone_fullscreen_thumbnails_available(ozone_handle_t *ozone,
struct menu_state *menu_st)
{ {
bool ret = bool ret =
( (ozone->flags & OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE)) ( (ozone->flags & OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE))
&& (!(ozone->flags & OZONE_FLAG_CURSOR_IN_SIDEBAR)) && (!(ozone->flags & OZONE_FLAG_CURSOR_IN_SIDEBAR))
&& (ozone->show_thumbnail_bar) && (ozone->show_thumbnail_bar)
&& (gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || && (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
&& ( (ozone->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE || && ( (ozone->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE
(ozone->thumbnails.left.status < GFX_THUMBNAIL_STATUS_AVAILABLE && || (ozone->thumbnails.left.status < GFX_THUMBNAIL_STATUS_AVAILABLE
ozone->thumbnails_left_status_prev <= GFX_THUMBNAIL_STATUS_AVAILABLE)) && ozone->thumbnails_left_status_prev <= GFX_THUMBNAIL_STATUS_AVAILABLE))
|| (ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE || || (ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE
(ozone->thumbnails.right.status < GFX_THUMBNAIL_STATUS_AVAILABLE && || (ozone->thumbnails.right.status < GFX_THUMBNAIL_STATUS_AVAILABLE
ozone->thumbnails_right_status_prev <= GFX_THUMBNAIL_STATUS_AVAILABLE))); && ozone->thumbnails_right_status_prev <= GFX_THUMBNAIL_STATUS_AVAILABLE)));
if (!string_is_empty(ozone->savestate_thumbnail_file_path) && if (!string_is_empty(ozone->savestate_thumbnail_file_path) &&
ozone->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_AVAILABLE) ozone->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_AVAILABLE)
@ -8023,7 +8024,7 @@ static enum menu_action ozone_parse_menu_entry_action(
/* If this is a menu with thumbnails and cursor /* If this is a menu with thumbnails and cursor
* is not in the sidebar, attempt to show * is not in the sidebar, attempt to show
* fullscreen thumbnail view */ * fullscreen thumbnail view */
if ( ozone_fullscreen_thumbnails_available(ozone) if ( ozone_fullscreen_thumbnails_available(ozone, menu_st)
&& (!(ozone->flags2 & OZONE_FLAG2_SHOW_FULLSCREEN_THUMBNAILS)) && (!(ozone->flags2 & OZONE_FLAG2_SHOW_FULLSCREEN_THUMBNAILS))
&& (!(ozone->flags & OZONE_FLAG_CURSOR_IN_SIDEBAR))) && (!(ozone->flags & OZONE_FLAG_CURSOR_IN_SIDEBAR)))
{ {
@ -8632,9 +8633,6 @@ static void *ozone_init(void **userdata, bool video_is_threaded)
ozone->flags2 &= ~OZONE_FLAG2_CURSOR_WIGGLING; ozone->flags2 &= ~OZONE_FLAG2_CURSOR_WIGGLING;
if (!(ozone->thumbnail_path_data = gfx_thumbnail_path_init()))
goto error;
if (!(ozone->screensaver = menu_screensaver_init())) if (!(ozone->screensaver = menu_screensaver_init()))
goto error; goto error;
@ -8833,9 +8831,6 @@ static void ozone_free(void *data)
if (!string_is_empty(ozone->pending_message)) if (!string_is_empty(ozone->pending_message))
free(ozone->pending_message); free(ozone->pending_message);
if (ozone->thumbnail_path_data)
free(ozone->thumbnail_path_data);
menu_screensaver_free(ozone->screensaver); menu_screensaver_free(ozone->screensaver);
} }
@ -8848,6 +8843,7 @@ static void ozone_update_thumbnail_image(void *data)
{ {
bool show_thumbnail_bar, want_thumbnail_bar; bool show_thumbnail_bar, want_thumbnail_bar;
ozone_handle_t *ozone = (ozone_handle_t*)data; ozone_handle_t *ozone = (ozone_handle_t*)data;
struct menu_state *menu_st = menu_state_get_ptr();
if (!ozone) if (!ozone)
return; return;
@ -8865,13 +8861,13 @@ static void ozone_update_thumbnail_image(void *data)
} }
/* Right thumbnail */ /* Right thumbnail */
if (gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)) if (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT))
ozone->thumbnails.pending = OZONE_PENDING_THUMBNAIL_RIGHT; ozone->thumbnails.pending = OZONE_PENDING_THUMBNAIL_RIGHT;
/* Left thumbnail /* Left thumbnail
* > Disabled for image (and video/music) content */ * > Disabled for image (and video/music) content */
if ( (!(ozone->flags2 & OZONE_FLAG2_SELECTION_CORE_IS_VIEWER)) if ( (!(ozone->flags2 & OZONE_FLAG2_SELECTION_CORE_IS_VIEWER))
&& (gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT))) && (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT)))
ozone->thumbnails.pending = (ozone->thumbnails.pending == OZONE_PENDING_THUMBNAIL_RIGHT) ozone->thumbnails.pending = (ozone->thumbnails.pending == OZONE_PENDING_THUMBNAIL_RIGHT)
? OZONE_PENDING_THUMBNAIL_BOTH ? OZONE_PENDING_THUMBNAIL_BOTH
: OZONE_PENDING_THUMBNAIL_LEFT; : OZONE_PENDING_THUMBNAIL_LEFT;
@ -8884,7 +8880,8 @@ static void ozone_update_thumbnail_image(void *data)
static void ozone_refresh_thumbnail_image(void *data, unsigned i) static void ozone_refresh_thumbnail_image(void *data, unsigned i)
{ {
ozone_handle_t *ozone = (ozone_handle_t*)data; ozone_handle_t *ozone = (ozone_handle_t*)data;
struct menu_state *menu_st = menu_state_get_ptr();
if (!ozone) if (!ozone)
return; return;
@ -8897,12 +8894,12 @@ static void ozone_refresh_thumbnail_image(void *data, unsigned i)
ozone_update_content_metadata(ozone); ozone_update_content_metadata(ozone);
/* Only refresh thumbnails if thumbnails are enabled */ /* Only refresh thumbnails if thumbnails are enabled */
if ( ( gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || if ( ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
&& (ozone->flags & OZONE_FLAG_WANT_THUMBNAIL_BAR) && (ozone->flags & OZONE_FLAG_WANT_THUMBNAIL_BAR)
&& ( (ozone->is_quick_menu) || && ( (ozone->is_quick_menu)
(ozone->flags & OZONE_FLAG_IS_PLAYLIST) || || (ozone->flags & OZONE_FLAG_IS_PLAYLIST)
(ozone->flags & OZONE_FLAG_IS_EXPLORE_LIST))) || (ozone->flags & OZONE_FLAG_IS_EXPLORE_LIST)))
ozone_update_thumbnail_image(ozone); ozone_update_thumbnail_image(ozone);
} }
@ -9196,7 +9193,8 @@ static void ozone_context_reset(void *data, bool is_threaded)
"cursor_border.png" "cursor_border.png"
}; };
unsigned i; unsigned i;
ozone_handle_t *ozone = (ozone_handle_t*) data; ozone_handle_t *ozone = (ozone_handle_t*) data;
struct menu_state *menu_st = menu_state_get_ptr();
if (ozone) if (ozone)
{ {
@ -10179,13 +10177,13 @@ static void ozone_render(void *data,
/* Explore list needs cached selection index */ /* Explore list needs cached selection index */
if (ozone->flags & OZONE_FLAG_IS_EXPLORE_LIST) if (ozone->flags & OZONE_FLAG_IS_EXPLORE_LIST)
selection = gfx_thumbnail_get_playlist_index(ozone->thumbnail_path_data); selection = gfx_thumbnail_get_playlist_index(menu_st->thumbnail_path_data);
switch (ozone->thumbnails.pending) switch (ozone->thumbnails.pending)
{ {
case OZONE_PENDING_THUMBNAIL_BOTH: case OZONE_PENDING_THUMBNAIL_BOTH:
gfx_thumbnail_request_streams( gfx_thumbnail_request_streams(
ozone->thumbnail_path_data, menu_st->thumbnail_path_data,
p_anim, p_anim,
playlist, playlist,
selection, selection,
@ -10199,7 +10197,7 @@ static void ozone_render(void *data,
break; break;
case OZONE_PENDING_THUMBNAIL_RIGHT: case OZONE_PENDING_THUMBNAIL_RIGHT:
gfx_thumbnail_request_stream( gfx_thumbnail_request_stream(
ozone->thumbnail_path_data, menu_st->thumbnail_path_data,
p_anim, p_anim,
GFX_THUMBNAIL_RIGHT, GFX_THUMBNAIL_RIGHT,
playlist, playlist,
@ -10212,7 +10210,7 @@ static void ozone_render(void *data,
break; break;
case OZONE_PENDING_THUMBNAIL_LEFT: case OZONE_PENDING_THUMBNAIL_LEFT:
gfx_thumbnail_request_stream( gfx_thumbnail_request_stream(
ozone->thumbnail_path_data, menu_st->thumbnail_path_data,
p_anim, p_anim,
GFX_THUMBNAIL_LEFT, GFX_THUMBNAIL_LEFT,
playlist, playlist,
@ -10515,6 +10513,7 @@ static void ozone_draw_header(
static void ozone_draw_footer( static void ozone_draw_footer(
ozone_handle_t *ozone, ozone_handle_t *ozone,
struct menu_state *menu_st,
gfx_display_t *p_disp, gfx_display_t *p_disp,
gfx_animation_t *p_anim, gfx_animation_t *p_anim,
void *userdata, void *userdata,
@ -10545,13 +10544,13 @@ static void ozone_draw_footer(
* should be guaranteed anyway, but enforce it * should be guaranteed anyway, but enforce it
* here to prevent 'gaps' in the button list in * here to prevent 'gaps' in the button list in
* the event of unknown errors */ * the event of unknown errors */
bool fullscreen_thumbnails_available = bool fs_thumbnails_available =
ozone_fullscreen_thumbnails_available(ozone); ozone_fullscreen_thumbnails_available(ozone, menu_st);
bool metadata_override_available = bool metadata_override_available =
fullscreen_thumbnails_available fs_thumbnails_available
&& ozone_metadata_override_available(ozone, settings); && ozone_metadata_override_available(ozone, settings);
bool thumbnail_cycle_enabled = bool thumbnail_cycle_enabled =
fullscreen_thumbnails_available fs_thumbnails_available
&& !(ozone->flags & OZONE_FLAG_IS_FILE_LIST) && !(ozone->flags & OZONE_FLAG_IS_FILE_LIST)
&& !((ozone->is_quick_menu && menu_is_running_quick_menu()) && !((ozone->is_quick_menu && menu_is_running_quick_menu())
|| (ozone->flags & OZONE_FLAG_IS_STATE_SLOT)); || (ozone->flags & OZONE_FLAG_IS_STATE_SLOT));
@ -10563,7 +10562,7 @@ static void ozone_draw_footer(
&& !clear_setting_enabled && !clear_setting_enabled
&& ozone_scan_available(ozone, selection); && ozone_scan_available(ozone, selection);
bool reset_to_default_available = bool reset_to_default_available =
!fullscreen_thumbnails_available !fs_thumbnails_available
&& ozone_is_current_entry_settings(selection); && ozone_is_current_entry_settings(selection);
bool help_available = bool help_available =
!metadata_override_available !metadata_override_available
@ -10607,7 +10606,7 @@ static void ozone_draw_footer(
float help_x = (help_available) float help_x = (help_available)
? reset_to_default_x - ozone->footer_labels.help.width - icon_size - (2.0f * icon_padding) ? reset_to_default_x - ozone->footer_labels.help.width - icon_size - (2.0f * icon_padding)
: reset_to_default_x; : reset_to_default_x;
float fullscreen_thumbs_x = (fullscreen_thumbnails_available) float fullscreen_thumbs_x = (fs_thumbnails_available)
? help_x - ozone->footer_labels.fullscreen_thumbs.width - icon_size - (2.0f * icon_padding) ? help_x - ozone->footer_labels.fullscreen_thumbs.width - icon_size - (2.0f * icon_padding)
: help_x; : help_x;
float manage_x = (manage_available) float manage_x = (manage_available)
@ -10723,7 +10722,7 @@ static void ozone_draw_footer(
mymat); mymat);
/* > Fullscreen thumbnais */ /* > Fullscreen thumbnais */
if (fullscreen_thumbnails_available) if (fs_thumbnails_available)
ozone_draw_icon( ozone_draw_icon(
p_disp, p_disp,
userdata, userdata,
@ -10928,7 +10927,7 @@ static void ozone_draw_footer(
false); false);
/* > Fullscreen thumbnails */ /* > Fullscreen thumbnails */
if (fullscreen_thumbnails_available) if (fs_thumbnails_available)
gfx_display_draw_text( gfx_display_draw_text(
ozone->fonts.footer.font, ozone->fonts.footer.font,
ozone->footer_labels.fullscreen_thumbs.str, ozone->footer_labels.fullscreen_thumbs.str,
@ -11061,9 +11060,9 @@ static void ozone_draw_footer(
* title string */ * title string */
usable_width = metadata_override_available usable_width = metadata_override_available
? metadata_toggle_x ? metadata_toggle_x
: fullscreen_thumbnails_available : fs_thumbnails_available
? fullscreen_thumbs_x ? fullscreen_thumbs_x
: search_x; : search_x;
usable_width -= footer_margin + (icon_padding * 2); usable_width -= footer_margin + (icon_padding * 2);
if (usable_width > 0) if (usable_width > 0)
@ -11151,27 +11150,6 @@ static void ozone_draw_footer(
#endif #endif
} }
static void ozone_set_thumbnail_system(void *data, char *s, size_t len)
{
ozone_handle_t *ozone = (ozone_handle_t*)data;
if (!ozone)
return;
gfx_thumbnail_set_system(
ozone->thumbnail_path_data, s, playlist_get_cached());
}
static size_t ozone_get_thumbnail_system(void *data, char *s, size_t len)
{
ozone_handle_t *ozone = (ozone_handle_t*)data;
const char *system = NULL;
if (!ozone)
return 0;
if (!gfx_thumbnail_get_system(ozone->thumbnail_path_data, &system))
return 0;
return strlcpy(s, system, len);
}
static void ozone_selection_changed(ozone_handle_t *ozone, bool allow_animation) static void ozone_selection_changed(ozone_handle_t *ozone, bool allow_animation)
{ {
struct menu_state *menu_st = menu_state_get_ptr(); struct menu_state *menu_st = menu_state_get_ptr();
@ -11207,8 +11185,8 @@ static void ozone_selection_changed(ozone_handle_t *ozone, bool allow_animation)
ozone_update_scroll(ozone, allow_animation, node); ozone_update_scroll(ozone, allow_animation, node);
/* Update thumbnail */ /* Update thumbnail */
if (gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{ {
bool update_thumbnails = false; bool update_thumbnails = false;
@ -11246,7 +11224,7 @@ static void ozone_selection_changed(ozone_handle_t *ozone, bool allow_animation)
* content + right/left thumbnails * content + right/left thumbnails
* (otherwise last loaded thumbnail will * (otherwise last loaded thumbnail will
* persist, and be shown on the wrong entry) */ * persist, and be shown on the wrong entry) */
gfx_thumbnail_set_content(ozone->thumbnail_path_data, NULL); gfx_thumbnail_set_content(menu_st->thumbnail_path_data, NULL);
ozone_unload_thumbnail_textures(ozone); ozone_unload_thumbnail_textures(ozone);
update_thumbnails = true; update_thumbnails = true;
ozone->flags &= ~OZONE_FLAG_WANT_THUMBNAIL_BAR; ozone->flags &= ~OZONE_FLAG_WANT_THUMBNAIL_BAR;
@ -11486,6 +11464,7 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
&mymat); &mymat);
ozone_draw_footer(ozone, ozone_draw_footer(ozone,
menu_st,
p_disp, p_disp,
p_anim, p_anim,
userdata, userdata,
@ -11560,6 +11539,7 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
/* Thumbnail bar */ /* Thumbnail bar */
if (ozone->show_thumbnail_bar) if (ozone->show_thumbnail_bar)
ozone_draw_thumbnail_bar(ozone, ozone_draw_thumbnail_bar(ozone,
menu_st,
p_disp, p_disp,
p_anim, p_anim,
settings, settings,
@ -11826,7 +11806,7 @@ static void ozone_populate_entries(
bool ozone_collapse_sidebar = false; bool ozone_collapse_sidebar = false;
bool was_db_manager_list = false; bool was_db_manager_list = false;
bool want_thumbnail_bar = false; bool want_thumbnail_bar = false;
bool fullscreen_thumbnails_available = false; bool fs_thumbnails_available = false;
bool animate = false; bool animate = false;
struct menu_state *menu_st = menu_state_get_ptr(); struct menu_state *menu_st = menu_state_get_ptr();
menu_list_t *menu_list = menu_st->entries.list; menu_list_t *menu_list = menu_st->entries.list;
@ -11861,8 +11841,8 @@ static void ozone_populate_entries(
/* Refresh thumbnails */ /* Refresh thumbnails */
ozone_unload_thumbnail_textures(ozone); ozone_unload_thumbnail_textures(ozone);
if (gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{ {
ozone_set_thumbnail_content(ozone, ""); ozone_set_thumbnail_content(ozone, "");
ozone_update_thumbnail_image(ozone); ozone_update_thumbnail_image(ozone);
@ -11982,12 +11962,12 @@ static void ozone_populate_entries(
if ( (!(ozone->is_quick_menu)) if ( (!(ozone->is_quick_menu))
&& (ozone->flags & OZONE_FLAG_WAS_QUICK_MENU) && (ozone->flags & OZONE_FLAG_WAS_QUICK_MENU)
&& (!(ozone->flags & OZONE_FLAG_IS_STATE_SLOT)) && (!(ozone->flags & OZONE_FLAG_IS_STATE_SLOT))
&& ( gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || && ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
&& ( ozone->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE || && ( ozone->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE
ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE || || ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE
ozone->thumbnails.left.status == GFX_THUMBNAIL_STATUS_MISSING || || ozone->thumbnails.left.status == GFX_THUMBNAIL_STATUS_MISSING
ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_MISSING)) || ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_MISSING))
ozone->flags |= OZONE_FLAG_SKIP_THUMBNAIL_RESET; ozone->flags |= OZONE_FLAG_SKIP_THUMBNAIL_RESET;
/* Always allow thumbnail reset in Information page */ /* Always allow thumbnail reset in Information page */
@ -12003,8 +11983,8 @@ static void ozone_populate_entries(
ozone_update_savestate_thumbnail_path(ozone, (unsigned)menu_st->selection_ptr); ozone_update_savestate_thumbnail_path(ozone, (unsigned)menu_st->selection_ptr);
ozone_update_savestate_thumbnail_image(ozone); ozone_update_savestate_thumbnail_image(ozone);
} }
else if ( gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) else if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{ {
ozone->flags |= (OZONE_FLAG_WANT_THUMBNAIL_BAR ozone->flags |= (OZONE_FLAG_WANT_THUMBNAIL_BAR
| OZONE_FLAG_SKIP_THUMBNAIL_RESET); | OZONE_FLAG_SKIP_THUMBNAIL_RESET);
@ -12028,8 +12008,8 @@ static void ozone_populate_entries(
if (!(ozone->flags & OZONE_FLAG_SKIP_THUMBNAIL_RESET)) if (!(ozone->flags & OZONE_FLAG_SKIP_THUMBNAIL_RESET))
ozone_unload_thumbnail_textures(ozone); ozone_unload_thumbnail_textures(ozone);
if (gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{ {
/* Only auto-load thumbnails if we are viewing /* Only auto-load thumbnails if we are viewing
* a playlist or a database manager list * a playlist or a database manager list
@ -12048,8 +12028,8 @@ static void ozone_populate_entries(
} }
if ( (ozone->flags & OZONE_FLAG_SKIP_THUMBNAIL_RESET) if ( (ozone->flags & OZONE_FLAG_SKIP_THUMBNAIL_RESET)
&& ( gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || && ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT))) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT)))
ozone->flags |= OZONE_FLAG_WANT_THUMBNAIL_BAR; ozone->flags |= OZONE_FLAG_WANT_THUMBNAIL_BAR;
switch (ozone->tabs[ozone->categories_selection_ptr]) switch (ozone->tabs[ozone->categories_selection_ptr])
@ -12080,19 +12060,20 @@ static void ozone_populate_entries(
else else
ozone->flags &= ~OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE; ozone->flags &= ~OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE;
fullscreen_thumbnails_available = ozone->flags & OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE; fs_thumbnails_available = ozone->flags & OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE;
want_thumbnail_bar = ozone->flags & OZONE_FLAG_WANT_THUMBNAIL_BAR; want_thumbnail_bar = ozone->flags & OZONE_FLAG_WANT_THUMBNAIL_BAR;
if (fullscreen_thumbnails_available != want_thumbnail_bar) if (fs_thumbnails_available != want_thumbnail_bar)
{ {
if (fullscreen_thumbnails_available) if (fs_thumbnails_available)
ozone->flags |= OZONE_FLAG_WANT_THUMBNAIL_BAR; ozone->flags |= OZONE_FLAG_WANT_THUMBNAIL_BAR;
else else
ozone->flags &= ~OZONE_FLAG_WANT_THUMBNAIL_BAR; ozone->flags &= ~OZONE_FLAG_WANT_THUMBNAIL_BAR;
} }
/* State slots must not allow fullscreen thumbnails when slot has no image */ /* State slots must not allow fullscreen thumbnails when slot has no image */
if ((ozone->flags & OZONE_FLAG_IS_STATE_SLOT) && string_is_empty(ozone->savestate_thumbnail_file_path)) if ( (ozone->flags & OZONE_FLAG_IS_STATE_SLOT)
&& string_is_empty(ozone->savestate_thumbnail_file_path))
ozone->flags &= ~OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE; ozone->flags &= ~OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE;
} }
@ -12516,8 +12497,6 @@ menu_ctx_driver_t menu_ctx_ozone = {
NULL, NULL,
ozone_update_thumbnail_image, ozone_update_thumbnail_image,
ozone_refresh_thumbnail_image, ozone_refresh_thumbnail_image,
ozone_set_thumbnail_system,
ozone_get_thumbnail_system,
ozone_set_thumbnail_content, ozone_set_thumbnail_content,
gfx_display_osk_ptr_at_pos, gfx_display_osk_ptr_at_pos,
ozone_update_savestate_thumbnail_path, ozone_update_savestate_thumbnail_path,

View File

@ -280,8 +280,6 @@ typedef struct
{ {
retro_time_t thumbnail_load_trigger_time; /* uint64_t */ retro_time_t thumbnail_load_trigger_time; /* uint64_t */
gfx_thumbnail_path_data_t *thumbnail_path_data;
struct struct
{ {
bitmapfont_lut_t *regular; bitmapfont_lut_t *regular;
@ -5192,7 +5190,7 @@ static void rgui_render(
rgui_render_fs_thumbnail(rgui, fb_width, fb_height, fb_pitch); rgui_render_fs_thumbnail(rgui, fb_width, fb_height, fb_pitch);
/* Get thumbnail title */ /* Get thumbnail title */
if ( gfx_thumbnail_get_label(rgui->thumbnail_path_data, &thumbnail_title) if ( gfx_thumbnail_get_label(menu_st->thumbnail_path_data, &thumbnail_title)
|| is_state_slot) || is_state_slot)
{ {
/* State slot title */ /* State slot title */
@ -6504,10 +6502,6 @@ static void *rgui_init(void **userdata, bool video_is_threaded)
settings->bools.menu_rgui_shadows, settings->bools.menu_rgui_shadows,
settings->bools.menu_rgui_extended_ascii); settings->bools.menu_rgui_extended_ascii);
rgui->thumbnail_path_data = gfx_thumbnail_path_init();
if (!rgui->thumbnail_path_data)
goto error;
rgui->thumbnail_queue_size = 0; rgui->thumbnail_queue_size = 0;
rgui->left_thumbnail_queue_size = 0; rgui->left_thumbnail_queue_size = 0;
rgui->gfx_thumbnails_prev = -1; rgui->gfx_thumbnails_prev = -1;
@ -6562,8 +6556,6 @@ static void rgui_free(void *data)
if (rgui->flags & RGUI_FLAG_WIDGETS_SUPPORTED) if (rgui->flags & RGUI_FLAG_WIDGETS_SUPPORTED)
gfx_display_deinit_white_texture(); gfx_display_deinit_white_texture();
#endif #endif
if (rgui->thumbnail_path_data)
free(rgui->thumbnail_path_data);
rgui_fonts_free(rgui); rgui_fonts_free(rgui);
@ -6709,33 +6701,14 @@ static void rgui_navigation_clear(void *data, bool pending_push)
rgui->scroll_y = 0; rgui->scroll_y = 0;
} }
static void rgui_set_thumbnail_system(void *userdata, char *s, size_t len) static void rgui_load_current_thumbnails(rgui_t *rgui, struct menu_state *menu_st, bool download_missing)
{
rgui_t *rgui = (rgui_t*)userdata;
if (rgui)
gfx_thumbnail_set_system(
rgui->thumbnail_path_data, s, playlist_get_cached());
}
static size_t rgui_get_thumbnail_system(void *userdata, char *s, size_t len)
{
rgui_t *rgui = (rgui_t*)userdata;
const char *system = NULL;
if (!rgui)
return 0;
if (!gfx_thumbnail_get_system(rgui->thumbnail_path_data, &system))
return 0;
return strlcpy(s, system, len);
}
static void rgui_load_current_thumbnails(rgui_t *rgui, bool download_missing)
{ {
const char *thumbnail_path = NULL; const char *thumbnail_path = NULL;
const char *left_thumbnail_path = NULL; const char *left_thumbnail_path = NULL;
bool thumbnails_missing = false; bool thumbnails_missing = false;
/* Right (or fullscreen) thumbnail */ /* Right (or fullscreen) thumbnail */
if (gfx_thumbnail_get_path(rgui->thumbnail_path_data, if (gfx_thumbnail_get_path(menu_st->thumbnail_path_data,
GFX_THUMBNAIL_RIGHT, &thumbnail_path)) GFX_THUMBNAIL_RIGHT, &thumbnail_path))
{ {
if (rgui_request_thumbnail( if (rgui_request_thumbnail(
@ -6757,7 +6730,7 @@ static void rgui_load_current_thumbnails(rgui_t *rgui, bool download_missing)
if ( !(rgui->flags & RGUI_FLAG_SHOW_FULLSCREEN_THUMBNAIL) if ( !(rgui->flags & RGUI_FLAG_SHOW_FULLSCREEN_THUMBNAIL)
&& string_is_empty(rgui->savestate_thumbnail_file_path)) && string_is_empty(rgui->savestate_thumbnail_file_path))
{ {
if (gfx_thumbnail_get_path(rgui->thumbnail_path_data, if (gfx_thumbnail_get_path(menu_st->thumbnail_path_data,
GFX_THUMBNAIL_LEFT, &left_thumbnail_path)) GFX_THUMBNAIL_LEFT, &left_thumbnail_path))
{ {
if (rgui_request_thumbnail( if (rgui_request_thumbnail(
@ -6773,7 +6746,7 @@ static void rgui_load_current_thumbnails(rgui_t *rgui, bool download_missing)
} }
else if (!string_is_empty(rgui->savestate_thumbnail_file_path)) else if (!string_is_empty(rgui->savestate_thumbnail_file_path))
{ {
if (gfx_thumbnail_get_path(rgui->thumbnail_path_data, if (gfx_thumbnail_get_path(menu_st->thumbnail_path_data,
GFX_THUMBNAIL_LEFT, &left_thumbnail_path)) GFX_THUMBNAIL_LEFT, &left_thumbnail_path))
{ {
if (rgui_request_thumbnail( if (rgui_request_thumbnail(
@ -6805,9 +6778,9 @@ static void rgui_load_current_thumbnails(rgui_t *rgui, bool download_missing)
/* Explore list needs cached selection index */ /* Explore list needs cached selection index */
if (rgui->flags & RGUI_FLAG_IS_EXPLORE_LIST) if (rgui->flags & RGUI_FLAG_IS_EXPLORE_LIST)
selection = gfx_thumbnail_get_playlist_index(rgui->thumbnail_path_data); selection = gfx_thumbnail_get_playlist_index(menu_st->thumbnail_path_data);
if (gfx_thumbnail_get_system(rgui->thumbnail_path_data, &system)) if (gfx_thumbnail_get_system(menu_st->thumbnail_path_data, &system))
task_push_pl_entry_thumbnail_download(system, task_push_pl_entry_thumbnail_download(system,
playlist, (unsigned)selection, playlist, (unsigned)selection,
false, true); false, true);
@ -6967,7 +6940,7 @@ static void rgui_scan_selected_entry_thumbnail(rgui_t *rgui, bool force_load)
rgui->playlist_index = playlist_index; rgui->playlist_index = playlist_index;
} }
gfx_thumbnail_set_content_playlist(rgui->thumbnail_path_data, gfx_thumbnail_set_content_playlist(menu_st->thumbnail_path_data,
playlist_valid ? playlist_get_cached() : NULL, playlist_index); playlist_valid ? playlist_get_cached() : NULL, playlist_index);
} }
else if (rgui->is_quick_menu) else if (rgui->is_quick_menu)
@ -6977,7 +6950,7 @@ static void rgui_scan_selected_entry_thumbnail(rgui_t *rgui, bool force_load)
playlist_index = rgui->playlist_index; playlist_index = rgui->playlist_index;
gfx_thumbnail_set_content_playlist(rgui->thumbnail_path_data, gfx_thumbnail_set_content_playlist(menu_st->thumbnail_path_data,
playlist_valid ? playlist_get_cached() : NULL, playlist_index); playlist_valid ? playlist_get_cached() : NULL, playlist_index);
} }
#if defined(HAVE_LIBRETRODB) #if defined(HAVE_LIBRETRODB)
@ -6994,16 +6967,16 @@ static void rgui_scan_selected_entry_thumbnail(rgui_t *rgui, bool force_load)
menu_entry_get(&entry, 0, selection, NULL, true); menu_entry_get(&entry, 0, selection, NULL, true);
rgui->playlist_index = rgui->playlist_index =
menu_explore_set_playlist_thumbnail(entry.type, rgui->thumbnail_path_data); menu_explore_set_playlist_thumbnail(entry.type, menu_st->thumbnail_path_data);
} }
} }
#endif #endif
if (gfx_thumbnail_is_enabled(rgui->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)) if (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT))
has_thumbnail = gfx_thumbnail_update_path(rgui->thumbnail_path_data, GFX_THUMBNAIL_RIGHT); has_thumbnail = gfx_thumbnail_update_path(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT);
if (gfx_thumbnail_is_enabled(rgui->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) if (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
has_thumbnail = gfx_thumbnail_update_path(rgui->thumbnail_path_data, GFX_THUMBNAIL_LEFT) || has_thumbnail; has_thumbnail = gfx_thumbnail_update_path(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT) || has_thumbnail;
} }
/* Save state thumbnails */ /* Save state thumbnails */
@ -7022,7 +6995,7 @@ static void rgui_scan_selected_entry_thumbnail(rgui_t *rgui, bool force_load)
{ {
/* Check whether thumbnails should be loaded immediately */ /* Check whether thumbnails should be loaded immediately */
if ((menu_rgui_thumbnail_delay == 0) || force_load) if ((menu_rgui_thumbnail_delay == 0) || force_load)
rgui_load_current_thumbnails(rgui, network_on_demand_thumbnails); rgui_load_current_thumbnails(rgui, menu_st, network_on_demand_thumbnails);
else else
{ {
/* Schedule a delayed load */ /* Schedule a delayed load */
@ -7085,6 +7058,7 @@ static void rgui_toggle_fs_thumbnail(rgui_t *rgui,
static void rgui_refresh_thumbnail_image(void *userdata, unsigned i) static void rgui_refresh_thumbnail_image(void *userdata, unsigned i)
{ {
rgui_t *rgui = (rgui_t*)userdata; rgui_t *rgui = (rgui_t*)userdata;
struct menu_state *menu_st = menu_state_get_ptr();
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
bool rgui_inline_thumbnails = false; bool rgui_inline_thumbnails = false;
if (!rgui || !settings) if (!rgui || !settings)
@ -7094,8 +7068,8 @@ static void rgui_refresh_thumbnail_image(void *userdata, unsigned i)
/* Only refresh thumbnails if thumbnails are enabled */ /* Only refresh thumbnails if thumbnails are enabled */
if ( ((rgui->flags & RGUI_FLAG_SHOW_FULLSCREEN_THUMBNAIL) || rgui_inline_thumbnails) if ( ((rgui->flags & RGUI_FLAG_SHOW_FULLSCREEN_THUMBNAIL) || rgui_inline_thumbnails)
&& (gfx_thumbnail_is_enabled(rgui->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || && (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(rgui->thumbnail_path_data, GFX_THUMBNAIL_LEFT))) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT)))
{ {
/* In all cases, reset current thumbnails */ /* In all cases, reset current thumbnails */
rgui->fs_thumbnail.width = 0; rgui->fs_thumbnail.width = 0;
@ -7500,6 +7474,7 @@ static void rgui_frame(void *data, video_frame_info_t *video_info)
{ {
rgui_t *rgui = (rgui_t*)data; rgui_t *rgui = (rgui_t*)data;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
struct menu_state *menu_st = menu_state_get_ptr();
bool bg_filler_thickness_enable = settings->bools.menu_rgui_background_filler_thickness_enable; bool bg_filler_thickness_enable = settings->bools.menu_rgui_background_filler_thickness_enable;
bool border_filler_thickness_enable = settings->bools.menu_rgui_border_filler_thickness_enable; bool border_filler_thickness_enable = settings->bools.menu_rgui_border_filler_thickness_enable;
#if defined(DINGUX) #if defined(DINGUX)
@ -7740,7 +7715,7 @@ static void rgui_frame(void *data, video_frame_info_t *video_info)
(settings->uints.menu_rgui_thumbnail_delay * 1000 * ((rgui->flags & RGUI_FLAG_SHOW_FULLSCREEN_THUMBNAIL) (settings->uints.menu_rgui_thumbnail_delay * 1000 * ((rgui->flags & RGUI_FLAG_SHOW_FULLSCREEN_THUMBNAIL)
? 1.5f ? 1.5f
: 1.0f))) : 1.0f)))
rgui_load_current_thumbnails(rgui, rgui_load_current_thumbnails(rgui, menu_st,
settings->bools.network_on_demand_thumbnails); settings->bools.network_on_demand_thumbnails);
} }
@ -8153,8 +8128,6 @@ menu_ctx_driver_t menu_ctx_rgui = {
NULL, /* update_thumbnail_path */ NULL, /* update_thumbnail_path */
rgui_update_thumbnail_image, rgui_update_thumbnail_image,
rgui_refresh_thumbnail_image, rgui_refresh_thumbnail_image,
rgui_set_thumbnail_system,
rgui_get_thumbnail_system,
NULL, /* set_thumbnail_content */ NULL, /* set_thumbnail_content */
rgui_osk_ptr_at_pos, rgui_osk_ptr_at_pos,
rgui_update_savestate_thumbnail_path, rgui_update_savestate_thumbnail_path,

View File

@ -326,7 +326,6 @@ typedef struct xmb_handle
menu_screensaver_t *screensaver; menu_screensaver_t *screensaver;
gfx_thumbnail_path_data_t *thumbnail_path_data;
struct { struct {
gfx_thumbnail_t right; gfx_thumbnail_t right;
gfx_thumbnail_t left; gfx_thumbnail_t left;
@ -1208,10 +1207,10 @@ static void xmb_update_savestate_thumbnail_path(void *data, unsigned i)
if (!string_is_empty(entry.label)) if (!string_is_empty(entry.label))
{ {
if (string_to_unsigned(entry.label) == MENU_ENUM_LABEL_STATE_SLOT || if ( (string_to_unsigned(entry.label) == MENU_ENUM_LABEL_STATE_SLOT)
string_is_equal(entry.label, "state_slot") || || string_is_equal(entry.label, "state_slot")
string_is_equal(entry.label, "loadstate") || || string_is_equal(entry.label, "loadstate")
string_is_equal(entry.label, "savestate")) || string_is_equal(entry.label, "savestate"))
{ {
char path[8204]; char path[8204];
runloop_state_t *runloop_st = runloop_state_get_ptr(); runloop_state_t *runloop_st = runloop_state_get_ptr();
@ -1260,8 +1259,9 @@ static void xmb_update_savestate_thumbnail_path(void *data, unsigned i)
static void xmb_update_thumbnail_image(void *data) static void xmb_update_thumbnail_image(void *data)
{ {
xmb_handle_t *xmb = (xmb_handle_t*)data; xmb_handle_t *xmb = (xmb_handle_t*)data;
const char *core_name = NULL; struct menu_state *menu_st = menu_state_get_ptr();
const char *core_name = NULL;
if (!xmb) if (!xmb)
return; return;
@ -1276,28 +1276,28 @@ static void xmb_update_thumbnail_image(void *data)
} }
/* imageviewer content requires special treatment... */ /* imageviewer content requires special treatment... */
gfx_thumbnail_get_core_name(xmb->thumbnail_path_data, &core_name); gfx_thumbnail_get_core_name(menu_st->thumbnail_path_data, &core_name);
if (string_is_equal(core_name, "imageviewer")) if (string_is_equal(core_name, "imageviewer"))
{ {
/* Right thumbnail */ /* Right thumbnail */
if (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, if (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data,
GFX_THUMBNAIL_RIGHT)) GFX_THUMBNAIL_RIGHT))
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_RIGHT; xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_RIGHT;
/* Left thumbnail */ /* Left thumbnail */
else if (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, else if (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data,
GFX_THUMBNAIL_LEFT)) GFX_THUMBNAIL_LEFT))
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_LEFT; xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_LEFT;
} }
else else
{ {
/* Right thumbnail */ /* Right thumbnail */
if (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, if (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data,
GFX_THUMBNAIL_RIGHT)) GFX_THUMBNAIL_RIGHT))
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_RIGHT; xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_RIGHT;
/* Left thumbnail */ /* Left thumbnail */
if (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, if (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data,
GFX_THUMBNAIL_LEFT)) GFX_THUMBNAIL_LEFT))
xmb->thumbnails.pending = xmb->thumbnails.pending =
(xmb->thumbnails.pending == XMB_PENDING_THUMBNAIL_RIGHT) ? (xmb->thumbnails.pending == XMB_PENDING_THUMBNAIL_RIGHT) ?
@ -1324,39 +1324,19 @@ static unsigned xmb_get_horizontal_selection_type(xmb_handle_t *xmb)
static void xmb_refresh_thumbnail_image(void *data, unsigned i) static void xmb_refresh_thumbnail_image(void *data, unsigned i)
{ {
xmb_handle_t *xmb = (xmb_handle_t*)data; xmb_handle_t *xmb = (xmb_handle_t*)data;
struct menu_state *menu_st = menu_state_get_ptr();
if (!xmb) if (!xmb)
return; return;
/* Only refresh thumbnails if thumbnails are enabled */ /* Only refresh thumbnails if thumbnails are enabled */
if ((gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || if ( (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) && || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
(xmb->is_quick_menu || xmb->is_playlist || xmb->is_explore_list)) && (xmb->is_quick_menu || xmb->is_playlist || xmb->is_explore_list))
xmb_update_thumbnail_image(xmb); xmb_update_thumbnail_image(xmb);
} }
static void xmb_set_thumbnail_system(void *data, char*s, size_t len)
{
xmb_handle_t *xmb = (xmb_handle_t*)data;
if (!xmb)
return;
gfx_thumbnail_set_system(
xmb->thumbnail_path_data, s, playlist_get_cached());
}
static size_t xmb_get_thumbnail_system(void *data, char*s, size_t len)
{
xmb_handle_t *xmb = (xmb_handle_t*)data;
const char *system = NULL;
if (!xmb)
return 0;
if (!gfx_thumbnail_get_system(xmb->thumbnail_path_data, &system))
return 0;
return strlcpy(s, system, len);
}
static void xmb_unload_thumbnail_textures(void *data) static void xmb_unload_thumbnail_textures(void *data)
{ {
xmb_handle_t *xmb = (xmb_handle_t*)data; xmb_handle_t *xmb = (xmb_handle_t*)data;
@ -1399,15 +1379,15 @@ static void xmb_set_thumbnail_content(void *data, const char *s)
/* Get playlist index corresponding /* Get playlist index corresponding
* to the selected entry */ * to the selected entry */
if (list && if ( list
(selection < list_size) && && (selection < list_size)
(list->list[selection].type == FILE_TYPE_RPL_ENTRY)) && (list->list[selection].type == FILE_TYPE_RPL_ENTRY))
{ {
playlist_valid = true; playlist_valid = true;
playlist_index = list->list[selection].entry_idx; playlist_index = list->list[selection].entry_idx;
} }
gfx_thumbnail_set_content_playlist(xmb->thumbnail_path_data, gfx_thumbnail_set_content_playlist(menu_st->thumbnail_path_data,
playlist_valid ? playlist_get_cached() : NULL, playlist_index); playlist_valid ? playlist_get_cached() : NULL, playlist_index);
xmb->fullscreen_thumbnails_available = true; xmb->fullscreen_thumbnails_available = true;
} }
@ -1424,7 +1404,7 @@ static void xmb_set_thumbnail_content(void *data, const char *s)
if (!string_is_empty(entry.path)) if (!string_is_empty(entry.path))
{ {
gfx_thumbnail_set_content(xmb->thumbnail_path_data, entry.path); gfx_thumbnail_set_content(menu_st->thumbnail_path_data, entry.path);
xmb->fullscreen_thumbnails_available = true; xmb->fullscreen_thumbnails_available = true;
} }
} }
@ -1442,7 +1422,7 @@ static void xmb_set_thumbnail_content(void *data, const char *s)
menu_entry_get(&entry, 0, selection, NULL, true); menu_entry_get(&entry, 0, selection, NULL, true);
xmb->fullscreen_thumbnails_available = xmb->fullscreen_thumbnails_available =
(menu_explore_set_playlist_thumbnail(entry.type, xmb->thumbnail_path_data) >= 0); (menu_explore_set_playlist_thumbnail(entry.type, menu_st->thumbnail_path_data) >= 0);
} }
} }
#endif #endif
@ -1459,10 +1439,10 @@ static void xmb_set_thumbnail_content(void *data, const char *s)
MENU_ENTRY_INITIALIZE(entry); MENU_ENTRY_INITIALIZE(entry);
entry.flags |= MENU_ENTRY_FLAG_PATH_ENABLED; entry.flags |= MENU_ENTRY_FLAG_PATH_ENABLED;
menu_entry_get(&entry, 0, selection, NULL, true); menu_entry_get(&entry, 0, selection, NULL, true);
if ( !string_is_empty(entry.path) && if ( !string_is_empty(entry.path)
!string_is_empty(node->fullpath)) && !string_is_empty(node->fullpath))
{ {
gfx_thumbnail_set_content_image(xmb->thumbnail_path_data, gfx_thumbnail_set_content_image(menu_st->thumbnail_path_data,
node->fullpath, entry.path); node->fullpath, entry.path);
xmb->fullscreen_thumbnails_available = true; xmb->fullscreen_thumbnails_available = true;
} }
@ -1476,7 +1456,7 @@ static void xmb_set_thumbnail_content(void *data, const char *s)
* the sublevels of database manager lists. * the sublevels of database manager lists.
* Showing thumbnails on database entries is a * Showing thumbnails on database entries is a
* pointless nuisance and a waste of CPU cycles, IMHO... */ * pointless nuisance and a waste of CPU cycles, IMHO... */
gfx_thumbnail_set_content(xmb->thumbnail_path_data, s); gfx_thumbnail_set_content(menu_st->thumbnail_path_data, s);
xmb->fullscreen_thumbnails_available = true; xmb->fullscreen_thumbnails_available = true;
} }
} }
@ -1584,16 +1564,16 @@ static void xmb_selection_pointer_changed(
iz = xmb->items_active_zoom; iz = xmb->items_active_zoom;
if ( if (
gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT)
) )
{ {
bool update_thumbnails = false; bool update_thumbnails = false;
/* Playlist updates */ /* Playlist updates */
if (((xmb_system_tab > XMB_SYSTEM_TAB_SETTINGS && depth == 1) || if (( (xmb_system_tab > XMB_SYSTEM_TAB_SETTINGS && depth == 1)
(xmb_system_tab < XMB_SYSTEM_TAB_SETTINGS && depth == 4)) && || (xmb_system_tab < XMB_SYSTEM_TAB_SETTINGS && depth == 4))
xmb->is_playlist) && xmb->is_playlist)
{ {
xmb_set_thumbnail_content(xmb, NULL); xmb_set_thumbnail_content(xmb, NULL);
update_thumbnails = true; update_thumbnails = true;
@ -1633,8 +1613,8 @@ static void xmb_selection_pointer_changed(
* (otherwise last loaded thumbnail will * (otherwise last loaded thumbnail will
* persist, and be shown on the wrong entry) */ * persist, and be shown on the wrong entry) */
xmb->fullscreen_thumbnails_available = false; xmb->fullscreen_thumbnails_available = false;
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_NONE; xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_NONE;
gfx_thumbnail_set_content(xmb->thumbnail_path_data, NULL); gfx_thumbnail_set_content(menu_st->thumbnail_path_data, NULL);
gfx_thumbnail_cancel_pending_requests(); gfx_thumbnail_cancel_pending_requests();
gfx_thumbnail_reset(&xmb->thumbnails.right); gfx_thumbnail_reset(&xmb->thumbnails.right);
gfx_thumbnail_reset(&xmb->thumbnails.left); gfx_thumbnail_reset(&xmb->thumbnails.left);
@ -1844,8 +1824,8 @@ static void xmb_list_open_new(xmb_handle_t *xmb,
if (xmb_system_tab <= XMB_SYSTEM_TAB_SETTINGS && xmb->depth > xmb->old_depth) if (xmb_system_tab <= XMB_SYSTEM_TAB_SETTINGS && xmb->depth > xmb->old_depth)
{ {
if ( gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{ {
if (xmb->is_playlist || xmb->is_db_manager_list) if (xmb->is_playlist || xmb->is_db_manager_list)
{ {
@ -1858,9 +1838,9 @@ static void xmb_list_open_new(xmb_handle_t *xmb,
} }
} }
if (savestate_thumbnail_enable && if ( savestate_thumbnail_enable
((xmb->is_quick_menu && xmb->depth >= 2) || && ((xmb->is_quick_menu && xmb->depth >= 2)
(xmb->is_state_slot))) || (xmb->is_state_slot)))
{ {
/* This shows savestate thumbnail after /* This shows savestate thumbnail after
* opening savestate submenu */ * opening savestate submenu */
@ -2093,17 +2073,17 @@ static void xmb_list_switch_horizontal_list(xmb_handle_t *xmb)
for (j = 0; j <= list_size; j++) for (j = 0; j <= list_size; j++)
{ {
gfx_animation_ctx_entry_t entry; gfx_animation_ctx_entry_t entry;
float ia = xmb->categories_passive_alpha; float ia = xmb->categories_passive_alpha;
float iz = xmb->categories_passive_zoom; float iz = xmb->categories_passive_zoom;
xmb_node_t *node = xmb_get_node(xmb, j); xmb_node_t *node = xmb_get_node(xmb, j);
if (!node) if (!node)
continue; continue;
if (j == xmb->categories_active_idx) if (j == xmb->categories_active_idx)
{ {
ia = xmb->categories_active_alpha; ia = xmb->categories_active_alpha;
iz = xmb->categories_active_zoom; iz = xmb->categories_active_zoom;
} }
if (!xmb->allow_horizontal_animation) if (!xmb->allow_horizontal_animation)
@ -2218,8 +2198,8 @@ static void xmb_list_switch(xmb_handle_t *xmb)
xmb->categories_active_idx_old = (unsigned)xmb->categories_selection_ptr; xmb->categories_active_idx_old = (unsigned)xmb->categories_selection_ptr;
if (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{ {
xmb_unload_thumbnail_textures(xmb); xmb_unload_thumbnail_textures(xmb);
@ -2713,9 +2693,10 @@ static void xmb_populate_entries(void *data,
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST)); || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST));
xmb->is_playlist = xmb->is_playlist && xmb->is_playlist =
!string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_INFORMATION)) && xmb->is_playlist
!string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL)); && !string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_INFORMATION))
&& !string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL));
xmb->is_playlist_information = xmb->is_playlist_information =
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_INFORMATION)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_INFORMATION)) ||
@ -2837,8 +2818,8 @@ static void xmb_populate_entries(void *data,
(xmb->is_playlist || xmb->is_db_manager_list || xmb->is_file_list) && (xmb->is_playlist || xmb->is_db_manager_list || xmb->is_file_list) &&
!((xmb_system_tab > XMB_SYSTEM_TAB_SETTINGS) && (xmb->depth > 2)); !((xmb_system_tab > XMB_SYSTEM_TAB_SETTINGS) && (xmb->depth > 2));
if ((xmb->is_quick_menu || xmb->is_state_slot) && if ( (xmb->is_quick_menu || xmb->is_state_slot)
!string_is_empty(xmb->savestate_thumbnail_file_path)) && !string_is_empty(xmb->savestate_thumbnail_file_path))
{ {
xmb->fullscreen_thumbnails_available = true; xmb->fullscreen_thumbnails_available = true;
} }
@ -2859,8 +2840,8 @@ static void xmb_populate_entries(void *data,
else if (xmb->is_file_list) else if (xmb->is_file_list)
{ {
xmb->fullscreen_thumbnails_available = false; xmb->fullscreen_thumbnails_available = false;
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_NONE; xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_NONE;
gfx_thumbnail_set_content(xmb->thumbnail_path_data, NULL); gfx_thumbnail_set_content(menu_st->thumbnail_path_data, NULL);
gfx_thumbnail_cancel_pending_requests(); gfx_thumbnail_cancel_pending_requests();
gfx_thumbnail_reset(&xmb->thumbnails.right); gfx_thumbnail_reset(&xmb->thumbnails.right);
gfx_thumbnail_reset(&xmb->thumbnails.left); gfx_thumbnail_reset(&xmb->thumbnails.left);
@ -3319,9 +3300,9 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
playlist_get_index(playlist_get_cached(), playlist_get_index(playlist_get_cached(),
0, &pl_entry); 0, &pl_entry);
if (pl_entry && if ( pl_entry
!string_is_empty(pl_entry->db_name) && && !string_is_empty(pl_entry->db_name)
(db_node = RHMAP_GET_STR(xmb->playlist_db_node_map, pl_entry->db_name))) && (db_node = RHMAP_GET_STR(xmb->playlist_db_node_map, pl_entry->db_name)))
{ {
switch (type) switch (type)
{ {
@ -3458,8 +3439,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
#ifdef HAVE_CHEEVOS #ifdef HAVE_CHEEVOS
if ( if (
(type >= MENU_SETTINGS_CHEEVOS_START) && (type >= MENU_SETTINGS_CHEEVOS_START)
(type < MENU_SETTINGS_NETPLAY_ROOMS_START) && (type < MENU_SETTINGS_NETPLAY_ROOMS_START)
) )
{ {
char buffer[64]; char buffer[64];
@ -3478,8 +3459,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
#endif #endif
if ( if (
(type >= MENU_SETTINGS_INPUT_BEGIN) && (type >= MENU_SETTINGS_INPUT_BEGIN)
(type <= MENU_SETTINGS_INPUT_DESC_KBD_END) && (type <= MENU_SETTINGS_INPUT_DESC_KBD_END)
) )
{ {
unsigned input_id; unsigned input_id;
@ -3592,8 +3573,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
return xmb->textures.list[XMB_TEXTURE_INPUT_STCK_R]; return xmb->textures.list[XMB_TEXTURE_INPUT_STCK_R];
} }
if ( if (
(type >= MENU_SETTINGS_REMAPPING_PORT_BEGIN) && (type >= MENU_SETTINGS_REMAPPING_PORT_BEGIN)
(type <= MENU_SETTINGS_REMAPPING_PORT_END) && (type <= MENU_SETTINGS_REMAPPING_PORT_END)
) )
return xmb->textures.list[XMB_TEXTURE_INPUT_SETTINGS]; return xmb->textures.list[XMB_TEXTURE_INPUT_SETTINGS];
if (checked) if (checked)
@ -3604,6 +3585,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
} }
static int xmb_draw_item( static int xmb_draw_item(
struct menu_state *menu_st,
void *userdata, void *userdata,
gfx_display_t *p_disp, gfx_display_t *p_disp,
gfx_animation_t *p_anim, gfx_animation_t *p_anim,
@ -3767,13 +3749,13 @@ static int xmb_draw_item(
{ {
if ( if (
( (
(xmb->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_AVAILABLE) (xmb->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_AVAILABLE)
|| (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
&& ( (xmb->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE) && ((xmb->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE)
|| (xmb->thumbnails.right.status == GFX_THUMBNAIL_STATUS_PENDING))) || (xmb->thumbnails.right.status == GFX_THUMBNAIL_STATUS_PENDING)))
|| (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT) || (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT)
&& ( (xmb->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE) && ((xmb->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE)
|| (xmb->thumbnails.left.status == GFX_THUMBNAIL_STATUS_PENDING))) || (xmb->thumbnails.left.status == GFX_THUMBNAIL_STATUS_PENDING)))
) )
&& !xmb->is_playlist_information && !xmb->is_playlist_information
&& xmb->use_ps3_layout && xmb->use_ps3_layout
@ -3964,16 +3946,16 @@ static int xmb_draw_item(
/* Draw top/bottom line fade effect, if required */ /* Draw top/bottom line fade effect, if required */
if (use_smooth_ticker) if (use_smooth_ticker)
{ {
if (!string_is_empty(entry_sublabel_top_fade) && if ( !string_is_empty(entry_sublabel_top_fade)
ticker_top_fade_alpha > 0.0f) && ticker_top_fade_alpha > 0.0f)
xmb_draw_text(xmb_shadows_enable, xmb, settings, xmb_draw_text(xmb_shadows_enable, xmb, settings,
entry_sublabel_top_fade, entry_sublabel_top_fade,
sublabel_x, ticker_top_fade_y_offset + sublabel_y, sublabel_x, ticker_top_fade_y_offset + sublabel_y,
1, ticker_top_fade_alpha * node->label_alpha, TEXT_ALIGN_LEFT, 1, ticker_top_fade_alpha * node->label_alpha, TEXT_ALIGN_LEFT,
width, height, xmb->font2); width, height, xmb->font2);
if (!string_is_empty(entry_sublabel_bottom_fade) && if ( !string_is_empty(entry_sublabel_bottom_fade)
ticker_bottom_fade_alpha > 0.0f) && ticker_bottom_fade_alpha > 0.0f)
xmb_draw_text(xmb_shadows_enable, xmb, settings, xmb_draw_text(xmb_shadows_enable, xmb, settings,
entry_sublabel_bottom_fade, entry_sublabel_bottom_fade,
sublabel_x, ticker_bottom_fade_y_offset + sublabel_y, sublabel_x, ticker_bottom_fade_y_offset + sublabel_y,
@ -4052,11 +4034,12 @@ static int xmb_draw_item(
gfx_display_set_alpha(color, MIN(node->alpha, xmb->alpha)); gfx_display_set_alpha(color, MIN(node->alpha, xmb->alpha));
if ( if (
(!xmb->assets_missing) && (!xmb->assets_missing)
(color[3] != 0) && && (color[3] != 0)
( && (
(entry.flags & MENU_ENTRY_FLAG_CHECKED) || (entry.flags & MENU_ENTRY_FLAG_CHECKED)
!((entry_type >= MENU_SETTING_DROPDOWN_ITEM) && (entry_type <= MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM_SPECIAL)) || !((entry_type >= MENU_SETTING_DROPDOWN_ITEM)
&& (entry_type <= MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM_SPECIAL))
) )
) )
{ {
@ -4135,9 +4118,9 @@ static int xmb_draw_item(
playlist_get_index(playlist_get_cached(), playlist_get_index(playlist_get_cached(),
entry.entry_idx, &pl_entry); entry.entry_idx, &pl_entry);
if (pl_entry && if ( pl_entry
!string_is_empty(pl_entry->db_name) && && !string_is_empty(pl_entry->db_name)
(db_node = RHMAP_GET_STR(xmb->playlist_db_node_map, pl_entry->db_name))) && (db_node = RHMAP_GET_STR(xmb->playlist_db_node_map, pl_entry->db_name)))
{ {
switch (show_history_icons) switch (show_history_icons)
{ {
@ -4286,19 +4269,20 @@ static void xmb_draw_items(
for (i = first; i <= last; i++) for (i = first; i <= last; i++)
{ {
if (xmb_draw_item( if (xmb_draw_item(
userdata, menu_st,
p_disp, userdata,
p_anim, p_disp,
dispctx, p_anim,
settings, dispctx,
video_width, settings,
video_height, video_width,
xmb_shadows_enable, video_height,
mymat, xmb_shadows_enable,
xmb, core_node, mymat,
list, color, xmb, core_node,
i, current, list, color,
width, height) == -1) i, current,
width, height) == -1)
break; break;
} }
} }
@ -4388,7 +4372,8 @@ static void xmb_hide_fullscreen_thumbnails(
/* Enables (and triggers a fade in of) the fullscreen /* Enables (and triggers a fade in of) the fullscreen
* thumbnail view */ * thumbnail view */
static void xmb_show_fullscreen_thumbnails( static void xmb_show_fullscreen_thumbnails(
xmb_handle_t *xmb, size_t selection) xmb_handle_t *xmb, struct menu_state *menu_st,
size_t selection)
{ {
gfx_animation_ctx_entry_t animation_entry; gfx_animation_ctx_entry_t animation_entry;
const char *core_name = NULL; const char *core_name = NULL;
@ -4400,25 +4385,25 @@ static void xmb_show_fullscreen_thumbnails(
* current selection has at least one valid thumbnail * current selection has at least one valid thumbnail
* and all thumbnails for current selection are already * and all thumbnails for current selection are already
* loaded/available */ * loaded/available */
gfx_thumbnail_get_core_name(xmb->thumbnail_path_data, &core_name); gfx_thumbnail_get_core_name(menu_st->thumbnail_path_data, &core_name);
if ( string_is_equal(core_name, "imageviewer") || if ( string_is_equal(core_name, "imageviewer")
!string_is_empty(xmb->savestate_thumbnail_file_path)) || !string_is_empty(xmb->savestate_thumbnail_file_path))
{ {
/* imageviewer content requires special treatment, /* imageviewer content requires special treatment,
* since only one thumbnail can ever be loaded * since only one thumbnail can ever be loaded
* at a time */ * at a time */
if (gfx_thumbnail_is_enabled( if (gfx_thumbnail_is_enabled(
xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)) menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT))
{ {
if ( xmb->thumbnails.right.status if ( xmb->thumbnails.right.status
!= GFX_THUMBNAIL_STATUS_AVAILABLE && != GFX_THUMBNAIL_STATUS_AVAILABLE
xmb->thumbnails.savestate.status && xmb->thumbnails.savestate.status
!= GFX_THUMBNAIL_STATUS_AVAILABLE) != GFX_THUMBNAIL_STATUS_AVAILABLE)
return; return;
} }
else if ( else if (
gfx_thumbnail_is_enabled( gfx_thumbnail_is_enabled(
xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{ {
if ( if (
xmb->thumbnails.left.status xmb->thumbnails.left.status
@ -4431,21 +4416,21 @@ static void xmb_show_fullscreen_thumbnails(
else else
{ {
bool left_thumbnail_enabled = gfx_thumbnail_is_enabled( bool left_thumbnail_enabled = gfx_thumbnail_is_enabled(
xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT); menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT);
if (( xmb->thumbnails.right.status if (( xmb->thumbnails.right.status
== GFX_THUMBNAIL_STATUS_AVAILABLE) && == GFX_THUMBNAIL_STATUS_AVAILABLE)
(left_thumbnail_enabled && && (left_thumbnail_enabled
(( xmb->thumbnails.left.status && ((xmb->thumbnails.left.status
!= GFX_THUMBNAIL_STATUS_MISSING) && != GFX_THUMBNAIL_STATUS_MISSING)
( xmb->thumbnails.left.status && (xmb->thumbnails.left.status
!= GFX_THUMBNAIL_STATUS_AVAILABLE)))) != GFX_THUMBNAIL_STATUS_AVAILABLE))))
return; return;
if (( xmb->thumbnails.right.status if (( xmb->thumbnails.right.status
== GFX_THUMBNAIL_STATUS_MISSING) && == GFX_THUMBNAIL_STATUS_MISSING)
(!left_thumbnail_enabled || && (!left_thumbnail_enabled
( xmb->thumbnails.left.status || ( xmb->thumbnails.left.status
!= GFX_THUMBNAIL_STATUS_AVAILABLE))) != GFX_THUMBNAIL_STATUS_AVAILABLE)))
return; return;
} }
@ -4482,18 +4467,19 @@ static void xmb_show_fullscreen_thumbnails(
xmb->show_fullscreen_thumbnails = true; xmb->show_fullscreen_thumbnails = true;
} }
static bool INLINE xmb_fullscreen_thumbnails_available(xmb_handle_t *xmb) static bool INLINE xmb_fullscreen_thumbnails_available(xmb_handle_t *xmb,
struct menu_state *menu_st)
{ {
bool ret = bool ret =
xmb->fullscreen_thumbnails_available xmb->fullscreen_thumbnails_available
&& (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || && (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
&& (xmb->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE || && (xmb->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE
xmb->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE); || xmb->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE);
if (xmb->is_state_slot && if ( xmb->is_state_slot
(xmb->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_MISSING || && (xmb->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_MISSING
xmb->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_UNKNOWN)) || xmb->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_UNKNOWN))
ret = false; ret = false;
return ret; return ret;
@ -4585,11 +4571,11 @@ static enum menu_action xmb_parse_menu_entry_action(
/* If this is a menu with thumbnails, attempt /* If this is a menu with thumbnails, attempt
* to show fullscreen thumbnail view */ * to show fullscreen thumbnail view */
if (xmb_fullscreen_thumbnails_available(xmb) && if ( xmb_fullscreen_thumbnails_available(xmb, menu_st)
!xmb->show_fullscreen_thumbnails) && !xmb->show_fullscreen_thumbnails)
{ {
xmb_hide_fullscreen_thumbnails(xmb, false); xmb_hide_fullscreen_thumbnails(xmb, false);
xmb_show_fullscreen_thumbnails(xmb, menu_st->selection_ptr); xmb_show_fullscreen_thumbnails(xmb, menu_st, menu_st->selection_ptr);
xmb->want_fullscreen_thumbnails = true; xmb->want_fullscreen_thumbnails = true;
xmb_set_thumbnail_delay(false); xmb_set_thumbnail_delay(false);
new_action = MENU_ACTION_NOOP; new_action = MENU_ACTION_NOOP;
@ -4608,7 +4594,7 @@ static enum menu_action xmb_parse_menu_entry_action(
(xmb->is_quick_menu && !string_is_empty(xmb->savestate_thumbnail_file_path)))) (xmb->is_quick_menu && !string_is_empty(xmb->savestate_thumbnail_file_path))))
{ {
xmb_hide_fullscreen_thumbnails(xmb, false); xmb_hide_fullscreen_thumbnails(xmb, false);
xmb_show_fullscreen_thumbnails(xmb, menu_st->selection_ptr); xmb_show_fullscreen_thumbnails(xmb, menu_st, menu_st->selection_ptr);
xmb->want_fullscreen_thumbnails = true; xmb->want_fullscreen_thumbnails = true;
new_action = MENU_ACTION_NOOP; new_action = MENU_ACTION_NOOP;
} }
@ -4633,13 +4619,13 @@ static enum menu_action xmb_parse_menu_entry_action(
to prevent accidental imageviewer core launch */ to prevent accidental imageviewer core launch */
if ( xmb->libretro_running if ( xmb->libretro_running
&& xmb->is_file_list && xmb->is_file_list
&& xmb_fullscreen_thumbnails_available(xmb) && xmb_fullscreen_thumbnails_available(xmb, menu_st)
&& xmb_get_system_tab(xmb, (unsigned)xmb->categories_selection_ptr) == XMB_SYSTEM_TAB_MAIN) && xmb_get_system_tab(xmb, (unsigned)xmb->categories_selection_ptr) == XMB_SYSTEM_TAB_MAIN)
{ {
if (xmb->show_fullscreen_thumbnails) if (xmb->show_fullscreen_thumbnails)
xmb_hide_fullscreen_thumbnails(xmb, true); xmb_hide_fullscreen_thumbnails(xmb, true);
else else
xmb_show_fullscreen_thumbnails(xmb, menu_st->selection_ptr); xmb_show_fullscreen_thumbnails(xmb, menu_st, menu_st->selection_ptr);
return MENU_ACTION_NOOP; return MENU_ACTION_NOOP;
} }
@ -4944,13 +4930,13 @@ static void xmb_render(void *data,
/* Explore list needs cached selection index */ /* Explore list needs cached selection index */
if (xmb->is_explore_list) if (xmb->is_explore_list)
selection = gfx_thumbnail_get_playlist_index(xmb->thumbnail_path_data); selection = gfx_thumbnail_get_playlist_index(menu_st->thumbnail_path_data);
switch (xmb->thumbnails.pending) switch (xmb->thumbnails.pending)
{ {
case XMB_PENDING_THUMBNAIL_BOTH: case XMB_PENDING_THUMBNAIL_BOTH:
gfx_thumbnail_request_streams( gfx_thumbnail_request_streams(
xmb->thumbnail_path_data, menu_st->thumbnail_path_data,
p_anim, p_anim,
playlist, selection, playlist, selection,
&xmb->thumbnails.right, &xmb->thumbnails.right,
@ -4958,14 +4944,14 @@ static void xmb_render(void *data,
gfx_thumbnail_upscale_threshold, gfx_thumbnail_upscale_threshold,
network_on_demand_thumbnails); network_on_demand_thumbnails);
if (( xmb->thumbnails.right.status if (( xmb->thumbnails.right.status
!= GFX_THUMBNAIL_STATUS_UNKNOWN) && != GFX_THUMBNAIL_STATUS_UNKNOWN)
( xmb->thumbnails.left.status && ( xmb->thumbnails.left.status
!= GFX_THUMBNAIL_STATUS_UNKNOWN)) != GFX_THUMBNAIL_STATUS_UNKNOWN))
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_NONE; xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_NONE;
break; break;
case XMB_PENDING_THUMBNAIL_RIGHT: case XMB_PENDING_THUMBNAIL_RIGHT:
gfx_thumbnail_request_stream( gfx_thumbnail_request_stream(
xmb->thumbnail_path_data, menu_st->thumbnail_path_data,
p_anim, p_anim,
GFX_THUMBNAIL_RIGHT, GFX_THUMBNAIL_RIGHT,
playlist, selection, playlist, selection,
@ -4978,7 +4964,7 @@ static void xmb_render(void *data,
break; break;
case XMB_PENDING_THUMBNAIL_LEFT: case XMB_PENDING_THUMBNAIL_LEFT:
gfx_thumbnail_request_stream( gfx_thumbnail_request_stream(
xmb->thumbnail_path_data, menu_st->thumbnail_path_data,
p_anim, p_anim,
GFX_THUMBNAIL_LEFT, GFX_THUMBNAIL_LEFT,
playlist, selection, playlist, selection,
@ -5266,8 +5252,8 @@ static void xmb_draw_fullscreen_thumbnails(
* RetroPad A or keyboard 'return' to enter the * RetroPad A or keyboard 'return' to enter the
* quick menu while fullscreen thumbnails are * quick menu while fullscreen thumbnails are
* being displayed */ * being displayed */
if ((selection != xmb->fullscreen_thumbnail_selection) && if ( (selection != xmb->fullscreen_thumbnail_selection)
(!xmb->is_quick_menu || xmb->show_fullscreen_thumbnails)) && (!xmb->is_quick_menu || xmb->show_fullscreen_thumbnails))
goto error; goto error;
/* Get thumbnail pointers */ /* Get thumbnail pointers */
@ -5815,11 +5801,11 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
&& xmb->show_fullscreen_thumbnails && xmb->show_fullscreen_thumbnails
&& xmb->fullscreen_thumbnails_available && xmb->fullscreen_thumbnails_available
&& (menu_st->selection_ptr != xmb->fullscreen_thumbnail_selection)) && (menu_st->selection_ptr != xmb->fullscreen_thumbnail_selection))
xmb_show_fullscreen_thumbnails(xmb, menu_st->selection_ptr); xmb_show_fullscreen_thumbnails(xmb, menu_st, menu_st->selection_ptr);
else if (!xmb->show_fullscreen_thumbnails else if (!xmb->show_fullscreen_thumbnails
&& xmb->fullscreen_thumbnails_available && xmb->fullscreen_thumbnails_available
&& xmb->want_fullscreen_thumbnails) && xmb->want_fullscreen_thumbnails)
xmb_show_fullscreen_thumbnails(xmb, menu_st->selection_ptr); xmb_show_fullscreen_thumbnails(xmb, menu_st, menu_st->selection_ptr);
/* Note: This is incredibly ugly, but there are /* Note: This is incredibly ugly, but there are
* so many combinations here that we would go insane * so many combinations here that we would go insane
@ -6381,8 +6367,8 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
/* Cursor image */ /* Cursor image */
if (xmb->show_mouse) if (xmb->show_mouse)
{ {
bool cursor_visible = (video_fullscreen || mouse_grabbed) && bool cursor_visible = (video_fullscreen || mouse_grabbed)
menu_mouse_enable; && menu_mouse_enable;
gfx_display_set_alpha(xmb_coord_white, MIN(xmb->alpha, 1.00f)); gfx_display_set_alpha(xmb_coord_white, MIN(xmb->alpha, 1.00f));
if (cursor_visible) if (cursor_visible)
@ -6758,10 +6744,6 @@ static void *xmb_init(void **userdata, bool video_is_threaded)
if (!(xmb->screensaver = menu_screensaver_init())) if (!(xmb->screensaver = menu_screensaver_init()))
goto error; goto error;
/* Thumbnail initialisation */
if (!(xmb->thumbnail_path_data = gfx_thumbnail_path_init()))
goto error;
xmb->savestate_thumbnail_file_path[0] = '\0'; xmb->savestate_thumbnail_file_path[0] = '\0';
xmb->prev_savestate_thumbnail_file_path[0] = '\0'; xmb->prev_savestate_thumbnail_file_path[0] = '\0';
@ -6822,9 +6804,6 @@ static void xmb_free(void *data)
if (!string_is_empty(xmb->bg_file_path)) if (!string_is_empty(xmb->bg_file_path))
free(xmb->bg_file_path); free(xmb->bg_file_path);
if (xmb->thumbnail_path_data)
free(xmb->thumbnail_path_data);
menu_screensaver_free(xmb->screensaver); menu_screensaver_free(xmb->screensaver);
} }
@ -7311,6 +7290,7 @@ static void xmb_context_reset_internal(xmb_handle_t *xmb,
char fontpath[PATH_MAX_LENGTH]; char fontpath[PATH_MAX_LENGTH];
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
gfx_display_t *p_disp = disp_get_ptr(); gfx_display_t *p_disp = disp_get_ptr();
struct menu_state *menu_st = menu_state_get_ptr();
const char *wideglyph_str = msg_hash_get_wideglyph_str(); const char *wideglyph_str = msg_hash_get_wideglyph_str();
unsigned menu_xmb_theme = settings->uints.menu_xmb_theme; unsigned menu_xmb_theme = settings->uints.menu_xmb_theme;
iconpath[0] = bg_file_path[0] = '\0'; iconpath[0] = bg_file_path[0] = '\0';
@ -7392,15 +7372,15 @@ static void xmb_context_reset_internal(xmb_handle_t *xmb,
* > Thumbnails are enabled * > Thumbnails are enabled
* > This is a playlist, a database list, a file list * > This is a playlist, a database list, a file list
* or the quick menu */ * or the quick menu */
if (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) || if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) || gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{ {
unsigned depth = (unsigned)xmb_list_get_size(xmb, MENU_LIST_PLAIN); unsigned depth = (unsigned)xmb_list_get_size(xmb, MENU_LIST_PLAIN);
unsigned xmb_system_tab = xmb_get_system_tab(xmb, (unsigned)xmb->categories_selection_ptr); unsigned xmb_system_tab = xmb_get_system_tab(xmb, (unsigned)xmb->categories_selection_ptr);
if (((((xmb_system_tab > XMB_SYSTEM_TAB_SETTINGS && depth == 1) || if (((( (xmb_system_tab > XMB_SYSTEM_TAB_SETTINGS && depth == 1)
(xmb_system_tab < XMB_SYSTEM_TAB_SETTINGS && depth == 4)) && || (xmb_system_tab < XMB_SYSTEM_TAB_SETTINGS && depth == 4))
xmb->is_playlist)) && xmb->is_playlist))
|| xmb->is_db_manager_list || xmb->is_db_manager_list
|| xmb->is_explore_list || xmb->is_explore_list
|| xmb->is_file_list || xmb->is_file_list
@ -8403,8 +8383,6 @@ menu_ctx_driver_t menu_ctx_xmb = {
NULL, NULL,
xmb_update_thumbnail_image, xmb_update_thumbnail_image,
xmb_refresh_thumbnail_image, xmb_refresh_thumbnail_image,
xmb_set_thumbnail_system,
xmb_get_thumbnail_system,
xmb_set_thumbnail_content, xmb_set_thumbnail_content,
gfx_display_osk_ptr_at_pos, gfx_display_osk_ptr_at_pos,
xmb_update_savestate_thumbnail_path, xmb_update_savestate_thumbnail_path,

View File

@ -2181,7 +2181,6 @@ static int menu_displaylist_parse_playlist(
strlcpy(label_spacer, PL_LABEL_SPACER_DEFAULT, sizeof(label_spacer)); strlcpy(label_spacer, PL_LABEL_SPACER_DEFAULT, sizeof(label_spacer));
} }
if (menu_st->driver_ctx && menu_st->driver_ctx->set_thumbnail_system)
{ {
/* Inform menu driver of current system name /* Inform menu driver of current system name
* > Note: history, favorites and images_history * > Note: history, favorites and images_history
@ -2201,7 +2200,7 @@ static int menu_displaylist_parse_playlist(
{ {
char system_name[15]; char system_name[15];
strlcpy(system_name, path_playlist, sizeof(system_name)); strlcpy(system_name, path_playlist, sizeof(system_name));
menu_st->driver_ctx->set_thumbnail_system( menu_driver_set_thumbnail_system(
menu_st->userdata, system_name, sizeof(system_name)); menu_st->userdata, system_name, sizeof(system_name));
} }
else if (!string_is_empty(info_path)) else if (!string_is_empty(info_path))
@ -2209,7 +2208,7 @@ static int menu_displaylist_parse_playlist(
char lpl_basename[256]; char lpl_basename[256];
fill_pathname_base(lpl_basename, info_path, sizeof(lpl_basename)); fill_pathname_base(lpl_basename, info_path, sizeof(lpl_basename));
path_remove_extension(lpl_basename); path_remove_extension(lpl_basename);
menu_st->driver_ctx->set_thumbnail_system( menu_driver_set_thumbnail_system(
menu_st->userdata, lpl_basename, sizeof(lpl_basename)); menu_st->userdata, lpl_basename, sizeof(lpl_basename));
} }
} }
@ -2462,10 +2461,8 @@ static int menu_displaylist_parse_database_entry(menu_handle_t *menu,
sizeof(path_base)); sizeof(path_base));
path_remove_extension(path_base); path_remove_extension(path_base);
if ( menu_st->driver_ctx menu_driver_set_thumbnail_system(
&& menu_st->driver_ctx->set_thumbnail_system) menu_st->userdata, path_base, sizeof(path_base));
menu_st->driver_ctx->set_thumbnail_system(
menu_st->userdata, path_base, sizeof(path_base));
strlcat(path_base, ".lpl", sizeof(path_base)); strlcat(path_base, ".lpl", sizeof(path_base));
@ -3329,10 +3326,8 @@ static int menu_displaylist_parse_horizontal_list(
* is loaded/cached */ * is loaded/cached */
fill_pathname_base(lpl_basename, item->path, sizeof(lpl_basename)); fill_pathname_base(lpl_basename, item->path, sizeof(lpl_basename));
path_remove_extension(lpl_basename); path_remove_extension(lpl_basename);
if ( menu_st->driver_ctx menu_driver_set_thumbnail_system(
&& menu_st->driver_ctx->set_thumbnail_system) menu_st->userdata, lpl_basename, sizeof(lpl_basename));
menu_st->driver_ctx->set_thumbnail_system(
menu_st->userdata, lpl_basename, sizeof(lpl_basename));
} }
if ((playlist = playlist_get_cached())) if ((playlist = playlist_get_cached()))
@ -3798,15 +3793,10 @@ static int menu_displaylist_parse_horizontal_content_actions(
break; break;
case PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV: case PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV:
{ {
size_t sys_len;
char sys_thumb[64]; char sys_thumb[64];
struct menu_state *menu_st = menu_state_get_ptr(); struct menu_state *menu_st = menu_state_get_ptr();
sys_thumb[0] = '\0'; size_t sys_len = menu_driver_get_thumbnail_system(
menu_st->userdata, sys_thumb, sizeof(sys_thumb));
if ( menu_st->driver_ctx
&& menu_st->driver_ctx->get_thumbnail_system)
sys_len = menu_st->driver_ctx->get_thumbnail_system(
menu_st->userdata, sys_thumb, sizeof(sys_thumb));
if (!string_is_empty(sys_thumb)) if (!string_is_empty(sys_thumb))
remove_entry_enabled = remove_entry_enabled =
@ -3876,21 +3866,17 @@ static int menu_displaylist_parse_horizontal_content_actions(
if (download_enabled) if (download_enabled)
{ {
size_t sys_len;
char sys_thumb[64]; char sys_thumb[64];
struct menu_state *menu_st = menu_state_get_ptr(); struct menu_state *menu_st = menu_state_get_ptr();
sys_thumb[0] = '\0';
/* Only show 'Download Thumbnails' on supported playlists */ /* Only show 'Download Thumbnails' on supported playlists */
download_enabled = false; size_t sys_len = menu_driver_get_thumbnail_system(
if ( menu_st->driver_ctx menu_st->userdata, sys_thumb, sizeof(sys_thumb));
&& menu_st->driver_ctx->get_thumbnail_system)
sys_len = menu_st->driver_ctx->get_thumbnail_system(
menu_st->userdata, sys_thumb, sizeof(sys_thumb));
if (!string_is_empty(sys_thumb)) if (!string_is_empty(sys_thumb))
download_enabled = !string_ends_with_size( download_enabled = !string_ends_with_size(
sys_thumb, "_history", sys_len, STRLEN_CONST("_history")); sys_thumb, "_history", sys_len, STRLEN_CONST("_history"));
else
download_enabled = false;
} }
if (settings->bools.network_on_demand_thumbnails) if (settings->bools.network_on_demand_thumbnails)

View File

@ -289,8 +289,6 @@ static menu_ctx_driver_t menu_ctx_null = {
NULL, /* update_thumbnail_path */ NULL, /* update_thumbnail_path */
NULL, /* update_thumbnail_image */ NULL, /* update_thumbnail_image */
NULL, /* refresh_thumbnail_image */ NULL, /* refresh_thumbnail_image */
NULL, /* set_thumbnail_system */
NULL, /* get_thumbnail_system */
NULL, /* set_thumbnail_content */ NULL, /* set_thumbnail_content */
NULL, /* osk_ptr_at_pos */ NULL, /* osk_ptr_at_pos */
NULL, /* update_savestate_thumbnail_path */ NULL, /* update_savestate_thumbnail_path */
@ -3700,6 +3698,10 @@ static bool rarch_menu_init(
bool config_save_on_exit = settings->bools.config_save_on_exit; bool config_save_on_exit = settings->bools.config_save_on_exit;
#endif #endif
/* thumbnail initialization */
if (!(menu_st->thumbnail_path_data = gfx_thumbnail_path_init()))
return false;
/* Ensure that menu pointer input is correctly /* Ensure that menu pointer input is correctly
* initialised */ * initialised */
memset(menu_input, 0, sizeof(menu_input_t)); memset(menu_input, 0, sizeof(menu_input_t));
@ -6507,7 +6509,11 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data)
menu_entries_settings_deinit(menu_st); menu_entries_settings_deinit(menu_st);
if (menu_st->entries.list) if (menu_st->entries.list)
menu_list_free(menu_st->driver_ctx, menu_st->entries.list); menu_list_free(menu_st->driver_ctx, menu_st->entries.list);
menu_st->entries.list = NULL; menu_st->entries.list = NULL;
if (menu_st->thumbnail_path_data)
free(menu_st->thumbnail_path_data);
menu_st->thumbnail_path_data = NULL;
if (menu_st->driver_data->core_buf) if (menu_st->driver_data->core_buf)
free(menu_st->driver_data->core_buf); free(menu_st->driver_data->core_buf);
@ -7905,3 +7911,19 @@ bool menu_is_nonrunning_quick_menu(void)
return string_is_equal(entry.label, "collection"); return string_is_equal(entry.label, "collection");
} }
void menu_driver_set_thumbnail_system(void *data, char *s, size_t len)
{
struct menu_state *menu_st = &menu_driver_state;
gfx_thumbnail_set_system(
menu_st->thumbnail_path_data, s, playlist_get_cached());
}
size_t menu_driver_get_thumbnail_system(void *data, char *s, size_t len)
{
const char *system = NULL;
struct menu_state *menu_st = &menu_driver_state;
if (!gfx_thumbnail_get_system(menu_st->thumbnail_path_data, &system))
return 0;
return strlcpy(s, system, len);
}

View File

@ -434,8 +434,6 @@ typedef struct menu_ctx_driver
void (*update_thumbnail_path)(void *data, unsigned i, char pos); void (*update_thumbnail_path)(void *data, unsigned i, char pos);
void (*update_thumbnail_image)(void *data); void (*update_thumbnail_image)(void *data);
void (*refresh_thumbnail_image)(void *data, unsigned i); void (*refresh_thumbnail_image)(void *data, unsigned i);
void (*set_thumbnail_system)(void *data, char* s, size_t len);
size_t (*get_thumbnail_system)(void *data, char* s, size_t len);
void (*set_thumbnail_content)(void *data, const char *s); void (*set_thumbnail_content)(void *data, const char *s);
int (*osk_ptr_at_pos)(void *data, int x, int y, unsigned width, unsigned height); int (*osk_ptr_at_pos)(void *data, int x, int y, unsigned width, unsigned height);
void (*update_savestate_thumbnail_path)(void *data, unsigned i); void (*update_savestate_thumbnail_path)(void *data, unsigned i);
@ -526,6 +524,7 @@ struct menu_state
struct menu_bind_state input_binds; /* uint64_t alignment */ struct menu_bind_state input_binds; /* uint64_t alignment */
gfx_thumbnail_path_data_t *thumbnail_path_data;
menu_handle_t *driver_data; menu_handle_t *driver_data;
void *userdata; void *userdata;
const menu_ctx_driver_t *driver_ctx; const menu_ctx_driver_t *driver_ctx;
@ -792,6 +791,10 @@ bool menu_is_nonrunning_quick_menu(void);
bool menu_input_key_bind_set_mode( bool menu_input_key_bind_set_mode(
enum menu_input_binds_ctl_state state, void *data); enum menu_input_binds_ctl_state state, void *data);
void menu_driver_set_thumbnail_system(void *data, char *s, size_t len);
size_t menu_driver_get_thumbnail_system(void *data, char *s, size_t len);
extern const menu_ctx_driver_t *menu_ctx_drivers[]; extern const menu_ctx_driver_t *menu_ctx_drivers[];
extern menu_ctx_driver_t menu_ctx_ozone; extern menu_ctx_driver_t menu_ctx_ozone;