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

View File

@ -594,9 +594,6 @@ typedef struct materialui_handle
const char *src, size_t src_len,
int line_width, int wideglyph_width, unsigned max_lines);
/* Thumbnail helpers */
gfx_thumbnail_path_data_t *thumbnail_path_data;
struct
{
materialui_playlist_icons_t playlist; /* ptr alignment */
@ -3224,6 +3221,7 @@ static INLINE void materialui_kill_scroll_animation(
* is detected */
static bool materialui_render_process_entry_default(
materialui_handle_t* mui,
struct menu_state *menu_st,
materialui_node_t *node,
size_t entry_idx, size_t selection, size_t playlist_idx,
bool first_entry_found, bool last_entry_found,
@ -3243,6 +3241,7 @@ static bool materialui_render_process_entry_default(
* Always returns true */
static bool materialui_render_process_entry_playlist_thumb_list(
materialui_handle_t* mui,
struct menu_state *menu_st,
materialui_node_t *node,
size_t entry_idx, size_t selection, size_t playlist_idx,
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 */
if (mui->flags & MUI_FLAG_SECONDARY_THUMBNAIL_ENABLED)
gfx_thumbnail_process_streams(
mui->thumbnail_path_data,
menu_st->thumbnail_path_data,
p_anim,
mui->playlist, playlist_idx,
&node->thumbnails.primary,
@ -3266,7 +3265,7 @@ static bool materialui_render_process_entry_playlist_thumb_list(
network_on_demand_thumbnails);
else
gfx_thumbnail_process_stream(
mui->thumbnail_path_data,
menu_st->thumbnail_path_data,
p_anim,
GFX_THUMBNAIL_RIGHT,
mui->playlist, playlist_idx,
@ -3285,6 +3284,7 @@ static bool materialui_render_process_entry_playlist_thumb_list(
* Always returns true */
static bool materialui_render_process_entry_playlist_dual_icon(
materialui_handle_t* mui,
struct menu_state *menu_st,
materialui_node_t *node,
size_t entry_idx, size_t selection, size_t playlist_idx,
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
* enabled in dual icon mode */
gfx_thumbnail_process_streams(
mui->thumbnail_path_data,
menu_st->thumbnail_path_data,
p_anim,
mui->playlist, playlist_idx,
&node->thumbnails.primary,
@ -3318,6 +3318,7 @@ static bool materialui_render_process_entry_playlist_dual_icon(
* Always returns true */
static bool materialui_render_process_entry_playlist_desktop(
materialui_handle_t* mui,
struct menu_state *menu_st,
materialui_node_t *node,
size_t entry_idx, size_t selection, size_t playlist_idx,
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
* enabled */
gfx_thumbnail_process_streams(
mui->thumbnail_path_data,
menu_st->thumbnail_path_data,
p_anim,
mui->playlist, playlist_idx,
&node->thumbnails.primary,
@ -3518,6 +3519,7 @@ static bool materialui_render_process_entry_playlist_desktop(
static bool (*materialui_render_process_entry)(
materialui_handle_t* mui,
struct menu_state *menu_st,
materialui_node_t *node,
size_t entry_idx, size_t selection, size_t playlist_idx,
bool first_entry_found, bool last_entry_found,
@ -3537,6 +3539,7 @@ static void materialui_init_font(
static void materialui_layout(
materialui_handle_t *mui,
struct menu_state *menu_st,
gfx_display_t *p_disp,
settings_t *settings,
bool video_is_threaded);
@ -3627,7 +3630,7 @@ static void materialui_render(void *data,
/* Note: We don't need a full context reset here
* > 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());
video_driver_monitor_reset();
}
@ -3824,7 +3827,7 @@ static void materialui_render(void *data,
/* Perform any additional processing required
* for the current entry */
if (!materialui_render_process_entry(
mui, node, i, selection,
mui, menu_st, node, i, selection,
list->list[i].entry_idx,
first_entry_found, last_entry_found,
thumbnail_upscale_threshold,
@ -7288,6 +7291,7 @@ static void materialui_frame(void *data, video_frame_info_t *video_info)
* user has enabled playlist thumbnails */
static void materialui_set_list_view_type(
materialui_handle_t *mui,
struct menu_state *menu_st,
unsigned thumbnail_view_portrait,
unsigned thumbnail_view_landscape)
{
@ -7306,7 +7310,7 @@ static void materialui_set_list_view_type(
mui->list_view_type = MUI_LIST_VIEW_PLAYLIST;
/* 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))
{
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
* enabled (due to per-playlist override) */
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,
* do nothing */
if (gfx_thumbnail_is_enabled(
mui->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
return true;
/* Secondary thumbnail is disabled
@ -7733,14 +7739,16 @@ static bool materialui_force_enable_secondary_thumbnail(
/* Final check - this will return true unless a
* per-playlist override is in place */
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
* based on current list view mode, thumbnail dimensions
* and screen size */
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)
{
@ -7764,7 +7772,7 @@ static void materialui_set_secondary_thumbnail_enable(
/* Attempt to force enable secondary thumbnails if
* 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;
/* Secondary thumbnails are supported/enabled
@ -7807,7 +7815,7 @@ static void materialui_set_secondary_thumbnail_enable(
* want 'missing thumbnail' images if
* thumbnails are actively disabled via
* 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;
break;
case MUI_LIST_VIEW_PLAYLIST:
@ -7825,15 +7833,17 @@ static void materialui_set_secondary_thumbnail_enable(
* and calculates appropriate thumbnail dimensions/settings.
* Must be called when updating menu layout and
* 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_landscape);
materialui_set_landscape_optimisations_enable(mui);
materialui_status_bar_init(mui, settings);
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:
* > Set appropriate thumbnail stream delay */
@ -7940,6 +7950,7 @@ static void materialui_init_font(
/* Compute the positions of the widgets */
static void materialui_layout(
materialui_handle_t *mui,
struct menu_state *menu_st,
gfx_display_t *p_disp,
settings_t *settings,
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_width = 0;
materialui_update_list_view(mui, settings);
materialui_update_list_view(mui, menu_st, settings);
mui->flags |= MUI_FLAG_NEED_COMPUTE;
}
@ -8114,10 +8125,6 @@ static void *materialui_init(void **userdata, bool video_is_threaded)
*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
* UI elements */
video_driver_get_size(&width, &height);
@ -8241,9 +8248,6 @@ static void materialui_free(void *data)
font_driver_bind_block(NULL, NULL);
if (mui->thumbnail_path_data)
free(mui->thumbnail_path_data);
materialui_free_playlist_icon_list(mui);
p_anim->updatetime_cb = NULL;
@ -8733,7 +8737,7 @@ static void materialui_populate_entries(
materialui_populate_nav_bar(mui, menu_st, label, settings);
/* Update list view/thumbnail parameters */
materialui_update_list_view(mui, settings);
materialui_update_list_view(mui, menu_st, settings);
/* Reset touch feedback parameters
* (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();
const char *path_menu_wallpaper = settings ? settings->paths.path_menu_wallpaper : NULL;
gfx_display_t *p_disp = disp_get_ptr();
struct menu_state *menu_st = menu_state_get_ptr();
if (!mui)
return;
materialui_layout(mui, p_disp, settings, is_threaded);
materialui_layout(mui, menu_st, p_disp, settings, is_threaded);
materialui_context_bg_destroy(mui);
gfx_display_deinit_white_texture();
gfx_display_init_white_texture();
@ -9047,7 +9052,9 @@ static int materialui_switch_tabs(
/* If viewing a playlist with thumbnails enabled,
* 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 &
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 */
materialui_update_list_view(mui, settings);
materialui_update_list_view(mui, menu_st, settings);
/* If the new list view does not have thumbnails
* 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();
if (settings)
materialui_switch_list_view(mui, settings);
materialui_switch_list_view(mui, menu_st, settings);
new_action = MENU_ACTION_NOOP;
}
else if (!materialui_entry_onscreen(mui, selection))
@ -10079,7 +10086,7 @@ static int materialui_pointer_up(void *userdata,
{
settings_t *settings = config_get_ptr();
if (settings)
materialui_switch_list_view(mui, settings);
materialui_switch_list_view(mui, menu_st, settings);
return 0;
}
/* 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)
{
materialui_handle_t *mui = (materialui_handle_t*)userdata;
@ -11150,8 +11138,6 @@ menu_ctx_driver_t menu_ctx_mui = {
NULL,
NULL,
materialui_refresh_thumbnail_image,
materialui_set_thumbnail_system,
materialui_get_thumbnail_system,
NULL,
gfx_display_osk_ptr_at_pos,
NULL, /* update_savestate_thumbnail_path */

View File

@ -451,7 +451,6 @@ struct ozone_handle
menu_input_pointer_t pointer; /* retro_time_t alignment */
ozone_theme_t *theme;
gfx_thumbnail_path_data_t *thumbnail_path_data;
char *pending_message;
file_list_t selection_buf_old; /* 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'
* content even when not using a playlist, otherwise
* 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")
|| string_is_equal(core_name, "musicplayer")
@ -6037,6 +6036,7 @@ border_iterate:
static void ozone_draw_thumbnail_bar(
ozone_handle_t *ozone,
struct menu_state *menu_st,
gfx_display_t *p_disp,
gfx_animation_t *p_anim,
settings_t *settings,
@ -6120,10 +6120,10 @@ static void ozone_draw_thumbnail_bar(
/* Thumbnails */
show_right_thumbnail =
(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 =
(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));
/* 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,
* 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;
}
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;
if ((ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE) &&
(left_thumbnail_enabled &&
((ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_MISSING) &&
(ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_AVAILABLE))))
if ( (ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE)
&& (left_thumbnail_enabled
&& ((ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_MISSING)
&& (ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_AVAILABLE))))
return;
if ((ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_MISSING) &&
(!(ozone->flags & OZONE_FLAG_IS_STATE_SLOT)) &&
(!left_thumbnail_enabled || (ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_AVAILABLE)))
if ( (ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_MISSING)
&& (!(ozone->flags & OZONE_FLAG_IS_STATE_SLOT))
&& (!left_thumbnail_enabled || (ozone->thumbnails.left.status != GFX_THUMBNAIL_STATUS_AVAILABLE)))
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 list_size = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
file_list_t *list = MENU_LIST_GET_SELECTION(menu_list, 0);
playlist_t *pl = NULL;
/* Get playlist index corresponding
* to the selected entry */
if (list
if ( list
&& (selection < list_size)
&& (list->list[selection].type == FILE_TYPE_RPL_ENTRY))
{
size_t playlist_index = list->list[selection].entry_idx;
gfx_thumbnail_set_content_playlist(ozone->thumbnail_path_data,
playlist_get_cached(), playlist_index);
selection = list->list[selection].entry_idx;
pl = playlist_get_cached();
}
else
gfx_thumbnail_set_content_playlist(ozone->thumbnail_path_data,
NULL, selection);
gfx_thumbnail_set_content_playlist(menu_st->thumbnail_path_data,
pl, selection);
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);
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)
@ -7532,7 +7532,7 @@ static void ozone_set_thumbnail_content(void *data, const char *s)
entry.flags |= MENU_ENTRY_FLAG_PATH_ENABLED;
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;
else
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);
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))
@ -7571,7 +7571,7 @@ static void ozone_set_thumbnail_content(void *data, const char *s)
* the sublevels of database manager lists.
* Showing thumbnails on database entries is a
* 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);
@ -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)));
}
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 =
( (ozone->flags & OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE))
&& (!(ozone->flags & OZONE_FLAG_CURSOR_IN_SIDEBAR))
&& (ozone->show_thumbnail_bar)
&& (gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) ||
gfx_thumbnail_is_enabled(ozone->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_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_prev <= GFX_THUMBNAIL_STATUS_AVAILABLE)));
&& (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| 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_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_prev <= GFX_THUMBNAIL_STATUS_AVAILABLE)));
if (!string_is_empty(ozone->savestate_thumbnail_file_path) &&
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
* is not in the sidebar, attempt to show
* 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->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;
if (!(ozone->thumbnail_path_data = gfx_thumbnail_path_init()))
goto error;
if (!(ozone->screensaver = menu_screensaver_init()))
goto error;
@ -8833,9 +8831,6 @@ static void ozone_free(void *data)
if (!string_is_empty(ozone->pending_message))
free(ozone->pending_message);
if (ozone->thumbnail_path_data)
free(ozone->thumbnail_path_data);
menu_screensaver_free(ozone->screensaver);
}
@ -8848,6 +8843,7 @@ static void ozone_update_thumbnail_image(void *data)
{
bool show_thumbnail_bar, want_thumbnail_bar;
ozone_handle_t *ozone = (ozone_handle_t*)data;
struct menu_state *menu_st = menu_state_get_ptr();
if (!ozone)
return;
@ -8865,13 +8861,13 @@ static void ozone_update_thumbnail_image(void *data)
}
/* 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;
/* Left thumbnail
* > Disabled for image (and video/music) content */
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_PENDING_THUMBNAIL_BOTH
: 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)
{
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)
return;
@ -8897,12 +8894,12 @@ static void ozone_refresh_thumbnail_image(void *data, unsigned i)
ozone_update_content_metadata(ozone);
/* Only refresh thumbnails if thumbnails are enabled */
if ( ( gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) ||
gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
if ( ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
&& (ozone->flags & OZONE_FLAG_WANT_THUMBNAIL_BAR)
&& ( (ozone->is_quick_menu) ||
(ozone->flags & OZONE_FLAG_IS_PLAYLIST) ||
(ozone->flags & OZONE_FLAG_IS_EXPLORE_LIST)))
&& ( (ozone->is_quick_menu)
|| (ozone->flags & OZONE_FLAG_IS_PLAYLIST)
|| (ozone->flags & OZONE_FLAG_IS_EXPLORE_LIST)))
ozone_update_thumbnail_image(ozone);
}
@ -9196,7 +9193,8 @@ static void ozone_context_reset(void *data, bool is_threaded)
"cursor_border.png"
};
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)
{
@ -10179,13 +10177,13 @@ static void ozone_render(void *data,
/* Explore list needs cached selection index */
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)
{
case OZONE_PENDING_THUMBNAIL_BOTH:
gfx_thumbnail_request_streams(
ozone->thumbnail_path_data,
menu_st->thumbnail_path_data,
p_anim,
playlist,
selection,
@ -10199,7 +10197,7 @@ static void ozone_render(void *data,
break;
case OZONE_PENDING_THUMBNAIL_RIGHT:
gfx_thumbnail_request_stream(
ozone->thumbnail_path_data,
menu_st->thumbnail_path_data,
p_anim,
GFX_THUMBNAIL_RIGHT,
playlist,
@ -10212,7 +10210,7 @@ static void ozone_render(void *data,
break;
case OZONE_PENDING_THUMBNAIL_LEFT:
gfx_thumbnail_request_stream(
ozone->thumbnail_path_data,
menu_st->thumbnail_path_data,
p_anim,
GFX_THUMBNAIL_LEFT,
playlist,
@ -10515,6 +10513,7 @@ static void ozone_draw_header(
static void ozone_draw_footer(
ozone_handle_t *ozone,
struct menu_state *menu_st,
gfx_display_t *p_disp,
gfx_animation_t *p_anim,
void *userdata,
@ -10545,13 +10544,13 @@ static void ozone_draw_footer(
* should be guaranteed anyway, but enforce it
* here to prevent 'gaps' in the button list in
* the event of unknown errors */
bool fullscreen_thumbnails_available =
ozone_fullscreen_thumbnails_available(ozone);
bool fs_thumbnails_available =
ozone_fullscreen_thumbnails_available(ozone, menu_st);
bool metadata_override_available =
fullscreen_thumbnails_available
fs_thumbnails_available
&& ozone_metadata_override_available(ozone, settings);
bool thumbnail_cycle_enabled =
fullscreen_thumbnails_available
fs_thumbnails_available
&& !(ozone->flags & OZONE_FLAG_IS_FILE_LIST)
&& !((ozone->is_quick_menu && menu_is_running_quick_menu())
|| (ozone->flags & OZONE_FLAG_IS_STATE_SLOT));
@ -10563,7 +10562,7 @@ static void ozone_draw_footer(
&& !clear_setting_enabled
&& ozone_scan_available(ozone, selection);
bool reset_to_default_available =
!fullscreen_thumbnails_available
!fs_thumbnails_available
&& ozone_is_current_entry_settings(selection);
bool help_available =
!metadata_override_available
@ -10607,7 +10606,7 @@ static void ozone_draw_footer(
float help_x = (help_available)
? reset_to_default_x - ozone->footer_labels.help.width - icon_size - (2.0f * icon_padding)
: 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;
float manage_x = (manage_available)
@ -10723,7 +10722,7 @@ static void ozone_draw_footer(
mymat);
/* > Fullscreen thumbnais */
if (fullscreen_thumbnails_available)
if (fs_thumbnails_available)
ozone_draw_icon(
p_disp,
userdata,
@ -10928,7 +10927,7 @@ static void ozone_draw_footer(
false);
/* > Fullscreen thumbnails */
if (fullscreen_thumbnails_available)
if (fs_thumbnails_available)
gfx_display_draw_text(
ozone->fonts.footer.font,
ozone->footer_labels.fullscreen_thumbs.str,
@ -11061,9 +11060,9 @@ static void ozone_draw_footer(
* title string */
usable_width = metadata_override_available
? metadata_toggle_x
: fullscreen_thumbnails_available
? fullscreen_thumbs_x
: search_x;
: fs_thumbnails_available
? fullscreen_thumbs_x
: search_x;
usable_width -= footer_margin + (icon_padding * 2);
if (usable_width > 0)
@ -11151,27 +11150,6 @@ static void ozone_draw_footer(
#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)
{
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);
/* Update thumbnail */
if (gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) ||
gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{
bool update_thumbnails = false;
@ -11246,7 +11224,7 @@ static void ozone_selection_changed(ozone_handle_t *ozone, bool allow_animation)
* content + right/left thumbnails
* (otherwise last loaded thumbnail will
* 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);
update_thumbnails = true;
ozone->flags &= ~OZONE_FLAG_WANT_THUMBNAIL_BAR;
@ -11486,6 +11464,7 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
&mymat);
ozone_draw_footer(ozone,
menu_st,
p_disp,
p_anim,
userdata,
@ -11560,6 +11539,7 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
/* Thumbnail bar */
if (ozone->show_thumbnail_bar)
ozone_draw_thumbnail_bar(ozone,
menu_st,
p_disp,
p_anim,
settings,
@ -11826,7 +11806,7 @@ static void ozone_populate_entries(
bool ozone_collapse_sidebar = false;
bool was_db_manager_list = false;
bool want_thumbnail_bar = false;
bool fullscreen_thumbnails_available = false;
bool fs_thumbnails_available = false;
bool animate = false;
struct menu_state *menu_st = menu_state_get_ptr();
menu_list_t *menu_list = menu_st->entries.list;
@ -11861,8 +11841,8 @@ static void ozone_populate_entries(
/* Refresh thumbnails */
ozone_unload_thumbnail_textures(ozone);
if (gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) ||
gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{
ozone_set_thumbnail_content(ozone, "");
ozone_update_thumbnail_image(ozone);
@ -11982,12 +11962,12 @@ static void ozone_populate_entries(
if ( (!(ozone->is_quick_menu))
&& (ozone->flags & OZONE_FLAG_WAS_QUICK_MENU)
&& (!(ozone->flags & OZONE_FLAG_IS_STATE_SLOT))
&& ( gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) ||
gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
&& ( ozone->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE ||
ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE ||
ozone->thumbnails.left.status == GFX_THUMBNAIL_STATUS_MISSING ||
ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_MISSING))
&& ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
&& ( ozone->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE
|| ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE
|| ozone->thumbnails.left.status == GFX_THUMBNAIL_STATUS_MISSING
|| ozone->thumbnails.right.status == GFX_THUMBNAIL_STATUS_MISSING))
ozone->flags |= OZONE_FLAG_SKIP_THUMBNAIL_RESET;
/* 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_image(ozone);
}
else if ( gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
else if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{
ozone->flags |= (OZONE_FLAG_WANT_THUMBNAIL_BAR
| OZONE_FLAG_SKIP_THUMBNAIL_RESET);
@ -12028,8 +12008,8 @@ static void ozone_populate_entries(
if (!(ozone->flags & OZONE_FLAG_SKIP_THUMBNAIL_RESET))
ozone_unload_thumbnail_textures(ozone);
if (gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) ||
gfx_thumbnail_is_enabled(ozone->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{
/* Only auto-load thumbnails if we are viewing
* a playlist or a database manager list
@ -12048,8 +12028,8 @@ static void ozone_populate_entries(
}
if ( (ozone->flags & OZONE_FLAG_SKIP_THUMBNAIL_RESET)
&& ( gfx_thumbnail_is_enabled(ozone->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_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT)))
ozone->flags |= OZONE_FLAG_WANT_THUMBNAIL_BAR;
switch (ozone->tabs[ozone->categories_selection_ptr])
@ -12080,19 +12060,20 @@ static void ozone_populate_entries(
else
ozone->flags &= ~OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE;
fullscreen_thumbnails_available = ozone->flags & OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE;
want_thumbnail_bar = ozone->flags & OZONE_FLAG_WANT_THUMBNAIL_BAR;
fs_thumbnails_available = ozone->flags & OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE;
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;
else
ozone->flags &= ~OZONE_FLAG_WANT_THUMBNAIL_BAR;
}
/* 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;
}
@ -12516,8 +12497,6 @@ menu_ctx_driver_t menu_ctx_ozone = {
NULL,
ozone_update_thumbnail_image,
ozone_refresh_thumbnail_image,
ozone_set_thumbnail_system,
ozone_get_thumbnail_system,
ozone_set_thumbnail_content,
gfx_display_osk_ptr_at_pos,
ozone_update_savestate_thumbnail_path,

View File

@ -280,8 +280,6 @@ typedef struct
{
retro_time_t thumbnail_load_trigger_time; /* uint64_t */
gfx_thumbnail_path_data_t *thumbnail_path_data;
struct
{
bitmapfont_lut_t *regular;
@ -5192,7 +5190,7 @@ static void rgui_render(
rgui_render_fs_thumbnail(rgui, fb_width, fb_height, fb_pitch);
/* 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)
{
/* 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_extended_ascii);
rgui->thumbnail_path_data = gfx_thumbnail_path_init();
if (!rgui->thumbnail_path_data)
goto error;
rgui->thumbnail_queue_size = 0;
rgui->left_thumbnail_queue_size = 0;
rgui->gfx_thumbnails_prev = -1;
@ -6562,8 +6556,6 @@ static void rgui_free(void *data)
if (rgui->flags & RGUI_FLAG_WIDGETS_SUPPORTED)
gfx_display_deinit_white_texture();
#endif
if (rgui->thumbnail_path_data)
free(rgui->thumbnail_path_data);
rgui_fonts_free(rgui);
@ -6709,33 +6701,14 @@ static void rgui_navigation_clear(void *data, bool pending_push)
rgui->scroll_y = 0;
}
static void rgui_set_thumbnail_system(void *userdata, char *s, size_t len)
{
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)
static void rgui_load_current_thumbnails(rgui_t *rgui, struct menu_state *menu_st, bool download_missing)
{
const char *thumbnail_path = NULL;
const char *left_thumbnail_path = NULL;
bool thumbnails_missing = false;
/* 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))
{
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)
&& 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))
{
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))
{
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))
{
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 */
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,
playlist, (unsigned)selection,
false, true);
@ -6967,7 +6940,7 @@ static void rgui_scan_selected_entry_thumbnail(rgui_t *rgui, bool force_load)
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);
}
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;
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);
}
#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);
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
if (gfx_thumbnail_is_enabled(rgui->thumbnail_path_data, GFX_THUMBNAIL_RIGHT))
has_thumbnail = gfx_thumbnail_update_path(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(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT);
if (gfx_thumbnail_is_enabled(rgui->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
has_thumbnail = gfx_thumbnail_update_path(rgui->thumbnail_path_data, GFX_THUMBNAIL_LEFT) || has_thumbnail;
if (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
has_thumbnail = gfx_thumbnail_update_path(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT) || has_thumbnail;
}
/* 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 */
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
{
/* 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)
{
rgui_t *rgui = (rgui_t*)userdata;
struct menu_state *menu_st = menu_state_get_ptr();
settings_t *settings = config_get_ptr();
bool rgui_inline_thumbnails = false;
if (!rgui || !settings)
@ -7094,8 +7068,8 @@ static void rgui_refresh_thumbnail_image(void *userdata, unsigned i)
/* Only refresh thumbnails if thumbnails are enabled */
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(rgui->thumbnail_path_data, GFX_THUMBNAIL_LEFT)))
&& (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT)))
{
/* In all cases, reset current thumbnails */
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;
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 border_filler_thickness_enable = settings->bools.menu_rgui_border_filler_thickness_enable;
#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)
? 1.5f
: 1.0f)))
rgui_load_current_thumbnails(rgui,
rgui_load_current_thumbnails(rgui, menu_st,
settings->bools.network_on_demand_thumbnails);
}
@ -8153,8 +8128,6 @@ menu_ctx_driver_t menu_ctx_rgui = {
NULL, /* update_thumbnail_path */
rgui_update_thumbnail_image,
rgui_refresh_thumbnail_image,
rgui_set_thumbnail_system,
rgui_get_thumbnail_system,
NULL, /* set_thumbnail_content */
rgui_osk_ptr_at_pos,
rgui_update_savestate_thumbnail_path,

View File

@ -326,7 +326,6 @@ typedef struct xmb_handle
menu_screensaver_t *screensaver;
gfx_thumbnail_path_data_t *thumbnail_path_data;
struct {
gfx_thumbnail_t right;
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_to_unsigned(entry.label) == MENU_ENUM_LABEL_STATE_SLOT ||
string_is_equal(entry.label, "state_slot") ||
string_is_equal(entry.label, "loadstate") ||
string_is_equal(entry.label, "savestate"))
if ( (string_to_unsigned(entry.label) == MENU_ENUM_LABEL_STATE_SLOT)
|| string_is_equal(entry.label, "state_slot")
|| string_is_equal(entry.label, "loadstate")
|| string_is_equal(entry.label, "savestate"))
{
char path[8204];
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)
{
xmb_handle_t *xmb = (xmb_handle_t*)data;
const char *core_name = NULL;
xmb_handle_t *xmb = (xmb_handle_t*)data;
struct menu_state *menu_st = menu_state_get_ptr();
const char *core_name = NULL;
if (!xmb)
return;
@ -1276,28 +1276,28 @@ static void xmb_update_thumbnail_image(void *data)
}
/* 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"))
{
/* Right thumbnail */
if (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data,
if (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data,
GFX_THUMBNAIL_RIGHT))
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_RIGHT;
/* 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))
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_LEFT;
}
else
{
/* Right thumbnail */
if (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data,
if (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data,
GFX_THUMBNAIL_RIGHT))
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_RIGHT;
/* Left thumbnail */
if (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data,
if (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data,
GFX_THUMBNAIL_LEFT))
xmb->thumbnails.pending =
(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)
{
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)
return;
/* Only refresh thumbnails if thumbnails are enabled */
if ((gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) ||
gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT)) &&
(xmb->is_quick_menu || xmb->is_playlist || xmb->is_explore_list))
if ( (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
&& (xmb->is_quick_menu || xmb->is_playlist || xmb->is_explore_list))
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)
{
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
* to the selected entry */
if (list &&
(selection < list_size) &&
(list->list[selection].type == FILE_TYPE_RPL_ENTRY))
if ( list
&& (selection < list_size)
&& (list->list[selection].type == FILE_TYPE_RPL_ENTRY))
{
playlist_valid = true;
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);
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))
{
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;
}
}
@ -1442,7 +1422,7 @@ static void xmb_set_thumbnail_content(void *data, const char *s)
menu_entry_get(&entry, 0, selection, NULL, true);
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
@ -1459,10 +1439,10 @@ static void xmb_set_thumbnail_content(void *data, const char *s)
MENU_ENTRY_INITIALIZE(entry);
entry.flags |= MENU_ENTRY_FLAG_PATH_ENABLED;
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(xmb->thumbnail_path_data,
gfx_thumbnail_set_content_image(menu_st->thumbnail_path_data,
node->fullpath, entry.path);
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.
* Showing thumbnails on database entries is a
* 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;
}
}
@ -1584,16 +1564,16 @@ static void xmb_selection_pointer_changed(
iz = xmb->items_active_zoom;
if (
gfx_thumbnail_is_enabled(xmb->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_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT)
)
{
bool update_thumbnails = false;
/* Playlist updates */
if (((xmb_system_tab > XMB_SYSTEM_TAB_SETTINGS && depth == 1) ||
(xmb_system_tab < XMB_SYSTEM_TAB_SETTINGS && depth == 4)) &&
xmb->is_playlist)
if (( (xmb_system_tab > XMB_SYSTEM_TAB_SETTINGS && depth == 1)
|| (xmb_system_tab < XMB_SYSTEM_TAB_SETTINGS && depth == 4))
&& xmb->is_playlist)
{
xmb_set_thumbnail_content(xmb, NULL);
update_thumbnails = true;
@ -1633,8 +1613,8 @@ static void xmb_selection_pointer_changed(
* (otherwise last loaded thumbnail will
* persist, and be shown on the wrong entry) */
xmb->fullscreen_thumbnails_available = false;
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_NONE;
gfx_thumbnail_set_content(xmb->thumbnail_path_data, NULL);
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_NONE;
gfx_thumbnail_set_content(menu_st->thumbnail_path_data, NULL);
gfx_thumbnail_cancel_pending_requests();
gfx_thumbnail_reset(&xmb->thumbnails.right);
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 ( gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) ||
gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{
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 &&
((xmb->is_quick_menu && xmb->depth >= 2) ||
(xmb->is_state_slot)))
if ( savestate_thumbnail_enable
&& ((xmb->is_quick_menu && xmb->depth >= 2)
|| (xmb->is_state_slot)))
{
/* This shows savestate thumbnail after
* 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++)
{
gfx_animation_ctx_entry_t entry;
float ia = xmb->categories_passive_alpha;
float iz = xmb->categories_passive_zoom;
xmb_node_t *node = xmb_get_node(xmb, j);
float ia = xmb->categories_passive_alpha;
float iz = xmb->categories_passive_zoom;
xmb_node_t *node = xmb_get_node(xmb, j);
if (!node)
continue;
if (j == xmb->categories_active_idx)
{
ia = xmb->categories_active_alpha;
iz = xmb->categories_active_zoom;
ia = xmb->categories_active_alpha;
iz = xmb->categories_active_zoom;
}
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;
if (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) ||
gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{
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_MUSIC_LIST))
|| string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST));
xmb->is_playlist = xmb->is_playlist &&
!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 =
xmb->is_playlist
&& !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 =
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_system_tab > XMB_SYSTEM_TAB_SETTINGS) && (xmb->depth > 2));
if ((xmb->is_quick_menu || xmb->is_state_slot) &&
!string_is_empty(xmb->savestate_thumbnail_file_path))
if ( (xmb->is_quick_menu || xmb->is_state_slot)
&& !string_is_empty(xmb->savestate_thumbnail_file_path))
{
xmb->fullscreen_thumbnails_available = true;
}
@ -2859,8 +2840,8 @@ static void xmb_populate_entries(void *data,
else if (xmb->is_file_list)
{
xmb->fullscreen_thumbnails_available = false;
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_NONE;
gfx_thumbnail_set_content(xmb->thumbnail_path_data, NULL);
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_NONE;
gfx_thumbnail_set_content(menu_st->thumbnail_path_data, NULL);
gfx_thumbnail_cancel_pending_requests();
gfx_thumbnail_reset(&xmb->thumbnails.right);
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(),
0, &pl_entry);
if (pl_entry &&
!string_is_empty(pl_entry->db_name) &&
(db_node = RHMAP_GET_STR(xmb->playlist_db_node_map, pl_entry->db_name)))
if ( pl_entry
&& !string_is_empty(pl_entry->db_name)
&& (db_node = RHMAP_GET_STR(xmb->playlist_db_node_map, pl_entry->db_name)))
{
switch (type)
{
@ -3458,8 +3439,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
#ifdef HAVE_CHEEVOS
if (
(type >= MENU_SETTINGS_CHEEVOS_START) &&
(type < MENU_SETTINGS_NETPLAY_ROOMS_START)
(type >= MENU_SETTINGS_CHEEVOS_START)
&& (type < MENU_SETTINGS_NETPLAY_ROOMS_START)
)
{
char buffer[64];
@ -3478,8 +3459,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
#endif
if (
(type >= MENU_SETTINGS_INPUT_BEGIN) &&
(type <= MENU_SETTINGS_INPUT_DESC_KBD_END)
(type >= MENU_SETTINGS_INPUT_BEGIN)
&& (type <= MENU_SETTINGS_INPUT_DESC_KBD_END)
)
{
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];
}
if (
(type >= MENU_SETTINGS_REMAPPING_PORT_BEGIN) &&
(type <= MENU_SETTINGS_REMAPPING_PORT_END)
(type >= MENU_SETTINGS_REMAPPING_PORT_BEGIN)
&& (type <= MENU_SETTINGS_REMAPPING_PORT_END)
)
return xmb->textures.list[XMB_TEXTURE_INPUT_SETTINGS];
if (checked)
@ -3604,6 +3585,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
}
static int xmb_draw_item(
struct menu_state *menu_st,
void *userdata,
gfx_display_t *p_disp,
gfx_animation_t *p_anim,
@ -3767,13 +3749,13 @@ static int xmb_draw_item(
{
if (
(
(xmb->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_AVAILABLE)
|| (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
&& ( (xmb->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE)
|| (xmb->thumbnails.right.status == GFX_THUMBNAIL_STATUS_PENDING)))
|| (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT)
&& ( (xmb->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE)
|| (xmb->thumbnails.left.status == GFX_THUMBNAIL_STATUS_PENDING)))
(xmb->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_AVAILABLE)
|| (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_PENDING)))
|| (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_PENDING)))
)
&& !xmb->is_playlist_information
&& xmb->use_ps3_layout
@ -3964,16 +3946,16 @@ static int xmb_draw_item(
/* Draw top/bottom line fade effect, if required */
if (use_smooth_ticker)
{
if (!string_is_empty(entry_sublabel_top_fade) &&
ticker_top_fade_alpha > 0.0f)
if ( !string_is_empty(entry_sublabel_top_fade)
&& ticker_top_fade_alpha > 0.0f)
xmb_draw_text(xmb_shadows_enable, xmb, settings,
entry_sublabel_top_fade,
sublabel_x, ticker_top_fade_y_offset + sublabel_y,
1, ticker_top_fade_alpha * node->label_alpha, TEXT_ALIGN_LEFT,
width, height, xmb->font2);
if (!string_is_empty(entry_sublabel_bottom_fade) &&
ticker_bottom_fade_alpha > 0.0f)
if ( !string_is_empty(entry_sublabel_bottom_fade)
&& ticker_bottom_fade_alpha > 0.0f)
xmb_draw_text(xmb_shadows_enable, xmb, settings,
entry_sublabel_bottom_fade,
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));
if (
(!xmb->assets_missing) &&
(color[3] != 0) &&
(
(entry.flags & MENU_ENTRY_FLAG_CHECKED) ||
!((entry_type >= MENU_SETTING_DROPDOWN_ITEM) && (entry_type <= MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM_SPECIAL))
(!xmb->assets_missing)
&& (color[3] != 0)
&& (
(entry.flags & MENU_ENTRY_FLAG_CHECKED)
|| !((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(),
entry.entry_idx, &pl_entry);
if (pl_entry &&
!string_is_empty(pl_entry->db_name) &&
(db_node = RHMAP_GET_STR(xmb->playlist_db_node_map, pl_entry->db_name)))
if ( pl_entry
&& !string_is_empty(pl_entry->db_name)
&& (db_node = RHMAP_GET_STR(xmb->playlist_db_node_map, pl_entry->db_name)))
{
switch (show_history_icons)
{
@ -4286,19 +4269,20 @@ static void xmb_draw_items(
for (i = first; i <= last; i++)
{
if (xmb_draw_item(
userdata,
p_disp,
p_anim,
dispctx,
settings,
video_width,
video_height,
xmb_shadows_enable,
mymat,
xmb, core_node,
list, color,
i, current,
width, height) == -1)
menu_st,
userdata,
p_disp,
p_anim,
dispctx,
settings,
video_width,
video_height,
xmb_shadows_enable,
mymat,
xmb, core_node,
list, color,
i, current,
width, height) == -1)
break;
}
}
@ -4388,7 +4372,8 @@ static void xmb_hide_fullscreen_thumbnails(
/* Enables (and triggers a fade in of) the fullscreen
* thumbnail view */
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;
const char *core_name = NULL;
@ -4400,25 +4385,25 @@ static void xmb_show_fullscreen_thumbnails(
* current selection has at least one valid thumbnail
* and all thumbnails for current selection are already
* loaded/available */
gfx_thumbnail_get_core_name(xmb->thumbnail_path_data, &core_name);
if ( string_is_equal(core_name, "imageviewer") ||
!string_is_empty(xmb->savestate_thumbnail_file_path))
gfx_thumbnail_get_core_name(menu_st->thumbnail_path_data, &core_name);
if ( string_is_equal(core_name, "imageviewer")
|| !string_is_empty(xmb->savestate_thumbnail_file_path))
{
/* imageviewer content requires special treatment,
* since only one thumbnail can ever be loaded
* at a time */
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
!= GFX_THUMBNAIL_STATUS_AVAILABLE &&
xmb->thumbnails.savestate.status
!= GFX_THUMBNAIL_STATUS_AVAILABLE
&& xmb->thumbnails.savestate.status
!= GFX_THUMBNAIL_STATUS_AVAILABLE)
return;
}
else if (
gfx_thumbnail_is_enabled(
xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{
if (
xmb->thumbnails.left.status
@ -4431,21 +4416,21 @@ static void xmb_show_fullscreen_thumbnails(
else
{
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
== GFX_THUMBNAIL_STATUS_AVAILABLE) &&
(left_thumbnail_enabled &&
(( xmb->thumbnails.left.status
!= GFX_THUMBNAIL_STATUS_MISSING) &&
( xmb->thumbnails.left.status
!= GFX_THUMBNAIL_STATUS_AVAILABLE))))
== GFX_THUMBNAIL_STATUS_AVAILABLE)
&& (left_thumbnail_enabled
&& ((xmb->thumbnails.left.status
!= GFX_THUMBNAIL_STATUS_MISSING)
&& (xmb->thumbnails.left.status
!= GFX_THUMBNAIL_STATUS_AVAILABLE))))
return;
if (( xmb->thumbnails.right.status
== GFX_THUMBNAIL_STATUS_MISSING) &&
(!left_thumbnail_enabled ||
( xmb->thumbnails.left.status
== GFX_THUMBNAIL_STATUS_MISSING)
&& (!left_thumbnail_enabled
|| ( xmb->thumbnails.left.status
!= GFX_THUMBNAIL_STATUS_AVAILABLE)))
return;
}
@ -4482,18 +4467,19 @@ static void xmb_show_fullscreen_thumbnails(
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 =
xmb->fullscreen_thumbnails_available
&& (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) ||
gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
&& (xmb->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE ||
xmb->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE);
&& (gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
&& (xmb->thumbnails.left.status == GFX_THUMBNAIL_STATUS_AVAILABLE
|| xmb->thumbnails.right.status == GFX_THUMBNAIL_STATUS_AVAILABLE);
if (xmb->is_state_slot &&
(xmb->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_MISSING ||
xmb->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_UNKNOWN))
if ( xmb->is_state_slot
&& (xmb->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_MISSING
|| xmb->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_UNKNOWN))
ret = false;
return ret;
@ -4585,11 +4571,11 @@ static enum menu_action xmb_parse_menu_entry_action(
/* If this is a menu with thumbnails, attempt
* to show fullscreen thumbnail view */
if (xmb_fullscreen_thumbnails_available(xmb) &&
!xmb->show_fullscreen_thumbnails)
if ( xmb_fullscreen_thumbnails_available(xmb, menu_st)
&& !xmb->show_fullscreen_thumbnails)
{
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_set_thumbnail_delay(false);
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_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;
new_action = MENU_ACTION_NOOP;
}
@ -4633,13 +4619,13 @@ static enum menu_action xmb_parse_menu_entry_action(
to prevent accidental imageviewer core launch */
if ( xmb->libretro_running
&& 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)
{
if (xmb->show_fullscreen_thumbnails)
xmb_hide_fullscreen_thumbnails(xmb, true);
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;
}
@ -4944,13 +4930,13 @@ static void xmb_render(void *data,
/* Explore list needs cached selection index */
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)
{
case XMB_PENDING_THUMBNAIL_BOTH:
gfx_thumbnail_request_streams(
xmb->thumbnail_path_data,
menu_st->thumbnail_path_data,
p_anim,
playlist, selection,
&xmb->thumbnails.right,
@ -4958,14 +4944,14 @@ static void xmb_render(void *data,
gfx_thumbnail_upscale_threshold,
network_on_demand_thumbnails);
if (( xmb->thumbnails.right.status
!= GFX_THUMBNAIL_STATUS_UNKNOWN) &&
( xmb->thumbnails.left.status
!= GFX_THUMBNAIL_STATUS_UNKNOWN)
&& ( xmb->thumbnails.left.status
!= GFX_THUMBNAIL_STATUS_UNKNOWN))
xmb->thumbnails.pending = XMB_PENDING_THUMBNAIL_NONE;
break;
case XMB_PENDING_THUMBNAIL_RIGHT:
gfx_thumbnail_request_stream(
xmb->thumbnail_path_data,
menu_st->thumbnail_path_data,
p_anim,
GFX_THUMBNAIL_RIGHT,
playlist, selection,
@ -4978,7 +4964,7 @@ static void xmb_render(void *data,
break;
case XMB_PENDING_THUMBNAIL_LEFT:
gfx_thumbnail_request_stream(
xmb->thumbnail_path_data,
menu_st->thumbnail_path_data,
p_anim,
GFX_THUMBNAIL_LEFT,
playlist, selection,
@ -5266,8 +5252,8 @@ static void xmb_draw_fullscreen_thumbnails(
* RetroPad A or keyboard 'return' to enter the
* quick menu while fullscreen thumbnails are
* being displayed */
if ((selection != xmb->fullscreen_thumbnail_selection) &&
(!xmb->is_quick_menu || xmb->show_fullscreen_thumbnails))
if ( (selection != xmb->fullscreen_thumbnail_selection)
&& (!xmb->is_quick_menu || xmb->show_fullscreen_thumbnails))
goto error;
/* Get thumbnail pointers */
@ -5815,11 +5801,11 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
&& xmb->show_fullscreen_thumbnails
&& xmb->fullscreen_thumbnails_available
&& (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
&& xmb->fullscreen_thumbnails_available
&& 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
* 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 */
if (xmb->show_mouse)
{
bool cursor_visible = (video_fullscreen || mouse_grabbed) &&
menu_mouse_enable;
bool cursor_visible = (video_fullscreen || mouse_grabbed)
&& menu_mouse_enable;
gfx_display_set_alpha(xmb_coord_white, MIN(xmb->alpha, 1.00f));
if (cursor_visible)
@ -6758,10 +6744,6 @@ static void *xmb_init(void **userdata, bool video_is_threaded)
if (!(xmb->screensaver = menu_screensaver_init()))
goto error;
/* Thumbnail initialisation */
if (!(xmb->thumbnail_path_data = gfx_thumbnail_path_init()))
goto error;
xmb->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))
free(xmb->bg_file_path);
if (xmb->thumbnail_path_data)
free(xmb->thumbnail_path_data);
menu_screensaver_free(xmb->screensaver);
}
@ -7311,6 +7290,7 @@ static void xmb_context_reset_internal(xmb_handle_t *xmb,
char fontpath[PATH_MAX_LENGTH];
settings_t *settings = config_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();
unsigned menu_xmb_theme = settings->uints.menu_xmb_theme;
iconpath[0] = bg_file_path[0] = '\0';
@ -7392,15 +7372,15 @@ static void xmb_context_reset_internal(xmb_handle_t *xmb,
* > Thumbnails are enabled
* > This is a playlist, a database list, a file list
* or the quick menu */
if (gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_RIGHT) ||
gfx_thumbnail_is_enabled(xmb->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
if ( gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_RIGHT)
|| gfx_thumbnail_is_enabled(menu_st->thumbnail_path_data, GFX_THUMBNAIL_LEFT))
{
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);
if (((((xmb_system_tab > XMB_SYSTEM_TAB_SETTINGS && depth == 1) ||
(xmb_system_tab < XMB_SYSTEM_TAB_SETTINGS && depth == 4)) &&
xmb->is_playlist))
if (((( (xmb_system_tab > XMB_SYSTEM_TAB_SETTINGS && depth == 1)
|| (xmb_system_tab < XMB_SYSTEM_TAB_SETTINGS && depth == 4))
&& xmb->is_playlist))
|| xmb->is_db_manager_list
|| xmb->is_explore_list
|| xmb->is_file_list
@ -8403,8 +8383,6 @@ menu_ctx_driver_t menu_ctx_xmb = {
NULL,
xmb_update_thumbnail_image,
xmb_refresh_thumbnail_image,
xmb_set_thumbnail_system,
xmb_get_thumbnail_system,
xmb_set_thumbnail_content,
gfx_display_osk_ptr_at_pos,
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));
}
if (menu_st->driver_ctx && menu_st->driver_ctx->set_thumbnail_system)
{
/* Inform menu driver of current system name
* > Note: history, favorites and images_history
@ -2201,7 +2200,7 @@ static int menu_displaylist_parse_playlist(
{
char system_name[15];
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));
}
else if (!string_is_empty(info_path))
@ -2209,7 +2208,7 @@ static int menu_displaylist_parse_playlist(
char lpl_basename[256];
fill_pathname_base(lpl_basename, info_path, sizeof(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));
}
}
@ -2462,10 +2461,8 @@ static int menu_displaylist_parse_database_entry(menu_handle_t *menu,
sizeof(path_base));
path_remove_extension(path_base);
if ( menu_st->driver_ctx
&& menu_st->driver_ctx->set_thumbnail_system)
menu_st->driver_ctx->set_thumbnail_system(
menu_st->userdata, path_base, sizeof(path_base));
menu_driver_set_thumbnail_system(
menu_st->userdata, path_base, sizeof(path_base));
strlcat(path_base, ".lpl", sizeof(path_base));
@ -3329,10 +3326,8 @@ static int menu_displaylist_parse_horizontal_list(
* is loaded/cached */
fill_pathname_base(lpl_basename, item->path, sizeof(lpl_basename));
path_remove_extension(lpl_basename);
if ( menu_st->driver_ctx
&& menu_st->driver_ctx->set_thumbnail_system)
menu_st->driver_ctx->set_thumbnail_system(
menu_st->userdata, lpl_basename, sizeof(lpl_basename));
menu_driver_set_thumbnail_system(
menu_st->userdata, lpl_basename, sizeof(lpl_basename));
}
if ((playlist = playlist_get_cached()))
@ -3798,15 +3793,10 @@ static int menu_displaylist_parse_horizontal_content_actions(
break;
case PLAYLIST_ENTRY_REMOVE_ENABLE_HIST_FAV:
{
size_t sys_len;
char sys_thumb[64];
struct menu_state *menu_st = menu_state_get_ptr();
sys_thumb[0] = '\0';
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));
size_t sys_len = menu_driver_get_thumbnail_system(
menu_st->userdata, sys_thumb, sizeof(sys_thumb));
if (!string_is_empty(sys_thumb))
remove_entry_enabled =
@ -3876,21 +3866,17 @@ static int menu_displaylist_parse_horizontal_content_actions(
if (download_enabled)
{
size_t sys_len;
char sys_thumb[64];
struct menu_state *menu_st = menu_state_get_ptr();
sys_thumb[0] = '\0';
struct menu_state *menu_st = menu_state_get_ptr();
/* Only show 'Download Thumbnails' on supported playlists */
download_enabled = false;
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));
size_t sys_len = menu_driver_get_thumbnail_system(
menu_st->userdata, sys_thumb, sizeof(sys_thumb));
if (!string_is_empty(sys_thumb))
download_enabled = !string_ends_with_size(
sys_thumb, "_history", sys_len, STRLEN_CONST("_history"));
else
download_enabled = false;
}
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_image */
NULL, /* refresh_thumbnail_image */
NULL, /* set_thumbnail_system */
NULL, /* get_thumbnail_system */
NULL, /* set_thumbnail_content */
NULL, /* osk_ptr_at_pos */
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;
#endif
/* thumbnail initialization */
if (!(menu_st->thumbnail_path_data = gfx_thumbnail_path_init()))
return false;
/* Ensure that menu pointer input is correctly
* initialised */
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);
if (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)
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");
}
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_image)(void *data);
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);
int (*osk_ptr_at_pos)(void *data, int x, int y, unsigned width, unsigned height);
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 */
gfx_thumbnail_path_data_t *thumbnail_path_data;
menu_handle_t *driver_data;
void *userdata;
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(
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 menu_ctx_driver_t menu_ctx_ozone;