Skip to content

Commit 836dff1

Browse files
sonninnosLibretroAdmin
authored andcommitted
Add shared savestate thumbnail path getter function
1 parent c9f7eb0 commit 836dff1

8 files changed

Lines changed: 149 additions & 203 deletions

File tree

gfx/gfx_thumbnail_path.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -767,3 +767,26 @@ size_t gfx_thumbnail_get_content_dir(gfx_thumbnail_path_data_t *path_data,
767767
strlcpy(tmp_buf, path_data->content_path, _len * sizeof(char));
768768
return strlcpy(s, path_basename_nocompression(tmp_buf), len);
769769
}
770+
771+
/* Gets the common savestate thumbnail path. */
772+
void gfx_savestate_thumbnail_get_path(
773+
char *s, size_t len,
774+
const char *state_name,
775+
int state_slot)
776+
{
777+
size_t _len;
778+
779+
s[0] = '\0';
780+
781+
if (string_is_empty(state_name))
782+
return;
783+
784+
_len = strlcpy(s, state_name, len);
785+
786+
if (state_slot > 0)
787+
_len += snprintf(s + _len, len - _len, "%d", state_slot);
788+
else if (state_slot < 0)
789+
_len = fill_pathname_join_delim(s, state_name, "auto", '.', len);
790+
791+
strlcpy(s + _len, FILE_PATH_PNG_EXTENSION, len - _len);
792+
}

gfx/gfx_thumbnail_path.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@ bool gfx_thumbnail_update_path(gfx_thumbnail_path_data_t *path_data, enum gfx_th
143143
* Returns true if content directory is valid. */
144144
size_t gfx_thumbnail_get_content_dir(gfx_thumbnail_path_data_t *path_data, char *s, size_t len);
145145

146+
/* Gets the common savestate thumbnail path. */
147+
void gfx_savestate_thumbnail_get_path(char *s, size_t len, const char *state_name, int state_slot);
148+
146149
RETRO_END_DECLS
147150

148151
#endif

menu/drivers/materialui.c

Lines changed: 18 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -707,16 +707,12 @@ typedef struct materialui_handle
707707
last_landscape_layout_optimization;
708708
enum materialui_list_view_type list_view_type;
709709

710-
/* These have to be huge, because runloop_st->name.savestate
711-
* has a hard-coded size of (PATH_MAX_LENGTH * 2)... */
712-
char savestate_thumbnail_file_path[(PATH_MAX_LENGTH * 2)];
713-
char prev_savestate_thumbnail_file_path[(PATH_MAX_LENGTH * 2)];
714-
715710
char msgbox[1024];
716711
char menu_title[NAME_MAX_LENGTH];
717712
char fullscreen_thumbnail_label[NAME_MAX_LENGTH];
718713
char sysicons_path[PATH_MAX_LENGTH];
719714
char icons_path[PATH_MAX_LENGTH];
715+
char savestate_thumbnail_file_path[PATH_MAX_LENGTH];
720716
} materialui_handle_t;
721717

