XMB asset handling refactors also do not show black boxes

This commit is contained in:
alfrix 2018-11-29 14:47:46 -03:00
parent a24a788e52
commit ab34b21f8d
1 changed files with 218 additions and 311 deletions

View File

@ -205,6 +205,8 @@ enum
XMB_TEXTURE_MENU_ADD, XMB_TEXTURE_MENU_ADD,
XMB_TEXTURE_BRIGHTNESS, XMB_TEXTURE_BRIGHTNESS,
XMB_TEXTURE_PAUSE, XMB_TEXTURE_PAUSE,
XMB_TEXTURE_DEFAULT,
XMB_TEXTURE_DEFAULT_CONTENT,
XMB_TEXTURE_LAST XMB_TEXTURE_LAST
}; };
@ -234,6 +236,7 @@ typedef struct xmb_handle
{ {
bool mouse_show; bool mouse_show;
bool use_ps3_layout; bool use_ps3_layout;
bool assets_missing;
uint8_t system_tab_end; uint8_t system_tab_end;
uint8_t tabs[XMB_SYSTEM_TAB_MAX_LENGTH]; uint8_t tabs[XMB_SYSTEM_TAB_MAX_LENGTH];
@ -2571,6 +2574,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
return xmb->textures.list[XMB_TEXTURE_CURSOR]; return xmb->textures.list[XMB_TEXTURE_CURSOR];
case FILE_TYPE_PLAYLIST_ENTRY: case FILE_TYPE_PLAYLIST_ENTRY:
case MENU_SETTING_ACTION_RUN: case MENU_SETTING_ACTION_RUN:
return xmb->textures.list[XMB_TEXTURE_RUN];
case MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS: case MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS:
return xmb->textures.list[XMB_TEXTURE_RESUME]; return xmb->textures.list[XMB_TEXTURE_RESUME];
case MENU_SETTING_ACTION_CLOSE: case MENU_SETTING_ACTION_CLOSE:
@ -2954,7 +2958,14 @@ static int xmb_draw_item(
menu_display_set_alpha(color, MIN(node->alpha, xmb->alpha)); menu_display_set_alpha(color, MIN(node->alpha, xmb->alpha));
if (color[3] != 0) if (
(!xmb->assets_missing) &&
(color[3] != 0) &&
(
(entry->checked) ||
!((entry_type >= MENU_SETTING_DROPDOWN_ITEM) && (entry_type <= MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM_SPECIAL))
)
)
{ {
math_matrix_4x4 mymat_tmp; math_matrix_4x4 mymat_tmp;
menu_display_ctx_rotate_draw_t rotate_draw; menu_display_ctx_rotate_draw_t rotate_draw;
@ -2975,31 +2986,24 @@ static int xmb_draw_item(
menu_display_rotate_z(&rotate_draw, video_info); menu_display_rotate_z(&rotate_draw, video_info);
if ( xmb_draw_icon(video_info,
(entry->checked) || xmb->icon_size,
!((entry_type >= MENU_SETTING_DROPDOWN_ITEM) && &mymat_tmp,
(entry_type <= MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM_SPECIAL)) texture,
) x,
{ y,
xmb_draw_icon(video_info, width,
xmb->icon_size, height,
&mymat_tmp, 1.0,
texture, rotation,
x, scale_factor,
y, &color[0],
width, xmb->shadow_offset);
height,
1.0,
rotation,
scale_factor,
&color[0],
xmb->shadow_offset);
}
} }
menu_display_set_alpha(color, MIN(node->alpha, xmb->alpha)); menu_display_set_alpha(color, MIN(node->alpha, xmb->alpha));
if (texture_switch != 0 && color[3] != 0) if (texture_switch != 0 && color[3] != 0 && !xmb->assets_missing)
xmb_draw_icon(video_info, xmb_draw_icon(video_info,
xmb->icon_size, xmb->icon_size,
mymat, mymat,
@ -3752,7 +3756,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
size_t x_pos = xmb->icon_size / 6; size_t x_pos = xmb->icon_size / 6;
size_t x_pos_icon = xmb->margins_title_left; size_t x_pos_icon = xmb->margins_title_left;
if (coord_white[3] != 0) if (coord_white[3] != 0 && !xmb->assets_missing)
xmb_draw_icon(video_info, xmb_draw_icon(video_info,
xmb->icon_size, xmb->icon_size,
&mymat, &mymat,
@ -3781,7 +3785,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
} }
} }
if (video_info->timedate_enable) if (video_info->timedate_enable && !xmb->assets_missing)
{ {
menu_display_ctx_datetime_t datetime; menu_display_ctx_datetime_t datetime;
char timedate[255]; char timedate[255];
@ -3830,7 +3834,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
menu_display_set_alpha(coord_white, menu_display_set_alpha(coord_white,
MIN(xmb->textures_arrow_alpha, xmb->alpha)); MIN(xmb->textures_arrow_alpha, xmb->alpha));
if (coord_white[3] != 0) if (coord_white[3] != 0 && !xmb->assets_missing)
xmb_draw_icon(video_info, xmb_draw_icon(video_info,
xmb->icon_size, xmb->icon_size,
&mymat, &mymat,
@ -3852,52 +3856,55 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
menu_display_blend_begin(video_info); menu_display_blend_begin(video_info);
/* Horizontal tab icons */ /* Horizontal tab icons */
for (i = 0; i <= xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL) if (!xmb->assets_missing)
+ xmb->system_tab_end; i++)
{ {
xmb_node_t *node = xmb_get_node(xmb, i); for (i = 0; i <= xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ xmb->system_tab_end; i++)
if (!node)
continue;
menu_display_set_alpha(item_color, MIN(node->alpha, xmb->alpha));
if (item_color[3] != 0)
{ {
menu_display_ctx_rotate_draw_t rotate_draw; xmb_node_t *node = xmb_get_node(xmb, i);
math_matrix_4x4 mymat;
uintptr_t texture = node->icon;
float x = xmb->x + xmb->categories_x_pos +
xmb->margins_screen_left +
xmb->icon_spacing_horizontal
* (i + 1) - xmb->icon_size / 2.0;
float y = xmb->margins_screen_top
+ xmb->icon_size / 2.0;
float rotation = 0;
float scale_factor = node->zoom;
rotate_draw.matrix = &mymat; if (!node)
rotate_draw.rotation = rotation; continue;
rotate_draw.scale_x = scale_factor;
rotate_draw.scale_y = scale_factor;
rotate_draw.scale_z = 1;
rotate_draw.scale_enable = true;
menu_display_rotate_z(&rotate_draw, video_info); menu_display_set_alpha(item_color, MIN(node->alpha, xmb->alpha));
xmb_draw_icon(video_info, if (item_color[3] != 0)
xmb->icon_size, {
&mymat, menu_display_ctx_rotate_draw_t rotate_draw;
texture, math_matrix_4x4 mymat;
x, uintptr_t texture = node->icon;
y, float x = xmb->x + xmb->categories_x_pos +
width, xmb->margins_screen_left +
height, xmb->icon_spacing_horizontal
1.0, * (i + 1) - xmb->icon_size / 2.0;
rotation, float y = xmb->margins_screen_top
scale_factor, + xmb->icon_size / 2.0;
&item_color[0], float rotation = 0;
xmb->shadow_offset); float scale_factor = node->zoom;
rotate_draw.matrix = &mymat;
rotate_draw.rotation = rotation;
rotate_draw.scale_x = scale_factor;
rotate_draw.scale_y = scale_factor;
rotate_draw.scale_z = 1;
rotate_draw.scale_enable = true;
menu_display_rotate_z(&rotate_draw, video_info);
xmb_draw_icon(video_info,
xmb->icon_size,
&mymat,
texture,
x,
y,
width,
height,
1.0,
rotation,
scale_factor,
&item_color[0],
xmb->shadow_offset);
}
} }
} }
@ -4620,355 +4627,232 @@ static bool xmb_load_image(void *userdata, void *data, enum menu_image_type type
static const char *xmb_texture_path(unsigned id) static const char *xmb_texture_path(unsigned id)
{ {
char *iconpath = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
char *icon_name = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
char *icon_fullpath = (char*)malloc(PATH_MAX_LENGTH * sizeof(char));
iconpath[0] = icon_name[0] = icon_fullpath[0] = '\0';
switch (id) switch (id)
{ {
case XMB_TEXTURE_MAIN_MENU: case XMB_TEXTURE_MAIN_MENU:
#if defined(HAVE_LAKKA) #if defined(HAVE_LAKKA)
icon_name = "lakka.png"; return "lakka.png";
break;
#else #else
icon_name = "retroarch.png"; return "retroarch.png";
break;
#endif #endif
case XMB_TEXTURE_SETTINGS: case XMB_TEXTURE_SETTINGS:
icon_name = "settings.png"; return "settings.png";
break;
case XMB_TEXTURE_HISTORY: case XMB_TEXTURE_HISTORY:
icon_name = "history.png"; return "history.png";
break;
case XMB_TEXTURE_FAVORITES: case XMB_TEXTURE_FAVORITES:
icon_name = "favorites.png"; return "favorites.png";
break;
case XMB_TEXTURE_ADD_FAVORITE: case XMB_TEXTURE_ADD_FAVORITE:
icon_name = "add-favorite.png"; return "add-favorite.png";
break;
case XMB_TEXTURE_MUSICS: case XMB_TEXTURE_MUSICS:
icon_name = "musics.png"; return "musics.png";
break;
#if defined(HAVE_FFMPEG) || defined(HAVE_MPV) #if defined(HAVE_FFMPEG) || defined(HAVE_MPV)
case XMB_TEXTURE_MOVIES: case XMB_TEXTURE_MOVIES:
icon_name = "movies.png"; return "movies.png";
break;
#endif #endif
#ifdef HAVE_IMAGEVIEWER #ifdef HAVE_IMAGEVIEWER
case XMB_TEXTURE_IMAGES: case XMB_TEXTURE_IMAGES:
icon_name = "images.png"; return "images.png";
break;
#endif #endif
case XMB_TEXTURE_SETTING: case XMB_TEXTURE_SETTING:
icon_name = "setting.png"; return "setting.png";
break;
case XMB_TEXTURE_SUBSETTING: case XMB_TEXTURE_SUBSETTING:
icon_name = "subsetting.png"; return "subsetting.png";
break;
case XMB_TEXTURE_ARROW: case XMB_TEXTURE_ARROW:
icon_name = "arrow.png"; return "arrow.png";
break;
case XMB_TEXTURE_RUN: case XMB_TEXTURE_RUN:
icon_name = "run.png"; return "run.png";
break;
case XMB_TEXTURE_CLOSE: case XMB_TEXTURE_CLOSE:
icon_name = "close.png"; return "close.png";
break;
case XMB_TEXTURE_RESUME: case XMB_TEXTURE_RESUME:
icon_name = "resume.png"; return "resume.png";
break;
case XMB_TEXTURE_CLOCK: case XMB_TEXTURE_CLOCK:
icon_name = "clock.png"; return "clock.png";
break;
case XMB_TEXTURE_BATTERY_FULL: case XMB_TEXTURE_BATTERY_FULL:
icon_name = "battery-full.png"; return "battery-full.png";
break;
case XMB_TEXTURE_BATTERY_CHARGING: case XMB_TEXTURE_BATTERY_CHARGING:
icon_name = "battery-charging.png"; return "battery-charging.png";
break;
case XMB_TEXTURE_POINTER: case XMB_TEXTURE_POINTER:
icon_name = "pointer.png"; return "pointer.png";
break;
case XMB_TEXTURE_SAVESTATE: case XMB_TEXTURE_SAVESTATE:
icon_name = "savestate.png"; return "savestate.png";
break;
case XMB_TEXTURE_LOADSTATE: case XMB_TEXTURE_LOADSTATE:
icon_name = "loadstate.png"; return "loadstate.png";
break;
case XMB_TEXTURE_UNDO: case XMB_TEXTURE_UNDO:
icon_name = "undo.png"; return "undo.png";
break;
case XMB_TEXTURE_CORE_INFO: case XMB_TEXTURE_CORE_INFO:
icon_name = "core-infos.png"; return "core-infos.png";
break;
case XMB_TEXTURE_WIFI: case XMB_TEXTURE_WIFI:
icon_name = "wifi.png"; return "wifi.png";
break;
case XMB_TEXTURE_CORE_OPTIONS: case XMB_TEXTURE_CORE_OPTIONS:
icon_name = "core-options.png"; return "core-options.png";
break;
case XMB_TEXTURE_INPUT_REMAPPING_OPTIONS: case XMB_TEXTURE_INPUT_REMAPPING_OPTIONS:
icon_name = "core-input-remapping-options.png"; return "core-input-remapping-options.png";
break;
case XMB_TEXTURE_CHEAT_OPTIONS: case XMB_TEXTURE_CHEAT_OPTIONS:
icon_name = "core-cheat-options.png"; return "core-cheat-options.png";
break;
case XMB_TEXTURE_DISK_OPTIONS: case XMB_TEXTURE_DISK_OPTIONS:
icon_name = "core-disk-options.png"; return "core-disk-options.png";
break;
case XMB_TEXTURE_SHADER_OPTIONS: case XMB_TEXTURE_SHADER_OPTIONS:
icon_name = "core-shader-options.png"; return "core-shader-options.png";
break;
case XMB_TEXTURE_ACHIEVEMENT_LIST: case XMB_TEXTURE_ACHIEVEMENT_LIST:
icon_name = "achievement-list.png"; return "achievement-list.png";
break;
case XMB_TEXTURE_SCREENSHOT: case XMB_TEXTURE_SCREENSHOT:
icon_name = "screenshot.png"; return "screenshot.png";
break;
case XMB_TEXTURE_RELOAD: case XMB_TEXTURE_RELOAD:
icon_name = "reload.png"; return "reload.png";
break;
case XMB_TEXTURE_RENAME: case XMB_TEXTURE_RENAME:
icon_name = "rename.png"; return "rename.png";
break;
case XMB_TEXTURE_FILE: case XMB_TEXTURE_FILE:
icon_name = "file.png"; return "file.png";
break;
case XMB_TEXTURE_FOLDER: case XMB_TEXTURE_FOLDER:
icon_name = "folder.png"; return "folder.png";
break;
case XMB_TEXTURE_ZIP: case XMB_TEXTURE_ZIP:
icon_name = "zip.png"; return "zip.png";
break;
case XMB_TEXTURE_MUSIC: case XMB_TEXTURE_MUSIC:
icon_name = "music.png"; return "music.png";
break;
case XMB_TEXTURE_FAVORITE: case XMB_TEXTURE_FAVORITE:
icon_name = "favorites-content.png"; return "favorites-content.png";
break;
case XMB_TEXTURE_IMAGE: case XMB_TEXTURE_IMAGE:
icon_name = "image.png"; return "image.png";
break;
case XMB_TEXTURE_MOVIE: case XMB_TEXTURE_MOVIE:
icon_name = "movie.png"; return "movie.png";
break;
case XMB_TEXTURE_CORE: case XMB_TEXTURE_CORE:
icon_name = "core.png"; return "core.png";
break;
case XMB_TEXTURE_RDB: case XMB_TEXTURE_RDB:
icon_name = "database.png"; return "database.png";
break;
case XMB_TEXTURE_CURSOR: case XMB_TEXTURE_CURSOR:
icon_name = "cursor.png"; return "cursor.png";
break;
case XMB_TEXTURE_SWITCH_ON: case XMB_TEXTURE_SWITCH_ON:
icon_name = "on.png"; return "on.png";
break;
case XMB_TEXTURE_SWITCH_OFF: case XMB_TEXTURE_SWITCH_OFF:
icon_name = "off.png"; return "off.png";
break;
case XMB_TEXTURE_ADD: case XMB_TEXTURE_ADD:
icon_name = "add.png"; return "add.png";
break;
#ifdef HAVE_NETWORKING #ifdef HAVE_NETWORKING
case XMB_TEXTURE_NETPLAY: case XMB_TEXTURE_NETPLAY:
icon_name = "netplay.png"; return "netplay.png";
break;
case XMB_TEXTURE_ROOM: case XMB_TEXTURE_ROOM:
icon_name = "menu_room.png"; return "menu_room.png";
break;
case XMB_TEXTURE_ROOM_LAN: case XMB_TEXTURE_ROOM_LAN:
icon_name = "menu_room_lan.png"; return "menu_room_lan.png";
break;
case XMB_TEXTURE_ROOM_RELAY: case XMB_TEXTURE_ROOM_RELAY:
icon_name = "menu_room_relay.png"; return "menu_room_relay.png";
break;
#endif #endif
case XMB_TEXTURE_KEY: case XMB_TEXTURE_KEY:
icon_name = "key.png"; return "key.png";
break;
case XMB_TEXTURE_KEY_HOVER: case XMB_TEXTURE_KEY_HOVER:
icon_name = "key-hover.png"; return "key-hover.png";
break;
case XMB_TEXTURE_DIALOG_SLICE: case XMB_TEXTURE_DIALOG_SLICE:
icon_name = "dialog-slice.png"; return "dialog-slice.png";
break;
case XMB_TEXTURE_ACHIEVEMENTS: case XMB_TEXTURE_ACHIEVEMENTS:
icon_name = "menu_achievements.png"; return "menu_achievements.png";
break;
case XMB_TEXTURE_AUDIO: case XMB_TEXTURE_AUDIO:
icon_name = "menu_audio.png"; return "menu_audio.png";
break;
case XMB_TEXTURE_DRIVERS: case XMB_TEXTURE_DRIVERS:
icon_name = "menu_drivers.png"; return "menu_drivers.png";
break;
case XMB_TEXTURE_EXIT: case XMB_TEXTURE_EXIT:
icon_name = "menu_exit.png"; return "menu_exit.png";
break;
case XMB_TEXTURE_FRAMESKIP: case XMB_TEXTURE_FRAMESKIP:
icon_name = "menu_frameskip.png"; return "menu_frameskip.png";
break;
case XMB_TEXTURE_HELP: case XMB_TEXTURE_HELP:
icon_name = "menu_help.png"; return "menu_help.png";
break;
case XMB_TEXTURE_INFO: case XMB_TEXTURE_INFO:
icon_name = "menu_info.png"; return "menu_info.png";
break;
case XMB_TEXTURE_INPUT_SETTINGS: case XMB_TEXTURE_INPUT_SETTINGS:
icon_name = "Libretro - Pad.png"; return "Libretro - Pad.png";
break;
case XMB_TEXTURE_LATENCY: case XMB_TEXTURE_LATENCY:
icon_name = "menu_latency.png"; return "menu_latency.png";
break;
case XMB_TEXTURE_NETWORK: case XMB_TEXTURE_NETWORK:
icon_name = "menu_network.png"; return "menu_network.png";
break;
case XMB_TEXTURE_POWER: case XMB_TEXTURE_POWER:
icon_name = "menu_power.png"; return "menu_power.png";
break;
case XMB_TEXTURE_RECORD: case XMB_TEXTURE_RECORD:
icon_name = "menu_record.png"; return "menu_record.png";
break;
case XMB_TEXTURE_SAVING: case XMB_TEXTURE_SAVING:
icon_name = "menu_saving.png"; return "menu_saving.png";
break;
case XMB_TEXTURE_UPDATER: case XMB_TEXTURE_UPDATER:
icon_name = "menu_updater.png"; return "menu_updater.png";
break;
case XMB_TEXTURE_VIDEO: case XMB_TEXTURE_VIDEO:
icon_name = "menu_video.png"; return "menu_video.png";
break;
case XMB_TEXTURE_MIXER: case XMB_TEXTURE_MIXER:
icon_name = "menu_mixer.png"; return "menu_mixer.png";
break;
case XMB_TEXTURE_LOG: case XMB_TEXTURE_LOG:
icon_name = "menu_log.png"; return "menu_log.png";
break;
case XMB_TEXTURE_OSD: case XMB_TEXTURE_OSD:
icon_name = "menu_osd.png"; return "menu_osd.png";
break;
case XMB_TEXTURE_UI: case XMB_TEXTURE_UI:
icon_name = "menu_ui.png"; return "menu_ui.png";
break;
case XMB_TEXTURE_USER: case XMB_TEXTURE_USER:
icon_name = "menu_user.png"; return "menu_user.png";
break;
case XMB_TEXTURE_PRIVACY: case XMB_TEXTURE_PRIVACY:
icon_name = "menu_privacy.png"; return "menu_privacy.png";
break;
case XMB_TEXTURE_PLAYLIST: case XMB_TEXTURE_PLAYLIST:
icon_name = "menu_playlist.png"; return "menu_playlist.png";
break;
case XMB_TEXTURE_QUICKMENU: case XMB_TEXTURE_QUICKMENU:
icon_name = "menu_quickmenu.png"; return "menu_quickmenu.png";
break;
case XMB_TEXTURE_REWIND: case XMB_TEXTURE_REWIND:
icon_name = "menu_rewind.png"; return "menu_rewind.png";
break;
case XMB_TEXTURE_OVERLAY: case XMB_TEXTURE_OVERLAY:
icon_name = "menu_overlay.png"; return "menu_overlay.png";
break;
case XMB_TEXTURE_OVERRIDE: case XMB_TEXTURE_OVERRIDE:
icon_name = "menu_override.png"; return "menu_override.png";
break;
case XMB_TEXTURE_NOTIFICATIONS: case XMB_TEXTURE_NOTIFICATIONS:
icon_name = "menu_notifications.png"; return "menu_notifications.png";
break;
case XMB_TEXTURE_STREAM: case XMB_TEXTURE_STREAM:
icon_name = "menu_stream.png"; return "menu_stream.png";
break;
case XMB_TEXTURE_SHUTDOWN: case XMB_TEXTURE_SHUTDOWN:
icon_name = "menu_shutdown.png"; return "menu_shutdown.png";
break;
case XMB_TEXTURE_INPUT_DPAD_U: case XMB_TEXTURE_INPUT_DPAD_U:
icon_name = "input_DPAD-U.png"; return "input_DPAD-U.png";
break;
case XMB_TEXTURE_INPUT_DPAD_D: case XMB_TEXTURE_INPUT_DPAD_D:
icon_name = "input_DPAD-D.png"; return "input_DPAD-D.png";
break;
case XMB_TEXTURE_INPUT_DPAD_L: case XMB_TEXTURE_INPUT_DPAD_L:
icon_name = "input_DPAD-L.png"; return "input_DPAD-L.png";
break;
case XMB_TEXTURE_INPUT_DPAD_R: case XMB_TEXTURE_INPUT_DPAD_R:
icon_name = "input_DPAD-R.png"; return "input_DPAD-R.png";
break;
case XMB_TEXTURE_INPUT_STCK_U: case XMB_TEXTURE_INPUT_STCK_U:
icon_name = "input_STCK-U.png"; return "input_STCK-U.png";
break;
case XMB_TEXTURE_INPUT_STCK_D: case XMB_TEXTURE_INPUT_STCK_D:
icon_name = "input_STCK-D.png"; return "input_STCK-D.png";
break;
case XMB_TEXTURE_INPUT_STCK_L: case XMB_TEXTURE_INPUT_STCK_L:
icon_name = "input_STCK-L.png"; return "input_STCK-L.png";
break;
case XMB_TEXTURE_INPUT_STCK_R: case XMB_TEXTURE_INPUT_STCK_R:
icon_name = "input_STCK-R.png"; return "input_STCK-R.png";
break;
case XMB_TEXTURE_INPUT_STCK_P: case XMB_TEXTURE_INPUT_STCK_P:
icon_name = "input_STCK-P.png"; return "input_STCK-P.png";
break;
case XMB_TEXTURE_INPUT_BTN_U: case XMB_TEXTURE_INPUT_BTN_U:
icon_name = "input_BTN-U.png"; return "input_BTN-U.png";
break;
case XMB_TEXTURE_INPUT_BTN_D: case XMB_TEXTURE_INPUT_BTN_D:
icon_name = "input_BTN-D.png"; return "input_BTN-D.png";
break;
case XMB_TEXTURE_INPUT_BTN_L: case XMB_TEXTURE_INPUT_BTN_L:
icon_name = "input_BTN-L.png"; return "input_BTN-L.png";
break;
case XMB_TEXTURE_INPUT_BTN_R: case XMB_TEXTURE_INPUT_BTN_R:
icon_name = "input_BTN-R.png"; return "input_BTN-R.png";
break;
case XMB_TEXTURE_INPUT_LB: case XMB_TEXTURE_INPUT_LB:
icon_name = "input_LB.png"; return "input_LB.png";
break;
case XMB_TEXTURE_INPUT_RB: case XMB_TEXTURE_INPUT_RB:
icon_name = "input_RB.png"; return "input_RB.png";
break;
case XMB_TEXTURE_INPUT_LT: case XMB_TEXTURE_INPUT_LT:
icon_name = "input_LT.png"; return "input_LT.png";
break;
case XMB_TEXTURE_INPUT_RT: case XMB_TEXTURE_INPUT_RT:
icon_name = "input_RT.png"; return "input_RT.png";
break;
case XMB_TEXTURE_INPUT_SELECT: case XMB_TEXTURE_INPUT_SELECT:
icon_name = "input_SELECT.png"; return "input_SELECT.png";
break;
case XMB_TEXTURE_INPUT_START: case XMB_TEXTURE_INPUT_START:
icon_name = "input_START.png"; return "input_START.png";
break;
case XMB_TEXTURE_CHECKMARK: case XMB_TEXTURE_CHECKMARK:
icon_name = "menu_check.png"; return "menu_check.png";
break;
case XMB_TEXTURE_MENU_ADD: case XMB_TEXTURE_MENU_ADD:
icon_name = "menu_add.png"; return "menu_add.png";
break;
case XMB_TEXTURE_BRIGHTNESS: case XMB_TEXTURE_BRIGHTNESS:
icon_name = "menu_brightness.png"; return "menu_brightness.png";
break;
case XMB_TEXTURE_PAUSE: case XMB_TEXTURE_PAUSE:
icon_name = "menu_pause.png"; return "menu_pause.png";
break; case XMB_TEXTURE_DEFAULT:
return "default.png";
case XMB_TEXTURE_DEFAULT_CONTENT:
return "default-content.png";
} }
return NULL;
fill_pathname_application_special(iconpath,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_XMB_ICONS);
icon_fullpath = iconpath;
strlcat(icon_fullpath, icon_name, PATH_MAX_LENGTH * sizeof(char));
if (!filestream_exists(icon_fullpath))
{
RARCH_WARN("[XMB] Asset missing: %s\n", icon_fullpath);
free(icon_fullpath);
return NULL;
}
free(icon_fullpath);
return icon_name;
} }
static void xmb_context_reset_textures( static void xmb_context_reset_textures(
@ -4976,25 +4860,42 @@ static void xmb_context_reset_textures(
{ {
unsigned i; unsigned i;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
xmb->assets_missing = false;
for (i = 0; i < XMB_TEXTURE_LAST; i++) for (i = 0; i < XMB_TEXTURE_LAST; i++)
{ {
if (xmb_texture_path(i) == NULL) if (!menu_display_reset_textures_list(xmb_texture_path(i), iconpath, &xmb->textures.list[i], TEXTURE_FILTER_MIPMAP_LINEAR))
{ {
/* If the icon doesn't exist at least try to return the subsetting icon*/ RARCH_WARN("[XMB] Asset missing: %s%s\n", iconpath, xmb_texture_path(i));
if (!(i == XMB_TEXTURE_DIALOG_SLICE || i == XMB_TEXTURE_KEY_HOVER || i == XMB_TEXTURE_KEY_HOVER)) /* If the icon is missing return the subsetting (because some themes are incomplete) */
menu_display_reset_textures_list(xmb_texture_path(XMB_TEXTURE_SUBSETTING), iconpath, &xmb->textures.list[i], TEXTURE_FILTER_MIPMAP_LINEAR); if (!(i == XMB_TEXTURE_DIALOG_SLICE || i == XMB_TEXTURE_KEY_HOVER || i == XMB_TEXTURE_KEY))
continue; {
/* OSD Warning only if subsetting icon is missing */
if (
!menu_display_reset_textures_list(xmb_texture_path(XMB_TEXTURE_SUBSETTING), iconpath, &xmb->textures.list[i], TEXTURE_FILTER_MIPMAP_LINEAR)
&& !(settings->uints.menu_xmb_theme == XMB_ICON_THEME_CUSTOM)
)
{
runloop_msg_queue_push(msg_hash_to_str(MSG_MISSING_ASSETS), 1, 256, false);
/* Do not draw icons if subsetting is missing */
goto error;
}
/* Do not draw icons if this ones are is missing */
switch (i)
{
case XMB_TEXTURE_POINTER:
case XMB_TEXTURE_ARROW:
case XMB_TEXTURE_CLOCK:
case XMB_TEXTURE_BATTERY_CHARGING:
case XMB_TEXTURE_BATTERY_FULL:
case XMB_TEXTURE_DEFAULT:
case XMB_TEXTURE_DEFAULT_CONTENT:
goto error;
}
}
} }
menu_display_reset_textures_list(xmb_texture_path(i), iconpath, &xmb->textures.list[i], TEXTURE_FILTER_MIPMAP_LINEAR);
} }
/* Warn only if critical assets are missing, some themes are incomplete */
if (
((xmb_texture_path(XMB_TEXTURE_SUBSETTING) == NULL)) && !(settings->uints.menu_xmb_theme == XMB_ICON_THEME_CUSTOM)
)
runloop_msg_queue_push(msg_hash_to_str(MSG_MISSING_ASSETS), 1, 256, false);
menu_display_allocate_white_texture(); menu_display_allocate_white_texture();
xmb->main_menu_node.icon = xmb->textures.list[XMB_TEXTURE_MAIN_MENU]; xmb->main_menu_node.icon = xmb->textures.list[XMB_TEXTURE_MAIN_MENU];
@ -5039,6 +4940,12 @@ static void xmb_context_reset_textures(
xmb->netplay_tab_node.zoom = xmb->categories_active_zoom; xmb->netplay_tab_node.zoom = xmb->categories_active_zoom;
#endif #endif
return;
error:
xmb->assets_missing = true ;
RARCH_WARN("[XMB] Critical asset missing, no icons will be drawn\n");
return;
} }
static void xmb_context_reset_background(const char *iconpath) static void xmb_context_reset_background(const char *iconpath)