Skip to content

Commit

Permalink
GLUI: Add save state thumbnails (#17592)
Browse files Browse the repository at this point in the history
  • Loading branch information
sonninnos authored Feb 18, 2025
1 parent cd85a4d commit 73abadd
Show file tree
Hide file tree
Showing 12 changed files with 1,659 additions and 848 deletions.
12 changes: 11 additions & 1 deletion gfx/gfx_thumbnail.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@

#include "../tasks/tasks_internal.h"

#define DEFAULT_GFX_THUMBNAIL_STREAM_DELAY 83.333333f
#define DEFAULT_GFX_THUMBNAIL_STREAM_DELAY 16.66667f * 3
#define DEFAULT_GFX_THUMBNAIL_FADE_DURATION 166.66667f

/* Utility structure, sent as userdata when pushing
Expand Down Expand Up @@ -886,6 +886,16 @@ void gfx_thumbnail_get_draw_dimensions(
*draw_width = *draw_width / (thumbnail_aspect / core_aspect);
}

/* Final overwidth check */
if (*draw_width > width)
{
*draw_width = (float)width;
*draw_height = (float)thumbnail->height * (*draw_width / (float)thumbnail->width);

if (thumbnail->flags & GFX_THUMB_FLAG_CORE_ASPECT)
*draw_height = *draw_height * (thumbnail_aspect / core_aspect);
}

/* Account for scale factor
* > Side note: We cannot use the gfx_display_ctx_draw_t
* 'scale_factor' parameter for scaling thumbnails,
Expand Down
10 changes: 0 additions & 10 deletions menu/cbs/menu_cbs_cancel.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,16 +83,6 @@ int action_cancel_pop_default(const char *path,
new_selection_ptr = menu_st->selection_ptr;
menu_entries_pop_stack(&new_selection_ptr, 0, 1);
menu_st->selection_ptr = new_selection_ptr;

if (menu_st->driver_ctx)
{
if (menu_st->driver_ctx->update_savestate_thumbnail_path)
menu_st->driver_ctx->update_savestate_thumbnail_path(
menu_st->userdata, (unsigned)selection);
if (menu_st->driver_ctx->update_savestate_thumbnail_image)
menu_st->driver_ctx->update_savestate_thumbnail_image(menu_st->userdata);
}

return 0;
}

Expand Down
21 changes: 7 additions & 14 deletions menu/cbs/menu_cbs_left.c
Original file line number Diff line number Diff line change
Expand Up @@ -951,25 +951,25 @@ static int action_left_video_gpu_index(unsigned type, const char *label,
static int action_left_state_slot(unsigned type, const char *label,
bool wraparound)
{
struct menu_state *menu_st = menu_state_get_ptr();
settings_t *settings = config_get_ptr();
struct menu_state *menu_st = menu_state_get_ptr();
settings_t *settings = config_get_ptr();

settings->ints.state_slot--;
if (settings->ints.state_slot < -1)
settings->ints.state_slot = 999;

if (menu_st->driver_ctx)
{
size_t selection = menu_st->selection_ptr;
if (menu_st->driver_ctx->update_savestate_thumbnail_path)
menu_st->driver_ctx->update_savestate_thumbnail_path(
menu_st->userdata, (unsigned)selection);
menu_st->userdata, (unsigned)menu_st->selection_ptr);
if (menu_st->driver_ctx->update_savestate_thumbnail_image)
menu_st->driver_ctx->update_savestate_thumbnail_image(menu_st->userdata);
}

return 0;
}

static int action_left_replay_slot(unsigned type, const char *label,
bool wraparound)
{
Expand All @@ -980,16 +980,6 @@ static int action_left_replay_slot(unsigned type, const char *label,
if (settings->ints.replay_slot < -1)
settings->ints.replay_slot = 999;

if (menu_st->driver_ctx)
{
size_t selection = menu_st->selection_ptr;
if (menu_st->driver_ctx->update_savestate_thumbnail_path)
menu_st->driver_ctx->update_savestate_thumbnail_path(
menu_st->userdata, (unsigned)selection);
if (menu_st->driver_ctx->update_savestate_thumbnail_image)
menu_st->driver_ctx->update_savestate_thumbnail_image(menu_st->userdata);
}

return 0;
}

Expand Down Expand Up @@ -1103,6 +1093,9 @@ static int menu_cbs_init_bind_left_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_CORE_NAME:
BIND_ACTION_LEFT(cbs, manual_content_scan_core_name_left);
break;
case MENU_ENUM_LABEL_STATE_SLOT:
BIND_ACTION_LEFT(cbs, action_left_state_slot);
break;
#ifdef HAVE_LAKKA
case MENU_ENUM_LABEL_CPU_PERF_MODE:
BIND_ACTION_LEFT(cbs, cpu_policy_mode_change);
Expand Down
9 changes: 0 additions & 9 deletions menu/cbs/menu_cbs_ok.c
Original file line number Diff line number Diff line change
Expand Up @@ -4687,15 +4687,6 @@ static int action_ok_cheat_delete(const char *path,
menu_entries_pop_stack(&new_selection_ptr, 0, 1);
menu_st->selection_ptr = new_selection_ptr;

if (menu_st->driver_ctx)
{
if (menu_st->driver_ctx->update_savestate_thumbnail_path)
menu_st->driver_ctx->update_savestate_thumbnail_path(
menu_st->userdata, (unsigned)selection);
if (menu_st->driver_ctx->update_savestate_thumbnail_image)
menu_st->driver_ctx->update_savestate_thumbnail_image(menu_st->userdata);
}

return 0;
}
#endif
Expand Down
18 changes: 5 additions & 13 deletions menu/cbs/menu_cbs_right.c
Original file line number Diff line number Diff line change
Expand Up @@ -951,19 +951,18 @@ static int disk_options_disk_idx_right(unsigned type, const char *label,
static int action_right_state_slot(unsigned type, const char *label,
bool wraparound)
{
settings_t *settings = config_get_ptr();
struct menu_state *menu_st = menu_state_get_ptr();
settings_t *settings = config_get_ptr();

settings->ints.state_slot++;
if (settings->ints.state_slot > 999)
settings->ints.state_slot = -1;

if (menu_st->driver_ctx)
{
size_t selection = menu_st->selection_ptr;
if (menu_st->driver_ctx->update_savestate_thumbnail_path)
menu_st->driver_ctx->update_savestate_thumbnail_path(
menu_st->userdata, (unsigned)selection);
menu_st->userdata, (unsigned)menu_st->selection_ptr);
if (menu_st->driver_ctx->update_savestate_thumbnail_image)
menu_st->driver_ctx->update_savestate_thumbnail_image(menu_st->userdata);
}
Expand All @@ -975,22 +974,12 @@ static int action_right_replay_slot(unsigned type, const char *label,
bool wraparound)
{
struct menu_state *menu_st = menu_state_get_ptr();
size_t selection = menu_st->selection_ptr;
settings_t *settings = config_get_ptr();

settings->ints.replay_slot++;
if (settings->ints.replay_slot > 999)
settings->ints.replay_slot = -1;

if (menu_st->driver_ctx)
{
if (menu_st->driver_ctx->update_savestate_thumbnail_path)
menu_st->driver_ctx->update_savestate_thumbnail_path(
menu_st->userdata, (unsigned)selection);
if (menu_st->driver_ctx->update_savestate_thumbnail_image)
menu_st->driver_ctx->update_savestate_thumbnail_image(menu_st->userdata);
}

return 0;
}

Expand Down Expand Up @@ -1242,6 +1231,9 @@ static int menu_cbs_init_bind_right_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_CORE_NAME:
BIND_ACTION_RIGHT(cbs, manual_content_scan_core_name_right);
break;
case MENU_ENUM_LABEL_STATE_SLOT:
BIND_ACTION_RIGHT(cbs, action_right_state_slot);
break;
#ifdef HAVE_LAKKA
case MENU_ENUM_LABEL_CPU_PERF_MODE:
BIND_ACTION_RIGHT(cbs, cpu_policy_mode_change);
Expand Down
3 changes: 1 addition & 2 deletions menu/cbs/menu_cbs_start.c
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,6 @@ static int action_start_state_slot(
unsigned type, size_t idx, size_t entry_idx)
{
struct menu_state *menu_st = menu_state_get_ptr();
size_t selection = menu_st->selection_ptr;
settings_t *settings = config_get_ptr();

settings->ints.state_slot = 0;
Expand All @@ -494,7 +493,7 @@ static int action_start_state_slot(
{
if (menu_st->driver_ctx->update_savestate_thumbnail_path)
menu_st->driver_ctx->update_savestate_thumbnail_path(
menu_st->userdata, (unsigned)selection);
menu_st->userdata, (unsigned)menu_st->selection_ptr);
if (menu_st->driver_ctx->update_savestate_thumbnail_image)
menu_st->driver_ctx->update_savestate_thumbnail_image(menu_st->userdata);
}
Expand Down
Loading

0 comments on commit 73abadd

Please sign in to comment.