Merge pull request #3395 from gitghostcoder/master

Reworked xmb driver to allow tab hiding
This commit is contained in:
Twinaphex 2016-08-17 19:53:09 +02:00 committed by GitHub
commit a8023b4957
10 changed files with 837 additions and 78 deletions

View File

@ -481,6 +481,12 @@ endif
ifeq ($(HAVE_XMB), 1)
OBJ += menu/drivers/xmb.o
DEFINES += -DHAVE_XMB
ifeq ($(HAVE_XMB_REQUIRESETTINGS), 1)
DEFINES += -DHAVE_XMB_REQUIRESETTINGS
endif
endif
ifeq ($(HAVE_KIOSK), 1)
DEFINES += -DHAVE_KIOSK
endif
endif

View File

@ -496,6 +496,21 @@ static void config_set_defaults(void)
settings->menu.xmb.shadows_enable = xmb_shadows_enable;
settings->menu.xmb.shader_pipeline = menu_shader_pipeline;
settings->menu.xmb.font[0] = '\0';
#ifdef HAVE_KIOSK
settings->menu.xmb.node_position_main = XMB_NODE_POSITION_NORMAL;
#endif
settings->menu.xmb.node_position_settings = XMB_NODE_POSITION_NORMAL;
#ifdef HAVE_IMAGEVIEWER
settings->menu.xmb.node_position_images = XMB_NODE_POSITION_NORMAL;
#endif
#ifdef HAVE_FFMPEG
settings->menu.xmb.node_position_music = XMB_NODE_POSITION_NORMAL;
settings->menu.xmb.node_position_video = XMB_NODE_POSITION_NORMAL;
#endif
settings->menu.xmb.node_position_history = XMB_NODE_POSITION_NORMAL;
#ifdef HAVE_LIBRETRODB
settings->menu.xmb.node_position_add = XMB_NODE_POSITION_NORMAL;
#endif
#endif
#ifdef HAVE_MATERIALUI
settings->menu.materialui.menu_color_theme = MATERIALUI_THEME_BLUE;
@ -1440,6 +1455,21 @@ static bool config_load_file(const char *path, bool set_defaults)
{ "xmb_theme", &settings->menu.xmb.theme},
#ifdef HAVE_XMB
{ "xmb_menu_color_theme", &settings->menu.xmb.menu_color_theme},
#ifdef HAVE_KIOSK
{ "xmb_node_position_main", &settings->menu.xmb.node_position_main},
#endif
{ "xmb_node_position_settings", &settings->menu.xmb.node_position_settings},
#ifdef HAVE_IMAGEVIEWER
{ "xmb_node_position_images", &settings->menu.xmb.node_position_images},
#endif
#ifdef HAVE_FFMPEG
{ "xmb_node_position_music", &settings->menu.xmb.node_position_music},
{ "xmb_node_position_video", &settings->menu.xmb.node_position_video},
#endif
{ "xmb_node_position_history", &settings->menu.xmb.node_position_history},
#ifdef HAVE_LIBRETRODB
{ "xmb_node_position_add", &settings->menu.xmb.node_position_add},
#endif
#endif
{ "materialui_menu_color_theme", &settings->menu.materialui.menu_color_theme},
{ "menu_shader_pipeline", &settings->menu.xmb.shader_pipeline},
@ -2946,6 +2976,21 @@ bool config_save_file(const char *path)
{ "xmb_theme", settings->menu.xmb.theme},
#ifdef HAVE_XMB
{ "xmb_menu_color_theme", settings->menu.xmb.menu_color_theme},
#ifdef HAVE_KIOSK
{ "xmb_node_position_main", settings->menu.xmb.node_position_main},
#endif
{ "xmb_node_position_settings", settings->menu.xmb.node_position_settings},
#ifdef HAVE_IMAGEVIEWER
{ "xmb_node_position_images", settings->menu.xmb.node_position_images},
#endif
#ifdef HAVE_FFMPEG
{ "xmb_node_position_music", settings->menu.xmb.node_position_music},
{ "xmb_node_position_video", settings->menu.xmb.node_position_video},
#endif
{ "xmb_node_position_history", settings->menu.xmb.node_position_history},
#ifdef HAVE_LIBRETRODB
{ "xmb_node_position_add", settings->menu.xmb.node_position_add},
#endif
#endif
{ "materialui_menu_color_theme", settings->menu.materialui.menu_color_theme},
{ "menu_shader_pipeline", settings->menu.xmb.shader_pipeline},

View File

@ -233,6 +233,23 @@ typedef struct settings
unsigned alpha_factor;
unsigned theme;
unsigned menu_color_theme;
#ifdef HAVE_XMB
#ifdef HAVE_KIOSK
unsigned node_position_main;
#endif
unsigned node_position_settings;
#ifdef HAVE_IMAGEVIEWER
unsigned node_position_images;
#endif
#ifdef HAVE_FFMPEG
unsigned node_position_music;
unsigned node_position_video;
#endif
unsigned node_position_history;
#ifdef HAVE_LIBRETRODB
unsigned node_position_add;
#endif
#endif
bool shadows_enable;
} xmb;

View File