722718
static void hex32_to_rgba_normalized(uint32_t hex, float* rgba, float alpha)
@@ -2482,18 +2478,12 @@ static void materialui_update_savestate_thumbnail_path(void *data, unsigned i)
24822478
{
24832479
settings_t *settings = config_get_ptr();
24842480
materialui_handle_t *mui = (materialui_handle_t*)data;
2485-
int state_slot = settings->ints.state_slot;
24862481
bool savestate_thumbnail = settings->bools.savestate_thumbnail_enable;
2482+
const char *current_path = strdup(mui->savestate_thumbnail_file_path);
24872483

24882484
if (!mui)
24892485
return;
24902486

2491-
/* Cache previous savestate thumbnail path */
2492-
strlcpy(
2493-
mui->prev_savestate_thumbnail_file_path,
2494-
mui->savestate_thumbnail_file_path,
2495-
sizeof(mui->prev_savestate_thumbnail_file_path));
2496-
24972487
mui->savestate_thumbnail_file_path[0] = '\0';
24982488

24992489
if (savestate_thumbnail)
@@ -2511,36 +2501,26 @@ static void materialui_update_savestate_thumbnail_path(void *data, unsigned i)
25112501
|| string_is_equal(entry.label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_STATE))
25122502
|| string_is_equal(entry.label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_STATE)))
25132503
{
2514-
size_t _len;
2515-
char path[PATH_MAX_LENGTH * 2];
2504+
char path[PATH_MAX_LENGTH];
25162505
runloop_state_t *runloop_st = runloop_state_get_ptr();
2506+
int state_slot = settings->ints.state_slot;
25172507

25182508
/* State slot dropdown */
25192509
if (string_to_unsigned(entry.label) == MENU_ENUM_LABEL_STATE_SLOT)
25202510
state_slot = i - 1;
25212511

2522-
if (state_slot < 0)
2523-
{
2524-
path[0] = '\0';
2525-
_len = fill_pathname_join_delim(path,
2526-
runloop_st->name.savestate, "auto", '.', sizeof(path));
2527-
}
2528-
else
2529-
{
2530-
_len = strlcpy(path, runloop_st->name.savestate, sizeof(path));
2531-
if (state_slot > 0)
2532-
_len += snprintf(path + _len, sizeof(path) - _len, "%d", state_slot);
2533-
}
2534-
2535-
strlcpy(path + _len, FILE_PATH_PNG_EXTENSION, sizeof(path) - _len);
2512+
gfx_savestate_thumbnail_get_path(path, sizeof(path),
2513+
runloop_st->name.savestate, state_slot);
25362514

25372515
/* Must let invalid be empty here as opposed to other drivers
25382516
* in order to see the missing image placeholder in normal list */
25392517
if (path_is_valid(path))
2540-
strlcpy(
2541-
mui->savestate_thumbnail_file_path, path,
2518+
strlcpy(mui->savestate_thumbnail_file_path, path,
25422519
sizeof(mui->savestate_thumbnail_file_path));
25432520

2521+
if (!string_is_equal(current_path, mui->savestate_thumbnail_file_path))
2522+
gfx_thumbnail_reset(&mui->thumbnails.savestate);
2523+
25442524
materialui_update_fullscreen_thumbnail_label(mui);
25452525
}
25462526
}
@@ -2562,22 +2542,11 @@ static void materialui_update_savestate_thumbnail_image(void *data)
25622542
mui->thumbnails.savestate.status = GFX_THUMBNAIL_STATUS_MISSING;
25632543
mui->thumbnails.savestate.alpha = 1.0f;
25642544
}
2565-
else
2566-
{
2567-
/* Only request thumbnail if:
2568-
* > Thumbnail has never been loaded *OR*
2569-
* > Thumbnail path has changed */
2570-
if ( (mui->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_UNKNOWN)
2571-
|| (mui->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_PENDING)
2572-
|| !string_is_equal(mui->savestate_thumbnail_file_path,
2573-
mui->prev_savestate_thumbnail_file_path))
2574-
{
2575-
gfx_thumbnail_request_file(
2576-
mui->savestate_thumbnail_file_path,
2577-
&mui->thumbnails.savestate,
2578-
config_get_ptr()->uints.gfx_thumbnail_upscale_threshold);
2579-
}
2580-
}
2545+
else if (mui->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_UNKNOWN)
2546+
gfx_thumbnail_request_file(
2547+
mui->savestate_thumbnail_file_path,
2548+
&mui->thumbnails.savestate,
2549+
config_get_ptr()->uints.gfx_thumbnail_upscale_threshold);
25812550

25822551
mui->thumbnails.savestate.flags |= GFX_THUMB_FLAG_CORE_ASPECT;
25832552
}
@@ -9141,15 +9110,14 @@ static void *materialui_init(void **userdata, bool video_is_threaded)
91419110
/* Enable fade in animation for missing thumbnails */
91429111
gfx_thumbnail_set_fade_missing(true);
91439112

