diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 0acfaeef6d..73bbc6239d 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -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, diff --git a/menu/drivers/materialui.c b/menu/drivers/materialui.c index 5e4db8f5f3..edd4431329 100644 --- a/menu/drivers/materialui.c +++ b/menu/drivers/materialui.c @@ -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 */ diff --git a/menu/drivers/ozone.c b/menu/drivers/ozone.c index 48cbeba747..326a91bba0 100644 --- a/menu/drivers/ozone.c +++ b/menu/drivers/ozone.c @@ -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, diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index c420dfb09d..d08232d580 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -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, diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index a2cd546df9..92a51930ed 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -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, diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 2ba5764e85..bf9e567b58 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -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) diff --git a/menu/menu_driver.c b/menu/menu_driver.c index 737ad92bb3..db5e85281c 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -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); +} diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 58116cc13d..a970f35343 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -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;