@ -2420,6 +2420,30 @@ static const char *menu_hash_to_str_us_label_enum(enum msg_hash_enums msg)
return "xmb_theme";
case MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME:
return "xmb_menu_color_theme";
#ifdef HAVE_XMB
#ifdef HAVE_KIOSK
case MENU_ENUM_LABEL_XMB_NODE_POSITION_MAIN:
return "xmb_node_position_main";
#endif
case MENU_ENUM_LABEL_XMB_NODE_POSITION_SETTINGS:
return "xmb_node_position_settings";
#ifdef HAVE_IMAGEVIEWER
case MENU_ENUM_LABEL_XMB_NODE_POSITION_IMAGES:
return "xmb_node_position_images";
#endif
#ifdef HAVE_FFMPEG
case MENU_ENUM_LABEL_XMB_NODE_POSITION_MUSIC:
return "xmb_node_position_music";
case MENU_ENUM_LABEL_XMB_NODE_POSITION_VIDEO:
return "xmb_node_position_video";
#endif
case MENU_ENUM_LABEL_XMB_NODE_POSITION_HISTORY:
return "xmb_node_position_history";
#ifdef HAVE_LIBRETRODB
case MENU_ENUM_LABEL_XMB_NODE_POSITION_ADD:
return "xmb_node_position_add";
#endif
#endif
case MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME:
return "materialui_menu_color_theme";
case MENU_ENUM_LABEL_MATERIALUI_MENU_HEADER_OPACITY:
@ -2949,6 +2973,10 @@ const char *msg_hash_to_str_us(enum msg_hash_enums msg)
return "Volcanic Red";
case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK:
return "Dark";
#ifdef HAVE_XMB
case MENU_ENUM_LABEL_VALUE_XMB_MENU_NODE_POSITION_REORDERED:
return "REORDERED";
#endif
case MENU_ENUM_LABEL_VALUE_CHEEVOS_UNLOCKED_ENTRY:
return "Unlocked";
case MENU_ENUM_LABEL_VALUE_CHEEVOS_LOCKED_ENTRY:
@ -3711,6 +3739,30 @@ const char *msg_hash_to_str_us(enum msg_hash_enums msg)
return "Menu Icon Theme";
case MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME:
return "Menu Color Theme";
#ifdef HAVE_XMB
#ifdef HAVE_KIOSK
case MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_MAIN:
return "Show Main Menu";
#endif
case MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_SETTINGS:
return "Show Settings Menu";
#ifdef HAVE_IMAGEVIEWER
case MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_IMAGES:
return "Show Images Menu";
#endif
#ifdef HAVE_FFMPEG
case MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_MUSIC:
return "Show Music Menu";
case MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_VIDEO:
return "Show Video Menu";
#endif
case MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_HISTORY:
return "Show History Menu";
#ifdef HAVE_LIBRETRODB
case MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_ADD:
return "Show Import Menu";
#endif
#endif
case MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_COLOR_THEME:
return "Menu Color Theme";
case MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE:

View File

@ -783,6 +783,165 @@ static void menu_action_setting_disp_set_label_xmb_menu_color_theme(
}
}
#ifdef HAVE_XMB
#ifndef HAVE_KIOSK
static void menu_action_setting_disp_set_label_xmb_menu_node_position(
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, unsigned position)
{
strlcpy(s2, path, len2);
*w = 7;
switch (position)
{
case XMB_NODE_POSITION_HIDDEN:
strlcpy(s,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_OFF),
len);
break;
case XMB_NODE_POSITION_NORMAL:
strlcpy(s,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_ON),
len);
break;
default:
strlcpy(s,
msg_hash_to_str(
MENU_ENUM_LABEL_VALUE_XMB_MENU_NODE_POSITION_REORDERED),
len);
break;
}
}
static void menu_action_setting_disp_set_label_xmb_menu_node_position_settings(
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;
menu_action_setting_disp_set_label_xmb_menu_node_position(list,
w, type, i, label, s, len, entry_label, path, s2, len2,
settings->menu.xmb.node_position_settings);
}
#ifdef HAVE_IMAGEVIEWER
static void menu_action_setting_disp_set_label_xmb_menu_node_position_images(
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;
menu_action_setting_disp_set_label_xmb_menu_node_position(list,
w, type, i, label, s, len, entry_label, path, s2, len2,
settings->menu.xmb.node_position_images);
}
#endif
#ifdef HAVE_FFMPEG
static void menu_action_setting_disp_set_label_xmb_menu_node_position_music(
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;
menu_action_setting_disp_set_label_xmb_menu_node_position(list,
w, type, i, label, s, len, entry_label, path, s2, len2,
settings->menu.xmb.node_position_music);
}
static void menu_action_setting_disp_set_label_xmb_menu_node_position_video(
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;
menu_action_setting_disp_set_label_xmb_menu_node_position(list,
w, type, i, label, s, len, entry_label, path, s2, len2,
settings->menu.xmb.node_position_video);
}
#endif
static void menu_action_setting_disp_set_label_xmb_menu_node_position_history(
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;
menu_action_setting_disp_set_label_xmb_menu_node_position(list,
w, type, i, label, s, len, entry_label, path, s2, len2,
settings->menu.xmb.node_position_history);
}
#ifdef HAVE_LIBRETRODB
static void menu_action_setting_disp_set_label_xmb_menu_node_position_add(
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;
menu_action_setting_disp_set_label_xmb_menu_node_position(list,
w, type, i, label, s, len, entry_label, path, s2, len2,
settings->menu.xmb.node_position_add);
}
#endif
#endif
#endif
static void menu_action_setting_disp_set_label_materialui_menu_color_theme(
file_list_t* list,
unsigned *w, unsigned type, unsigned i,
@ -1532,6 +1691,40 @@ static int menu_cbs_init_bind_get_string_representation_compare_label(
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_xmb_menu_color_theme);
break;
#ifdef HAVE_XMB
#ifndef HAVE_KIOSK
case MENU_ENUM_LABEL_XMB_NODE_POSITION_SETTINGS:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_xmb_menu_node_position_settings);
break;
#ifdef HAVE_IMAGEVIEWER
case MENU_ENUM_LABEL_XMB_NODE_POSITION_IMAGES:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_xmb_menu_node_position_images);
break;
#endif
#ifdef HAVE_FFMPEG
case MENU_ENUM_LABEL_XMB_NODE_POSITION_MUSIC:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_xmb_menu_node_position_music);
break;
case MENU_ENUM_LABEL_XMB_NODE_POSITION_VIDEO:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_xmb_menu_node_position_video);
break;
#endif
case MENU_ENUM_LABEL_XMB_NODE_POSITION_HISTORY:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_xmb_menu_node_position_history);
break;
#ifdef HAVE_LIBRETRODB
case MENU_ENUM_LABEL_XMB_NODE_POSITION_ADD:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_xmb_menu_node_position_add);
break;
#endif
#endif
#endif
case MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME:
BIND_ACTION_GET_VALUE(cbs,
menu_action_setting_disp_set_label_materialui_menu_color_theme);