9144-
/* Savestate thumbnail empty */
9145-
mui->savestate_thumbnail_file_path[0] = '\0';
9146-
mui->prev_savestate_thumbnail_file_path[0] = '\0';
9147-
91489113
/* Ensure that fullscreen thumbnails are inactive */
91499114
mui->fullscreen_thumbnail_selection = 0;
91509115
mui->fullscreen_thumbnail_alpha = 0.0f;
91519116
mui->fullscreen_thumbnail_label[0] = '\0';
91529117

9118+
/* Savestate thumbnail empty */
9119+
mui->savestate_thumbnail_file_path[0] = '\0';
9120+
91539121
/* Ensure status bar has sane initial values */
91549122
mui->status_bar.height = 0;
91559123
mui->status_bar.str[0] = '\0';

menu/drivers/ozone.c

Lines changed: 17 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -642,11 +642,7 @@ struct ozone_handle
642642
char icons_path[PATH_MAX_LENGTH];
643643
char icons_path_default[PATH_MAX_LENGTH];
644644
char tab_path[PATH_MAX_LENGTH];
645-
646-
/* These have to be huge, because runloop_st->name.savestate
647-
* has a hard-coded size of (PATH_MAX_LENGTH * 2)... */
648-
char savestate_thumbnail_file_path[(PATH_MAX_LENGTH * 2)];
649-
char prev_savestate_thumbnail_file_path[(PATH_MAX_LENGTH * 2)];
645+
char savestate_thumbnail_file_path[PATH_MAX_LENGTH];
650646

651647
char thumbnails_left_status_prev;
652648
char thumbnails_right_status_prev;
@@ -3855,18 +3851,12 @@ static void ozone_update_savestate_thumbnail_path(void *data, unsigned i)
38553851
{
38563852
settings_t *settings = config_get_ptr();
38573853
ozone_handle_t *ozone = (ozone_handle_t*)data;
3858-
int state_slot = settings->ints.state_slot;
38593854
bool savestate_thumbnail = settings->bools.savestate_thumbnail_enable;
3855+
const char *current_path = strdup(ozone->savestate_thumbnail_file_path);
38603856

38613857
if (!ozone)
38623858
return;
38633859

3864-
/* Cache previous savestate thumbnail path */
3865-
strlcpy(
3866-
ozone->prev_savestate_thumbnail_file_path,
3867-
ozone->savestate_thumbnail_file_path,
3868-
sizeof(ozone->prev_savestate_thumbnail_file_path));
3869-
38703860
if (ozone->flags2 & OZONE_FLAG2_SELECTION_CORE_IS_VIEWER_REAL)
38713861
ozone->flags2 |= OZONE_FLAG2_SELECTION_CORE_IS_VIEWER;
38723862
else
@@ -3901,9 +3891,9 @@ static void ozone_update_savestate_thumbnail_path(void *data, unsigned i)
39013891
|| string_is_equal(entry.label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_STATE))
39023892
|| string_is_equal(entry.label, msg_hash_to_str(MENU_ENUM_LABEL_SAVE_STATE)))
39033893
{
3904-
size_t _len;
3905-
char path[PATH_MAX_LENGTH * 2];
3894+
char path[PATH_MAX_LENGTH];
39063895
runloop_state_t *runloop_st = runloop_state_get_ptr();
3896+
int state_slot = settings->ints.state_slot;
39073897

39083898
/* State slot dropdown */
39093899
if (string_to_unsigned(entry.label) == MENU_ENUM_LABEL_STATE_SLOT)
@@ -3912,25 +3902,15 @@ static void ozone_update_savestate_thumbnail_path(void *data, unsigned i)
39123902
ozone->flags |= OZONE_FLAG_IS_STATE_SLOT;
39133903
}
39143904

