Skip to content

Commit

Permalink
(XMB) Background image improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
sonninnos committed Nov 8, 2023
1 parent a61812e commit 3edac59
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 57 deletions.
2 changes: 1 addition & 1 deletion config.def.h
Original file line number Diff line number Diff line change
Expand Up @@ -797,7 +797,7 @@
#endif

#define DEFAULT_MENU_FRAMEBUFFER_OPACITY 0.900f
#define DEFAULT_MENU_WALLPAPER_OPACITY 0.300f
#define DEFAULT_MENU_WALLPAPER_OPACITY 0.900f
#define DEFAULT_MENU_FOOTER_OPACITY 1.000f
#define DEFAULT_MENU_HEADER_OPACITY 1.000f

Expand Down
2 changes: 1 addition & 1 deletion intl/msg_hash_us.h
Original file line number Diff line number Diff line change
Expand Up @@ -6472,7 +6472,7 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_SUBLABEL_MENU_WALLPAPER,
"Select an image to set as menu background."
"Select an image to set as menu background. Manual and dynamic images will override 'Color Theme'."
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_MENU_WALLPAPER_OPACITY,
Expand Down
101 changes: 51 additions & 50 deletions menu/drivers/xmb.c
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,7 @@ typedef struct xmb_handle
char fullscreen_thumbnail_label[255];

bool allow_horizontal_animation;
bool allow_dynamic_wallpaper;
bool fullscreen_thumbnails_available;
bool show_fullscreen_thumbnails;
bool want_fullscreen_thumbnails;
Expand Down Expand Up @@ -1127,6 +1128,14 @@ static char* xmb_path_dynamic_wallpaper(xmb_handle_t *xmb)
const char *dir_dynamic_wallpapers = settings->paths.directory_dynamic_wallpapers;
unsigned depth = (unsigned)xmb_list_get_size(xmb, MENU_LIST_PLAIN);

if (!settings->bools.menu_dynamic_wallpaper_enable)
{
if (xmb->bg_file_path)
free(xmb->bg_file_path);
xmb->bg_file_path = strdup(settings->paths.path_menu_wallpaper);
return strdup(xmb->bg_file_path);
}

