Merge pull request #2884 from lakkatv/master

(XMB) Gradient improvements
This commit is contained in:
Twinaphex 2016-04-22 10:23:58 +02:00
commit 397861ee7e
9 changed files with 204 additions and 40 deletions

View File

@ -511,7 +511,8 @@ 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 unsigned xmb_gradient = 0;
static bool xmb_shadows_enable = false;
static bool xmb_ribbon_enable = false;
static bool show_advanced_settings = true;

View File

@ -483,7 +483,8 @@ 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_gradient = xmb_gradient;
settings->menu.xmb_shadows_enable = xmb_shadows_enable;
settings->menu.xmb_ribbon_enable = xmb_ribbon_enable;
settings->menu.xmb_font[0] = '\0';
settings->menu.throttle_framerate = true;
@ -1542,7 +1543,8 @@ 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_INT_BASE(conf, settings, menu.xmb_gradient, "xmb_gradient");
CONFIG_GET_BOOL_BASE(conf, settings, menu.xmb_shadows_enable, "xmb_shadows_enable");
CONFIG_GET_BOOL_BASE(conf, settings, menu.xmb_ribbon_enable, "xmb_ribbon_enable");
config_get_path(conf, "xmb_font", settings->menu.xmb_font, sizeof(settings->menu.xmb_font));
#endif
@ -2775,7 +2777,8 @@ 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_int(conf, "xmb_gradient", settings->menu.xmb_gradient);
config_set_bool(conf, "xmb_shadows_enable", settings->menu.xmb_shadows_enable);
config_set_bool(conf, "xmb_ribbon_enable", settings->menu.xmb_ribbon_enable);
config_set_path(conf, "xmb_font",
!string_is_empty(settings->menu.xmb_font) ? settings->menu.xmb_font : "");

View File

@ -167,7 +167,8 @@ typedef struct settings
unsigned xmb_scale_factor;
unsigned xmb_alpha_factor;
unsigned xmb_theme;
bool xmb_shadows;
unsigned xmb_gradient;
bool xmb_shadows_enable;
bool xmb_ribbon_enable;
char xmb_font[PATH_MAX_LENGTH];
bool throttle_framerate;

View File

@ -619,6 +619,48 @@ static void menu_action_setting_disp_set_label_xmb_theme(
}
}
static void menu_action_setting_disp_set_label_xmb_gradient(
file_list_t* list,
unsigned *w, unsigned type, unsigned i,
const char *label,
char *s, size_t len,
const char *entry_label,
const char *path,
char *s2, size_t len2)
{
settings_t *settings = config_get_ptr();
if (!settings)
return;
strlcpy(s2, path, len2);
*w = 19;
switch (settings->menu.xmb_gradient)
{
case 0:
snprintf(s, len, "%s", "Legacy Red");
break;
case 1:
snprintf(s, len, "%s", "Dark Purple");
break;
case 2:
snprintf(s, len, "%s", "Midnight Blue");
break;
case 3:
snprintf(s, len, "%s", "Golden");
break;
case 4:
snprintf(s, len, "%s", "Electric Blue");
break;
case 5:
snprintf(s, len, "%s", "Apple Green");
break;
case 6:
snprintf(s, len, "%s", "Undersea");
break;
}
}
static void menu_action_setting_disp_set_label_thumbnails(
file_list_t* list,
unsigned *w, unsigned type, unsigned i,
@ -1209,6 +1251,10 @@ static int menu_cbs_init_bind_get_string_representation_compare_label(
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_xmb_theme);
break;
case MENU_LABEL_XMB_GRADIENT:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_xmb_gradient);
break;
case MENU_LABEL_THUMBNAILS:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_thumbnails);

View File