3915-
if (state_slot < 0)
3916-
{
3917-
path[0] = '\0';
3918-
_len = fill_pathname_join_delim(path,
3919-
runloop_st->name.savestate, "auto", '.', sizeof(path));
3920-
}
3921-
else
3922-
{
3923-
_len = strlcpy(path, runloop_st->name.savestate, sizeof(path));
3924-
if (state_slot > 0)
3925-
_len += snprintf(path + _len, sizeof(path) - _len, "%d", state_slot);
3926-
}
3927-
3928-
strlcpy(path + _len, FILE_PATH_PNG_EXTENSION, sizeof(path) - _len);
3905+
gfx_savestate_thumbnail_get_path(path, sizeof(path),
3906+
runloop_st->name.savestate, state_slot);
39293907

3930-
strlcpy(
3931-
ozone->savestate_thumbnail_file_path, path,
3908+
strlcpy(ozone->savestate_thumbnail_file_path, path,
39323909
sizeof(ozone->savestate_thumbnail_file_path));
39333910

3911+
if (!string_is_equal(current_path, ozone->savestate_thumbnail_file_path))
3912+
gfx_thumbnail_reset(&ozone->thumbnails.savestate);
3913+
39343914
ozone->flags |= OZONE_FLAG_WANT_THUMBNAIL_BAR
39353915
| OZONE_FLAG_FULLSCREEN_THUMBNAILS_AVAILABLE;
39363916

@@ -3960,21 +3940,11 @@ static void ozone_update_savestate_thumbnail_image(void *data)
39603940
/* If path is empty, just reset thumbnail */
39613941
if (string_is_empty(ozone->savestate_thumbnail_file_path))
39623942
gfx_thumbnail_reset(&ozone->thumbnails.savestate);
3963-
else
3964-
{
3965-
/* Only request thumbnail if:
3966-
* > Thumbnail has never been loaded *OR*
3967-
* > Thumbnail path has changed */
3968-
if ( (ozone->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_UNKNOWN)
3969-
|| !string_is_equal(ozone->savestate_thumbnail_file_path,
3970-
ozone->prev_savestate_thumbnail_file_path))
3971-
{
3972-
gfx_thumbnail_request_file(
3973-
ozone->savestate_thumbnail_file_path,
3974-
&ozone->thumbnails.savestate,
3975-
thumbnail_upscale_threshold);
3976-
}
3977-
}
3943+
else if (ozone->thumbnails.savestate.status == GFX_THUMBNAIL_STATUS_UNKNOWN)
3944+
gfx_thumbnail_request_file(
3945+
ozone->savestate_thumbnail_file_path,
3946+
&ozone->thumbnails.savestate,
3947+
thumbnail_upscale_threshold);
39783948

39793949
ozone->thumbnails.savestate.flags |= GFX_THUMB_FLAG_CORE_ASPECT;
39803950
}
@@ -9231,6 +9201,7 @@ static void *ozone_init(void **userdata, bool video_is_threaded)
92319201

92329202
ozone->flags |= OZONE_FLAG_FIRST_FRAME;
92339203

9204+
ozone->animations.left_thumbnail_alpha = 1.0f;
92349205
ozone->animations.sidebar_text_alpha = 1.0f;
92359206
ozone->animations.thumbnail_bar_position = 0.0f;
92369207
ozone->dimensions_sidebar_width = 0.0f;
@@ -9243,14 +9214,10 @@ static void *ozone_init(void **userdata, bool video_is_threaded)
92439214
if (!(ozone->screensaver = menu_screensaver_init()))
92449215
goto error;
92459216

9246-
ozone->savestate_thumbnail_file_path[0] = '\0';
9247-
ozone->prev_savestate_thumbnail_file_path[0] = '\0';
9248-
92499217
ozone->animations.fullscreen_thumbnail_alpha = 0.0f;
92509218
ozone->fullscreen_thumbnail_selection = 0;
92519219
ozone->fullscreen_thumbnail_label[0] = '\0';
9252-
9253-
ozone->animations.left_thumbnail_alpha = 1.0f;
9220+
ozone->savestate_thumbnail_file_path[0] = '\0';
92549221

92559222
ozone->thumbnails.pending = OZONE_PENDING_THUMBNAIL_NONE;
92569223
ozone->thumbnails.stream_delay = OZONE_THUMBNAIL_STREAM_DELAY;

0 commit comments

Comments
 (0)