From 6da346f4566795f70bda81a215eb8646b3ea6300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Andr=C3=A9=20Santoni?= Date: Thu, 4 Jun 2015 17:17:23 +0700 Subject: [PATCH] (XMB) Dynamic wallpapers --- configuration.c | 13 +++++++++++++ configuration.h | 2 ++ menu/drivers/xmb.c | 20 ++++++++++++++++++++ menu/menu_setting.c | 36 ++++++++++++++++++++++++++++++++++++ retroarch.cfg | 7 +++++++ 5 files changed, 78 insertions(+) diff --git a/configuration.c b/configuration.c index 6afc0df4c6..b4b4efcb2a 100644 --- a/configuration.c +++ b/configuration.c @@ -548,6 +548,7 @@ static void config_set_defaults(void) settings->menu.pointer.enable = pointer_enable; settings->menu.timedate_enable = true; settings->menu.core_enable = true; + settings->menu.dynamic_wallpaper_enable = false; *settings->menu.wallpaper = '\0'; settings->menu.collapse_subgroups_enable = collapse_subgroups_enable; settings->menu.show_advanced_settings = show_advanced_settings; @@ -672,6 +673,7 @@ static void config_set_defaults(void) *settings->input.overlay = '\0'; *settings->core_assets_directory = '\0'; *settings->assets_directory = '\0'; + *settings->dynamic_wallpapers_directory = '\0'; *settings->playlist_directory = '\0'; *settings->video.shader_path = '\0'; *settings->video.shader_dir = '\0'; @@ -1209,6 +1211,7 @@ static bool config_load_file(const char *path, bool set_defaults) CONFIG_GET_BOOL_BASE(conf, settings, menu.pointer.enable, "menu_pointer_enable"); CONFIG_GET_BOOL_BASE(conf, settings, menu.timedate_enable, "menu_timedate_enable"); CONFIG_GET_BOOL_BASE(conf, settings, menu.core_enable, "menu_core_enable"); + CONFIG_GET_BOOL_BASE(conf, settings, menu.dynamic_wallpaper_enable, "menu_dynamic_wallpaper_enable"); CONFIG_GET_BOOL_BASE(conf, settings, menu.navigation.wraparound.horizontal_enable, "menu_navigation_wraparound_horizontal_enable"); CONFIG_GET_BOOL_BASE(conf, settings, menu.navigation.wraparound.vertical_enable, "menu_navigation_wraparound_vertical_enable"); CONFIG_GET_BOOL_BASE(conf, settings, menu.navigation.browser.filter.supported_extensions_enable, "menu_navigation_browser_filter_supported_extensions_enable"); @@ -1442,11 +1445,14 @@ static bool config_load_file(const char *path, bool set_defaults) config_get_path(conf, "input_remapping_directory", settings->input_remapping_directory, sizeof(settings->input_remapping_directory)); config_get_path(conf, "core_assets_directory", settings->core_assets_directory, sizeof(settings->core_assets_directory)); config_get_path(conf, "assets_directory", settings->assets_directory, sizeof(settings->assets_directory)); + config_get_path(conf, "dynamic_wallpapers_directory", settings->dynamic_wallpapers_directory, sizeof(settings->dynamic_wallpapers_directory)); config_get_path(conf, "playlist_directory", settings->playlist_directory, sizeof(settings->playlist_directory)); if (!strcmp(settings->core_assets_directory, "default")) *settings->core_assets_directory = '\0'; if (!strcmp(settings->assets_directory, "default")) *settings->assets_directory = '\0'; + if (!strcmp(settings->dynamic_wallpapers_directory, "default")) + *settings->dynamic_wallpapers_directory = '\0'; if (!strcmp(settings->playlist_directory, "default")) *settings->playlist_directory = '\0'; #ifdef HAVE_MENU @@ -2325,6 +2331,7 @@ bool config_save_file(const char *path) config_set_bool(conf,"menu_pointer_enable", settings->menu.pointer.enable); config_set_bool(conf,"menu_timedate_enable", settings->menu.timedate_enable); config_set_bool(conf,"menu_core_enable", settings->menu.core_enable); + config_set_bool(conf,"menu_dynamic_wallpaper_enable", settings->menu.dynamic_wallpaper_enable); config_set_path(conf, "menu_wallpaper", settings->menu.wallpaper); #endif config_set_bool(conf, "video_vsync", settings->video.vsync); @@ -2408,6 +2415,12 @@ bool config_save_file(const char *path) config_set_path(conf, "assets_directory", *settings->assets_directory ? settings->assets_directory : "default"); + config_set_path(conf, "dynamic_wallpapers_directory", + *settings->dynamic_wallpapers_directory ? + settings->dynamic_wallpapers_directory : "default"); + config_set_path(conf, "dynamic_wallpapers_directory", + *settings->dynamic_wallpapers_directory ? + settings->dynamic_wallpapers_directory : "default"); config_set_path(conf, "playlist_directory", *settings->playlist_directory ? settings->playlist_directory : "default"); diff --git a/configuration.h b/configuration.h index 9f374941b1..05098b053d 100644 --- a/configuration.h +++ b/configuration.h @@ -111,6 +111,7 @@ typedef struct settings bool pause_libretro; bool timedate_enable; bool core_enable; + bool dynamic_wallpaper_enable; bool throttle; char wallpaper[PATH_MAX_LENGTH]; @@ -311,6 +312,7 @@ typedef struct settings char core_assets_directory[PATH_MAX_LENGTH]; char assets_directory[PATH_MAX_LENGTH]; + char dynamic_wallpapers_directory[PATH_MAX_LENGTH]; char menu_config_directory[PATH_MAX_LENGTH]; #if defined(HAVE_MENU) char menu_content_directory[PATH_MAX_LENGTH]; diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index fb1751360f..fa39b066b9 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -696,10 +696,30 @@ static void xmb_list_switch_new(xmb_handle_t *xmb, unsigned i; size_t end = 0; menu_handle_t *menu = menu_driver_get_ptr(); + settings_t *settings = config_get_ptr(); if (!menu) return; + if (settings->menu.dynamic_wallpaper_enable) + { + char path[PATH_MAX_LENGTH]; + + char *tmp = string_replace_substring(xmb->title_name, "/", " "); + + if (tmp) + { + fill_pathname_join(path, settings->dynamic_wallpapers_directory, tmp, sizeof(path)); + free(tmp); + } + + strlcat(path, ".png", sizeof(path)); + + if (path_file_exists(path)) + rarch_main_data_msg_queue_push(DATA_TYPE_IMAGE, path, + "cb_menu_wallpaper", 0, 1, true); + } + end = file_list_get_size(list); for (i = 0; i < end; i++) diff --git a/menu/menu_setting.c b/menu/menu_setting.c index b8a0fe5f85..10f4c5ae6b 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -2606,6 +2606,15 @@ int setting_get_description(const char *label, char *s, "menu interfaces try to look for loadable \n" "assets, etc."); } + else if (!strcmp(label, "dynamic_wallpapers_directory")) + { + snprintf(s, len, + " -- Dynamic Wallpapers Directory. \n" + " \n" + " The place to store wallpapers that will \n" + "be loaded dynamically by the menu depending \n" + "on context."); + } else if (!strcmp(label, "slowmotion_ratio")) { snprintf(s, len, @@ -5536,6 +5545,18 @@ static bool setting_append_list_menu_options( menu_settings_list_current_add_values(list, list_info, "png"); settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_EMPTY); + CONFIG_BOOL( + settings->menu.dynamic_wallpaper_enable, + "menu_dynamic_wallpaper_enable", + "Dynamic Wallpaper", + true, + "OFF", + "ON", + group_info.name, + subgroup_info.name, + general_write_handler, + general_read_handler); + CONFIG_BOOL( settings->menu.pause_libretro, "menu_pause_libretro", @@ -6274,6 +6295,21 @@ static bool setting_append_list_directory_options( list_info, SD_FLAG_ALLOW_EMPTY | SD_FLAG_PATH_DIR | SD_FLAG_BROWSER_ACTION); + CONFIG_DIR( + settings->dynamic_wallpapers_directory, + "dynamic_wallpapers_directory", + "Dynamic Wallpapers Directory", + "", + "", + group_info.name, + subgroup_info.name, + general_write_handler, + general_read_handler); + settings_data_list_current_add_flags( + list, + list_info, + SD_FLAG_ALLOW_EMPTY | SD_FLAG_PATH_DIR | SD_FLAG_BROWSER_ACTION); + CONFIG_DIR( settings->menu_content_directory, "rgui_browser_directory", diff --git a/retroarch.cfg b/retroarch.cfg index bc137801b4..9733a6f4b5 100644 --- a/retroarch.cfg +++ b/retroarch.cfg @@ -89,6 +89,10 @@ # loadable assets, etc. # assets_directory = +# Dynamic wallpapers directory. The place to store the wallpapers dynamically +# loaded by the menu depending on context. +# dynamic_wallpapers_directory = + # Sets start directory for menu config browser. # rgui_config_directory = @@ -615,6 +619,9 @@ # Path to a .png image to set as menu wallpaper. # menu_wallpaper = +# Dynamically load a new wallpaper depending on context. +# menu_dynamic_wallpaper_enable = false + # Wrap-around toe beginning and/or end if boundary of list reached horizontally # menu_navigation_wraparound_horizontal_enable = false