@ -231,6 +231,56 @@ typedef struct xmb_handle
gfx_font_raster_block_t raster_block;
} xmb_handle_t;
float gradient_dark_purple[16] = {
20/255.0, 13/255.0, 20/255.0, 1.0,
20/255.0, 13/255.0, 20/255.0, 1.0,
92/255.0, 44/255.0, 92/255.0, 1.0,
148/255.0, 90/255.0, 148/255.0, 1.0,
};
float gradient_midnight_blue[16] = {
44/255.0, 62/255.0, 80/255.0, 1.0,
44/255.0, 62/255.0, 80/255.0, 1.0,
44/255.0, 62/255.0, 80/255.0, 1.0,
44/255.0, 62/255.0, 80/255.0, 1.0,
};
float gradient_golden[16] = {
174/255.0, 123/255.0, 44/255.0, 1.0,
205/255.0, 174/255.0, 84/255.0, 1.0,
58/255.0, 43/255.0, 24/255.0, 1.0,
58/255.0, 43/255.0, 24/255.0, 1.0,
};
float gradient_legacy_red[16] = {
171/255.0, 70/255.0, 59/255.0, 1.0,
171/255.0, 70/255.0, 59/255.0, 1.0,
190/255.0, 80/255.0, 69/255.0, 1.0,
190/255.0, 80/255.0, 69/255.0, 1.0,
};
float gradient_electric_blue[16] = {
1/255.0, 2/255.0, 67/255.0, 1.0,
1/255.0, 73/255.0, 183/255.0, 1.0,
1/255.0, 93/255.0, 194/255.0, 1.0,
3/255.0, 162/255.0, 254/255.0, 1.0,
};
float gradient_apple_green[16] = {
102/255.0, 134/255.0, 58/255.0, 1.0,
122/255.0, 131/255.0, 52/255.0, 1.0,
82/255.0, 101/255.0, 35/255.0, 1.0,
63/255.0, 95/255.0, 30/255.0, 1.0,
};
float gradient_undersea[16] = {
23/255.0, 18/255.0, 41/255.0, 1.0,
30/255.0, 72/255.0, 114/255.0, 1.0,
52/255.0, 88/255.0, 110/255.0, 1.0,
69/255.0, 125/255.0, 140/255.0, 1.0,
};
static const char *xmb_theme_ident(void)
{
settings_t *settings = config_get_ptr();
@ -270,6 +320,32 @@ static const char *xmb_thumbnails_ident(void)
return "OFF";
}
static float *xmb_gradient_ident(void)
{
settings_t *settings = config_get_ptr();
switch (settings->menu.xmb_gradient)
{
case 1:
return &gradient_dark_purple[0];
case 2:
return &gradient_midnight_blue[0];
case 3:
return &gradient_golden[0];
case 4:
return &gradient_electric_blue[0];
case 5:
return &gradient_apple_green[0];
case 6:
return &gradient_undersea[0];
case 0:
default:
break;
}
return &gradient_legacy_red[0];
}
static void xmb_fill_default_background_path(xmb_handle_t *xmb,
char *path, size_t size)
{
@ -405,7 +481,7 @@ static void xmb_draw_icon(
draw.texture = texture;
draw.prim_type = MENU_DISPLAY_PRIM_TRIANGLESTRIP;
if (settings->menu.xmb_shadows)
if (settings->menu.xmb_shadows_enable)
{
for (i = 0; i < 16; i++)
shadow[i] = 0;
@ -496,7 +572,7 @@ static void xmb_draw_text(xmb_handle_t *xmb,
params.full_screen = true;
params.text_align = text_align;
if (settings->menu.xmb_shadows)
if (settings->menu.xmb_shadows_enable)
{
params.drop_x = 2.0f;
params.drop_y = -2.0f;
@ -1830,6 +1906,9 @@ static void xmb_draw_bg(
if (settings->menu.xmb_ribbon_enable)
{
draw.color = xmb_gradient_ident();
menu_display_set_alpha(draw.color, coord_color[3]);
menu_display_ctl(MENU_DISPLAY_CTL_DRAW_GRADIENT, &draw);
menu_display_ctl(MENU_DISPLAY_CTL_DRAW_RIBBON, &draw);
}
else
@ -1842,6 +1921,43 @@ static void xmb_draw_bg(
menu_display_ctl(MENU_DISPLAY_CTL_BLEND_END, NULL);
}
static void xmb_draw_dark_layer(
xmb_handle_t *xmb,
unsigned width,
unsigned height)
{
menu_display_ctx_draw_t draw;
struct gfx_coords coords;
float black[16] = {
0, 0, 0, 1,
0, 0, 0, 1,
0, 0, 0, 1,
0, 0, 0, 1,
};
menu_display_set_alpha(black, xmb->alpha < 0.75 ? xmb->alpha : 0.75);
coords.vertices = 4;
coords.vertex = NULL;
coords.tex_coord = NULL;
coords.lut_tex_coord = NULL;
coords.color = &black[0];
draw.x = 0;
draw.y = 0;
draw.width = width;
draw.height = height;
draw.coords = &coords;
draw.matrix_data = NULL;
draw.texture = menu_display_white_texture;
draw.prim_type = MENU_DISPLAY_PRIM_TRIANGLESTRIP;
menu_display_ctl(MENU_DISPLAY_CTL_BLEND_BEGIN, NULL);
menu_display_ctl(MENU_DISPLAY_CTL_DRAW, &draw);
menu_display_ctl(MENU_DISPLAY_CTL_BLEND_END, NULL);
}
static void xmb_frame(void *data)
{
size_t selection;
@ -2073,15 +2189,7 @@ static void xmb_frame(void *data)
if (render_background)
{
xmb_draw_bg(
xmb,
width,
height,
xmb->alpha,
true,
xmb->textures.bg,
coord_color,
coord_color2);
xmb_draw_dark_layer(xmb, width, height);
xmb_render_messagebox_internal(xmb, msg);
}

View File

@ -300,8 +300,10 @@ 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_GRADIENT:
return "xmb_gradient";
case MENU_LABEL_XMB_SHADOWS_ENABLE:
return "xmb_shadows_enable";
case MENU_LABEL_XMB_RIBBON_ENABLE:
return "xmb_ribbon_enable";
case MENU_LABEL_XMB_SCALE_FACTOR:
@ -1060,8 +1062,10 @@ 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_XMB_GRADIENT:
return "XMB Gradient";
case MENU_LABEL_VALUE_XMB_SHADOWS_ENABLE:
return "XMB Shadows Enable";
case MENU_LABEL_VALUE_XMB_RIBBON_ENABLE:
return "XMB Ribbon Enable";
case MENU_LABEL_VALUE_SUSPEND_SCREENSAVER_ENABLE:

View File

@ -522,19 +522,7 @@ bool menu_display_ctl(enum menu_display_ctl_state state, void *data)
case MENU_DISPLAY_CTL_DRAW_GRADIENT:
{
menu_display_ctx_draw_t *draw = (menu_display_ctx_draw_t*)data;
float bg[16] = {
1, 0, 0.1, 1,
1, 0.1, 0, 1,
0.05, 0, 0.05, 1,
0.05, 0, 0.05, 1
};
bg[3] = draw->color[3];
bg[7] = draw->color[7];
bg[11] = draw->color[11];
bg[15] = draw->color[15];
draw->color = bg;
draw->texture = 0;
draw->x = 0;
draw->y = 0;
@ -552,8 +540,6 @@ bool menu_display_ctl(enum menu_display_ctl_state state, void *data)
menu_display_ctl(MENU_DISPLAY_CTL_COORDS_ARRAY_GET, &ca);
menu_display_ctl(MENU_DISPLAY_CTL_DRAW_GRADIENT, draw);
draw->x = 0;
draw->y = 0;
draw->coords = (struct gfx_coords*)(&ca->coords);

View File

@ -388,8 +388,10 @@ 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_XMB_GRADIENT 0x18e63099U
#define MENU_LABEL_VALUE_XMB_GRADIENT 0x8a520681U
#define MENU_LABEL_XMB_SHADOWS_ENABLE 0xd0fcc82aU
#define MENU_LABEL_VALUE_XMB_SHADOWS_ENABLE 0x5982498cU
#define MENU_LABEL_XMB_RIBBON_ENABLE 0x8e89c3edU
#define MENU_LABEL_VALUE_XMB_RIBBON_ENABLE 0xd53e09c8U
#define MENU_LABEL_VOLUME_UP 0xa66e9681U

View File

@ -5877,10 +5877,10 @@ static bool setting_append_list(
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,
&settings->menu.xmb_shadows_enable,
menu_hash_to_str(MENU_LABEL_XMB_SHADOWS_ENABLE),
menu_hash_to_str(MENU_LABEL_VALUE_XMB_SHADOWS_ENABLE),
xmb_shadows_enable,
menu_hash_to_str(MENU_VALUE_OFF),
menu_hash_to_str(MENU_VALUE_ON),
&group_info,
@ -5902,6 +5902,19 @@ static bool setting_append_list(
parent_group,
general_write_handler,
general_read_handler);
CONFIG_UINT(
list, list_info,
&settings->menu.xmb_gradient,
menu_hash_to_str(MENU_LABEL_XMB_GRADIENT),
menu_hash_to_str(MENU_LABEL_VALUE_XMB_GRADIENT),
xmb_gradient,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, 0, 6, 1, true, true);
}
CONFIG_BOOL(