View File

@ -107,6 +107,7 @@ enum
XMB_TEXTURE_CURSOR,
XMB_TEXTURE_SWITCH_ON,
XMB_TEXTURE_SWITCH_OFF,
XMB_TEXTURE_SWITCH_REORDERED,
XMB_TEXTURE_CLOCK,
XMB_TEXTURE_POINTER,
XMB_TEXTURE_ADD,
@ -134,6 +135,13 @@ enum
#define XMB_SYSTEM_TAB_END XMB_SYSTEM_TAB_HISTORY
#endif
enum
{
XMB_PLAYLIST_DIFFERENCE = XMB_SYSTEM_TAB_END + 1,
XMB_PLAYLIST_LEFT,
XMB_PLAYLIST_RIGHT
};
typedef struct xmb_handle
{
file_list_t *menu_stack_old;
@ -263,9 +271,17 @@ typedef struct xmb_handle
xmb_node_t history_tab_node;
xmb_node_t add_tab_node;
unsigned tab_positions[XMB_PLAYLIST_RIGHT + 1];
video_font_raster_block_t raster_block;
} xmb_handle_t;
typedef struct xmb_tab_position_key
{
unsigned internal;
unsigned configured;
} xmb_tab_position_key_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,
@ -424,7 +440,7 @@ static size_t xmb_list_get_size(void *data, enum menu_list_type type)
return file_list_get_size(xmb->horizontal_list);
break;
case MENU_LIST_TABS:
return XMB_SYSTEM_TAB_END;
return xmb->tab_positions[XMB_PLAYLIST_DIFFERENCE];
}
return 0;
@ -448,6 +464,7 @@ static void *xmb_list_get_entry(void *data, enum menu_list_type type, unsigned i
case MENU_LIST_HORIZONTAL:
if (xmb && xmb->horizontal_list)
list_size = file_list_get_size(xmb->horizontal_list);
i += 1 + xmb->tab_positions[XMB_PLAYLIST_DIFFERENCE] - xmb->tab_positions[XMB_PLAYLIST_LEFT];
if (i < list_size)
return (void*)&xmb->horizontal_list->list[i];
break;
@ -997,7 +1014,7 @@ static xmb_node_t *xmb_node_allocate_userdata(xmb_handle_t *xmb, unsigned i)
node->alpha = xmb->categories.passive.alpha;
node->zoom = xmb->categories.passive.zoom;
if ((i + XMB_SYSTEM_TAB_END) == xmb->categories.active.idx)
if ((i + xmb->tab_positions[XMB_PLAYLIST_DIFFERENCE]) == xmb->categories.active.idx)
{
node->alpha = xmb->categories.active.alpha;
node->zoom = xmb->categories.active.zoom;
@ -1125,7 +1142,8 @@ static void xmb_list_switch_new(xmb_handle_t *xmb,
static void xmb_set_title(xmb_handle_t *xmb)
{
if (xmb->categories.selection_ptr <= XMB_SYSTEM_TAB_END)
if (xmb->categories.selection_ptr < xmb->tab_positions[XMB_PLAYLIST_LEFT]
|| xmb->categories.selection_ptr > xmb->tab_positions[XMB_PLAYLIST_RIGHT])
{
menu_entries_get_title(xmb->title_name, sizeof(xmb->title_name));
}
@ -1134,7 +1152,7 @@ static void xmb_set_title(xmb_handle_t *xmb)
const char *path = NULL;
menu_entries_get_at_offset(
xmb->horizontal_list,
xmb->categories.selection_ptr - (XMB_SYSTEM_TAB_END + 1),
xmb->categories.selection_ptr - xmb->tab_positions[XMB_PLAYLIST_LEFT],
&path, NULL, NULL, NULL, NULL);
if (!path)
@ -1144,10 +1162,38 @@ static void xmb_set_title(xmb_handle_t *xmb)
}
}
static unsigned xmb_get_system_tab(xmb_handle_t *xmb, unsigned i)
{
/* transform global index into the internal index */
if (i == xmb->tab_positions[XMB_SYSTEM_TAB_MAIN])
return XMB_SYSTEM_TAB_MAIN;
else if (i == xmb->tab_positions[XMB_SYSTEM_TAB_SETTINGS])
return XMB_SYSTEM_TAB_SETTINGS;
#ifdef HAVE_IMAGEVIEWER
else if (i == xmb->tab_positions[XMB_SYSTEM_TAB_IMAGES])
return XMB_SYSTEM_TAB_IMAGES;
#endif
#ifdef HAVE_FFMPEG
else if (i == xmb->tab_positions[XMB_SYSTEM_TAB_VIDEO])
return XMB_SYSTEM_TAB_VIDEO;
else if (i == xmb->tab_positions[XMB_SYSTEM_TAB_MUSIC])
return XMB_SYSTEM_TAB_MUSIC;
#endif
else if (i == xmb->tab_positions[XMB_SYSTEM_TAB_HISTORY])
return XMB_SYSTEM_TAB_HISTORY;
else if (i == xmb->tab_positions[XMB_SYSTEM_TAB_ADD])
return XMB_SYSTEM_TAB_ADD;
else
return UINT_MAX;
return UINT_MAX;
}
static xmb_node_t* xmb_get_node(xmb_handle_t *xmb, unsigned i)
{
switch (i)
switch (xmb_get_system_tab(xmb, i))
{
case XMB_SYSTEM_TAB_MAIN:
return &xmb->main_menu_node;
case XMB_SYSTEM_TAB_SETTINGS:
return &xmb->settings_tab_node;
#ifdef HAVE_IMAGEVIEWER
@ -1165,9 +1211,10 @@ static xmb_node_t* xmb_get_node(xmb_handle_t *xmb, unsigned i)
case XMB_SYSTEM_TAB_ADD:
return &xmb->add_tab_node;
default:
if (i > XMB_SYSTEM_TAB_END)
if (i >= xmb->tab_positions[XMB_PLAYLIST_LEFT]
&& i <= xmb->tab_positions[XMB_PLAYLIST_RIGHT])
return xmb_get_userdata_from_horizontal_list(
xmb, i - (XMB_SYSTEM_TAB_END + 1));
xmb, i - xmb->tab_positions[XMB_PLAYLIST_LEFT]);
}
return &xmb->main_menu_node;
@ -1177,9 +1224,9 @@ static void xmb_list_switch_horizontal_list(xmb_handle_t *xmb)
{
unsigned j;
size_t list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ XMB_SYSTEM_TAB_END;
+ xmb->tab_positions[XMB_PLAYLIST_DIFFERENCE];
for (j = 0; j <= list_size; j++)
for (j = 0; j < list_size; j++)
{
menu_animation_ctx_entry_t entry;
float ia = xmb->categories.passive.alpha;
@ -1257,9 +1304,9 @@ static void xmb_list_open_horizontal_list(xmb_handle_t *xmb)
{
unsigned j;
size_t list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ XMB_SYSTEM_TAB_END;
+ xmb->tab_positions[XMB_PLAYLIST_DIFFERENCE];
for (j = 0; j <= list_size; j++)
for (j = 0; j < list_size; j++)
{
menu_animation_ctx_entry_t entry;
float ia = 0;
@ -1308,6 +1355,150 @@ static void xmb_context_destroy_horizontal_list(xmb_handle_t *xmb)
}
}
static int xmb_sort_tab_position(const xmb_tab_position_key_t *a,
const xmb_tab_position_key_t *b)
{
if (a->configured == b->configured)
return a->internal - b->internal;
return a->configured - b->configured;
}
static void xmb_init_tab_positions(xmb_handle_t *xmb, settings_t *settings)
{
unsigned configured_position_main = XMB_NODE_POSITION_NORMAL;
unsigned configured_position_settings = settings->menu.xmb.node_position_settings;
#ifdef HAVE_IMAGEVIEWER
unsigned configured_position_images = settings->menu.xmb.node_position_images;
#endif
#ifdef HAVE_FFMPEG
unsigned configured_position_music = settings->menu.xmb.node_position_music;
unsigned configured_position_video = settings->menu.xmb.node_position_video;
#endif
unsigned configured_position_history = settings->menu.xmb.node_position_history;
#ifdef HAVE_LIBRETRODB
unsigned configured_position_add = settings->menu.xmb.node_position_add;
#endif
size_t list_size = file_list_get_size(xmb->horizontal_list);
unsigned i = 0;
/* adjust the configured positions for the needs of some distributions */
#ifdef HAVE_KIOSK
/* configured_position_main = settings->menu.xmb.node_position_main; */
#endif
#if defined(HAVE_XMB_REQUIRESETTINGS) && !defined(HAVE_KIOSK)
if (configured_position_settings == XMB_NODE_POSITION_HIDDEN)
configured_position_settings = XMB_NODE_POSITION_NORMAL;
#endif
/* adjust the configured positions depending on history */
if (settings->history_list_enable)
{
if ( configured_position_history == XMB_NODE_POSITION_HIDDEN
#ifdef HAVE_IMAGEVIEWER
&& configured_position_images == XMB_NODE_POSITION_HIDDEN
#endif
#ifdef HAVE_FFMPEG
&& configured_position_music == XMB_NODE_POSITION_HIDDEN
&& configured_position_video == XMB_NODE_POSITION_HIDDEN
#endif
)
{
/* reset history tabs if history is enabled without any way to see the history */
configured_position_history = XMB_NODE_POSITION_NORMAL;
settings->menu.xmb.node_position_history = configured_position_history;
#ifdef HAVE_IMAGEVIEWER
configured_position_images = XMB_NODE_POSITION_NORMAL;
settings->menu.xmb.node_position_images = configured_position_images;
#endif
#ifdef HAVE_FFMPEG
configured_position_music = XMB_NODE_POSITION_NORMAL;
settings->menu.xmb.node_position_music = configured_position_music;
configured_position_video = XMB_NODE_POSITION_NORMAL;
settings->menu.xmb.node_position_video = configured_position_video;
#endif
#ifndef HAVE_KIOSK
command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL);
#endif
}
}
else
{
if ( configured_position_history != XMB_NODE_POSITION_HIDDEN
#ifdef HAVE_IMAGEVIEWER
|| configured_position_images != XMB_NODE_POSITION_HIDDEN
#endif
#ifdef HAVE_FFMPEG
|| configured_position_music != XMB_NODE_POSITION_HIDDEN
|| configured_position_video != XMB_NODE_POSITION_HIDDEN
#endif
)
{
/* enable history if any tabs are history shown */
settings->history_list_enable = true;
if (!settings->content_history_size)
settings->content_history_size = 1;
command_event(CMD_EVENT_HISTORY_INIT, NULL);
#ifndef HAVE_KIOSK
command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL);
#endif
}
}
xmb_tab_position_key_t keys[XMB_SYSTEM_TAB_END + 1] = {
#ifdef HAVE_IMAGEVIEWER
{XMB_SYSTEM_TAB_IMAGES, configured_position_images},
#endif
#ifdef HAVE_FFMPEG
{XMB_SYSTEM_TAB_MUSIC, configured_position_music},
{XMB_SYSTEM_TAB_VIDEO, configured_position_video},
#endif
#ifdef HAVE_LIBRETRODB
{XMB_SYSTEM_TAB_ADD, configured_position_add},
#endif
{XMB_SYSTEM_TAB_MAIN, configured_position_main},
{XMB_SYSTEM_TAB_SETTINGS, configured_position_settings},
{XMB_SYSTEM_TAB_HISTORY, configured_position_history}
};
qsort(&keys, ARRAY_SIZE(keys),
sizeof(*keys),
(int (*)(const void *, const void *))xmb_sort_tab_position);
/* discard hidden tabs */
for (i = 0; i < ARRAY_SIZE(keys) && keys[i].configured == XMB_NODE_POSITION_HIDDEN; i++)
{
xmb->tab_positions[keys[i].internal] = UINT_MAX;
}
/* close any gaps pushing leftmost using the now sorted keys */
for (; i < ARRAY_SIZE(keys) && keys[i].configured < XMB_NODE_POSITION_RIGHT; i++)
{
xmb->tab_positions[keys[i].internal] = xmb->tab_positions[XMB_PLAYLIST_DIFFERENCE]++;
xmb->tab_positions[XMB_PLAYLIST_LEFT] += 1;
}
for (; i < ARRAY_SIZE(keys) && keys[i].configured >= XMB_NODE_POSITION_RIGHT; i++)
{
xmb->tab_positions[keys[i].internal] = list_size + xmb->tab_positions[XMB_PLAYLIST_DIFFERENCE]++;
xmb->tab_positions[XMB_PLAYLIST_RIGHT] += 1;
}
/* adjust playlist limits */
if (list_size)
xmb->tab_positions[XMB_PLAYLIST_RIGHT] = xmb->tab_positions[XMB_PLAYLIST_LEFT] + list_size - 1;
else
{
xmb->tab_positions[XMB_PLAYLIST_LEFT] += xmb->tab_positions[XMB_PLAYLIST_RIGHT];
xmb->tab_positions[XMB_PLAYLIST_RIGHT] = 0;
if (!xmb->tab_positions[XMB_PLAYLIST_DIFFERENCE])
{
/* reset main to guarantee at least one menu can be shown */
xmb->tab_positions[XMB_SYSTEM_TAB_MAIN] = 0;
xmb->tab_positions[XMB_PLAYLIST_DIFFERENCE] = 1;
xmb->tab_positions[XMB_PLAYLIST_LEFT] = 1;
}
}
}
static void xmb_init_horizontal_list(xmb_handle_t *xmb)
{
menu_displaylist_info_t info = {0};
@ -1333,16 +1524,19 @@ static void xmb_init_horizontal_list(xmb_handle_t *xmb)
strlcpy(info.exts, "lpl", sizeof(info.exts));
if (menu_displaylist_ctl(DISPLAYLIST_DATABASE_PLAYLISTS_HORIZONTAL, &info))
{
xmb_init_tab_positions(xmb, settings);
menu_displaylist_ctl(DISPLAYLIST_PROCESS, &info);
}
}
static void xmb_toggle_horizontal_list(xmb_handle_t *xmb)
{
unsigned i;
size_t list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ XMB_SYSTEM_TAB_END;
+ xmb->tab_positions[XMB_PLAYLIST_DIFFERENCE];
for (i = 0; i <= list_size; i++)
for (i = 0; i < list_size; i++)
{
xmb_node_t *node = xmb_get_node(xmb, i);
@ -1608,7 +1802,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
return core_node->content_icon;
#if defined(HAVE_IMAGEVIEWER) || defined(HAVE_FFMPEG)
switch (xmb->categories.selection_ptr)
switch (xmb_get_system_tab(xmb, xmb->categories.selection_ptr))
{
#ifdef HAVE_IMAGEVIEWER
case XMB_SYSTEM_TAB_IMAGES:
@ -1694,9 +1888,10 @@ static void xmb_draw_items(xmb_handle_t *xmb,
if (!list || !list->size)
return;
if (cat_selection_ptr > XMB_SYSTEM_TAB_END)
if (cat_selection_ptr >= xmb->tab_positions[XMB_PLAYLIST_LEFT]
&& cat_selection_ptr <= xmb->tab_positions[XMB_PLAYLIST_RIGHT])
core_node = xmb_get_userdata_from_horizontal_list(
xmb, cat_selection_ptr - (XMB_SYSTEM_TAB_END + 1));
xmb, cat_selection_ptr - xmb->tab_positions[XMB_PLAYLIST_LEFT]);
end = file_list_get_size(list);
@ -1757,7 +1952,8 @@ static void xmb_draw_items(xmb_handle_t *xmb,
if (string_is_equal(entry.value, "disabled") ||
string_is_equal(entry.value, "off"))
string_is_equal(entry.value, "off") ||
string_is_equal(entry.value, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_OFF)))
{
if (xmb->textures.list[XMB_TEXTURE_SWITCH_OFF])
texture_switch = xmb->textures.list[XMB_TEXTURE_SWITCH_OFF];
@ -1765,13 +1961,22 @@ static void xmb_draw_items(xmb_handle_t *xmb,
do_draw_text = true;
}
else if (string_is_equal(entry.value, "enabled") ||
string_is_equal(entry.value, "on"))
string_is_equal(entry.value, "on") ||
string_is_equal(entry.value, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_ON)))
{
if (xmb->textures.list[XMB_TEXTURE_SWITCH_ON])
texture_switch = xmb->textures.list[XMB_TEXTURE_SWITCH_ON];
else
do_draw_text = true;
}
else if (string_is_equal(entry.value, "reordered_tab") ||
string_is_equal(entry.value, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_XMB_MENU_NODE_POSITION_REORDERED)))
{
if (xmb->textures.list[XMB_TEXTURE_SWITCH_REORDERED])
texture_switch = xmb->textures.list[XMB_TEXTURE_SWITCH_REORDERED];
else
do_draw_text = true;
}
else
{
switch (msg_hash_to_file_type(msg_hash_calculate(entry.value)))
@ -2227,8 +2432,8 @@ static void xmb_frame(void *data)
menu_display_blend_begin();
/* Horizontal tab icons */
for (i = 0; i <= xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ XMB_SYSTEM_TAB_END; i++)
for (i = 0; i < xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ xmb->tab_positions[XMB_PLAYLIST_DIFFERENCE]; i++)
{
xmb_node_t *node = xmb_get_node(xmb, i);
@ -2781,6 +2986,8 @@ static const char *xmb_texture_path(unsigned id)
return "on.png";
case XMB_TEXTURE_SWITCH_OFF:
return "off.png";
case XMB_TEXTURE_SWITCH_REORDERED:
return "reordered.png";
case XMB_TEXTURE_ADD:
return "add.png";
}
@ -3043,7 +3250,7 @@ static void xmb_list_cache(void *data, enum menu_list_type type, unsigned action
xmb->selection_ptr_old = selection;
list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ XMB_SYSTEM_TAB_END;
+ xmb->tab_positions[XMB_PLAYLIST_DIFFERENCE];
switch (type)
{
@ -3057,14 +3264,14 @@ static void xmb_list_cache(void *data, enum menu_list_type type, unsigned action
case MENU_ACTION_LEFT:
if (xmb->categories.selection_ptr == 0)
{
xmb->categories.selection_ptr = list_size;
xmb->categories.active.idx = list_size - 1;
xmb->categories.selection_ptr = list_size - 1;
xmb->categories.active.idx = list_size - 2;
}
else
xmb->categories.selection_ptr--;
break;
default:
if (xmb->categories.selection_ptr == list_size)
if (xmb->categories.selection_ptr == (list_size - 1))
{
xmb->categories.selection_ptr = 0;
xmb->categories.active.idx = 1;
@ -3080,7 +3287,7 @@ static void xmb_list_cache(void *data, enum menu_list_type type, unsigned action
free(menu_stack->list[stack_size - 1].label);
menu_stack->list[stack_size - 1].label = NULL;
switch (xmb->categories.selection_ptr)
switch (xmb_get_system_tab(xmb, xmb->categories.selection_ptr))
{
case XMB_SYSTEM_TAB_MAIN:
menu_stack->list[stack_size - 1].label =
@ -3236,6 +3443,10 @@ static int xmb_list_push(void *data, void *userdata,
menu_displaylist_ctx_parse_entry_t entry;
int ret = -1;
menu_handle_t *menu = (menu_handle_t*)data;
#ifdef HAVE_KIOSK
bool hide_entries = false;
settings_t *settings;
#endif
switch (type)
{
@ -3247,55 +3458,74 @@ static int xmb_list_push(void *data, void *userdata,
entry.parse_type = PARSE_ACTION;
entry.add_empty_entry = false;
#ifdef HAVE_KIOSK
settings = config_get_ptr();
if (settings->menu.xmb.node_position_main == XMB_NODE_POSITION_HIDDEN)
hide_entries = true;
#endif
if (!rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
{
entry.enum_idx = MENU_ENUM_LABEL_CONTENT_SETTINGS;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
}
if (menu_driver_ctl(RARCH_MENU_CTL_HAS_LOAD_NO_CONTENT, NULL))
#ifdef HAVE_KIOSK
if (!hide_entries)
#endif
{
entry.enum_idx = MENU_ENUM_LABEL_START_CORE;
if (menu_driver_ctl(RARCH_MENU_CTL_HAS_LOAD_NO_CONTENT, NULL))
{
entry.enum_idx = MENU_ENUM_LABEL_START_CORE;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
}
entry.enum_idx = MENU_ENUM_LABEL_START_VIDEO_PROCESSOR;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
}
entry.enum_idx = MENU_ENUM_LABEL_START_VIDEO_PROCESSOR;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
entry.enum_idx = MENU_ENUM_LABEL_START_NET_RETROPAD;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
entry.enum_idx = MENU_ENUM_LABEL_START_NET_RETROPAD;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
#ifndef HAVE_DYNAMIC
if (frontend_driver_has_fork())
if (frontend_driver_has_fork())
#endif
{
entry.enum_idx = MENU_ENUM_LABEL_CORE_LIST;
{
entry.enum_idx = MENU_ENUM_LABEL_CORE_LIST;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
}
entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
entry.enum_idx = MENU_ENUM_LABEL_ADD_CONTENT_LIST;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
#if defined(HAVE_NETWORKING)
entry.enum_idx = MENU_ENUM_LABEL_ONLINE_UPDATER;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
#endif
}
entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
entry.enum_idx = MENU_ENUM_LABEL_ADD_CONTENT_LIST;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
#if defined(HAVE_NETWORKING)
entry.enum_idx = MENU_ENUM_LABEL_ONLINE_UPDATER;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
#endif
entry.enum_idx = MENU_ENUM_LABEL_INFORMATION_LIST;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
#ifndef HAVE_DYNAMIC
entry.enum_idx = MENU_ENUM_LABEL_RESTART_RETROARCH;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
#endif
entry.enum_idx = MENU_ENUM_LABEL_CONFIGURATIONS;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
entry.enum_idx = MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
#ifdef HAVE_KIOSK
if (!hide_entries)
#endif
{
entry.enum_idx = MENU_ENUM_LABEL_CONFIGURATIONS;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
entry.enum_idx = MENU_ENUM_LABEL_SAVE_NEW_CONFIG;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
entry.enum_idx = MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
entry.enum_idx = MENU_ENUM_LABEL_SAVE_NEW_CONFIG;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);
}
entry.enum_idx = MENU_ENUM_LABEL_HELP_LIST;
menu_displaylist_ctl(DISPLAYLIST_SETTING_ENUM, &entry);

View File

@ -65,6 +65,21 @@ enum xmb_icon_theme
XMB_ICON_THEME_CUSTOM
};
#ifdef HAVE_XMB
enum xmb_node_position
{
XMB_NODE_POSITION_HIDDEN = 0,
XMB_NODE_POSITION_NORMAL = 1,
XMB_NODE_POSITION_RIGHT = 9,
XMB_NODE_POSITION_LAST = (XMB_NODE_POSITION_RIGHT - 1) * 2
};
#ifdef HAVE_KIOSK
#define XMB_NODE_POSITION_END XMB_NODE_POSITION_LAST
#else
#define XMB_NODE_POSITION_END XMB_NODE_POSITION_NORMAL
#endif
#endif
enum xmb_shader_pipeline
{
XMB_SHADER_PIPELINE_WALLPAPER = 0,

View File

@ -2647,9 +2647,13 @@ static int menu_displaylist_parse_load_content_settings(
menu_displaylist_info_t *info)
{
menu_handle_t *menu = NULL;
#ifdef HAVE_CHEEVOS
#if defined(HAVE_CHEEVOS) || defined(HAVE_KIOSK)
settings_t *settings = config_get_ptr();
#endif
#ifdef HAVE_KIOSK
bool hide_entries = false;
#endif
if (!menu_driver_ctl(RARCH_MENU_CTL_DRIVER_DATA_GET, &menu))
return -1;
@ -2657,6 +2661,13 @@ static int menu_displaylist_parse_load_content_settings(
{
rarch_system_info_t *system = NULL;
#ifdef HAVE_KIOSK
#ifdef HAVE_XMB
if (!settings->menu.xmb.node_position_main && !settings->menu.show_advanced_settings)
hide_entries = true;
#endif
#endif
runloop_ctl(RUNLOOP_CTL_SYSTEM_INFO_GET, &system);
menu_entries_append_enum(info->list,
@ -2710,39 +2721,43 @@ static int menu_displaylist_parse_load_content_settings(
MENU_ENUM_LABEL_UNDO_SAVE_STATE,
MENU_SETTING_ACTION_LOADSTATE, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_OPTIONS),
MENU_ENUM_LABEL_CORE_OPTIONS,
MENU_SETTING_ACTION, 0, 0);
if (core_has_set_input_descriptor())
#ifdef HAVE_KIOSK
if (!hide_entries)
#endif
{
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS),
MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_OPTIONS),
MENU_ENUM_LABEL_CORE_OPTIONS,
MENU_SETTING_ACTION, 0, 0);
if (core_has_set_input_descriptor())
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_INPUT_REMAPPING_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS),
MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS),
MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS,
MENU_SETTING_ACTION, 0, 0);
if ( (!rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
&& system && system->disk_control_cb.get_num_images)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_DISK_OPTIONS),
MENU_ENUM_LABEL_DISK_OPTIONS,
MENU_SETTING_ACTION_CORE_DISK_OPTIONS, 0, 0);
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_CHEAT_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS),
MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS,
MENU_SETTING_ACTION, 0, 0);
if ( (!rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL))
&& system && system->disk_control_cb.get_num_images)
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_DISK_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_DISK_OPTIONS),
MENU_ENUM_LABEL_DISK_OPTIONS,
MENU_SETTING_ACTION_CORE_DISK_OPTIONS, 0, 0);
#ifdef HAVE_SHADER_MANAGER
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_SHADER_OPTIONS),
MENU_ENUM_LABEL_SHADER_OPTIONS,
MENU_SETTING_ACTION, 0, 0);
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_SHADER_OPTIONS),
msg_hash_to_str(MENU_ENUM_LABEL_SHADER_OPTIONS),
MENU_ENUM_LABEL_SHADER_OPTIONS,
MENU_SETTING_ACTION, 0, 0);
#endif
}
#ifdef HAVE_CHEEVOS
if(settings->cheevos.enable)
menu_entries_append_enum(info->list,
@ -4654,6 +4669,39 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false);
#ifdef HAVE_XMB
#ifdef HAVE_KIOSK
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_NODE_POSITION_MAIN,
PARSE_ONLY_UINT, false);
#endif
#if !defined(HAVE_XMB_REQUIRESETTINGS) || defined(HAVE_KIOSK)
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_NODE_POSITION_SETTINGS,
PARSE_ONLY_UINT, false);
#endif
#ifdef HAVE_IMAGEVIEWER
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_NODE_POSITION_IMAGES,
PARSE_ONLY_UINT, false);
#endif
#ifdef HAVE_FFMPEG
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_NODE_POSITION_MUSIC,
PARSE_ONLY_UINT, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_NODE_POSITION_VIDEO,
PARSE_ONLY_UINT, false);
#endif
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_NODE_POSITION_HISTORY,
PARSE_ONLY_UINT, false);
#ifdef HAVE_LIBRETRODB
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_XMB_NODE_POSITION_ADD,
PARSE_ONLY_UINT, false);
#endif
#endif
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false);

