diff --git a/config.def.h b/config.def.h index ac9993818e..31ad26e7e1 100644 --- a/config.def.h +++ b/config.def.h @@ -511,6 +511,7 @@ static bool default_block_config_read = true; static unsigned xmb_scale_factor = 100; static unsigned xmb_alpha_factor = 75; static unsigned xmb_theme = 0; +static bool xmb_shadows = false; static bool show_advanced_settings = true; static const uint32_t menu_entry_normal_color = 0xffffffff; diff --git a/configuration.c b/configuration.c index a679bb23a2..af0d5ec8b2 100644 --- a/configuration.c +++ b/configuration.c @@ -482,6 +482,7 @@ static void config_set_defaults(void) settings->menu.xmb_scale_factor = xmb_scale_factor; settings->menu.xmb_alpha_factor = xmb_alpha_factor; settings->menu.xmb_theme = xmb_theme; + settings->menu.xmb_shadows = xmb_shadows; settings->menu.xmb_font[0] = '\0'; settings->menu.throttle_framerate = true; settings->menu.linear_filter = true; @@ -1539,6 +1540,7 @@ static bool config_load_file(const char *path, bool set_defaults) CONFIG_GET_INT_BASE(conf, settings, menu.xmb_scale_factor, "xmb_scale_factor"); CONFIG_GET_INT_BASE(conf, settings, menu.xmb_alpha_factor, "xmb_alpha_factor"); CONFIG_GET_INT_BASE(conf, settings, menu.xmb_theme, "xmb_theme"); + CONFIG_GET_BOOL_BASE(conf, settings, menu.xmb_shadows, "xmb_shadows"); config_get_path(conf, "xmb_font", settings->menu.xmb_font, sizeof(settings->menu.xmb_font)); #endif config_get_array(conf, "video_context_driver", settings->video.context_driver, sizeof(settings->video.context_driver)); @@ -2770,6 +2772,7 @@ bool config_save_file(const char *path) config_set_int(conf, "xmb_scale_factor", settings->menu.xmb_scale_factor); config_set_int(conf, "xmb_alpha_factor", settings->menu.xmb_alpha_factor); config_set_int(conf, "xmb_theme", settings->menu.xmb_theme); + config_set_bool(conf, "xmb_shadows", settings->menu.xmb_shadows); config_set_path(conf, "xmb_font", !string_is_empty(settings->menu.xmb_font) ? settings->menu.xmb_font : ""); config_set_path(conf, "rgui_browser_directory", diff --git a/configuration.h b/configuration.h index 12d04a490b..c65499a82e 100644 --- a/configuration.h +++ b/configuration.h @@ -167,6 +167,7 @@ typedef struct settings unsigned xmb_scale_factor; unsigned xmb_alpha_factor; unsigned xmb_theme; + bool xmb_shadows; char xmb_font[PATH_MAX_LENGTH]; bool throttle_framerate; bool linear_filter; diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 07d544044a..e416245849 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -349,9 +349,11 @@ static void xmb_draw_icon_predone(xmb_handle_t *xmb, float alpha, float rotation, float scale_factor, float *color) { + settings_t *settings = config_get_ptr(); menu_display_ctx_draw_t draw; - struct gfx_coords coords; + float shadow[16]; + unsigned i; if ( x < -xmb->icon.size/2 || @@ -364,10 +366,7 @@ static void xmb_draw_icon_predone(xmb_handle_t *xmb, coords.vertex = NULL; coords.tex_coord = NULL; coords.lut_tex_coord = NULL; - coords.color = (const float*)color; - draw.x = x; - draw.y = height - y; draw.width = xmb->icon.size; draw.height = xmb->icon.size; draw.coords = &coords; @@ -375,6 +374,23 @@ static void xmb_draw_icon_predone(xmb_handle_t *xmb, draw.texture = texture; draw.prim_type = MENU_DISPLAY_PRIM_TRIANGLESTRIP; + if (settings->menu.xmb_shadows) + { + for (i = 0; i < 16; i++) + shadow[i] = 0; + shadow[3] = shadow[7] = shadow[11] = shadow[15] = color[3]; + + coords.color = shadow; + draw.x = x + 2; + draw.y = height - y - 2; + + menu_display_ctl(MENU_DISPLAY_CTL_DRAW, &draw); + } + + coords.color = (const float*)color; + draw.x = x; + draw.y = height - y; + menu_display_ctl(MENU_DISPLAY_CTL_DRAW, &draw); } @@ -454,6 +470,7 @@ static void xmb_draw_text(xmb_handle_t *xmb, enum text_alignment text_align, unsigned width, unsigned height) { + settings_t *settings = config_get_ptr(); struct font_params params; uint8_t a8 = 0; void *disp_buf = NULL; @@ -480,6 +497,12 @@ static void xmb_draw_text(xmb_handle_t *xmb, params.full_screen = true; params.text_align = text_align; + if (settings->menu.xmb_shadows) + { + params.drop_x = 2.0f; + params.drop_y = -2.0f; + } + menu_display_ctl(MENU_DISPLAY_CTL_FONT_BUF, &disp_buf); video_driver_set_osd_msg(str, ¶ms, disp_buf); diff --git a/menu/intl/menu_hash_us.c b/menu/intl/menu_hash_us.c index 22427caf4a..4324020e05 100644 --- a/menu/intl/menu_hash_us.c +++ b/menu/intl/menu_hash_us.c @@ -300,6 +300,8 @@ static const char *menu_hash_to_str_us_label(uint32_t hash) return "xmb_font"; case MENU_LABEL_XMB_THEME: return "xmb_theme"; + case MENU_LABEL_XMB_SHADOWS: + return "xmb_shadows"; case MENU_LABEL_XMB_SCALE_FACTOR: return "xmb_scale_factor"; case MENU_LABEL_XMB_ALPHA_FACTOR: @@ -1056,6 +1058,8 @@ const char *menu_hash_to_str_us(uint32_t hash) return "XMB Font"; case MENU_LABEL_VALUE_XMB_THEME: return "XMB Theme"; + case MENU_LABEL_VALUE_XMB_SHADOWS: + return "XMB Shadows"; case MENU_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE: return "Suspend Screensaver"; case MENU_LABEL_VALUE_VIDEO_DISABLE_COMPOSITION: diff --git a/menu/menu_hash.h b/menu/menu_hash.h index bf9ecf3aba..d2a8de218f 100644 --- a/menu/menu_hash.h +++ b/menu/menu_hash.h @@ -388,6 +388,8 @@ extern "C" { #define MENU_LABEL_VALUE_XMB_FONT 0x0020337E7 #define MENU_LABEL_XMB_THEME 0x824c5a7eU #define MENU_LABEL_VALUE_XMB_THEME 0x3603f65fU +#define MENU_LABEL_XMB_SHADOWS 0xf9859e24U +#define MENU_LABEL_VALUE_XMB_SHADOWS 0x7993b645U #define MENU_LABEL_VOLUME_UP 0xa66e9681U #define MENU_LABEL_VOLUME_DOWN 0xfc64f3d4U #define MENU_LABEL_LOG_VERBOSITY 0x6648c96dU diff --git a/menu/menu_setting.c b/menu/menu_setting.c index b2c47d65ea..ccca8bf0a8 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -5934,6 +5934,20 @@ static bool setting_append_list( general_write_handler, general_read_handler); menu_settings_list_current_add_range(list, list_info, 0, 2, 1, true, true); + + CONFIG_BOOL( + list, list_info, + &settings->menu.xmb_shadows, + menu_hash_to_str(MENU_LABEL_XMB_SHADOWS), + menu_hash_to_str(MENU_LABEL_VALUE_XMB_SHADOWS), + xmb_shadows, + menu_hash_to_str(MENU_VALUE_OFF), + menu_hash_to_str(MENU_VALUE_ON), + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler); } CONFIG_BOOL(