From e5c7de8607999fe6981b1485ccc1cd106dc64d2b Mon Sep 17 00:00:00 2001 From: Alfrix Date: Mon, 12 Nov 2018 00:30:09 -0300 Subject: [PATCH 1/4] Input icons (User binds) --- menu/drivers/ozone.c | 26 ++++++++++++++++++++++---- menu/drivers/xmb.c | 27 +++++++++++++++++++++++---- menu/menu_displaylist.c | 21 +++++++++++++++------ menu/menu_driver.h | 2 ++ 4 files changed, 62 insertions(+), 14 deletions(-) diff --git a/menu/drivers/ozone.c b/menu/drivers/ozone.c index b35db9b344..03b72b1182 100644 --- a/menu/drivers/ozone.c +++ b/menu/drivers/ozone.c @@ -1249,15 +1249,33 @@ static unsigned ozone_entries_icon_get_id(ozone_handle_t *ozone, #endif if ( - (type >= MENU_SETTINGS_INPUT_DESC_BEGIN) && + (type >= MENU_SETTINGS_INPUT_BEGIN) && (type <= MENU_SETTINGS_INPUT_DESC_END) ) { unsigned input_id; - input_id = MENU_SETTINGS_INPUT_DESC_BEGIN; - while (type > (input_id + 23)) + if (type < MENU_SETTINGS_INPUT_DESC_BEGIN) { - input_id = (input_id + 24) ; + input_id = MENU_SETTINGS_INPUT_BEGIN; + if ( type == input_id + 2) + return OZONE_ENTRIES_ICONS_TEXTURE_INPUT_SETTINGS; + if ( type == input_id + 4) + return OZONE_ENTRIES_ICONS_TEXTURE_RELOAD; + if ( type == input_id + 5) + return OZONE_ENTRIES_ICONS_TEXTURE_SAVING; + input_id = input_id + 7; + while (type > (input_id + 35)) + { + input_id = (input_id + 36) ; + } + } + else + { + input_id = MENU_SETTINGS_INPUT_DESC_BEGIN; + while (type > (input_id + 23)) + { + input_id = (input_id + 24) ; + } } if ( type == input_id ) return OZONE_ENTRIES_ICONS_TEXTURE_INPUT_BTN_D; diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 686ff89714..020711939d 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2407,6 +2407,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, case MENU_ENUM_LABEL_INPUT_USER_14_BINDS: case MENU_ENUM_LABEL_INPUT_USER_15_BINDS: case MENU_ENUM_LABEL_INPUT_USER_16_BINDS: + case MENU_ENUM_LABEL_INPUT_PLAYER1_JOYPAD_INDEX: return xmb->textures.list[XMB_TEXTURE_INPUT_SETTINGS]; case MENU_ENUM_LABEL_LATENCY_SETTINGS: return xmb->textures.list[XMB_TEXTURE_LATENCY]; @@ -2619,15 +2620,33 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, #endif if ( - (type >= MENU_SETTINGS_INPUT_DESC_BEGIN) && + (type >= MENU_SETTINGS_INPUT_BEGIN) && (type <= MENU_SETTINGS_INPUT_DESC_END) ) { unsigned input_id; - input_id = MENU_SETTINGS_INPUT_DESC_BEGIN; - while (type > (input_id + 23)) + if (type < MENU_SETTINGS_INPUT_DESC_BEGIN) { - input_id = (input_id + 24) ; + input_id = MENU_SETTINGS_INPUT_BEGIN; + if ( type == input_id + 2) + return xmb->textures.list[XMB_TEXTURE_INPUT_SETTINGS]; + if ( type == input_id + 4) + return xmb->textures.list[XMB_TEXTURE_RELOAD]; + if ( type == input_id + 5) + return xmb->textures.list[XMB_TEXTURE_SAVING]; + input_id = input_id + 7; + while (type > (input_id + 35)) + { + input_id = (input_id + 36) ; + } + } + else + { + input_id = MENU_SETTINGS_INPUT_DESC_BEGIN; + while (type > (input_id + 23)) + { + input_id = (input_id + 24) ; + } } if ( type == input_id ) return xmb->textures.list[XMB_TEXTURE_INPUT_BTN_D]; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index be6b16f217..2b78c5037e 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -2080,6 +2080,7 @@ static int menu_displaylist_parse_settings_internal(void *data, menu_displaylist_info_t *info, enum menu_displaylist_parse_type parse_type, bool add_empty_entry, + unsigned entry_type, rarch_setting_t *setting ) { @@ -2231,8 +2232,16 @@ static int menu_displaylist_parse_settings_internal(void *data, goto loop; #endif + if ( + (entry_type >= MENU_SETTINGS_INPUT_BEGIN) && + (entry_type < MENU_SETTINGS_INPUT_END) + ) + entry_type = MENU_SETTINGS_INPUT_BEGIN + count; + if (entry_type == 0) + entry_type = menu_setting_set_flags(setting); + menu_entries_append(info->list, short_description, - name, menu_setting_set_flags(setting), 0, 0); + name, entry_type, 0, 0); count++; loop: @@ -2481,7 +2490,7 @@ loop: return 0; } -#define menu_displaylist_parse_settings(data, info, info_label, parse_type, add_empty_entry) menu_displaylist_parse_settings_internal(data, info, parse_type, add_empty_entry, menu_setting_find(info_label)) +#define menu_displaylist_parse_settings(data, info, info_label, parse_type, add_empty_entry, entry_type) menu_displaylist_parse_settings_internal(data, info, parse_type, add_empty_entry, entry_type, menu_setting_find(info_label)) #define menu_displaylist_parse_settings_enum(data, info, label, parse_type, add_empty_entry) menu_displaylist_parse_settings_internal_enum(data, info, parse_type, add_empty_entry, menu_setting_find_enum(label), label) @@ -3310,9 +3319,9 @@ static int menu_displaylist_parse_options_remappings( msg_hash_to_str(MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE), val); menu_displaylist_parse_settings(menu, info, - key_type, PARSE_ONLY_UINT, true); + key_type, PARSE_ONLY_UINT, true, 0); menu_displaylist_parse_settings(menu, info, - key_analog, PARSE_ONLY_UINT, true); + key_analog, PARSE_ONLY_UINT, true, 0); } menu_entries_append_enum(info->list, @@ -6855,7 +6864,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist msg_hash_to_str(MENU_ENUM_LABEL_INPUT_SPLIT_JOYCON), val); menu_displaylist_parse_settings(menu, info, - key_split_joycon, PARSE_ONLY_UINT, true); + key_split_joycon, PARSE_ONLY_UINT, true, 0); } } #endif @@ -7643,7 +7652,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist strlcpy(lbl, temp_val, sizeof(lbl)); ret = menu_displaylist_parse_settings(menu, info, - lbl, PARSE_NONE, true); + lbl, PARSE_NONE, true, MENU_SETTINGS_INPUT_BEGIN); info->need_refresh = true; info->need_push = true; } diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 48d9e02c44..c1f65802dd 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -226,6 +226,8 @@ enum menu_settings_type MENU_SETTINGS_PERF_COUNTERS_END = MENU_SETTINGS_PERF_COUNTERS_BEGIN + (MAX_COUNTERS - 1), MENU_SETTINGS_CHEAT_BEGIN, MENU_SETTINGS_CHEAT_END = MENU_SETTINGS_CHEAT_BEGIN + (MAX_CHEAT_COUNTERS - 1), + MENU_SETTINGS_INPUT_BEGIN, + MENU_SETTINGS_INPUT_END = MENU_SETTINGS_INPUT_BEGIN + RARCH_CUSTOM_BIND_LIST_END, MENU_SETTINGS_INPUT_DESC_BEGIN, MENU_SETTINGS_INPUT_DESC_END = MENU_SETTINGS_INPUT_DESC_BEGIN + ((RARCH_FIRST_CUSTOM_BIND + 8) * MAX_USERS), MENU_SETTINGS_INPUT_DESC_KBD_BEGIN, From 53e89f6bd10b471c74a100a942bbac0cdc0cf940 Mon Sep 17 00:00:00 2001 From: Alfrix Date: Mon, 12 Nov 2018 00:38:12 -0300 Subject: [PATCH 2/4] Fix shutdown icon and add restart --- menu/drivers/ozone.c | 2 ++ menu/drivers/xmb.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/menu/drivers/ozone.c b/menu/drivers/ozone.c index 03b72b1182..e91b6b84db 100644 --- a/menu/drivers/ozone.c +++ b/menu/drivers/ozone.c @@ -836,6 +836,7 @@ switch (id) break; case OZONE_ENTRIES_ICONS_TEXTURE_SHUTDOWN: icon_name = "menu_shutdown.png"; + break; case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_DPAD_U: icon_name = "input_DPAD-U.png"; break; @@ -1136,6 +1137,7 @@ static unsigned ozone_entries_icon_get_id(ozone_handle_t *ozone, case MENU_ENUM_LABEL_REBOOT: case MENU_ENUM_LABEL_RESET_TO_DEFAULT_CONFIG: case MENU_ENUM_LABEL_CHEAT_RELOAD_CHEATS: + case MENU_ENUM_LABEL_RESTART_RETROARCH: return OZONE_ENTRIES_ICONS_TEXTURE_RELOAD; case MENU_ENUM_LABEL_SHUTDOWN: return OZONE_ENTRIES_ICONS_TEXTURE_SHUTDOWN; diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 020711939d..cc32a62a1c 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2407,7 +2407,6 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, case MENU_ENUM_LABEL_INPUT_USER_14_BINDS: case MENU_ENUM_LABEL_INPUT_USER_15_BINDS: case MENU_ENUM_LABEL_INPUT_USER_16_BINDS: - case MENU_ENUM_LABEL_INPUT_PLAYER1_JOYPAD_INDEX: return xmb->textures.list[XMB_TEXTURE_INPUT_SETTINGS]; case MENU_ENUM_LABEL_LATENCY_SETTINGS: return xmb->textures.list[XMB_TEXTURE_LATENCY]; @@ -2483,6 +2482,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, case MENU_ENUM_LABEL_REBOOT: case MENU_ENUM_LABEL_RESET_TO_DEFAULT_CONFIG: case MENU_ENUM_LABEL_CHEAT_RELOAD_CHEATS: + case MENU_ENUM_LABEL_RESTART_RETROARCH: return xmb->textures.list[XMB_TEXTURE_RELOAD]; case MENU_ENUM_LABEL_SHUTDOWN: return xmb->textures.list[XMB_TEXTURE_SHUTDOWN]; @@ -4855,6 +4855,7 @@ static const char *xmb_texture_path(unsigned id) break; case XMB_TEXTURE_SHUTDOWN: icon_name = "menu_shutdown.png"; + break; case XMB_TEXTURE_INPUT_DPAD_U: icon_name = "input_DPAD-U.png"; break; From 989ddb35a8b35b1f0f00134709969004bf5d86f8 Mon Sep 17 00:00:00 2001 From: Alfrix Date: Mon, 12 Nov 2018 00:54:24 -0300 Subject: [PATCH 3/4] Cleanup --- menu/drivers/ozone.c | 4 ---- menu/drivers/xmb.c | 4 ---- 2 files changed, 8 deletions(-) diff --git a/menu/drivers/ozone.c b/menu/drivers/ozone.c index e91b6b84db..b35f9bed86 100644 --- a/menu/drivers/ozone.c +++ b/menu/drivers/ozone.c @@ -1266,10 +1266,6 @@ static unsigned ozone_entries_icon_get_id(ozone_handle_t *ozone, if ( type == input_id + 5) return OZONE_ENTRIES_ICONS_TEXTURE_SAVING; input_id = input_id + 7; - while (type > (input_id + 35)) - { - input_id = (input_id + 36) ; - } } else { diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index cc32a62a1c..3d1573661d 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2635,10 +2635,6 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, if ( type == input_id + 5) return xmb->textures.list[XMB_TEXTURE_SAVING]; input_id = input_id + 7; - while (type > (input_id + 35)) - { - input_id = (input_id + 36) ; - } } else { From 6bf61155bbfdd3526fc680712e1b0ef291ccf7a7 Mon Sep 17 00:00:00 2001 From: jdgleaver Date: Mon, 12 Nov 2018 17:12:15 +0000 Subject: [PATCH 4/4] [CTR] Add PokeMini assets --- pkg/ctr/Makefile.cores | 4 ++-- pkg/ctr/assets/pokemini.png | Bin 0 -> 2743 bytes pkg/ctr/assets/pokemini_banner.png | Bin 0 -> 8380 bytes 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 pkg/ctr/assets/pokemini.png create mode 100644 pkg/ctr/assets/pokemini_banner.png diff --git a/pkg/ctr/Makefile.cores b/pkg/ctr/Makefile.cores index 391fe18045..068a147364 100644 --- a/pkg/ctr/Makefile.cores +++ b/pkg/ctr/Makefile.cores @@ -287,7 +287,7 @@ else ifeq ($(LIBRETRO), pokemini) APP_AUTHOR = justburn APP_PRODUCT_CODE = RARCH-POKEMINI APP_UNIQUE_ID = 0xBAC20 - APP_ICON = pkg/ctr/assets/default.png - APP_BANNER = pkg/ctr/assets/libretro_banner.png + APP_ICON = pkg/ctr/assets/pokemini.png + APP_BANNER = pkg/ctr/assets/pokemini_banner.png endif diff --git a/pkg/ctr/assets/pokemini.png b/pkg/ctr/assets/pokemini.png new file mode 100644 index 0000000000000000000000000000000000000000..e72c4437778895c04ff1a4b25e5aadbb9d8ed3ab GIT binary patch literal 2743 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 KRIHIV3;Q2)`>8bm literal 0 HcmV?d00001