View File

@ -7020,6 +7020,121 @@ static bool setting_append_list(
general_read_handler);
menu_settings_list_current_add_range(list, list_info, 0, XMB_THEME_LAST-1, 1, true, true);
menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME);
#ifdef HAVE_KIOSK
CONFIG_UINT(
list, list_info,
&settings->menu.xmb.node_position_main,
msg_hash_to_str(MENU_ENUM_LABEL_XMB_NODE_POSITION_MAIN),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_MAIN),
XMB_NODE_POSITION_NORMAL,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, XMB_NODE_POSITION_HIDDEN, XMB_NODE_POSITION_END, 1, true, true);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_XMB_NODE_POSITION_MAIN);
#endif
#if !defined(HAVE_XMB_REQUIRESETTINGS) || defined(HAVE_KIOSK)
CONFIG_UINT(
list, list_info,
&settings->menu.xmb.node_position_settings,
msg_hash_to_str(MENU_ENUM_LABEL_XMB_NODE_POSITION_SETTINGS),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_SETTINGS),
XMB_NODE_POSITION_NORMAL,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, XMB_NODE_POSITION_HIDDEN, XMB_NODE_POSITION_END, 1, true, true);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_XMB_NODE_POSITION_SETTINGS);
#endif
#ifdef HAVE_IMAGEVIEWER
CONFIG_UINT(
list, list_info,
&settings->menu.xmb.node_position_images,
msg_hash_to_str(MENU_ENUM_LABEL_XMB_NODE_POSITION_IMAGES),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_IMAGES),
XMB_NODE_POSITION_NORMAL,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, XMB_NODE_POSITION_HIDDEN, XMB_NODE_POSITION_END, 1, true, true);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_XMB_NODE_POSITION_IMAGES);
#endif
#ifdef HAVE_FFMPEG
CONFIG_UINT(
list, list_info,
&settings->menu.xmb.node_position_music,
msg_hash_to_str(MENU_ENUM_LABEL_XMB_NODE_POSITION_MUSIC),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_MUSIC),
XMB_NODE_POSITION_NORMAL,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, XMB_NODE_POSITION_HIDDEN, XMB_NODE_POSITION_END, 1, true, true);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_XMB_NODE_POSITION_MUSIC);
CONFIG_UINT(
list, list_info,
&settings->menu.xmb.node_position_video,
msg_hash_to_str(MENU_ENUM_LABEL_XMB_NODE_POSITION_VIDEO),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_VIDEO),
XMB_NODE_POSITION_NORMAL,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, XMB_NODE_POSITION_HIDDEN, XMB_NODE_POSITION_END, 1, true, true);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_XMB_NODE_POSITION_VIDEO);
#endif
CONFIG_UINT(
list, list_info,
&settings->menu.xmb.node_position_history,
msg_hash_to_str(MENU_ENUM_LABEL_XMB_NODE_POSITION_HISTORY),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_HISTORY),
XMB_NODE_POSITION_NORMAL,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, XMB_NODE_POSITION_HIDDEN, XMB_NODE_POSITION_END, 1, true, true);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_XMB_NODE_POSITION_HISTORY);
#ifdef HAVE_LIBRETRODB
CONFIG_UINT(
list, list_info,
&settings->menu.xmb.node_position_add,
msg_hash_to_str(MENU_ENUM_LABEL_XMB_NODE_POSITION_ADD),
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_ADD),
XMB_NODE_POSITION_NORMAL,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler);
menu_settings_list_current_add_range(list, list_info, XMB_NODE_POSITION_HIDDEN, XMB_NODE_POSITION_END, 1, true, true);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED);
menu_settings_list_current_add_enum_idx(list, list_info, MENU_ENUM_LABEL_XMB_NODE_POSITION_ADD);
#endif
}
#endif