if (tmp)
{
len = fill_pathname_join_special(
Expand Down Expand Up @@ -1157,22 +1166,21 @@ static char* xmb_path_dynamic_wallpaper(xmb_handle_t *xmb)

static void xmb_update_dynamic_wallpaper(xmb_handle_t *xmb)
{
char *path = xmb_path_dynamic_wallpaper(xmb);
const char *path = xmb_path_dynamic_wallpaper(xmb);

if (!string_is_equal(path, xmb->bg_file_path))
{
if (path_is_valid(path))
{
task_push_image_load(path,
video_driver_supports_rgba(), 0,
menu_display_handle_wallpaper_upload, NULL);
if (!string_is_empty(xmb->bg_file_path))

if (xmb->bg_file_path)
free(xmb->bg_file_path);
xmb->bg_file_path = strdup(path);
}
}

free(path);
path = NULL;
}

static void xmb_update_savestate_thumbnail_path(void *data, unsigned i)
Expand Down Expand Up @@ -2838,7 +2846,8 @@ static void xmb_populate_entries(void *data,
xmb_list_open(xmb);

xmb_set_title(xmb);
if (menu_dynamic_wallpaper_enable)

if (xmb->allow_dynamic_wallpaper)
xmb_update_dynamic_wallpaper(xmb);

/* Determine whether to show entry index */
Expand Down Expand Up @@ -4757,12 +4766,18 @@ static enum menu_action xmb_parse_menu_entry_action(
menu_entry_get(&entry, 0, menu_st->selection_ptr, NULL, true);

/* Icon animations get stuck if they happen too fast,
therefore allow it only on the last action */
xmb->allow_horizontal_animation = false;
* therefore allow it only on the last action */
xmb->allow_horizontal_animation = false;
/* Prevent dynamic wallpaper flashing during jump */
xmb->allow_dynamic_wallpaper = false;

for (i = 0; i < current_tab; i++)
{
if (i == current_tab - 1)
xmb->allow_horizontal_animation = true;
{
xmb->allow_horizontal_animation = true;
xmb->allow_dynamic_wallpaper = true;
}

xmb_menu_entry_action(xmb,
&entry, menu_st->selection_ptr, MENU_ACTION_LEFT);
Expand Down Expand Up @@ -4971,8 +4986,7 @@ static void xmb_render(void *data,
/* Note: Direction is inverted, since 'down' should
* move list downwards */
if (pointer_x > margin_right)
xmb_menu_entry_action(xmb, &entry, selection,
MENU_ACTION_UP);
xmb_menu_entry_action(xmb, &entry, selection, MENU_ACTION_UP);
break;
case MENU_INPUT_PRESS_DIRECTION_LEFT:
/* Navigate left
Expand Down Expand Up @@ -5087,6 +5101,7 @@ static void xmb_draw_bg(
bool libretro_running,
float alpha,
uintptr_t texture_id,
const char *bg_file_path,
float *coord_black,
float *coord_white)
{
Expand All @@ -5112,10 +5127,11 @@ static void xmb_draw_bg(
dispctx->blend_begin(userdata);

/* Draw background wallpaper */
if (xmb_color_theme == XMB_THEME_WALLPAPER)
if ( xmb_color_theme == XMB_THEME_WALLPAPER
|| (!string_is_empty(bg_file_path) && !strstr(bg_file_path, FILE_PATH_BACKGROUND_IMAGE)))
{
if (draw.texture)
draw.color = &coord_white[0];
draw.color = &coord_white[0];

gfx_display_set_alpha(draw.color, coord_white[3]);
gfx_display_draw_bg(p_disp, &draw, userdata, true, menu_wallpaper_opacity);
Expand All @@ -5132,7 +5148,7 @@ static void xmb_draw_bg(
gfx_display_set_alpha(draw.color, coord_white[3]);
gfx_display_draw_bg(p_disp, &draw, userdata, true, alpha);

if (dispctx && dispctx->draw)
if (dispctx->draw)
dispctx->draw(&draw, userdata, video_width, video_height);
}

Expand Down Expand Up @@ -5788,6 +5804,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
libretro_running,
xmb_alpha_factor / 100,
xmb->textures.bg,
xmb->bg_file_path,
xmb_coord_black,
xmb_coord_white);

Expand Down Expand Up @@ -6869,9 +6886,9 @@ static void xmb_free(void *data)
video_coord_array_free(&xmb->raster_block.carr);
video_coord_array_free(&xmb->raster_block2.carr);

if (!string_is_empty(xmb->box_message))
if (xmb->box_message)
free(xmb->box_message);
if (!string_is_empty(xmb->bg_file_path))
if (xmb->bg_file_path)
free(xmb->bg_file_path);

menu_screensaver_free(xmb->screensaver);
Expand Down Expand Up @@ -7316,10 +7333,8 @@ static void xmb_context_reset_background(xmb_handle_t *xmb, const char *iconpath
{
char path[PATH_MAX_LENGTH];
settings_t *settings = config_get_ptr();
const char *path_menu_wp =
settings->paths.path_menu_wallpaper;
bool menu_dynamic_wallpaper_enable =
settings->bools.menu_dynamic_wallpaper_enable;
const char *path_menu_wp = settings->paths.path_menu_wallpaper;
bool menu_dynamic_wallpaper_enable = settings->bools.menu_dynamic_wallpaper_enable;

path[0] = '\0';

Expand All @@ -7329,60 +7344,43 @@ static void xmb_context_reset_background(xmb_handle_t *xmb, const char *iconpath
strlcpy(path, xmb_path_dynamic_wallpaper(xmb), sizeof(path));

if (!string_is_empty(path) && path_is_valid(path))
;/* no-op */
else if (!string_is_empty(path_menu_wp))
strlcpy(path, path_menu_wp, sizeof(path));
else if (!string_is_empty(iconpath))
fill_pathname_join_special(path, iconpath, FILE_PATH_BACKGROUND_IMAGE, sizeof(path));

if (path_is_valid(path))
{
task_push_image_load(path,
video_driver_supports_rgba(), 0,
menu_display_handle_wallpaper_upload, NULL);
}
else if (!string_is_empty(path_menu_wp))
{
if (path_is_valid(path_menu_wp))
task_push_image_load(path_menu_wp,
video_driver_supports_rgba(), 0,
menu_display_handle_wallpaper_upload, NULL);
}
else if (!string_is_empty(iconpath))
{
fill_pathname_join_special(path, iconpath,
FILE_PATH_BACKGROUND_IMAGE, sizeof(path));

if (path_is_valid(path))
task_push_image_load(path,
video_driver_supports_rgba(), 0,
menu_display_handle_wallpaper_upload, NULL);
if (xmb->bg_file_path)
free(xmb->bg_file_path);
xmb->bg_file_path = strdup(path);
}
}

static void xmb_context_reset_internal(xmb_handle_t *xmb,
bool is_threaded, bool reinit_textures)
{
char iconpath[PATH_MAX_LENGTH];
char bg_file_path[PATH_MAX_LENGTH];
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';
fontpath[0] = '\0';

fill_pathname_application_special(bg_file_path,
sizeof(bg_file_path),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_XMB_BG);

/* Do not reset wallpaper in "Load Content" playlists. */
if (!string_is_empty(bg_file_path) && xmb->depth < 2)
{
if (!string_is_empty(xmb->bg_file_path))
free(xmb->bg_file_path);
xmb->bg_file_path = strdup(bg_file_path);
}
iconpath[0] = '\0';
fontpath[0] = '\0';

fill_pathname_application_special(iconpath, sizeof(iconpath),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_XMB_ICONS);

xmb_layout(xmb);

if (xmb->font)
{
font_driver_free(xmb->font);
Expand Down Expand Up @@ -7433,7 +7431,10 @@ static void xmb_context_reset_internal(xmb_handle_t *xmb,
}
}
else
{
xmb->allow_horizontal_animation = true;
xmb->allow_dynamic_wallpaper = true;
}

xmb_context_reset_horizontal_list(xmb);

Expand Down
15 changes: 10 additions & 5 deletions menu/menu_setting.c
Original file line number Diff line number Diff line change
Expand Up @@ -8603,6 +8603,16 @@ static void general_write_handler(rarch_setting_t *setting)
default_aspect;
}
break;
case MENU_ENUM_LABEL_DYNAMIC_WALLPAPER:
{
/* Reset wallpaper by menu context reset */
struct menu_state *menu_st = menu_state_get_ptr();

if (menu_st->driver_ctx && menu_st->driver_ctx->context_reset)
menu_st->driver_ctx->context_reset(menu_st->userdata,
video_driver_is_threaded());
}
break;
default:
/* Special cases */

Expand Down Expand Up @@ -16885,7 +16895,6 @@ static bool setting_append_list(
general_read_handler);
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
menu_settings_list_current_add_range(list, list_info, 0.0, 1.0, 0.010, true, true);
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);
}

if (string_is_not_equal(settings->arrays.menu_driver, "rgui") &&
Expand All @@ -16905,7 +16914,6 @@ static bool setting_append_list(
general_read_handler);
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
menu_settings_list_current_add_range(list, list_info, 0.0, 1.0, 0.010, true, true);
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);
}

if (string_is_equal(settings->arrays.menu_driver, "xmb"))
Expand All @@ -16925,7 +16933,6 @@ static bool setting_append_list(
general_read_handler,
SD_FLAG_NONE
);
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);
}

CONFIG_BOOL(
Expand Down Expand Up @@ -17662,7 +17669,6 @@ static bool setting_append_list(
general_read_handler);
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
menu_settings_list_current_add_range(list, list_info, 0, 100, 1, true, true);
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);

CONFIG_UINT(
list, list_info,
Expand All @@ -17679,7 +17685,6 @@ static bool setting_append_list(
(*list)[list_info->index - 1].action_left = &setting_uint_action_left_with_refresh;
(*list)[list_info->index - 1].action_right = &setting_uint_action_right_with_refresh;
menu_settings_list_current_add_range(list, list_info, 0, 500, 1, true, true);
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);

CONFIG_BOOL(
list, list_info,
Expand Down

0 comments on commit 3edac59

Please sign in to comment.