From 45228d030718deed3ecc0eef72f7bef09221cf1f Mon Sep 17 00:00:00 2001 From: radius Date: Mon, 10 Dec 2018 23:01:21 -0500 Subject: [PATCH] massive subsystem cleanup & use the proper data in each instance --- menu/cbs/menu_cbs_sublabel.c | 24 ++++++++++----- menu/drivers/ozone/ozone.c | 59 ++++++------------------------------ menu/drivers/xmb.c | 59 ++++++------------------------------ menu/menu_driver.c | 54 +++++++++++++++++++++++++++++++++ menu/menu_driver.h | 2 ++ 5 files changed, 90 insertions(+), 108 deletions(-) diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 31410d59e0..defe0e2dd6 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -521,15 +521,23 @@ static int action_bind_sublabel_subsystem_add( char *s, size_t len) { rarch_system_info_t *system = runloop_get_system_info(); - const struct retro_subsystem_info *subsystem = (system && subsystem_current_count > 0) ? - subsystem_data + (type - MENU_SETTINGS_SUBSYSTEM_ADD) : NULL; + const struct retro_subsystem_info *subsystem; - /* To-Do: localization & sublabels for pre-init case */ - if (subsystem_current_count > 0 && content_get_subsystem_rom_id() < subsystem->num_roms) - snprintf(s, len, " Current Content: %s", - content_get_subsystem() == type - MENU_SETTINGS_SUBSYSTEM_ADD - ? subsystem->roms[content_get_subsystem_rom_id()].desc - : subsystem->roms[0].desc); + /* Core fully loaded, use the subsystem data */ + if (system->subsystem.data) + subsystem = system->subsystem.data + (type - MENU_SETTINGS_SUBSYSTEM_ADD); + /* Core not loaded completely, use the data we peeked on load core */ + else + subsystem = subsystem_data + (type - MENU_SETTINGS_SUBSYSTEM_ADD); + + if (subsystem && subsystem_current_count > 0) + { + if (content_get_subsystem_rom_id() < subsystem->num_roms) + snprintf(s, len, " Current Content: %s", + content_get_subsystem() == type - MENU_SETTINGS_SUBSYSTEM_ADD + ? subsystem->roms[content_get_subsystem_rom_id()].desc + : subsystem->roms[0].desc); + } return 0; } diff --git a/menu/drivers/ozone/ozone.c b/menu/drivers/ozone/ozone.c index 4ca662b7fe..c3a8324c55 100644 --- a/menu/drivers/ozone/ozone.c +++ b/menu/drivers/ozone/ozone.c @@ -502,6 +502,7 @@ static int ozone_list_push(void *data, void *userdata, unsigned i = 0; core_info_list_t *list = NULL; menu_handle_t *menu = (menu_handle_t*)data; + const struct retro_subsystem_info* subsystem; switch (type) { @@ -596,56 +597,14 @@ static int ozone_list_push(void *data, void *userdata, entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); - if (subsystem_current_count > 0) - { - const struct retro_subsystem_info* subsystem = subsystem_data; - for (i = 0; i < subsystem_current_count; i++, subsystem++) - { - char s[PATH_MAX_LENGTH]; - if (content_get_subsystem() == i) - { - if (content_get_subsystem_rom_id() < subsystem->num_roms) - { - snprintf(s, sizeof(s), - "Load %s %s", - subsystem->desc, - i == content_get_subsystem() - ? "\u2605" : " "); - menu_entries_append_enum(info->list, - s, - msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD), - MENU_ENUM_LABEL_SUBSYSTEM_ADD, - MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0); - } - else - { - snprintf(s, sizeof(s), - "Start %s %s", - subsystem->desc, - i == content_get_subsystem() - ? "\u2605" : " "); - menu_entries_append_enum(info->list, - s, - msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_LOAD), - MENU_ENUM_LABEL_SUBSYSTEM_LOAD, - MENU_SETTINGS_SUBSYSTEM_LOAD, 0, 0); - } - } - else - { - snprintf(s, sizeof(s), - "Load %s %s", - subsystem->desc, - i == content_get_subsystem() - ? "\u2605" : " "); - menu_entries_append_enum(info->list, - s, - msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD), - MENU_ENUM_LABEL_SUBSYSTEM_ADD, - MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0); - } - } - } + /* Core fully loaded, use the subsystem data */ + if (system->subsystem.data) + subsystem = system->subsystem.data; + /* Core not loaded completely, use the data we peeked on load core */ + else + subsystem = subsystem_data; + + menu_subsystem_populate(subsystem, info); } entry.enum_idx = MENU_ENUM_LABEL_ADD_CONTENT_LIST; diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index cace669d2e..4b0fd88e60 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -5453,6 +5453,7 @@ static int xmb_list_push(void *data, void *userdata, unsigned i = 0; core_info_list_t *list = NULL; menu_handle_t *menu = (menu_handle_t*)data; + const struct retro_subsystem_info* subsystem; switch (type) { @@ -5548,56 +5549,14 @@ static int xmb_list_push(void *data, void *userdata, entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST; menu_displaylist_setting(&entry); - if (subsystem_current_count > 0) - { - const struct retro_subsystem_info* subsystem = subsystem_data; - for (i = 0; i < subsystem_current_count; i++, subsystem++) - { - char s[PATH_MAX_LENGTH]; - if (content_get_subsystem() == i) - { - if (content_get_subsystem_rom_id() < subsystem->num_roms) - { - snprintf(s, sizeof(s), - "Load %s %s", - subsystem->desc, - i == content_get_subsystem() - ? "\u2605" : " "); - menu_entries_append_enum(info->list, - s, - msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD), - MENU_ENUM_LABEL_SUBSYSTEM_ADD, - MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0); - } - else - { - snprintf(s, sizeof(s), - "Start %s %s", - subsystem->desc, - i == content_get_subsystem() - ? "\u2605" : " "); - menu_entries_append_enum(info->list, - s, - msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_LOAD), - MENU_ENUM_LABEL_SUBSYSTEM_LOAD, - MENU_SETTINGS_SUBSYSTEM_LOAD, 0, 0); - } - } - else - { - snprintf(s, sizeof(s), - "Load %s %s", - subsystem->desc, - i == content_get_subsystem() - ? "\u2605" : " "); - menu_entries_append_enum(info->list, - s, - msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD), - MENU_ENUM_LABEL_SUBSYSTEM_ADD, - MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0); - } - } - } + /* Core fully loaded, use the subsystem data */ + if (system->subsystem.data) + subsystem = system->subsystem.data; + /* Core not loaded completely, use the data we peeked on load core */ + else + subsystem = subsystem_data; + + menu_subsystem_populate(subsystem, info); } entry.enum_idx = MENU_ENUM_LABEL_ADD_CONTENT_LIST; diff --git a/menu/menu_driver.c b/menu/menu_driver.c index 8ca72c132e..fbbfe10227 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -2654,3 +2654,57 @@ void hex32_to_rgba_normalized(uint32_t hex, float* rgba, float alpha) rgba[2] = rgba[6] = rgba[10] = rgba[14] = ((hex >> 0 ) & 0xFF) * (1.0f / 255.0f); /* b */ rgba[3] = rgba[7] = rgba[11] = rgba[15] = alpha; } + +void menu_subsystem_populate(const struct retro_subsystem_info* subsystem, menu_displaylist_info_t *info) +{ + int i = 0; + if (subsystem && subsystem_current_count > 0) + { + for (i = 0; i < subsystem_current_count; i++, subsystem++) + { + char s[PATH_MAX_LENGTH]; + if (content_get_subsystem() == i) + { + if (content_get_subsystem_rom_id() < subsystem->num_roms) + { + snprintf(s, sizeof(s), + "Load %s %s", + subsystem->desc, + i == content_get_subsystem() + ? "\u2605" : " "); + menu_entries_append_enum(info->list, + s, + msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD), + MENU_ENUM_LABEL_SUBSYSTEM_ADD, + MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0); + } + else + { + snprintf(s, sizeof(s), + "Start %s %s", + subsystem->desc, + i == content_get_subsystem() + ? "\u2605" : " "); + menu_entries_append_enum(info->list, + s, + msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_LOAD), + MENU_ENUM_LABEL_SUBSYSTEM_LOAD, + MENU_SETTINGS_SUBSYSTEM_LOAD, 0, 0); + } + } + else + { + snprintf(s, sizeof(s), + "Load %s %s", + subsystem->desc, + i == content_get_subsystem() + ? "\u2605" : " "); + menu_entries_append_enum(info->list, + s, + msg_hash_to_str(MENU_ENUM_LABEL_SUBSYSTEM_ADD), + MENU_ENUM_LABEL_SUBSYSTEM_ADD, + MENU_SETTINGS_SUBSYSTEM_ADD + i, 0, 0); + } + } + } +} \ No newline at end of file diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 6487d37248..33f111a8ca 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -844,6 +844,8 @@ void menu_driver_destroy(void); void hex32_to_rgba_normalized(uint32_t hex, float* rgba, float alpha); +void menu_subsystem_populate(const struct retro_subsystem_info* subsystem, menu_displaylist_info_t *info); + extern uintptr_t menu_display_white_texture; extern menu_display_ctx_driver_t menu_display_ctx_gl;