View File

@ -322,6 +322,10 @@ enum msg_hash_enums
MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_VOLCANIC_RED,
MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_DARK,
MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME_PLAIN,
#ifdef HAVE_XMB
MENU_ENUM_LABEL_VALUE_XMB_MENU_NODE_POSITION_REORDERED,
#endif
MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON_SIMPLIFIED,
MENU_ENUM_LABEL_VALUE_SHADER_PIPELINE_RIBBON,
@ -561,6 +565,23 @@ enum msg_hash_enums
MENU_ENUM_LABEL_XMB_FONT,
MENU_ENUM_LABEL_XMB_THEME,
MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME,
#ifdef HAVE_XMB
#ifdef HAVE_KIOSK
MENU_ENUM_LABEL_XMB_NODE_POSITION_MAIN,
#endif
MENU_ENUM_LABEL_XMB_NODE_POSITION_SETTINGS,
#ifdef HAVE_IMAGEVIEWER
MENU_ENUM_LABEL_XMB_NODE_POSITION_IMAGES,
#endif
#ifdef HAVE_FFMPEG
MENU_ENUM_LABEL_XMB_NODE_POSITION_MUSIC,
MENU_ENUM_LABEL_XMB_NODE_POSITION_VIDEO,
#endif
MENU_ENUM_LABEL_XMB_NODE_POSITION_HISTORY,
#ifdef HAVE_LIBRETRODB
MENU_ENUM_LABEL_XMB_NODE_POSITION_ADD,
#endif
#endif
MENU_ENUM_LABEL_XMB_SHADOWS_ENABLE,
MENU_ENUM_LABEL_XMB_RIBBON_ENABLE,
MENU_ENUM_LABEL_THUMBNAILS,
@ -583,6 +604,23 @@ enum msg_hash_enums
MENU_ENUM_LABEL_VALUE_XMB_FONT,
MENU_ENUM_LABEL_VALUE_XMB_THEME,
MENU_ENUM_LABEL_VALUE_XMB_MENU_COLOR_THEME,
#ifdef HAVE_XMB
#ifdef HAVE_KIOSK
MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_MAIN,
#endif
MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_SETTINGS,
#ifdef HAVE_IMAGEVIEWER
MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_IMAGES,
#endif
#ifdef HAVE_FFMPEG
MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_MUSIC,
MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_VIDEO,
#endif
MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_HISTORY,
#ifdef HAVE_LIBRETRODB
MENU_ENUM_LABEL_VALUE_XMB_NODE_POSITION_ADD,
#endif
#endif
MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE,
MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE,
MENU_ENUM_LABEL_VALUE_THUMBNAILS,