From b3cf7150d5af1d840b500da36114d8326b09843c Mon Sep 17 00:00:00 2001 From: =Christian Murphy Date: Sun, 30 Sep 2018 18:01:43 +0100 Subject: [PATCH 01/42] Date Time setting for AM:PM as an option --- config.def.h | 2 ++ configuration.c | 1 + configuration.h | 1 + intl/msg_hash_lbl.h | 2 ++ intl/msg_hash_us.c | 4 +++ intl/msg_hash_us.h | 32 +++++++++++++++++++++ menu/cbs/menu_cbs_sublabel.c | 4 +++ menu/drivers/xmb.c | 2 +- menu/menu_displaylist.c | 3 ++ menu/menu_driver.c | 8 ++++++ menu/menu_setting.c | 56 ++++++++++++++++++++++++++++++++++++ msg_hash.h | 7 +++++ 12 files changed, 121 insertions(+), 1 deletion(-) diff --git a/config.def.h b/config.def.h index 6ba1d7b5ed..5ef2d11626 100644 --- a/config.def.h +++ b/config.def.h @@ -697,6 +697,8 @@ static const unsigned menu_thumbnails_default = 3; static const unsigned menu_left_thumbnails_default = 0; +static const unsigned menu_timedate_style = 3; + static const bool xmb_vertical_thumbnails = false; #ifdef IOS diff --git a/configuration.c b/configuration.c index d8c8018b8d..34890d6407 100644 --- a/configuration.c +++ b/configuration.c @@ -1569,6 +1569,7 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings, #ifdef HAVE_MENU SETTING_UINT("dpi_override_value", &settings->uints.menu_dpi_override_value, true, menu_dpi_override_value, false); SETTING_UINT("menu_thumbnails", &settings->uints.menu_thumbnails, true, menu_thumbnails_default, false); + SETTING_UINT("menu_timedate_style", &settings->uints.menu_timedate_style, true, menu_timedate_style, false); #ifdef HAVE_XMB SETTING_UINT("menu_left_thumbnails", &settings->uints.menu_left_thumbnails, true, menu_left_thumbnails_default, false); SETTING_UINT("xmb_alpha_factor", &settings->uints.menu_xmb_alpha_factor, true, xmb_alpha_factor, false); diff --git a/configuration.h b/configuration.h index e9aeedf17d..6c54982aa8 100644 --- a/configuration.h +++ b/configuration.h @@ -393,6 +393,7 @@ typedef struct settings unsigned video_record_scale_factor; unsigned video_stream_scale_factor; + unsigned menu_timedate_style; unsigned menu_thumbnails; unsigned menu_left_thumbnails; unsigned menu_dpi_override_value; diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index f5eaf894e0..51e5707304 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -1101,6 +1101,8 @@ MSG_HASH(MENU_ENUM_LABEL_THUMBNAILS_UPDATER_LIST, "thumbnails_updater_list") MSG_HASH(MENU_ENUM_LABEL_TIMEDATE_ENABLE, "menu_timedate_enable") +MSG_HASH(MENU_ENUM_LABEL_TIMEDATE_STYLE, + "menu_timedate_style") MSG_HASH(MENU_ENUM_LABEL_TITLE_COLOR, "menu_title_color") MSG_HASH(MENU_ENUM_LABEL_UI_COMPANION_ENABLE, diff --git a/intl/msg_hash_us.c b/intl/msg_hash_us.c index a3799a3a80..83db0a6a8e 100644 --- a/intl/msg_hash_us.c +++ b/intl/msg_hash_us.c @@ -1738,6 +1738,10 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) snprintf(s, len, "Shows current date and/or time inside menu."); break; + case MENU_ENUM_LABEL_TIMEDATE_STYLE: + snprintf(s, len, + "Style to show the current date and/or time in."); + break; case MENU_ENUM_LABEL_BATTERY_LEVEL_ENABLE: snprintf(s, len, "Shows current battery level inside menu."); diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index a036c7ddf4..d13444ba1a 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -2869,6 +2869,38 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_TIMEDATE_ENABLE, "Show date / time" ) + MSG_HASH( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE, + "Style of date / time" + ) + MSG_HASH( + MENU_ENUM_SUBLABEL_TIMEDATE_STYLE, + "Changes the style current date and/or time is shown inside the menu." + ) + MSG_HASH( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HMS, + "YYYY-MM-DD H:M:S" + ) + MSG_HASH( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD, + "YY-MM-DD" + ) + MSG_HASH( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HMS, + "HH:MM:SS" + ) + MSG_HASH( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HM, + "HH:MM" + ) + MSG_HASH( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_DM_HM, + "DD/MM HH:MM" + ) + MSG_HASH( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_AM_PM, + "HH:MM (AM/PM)" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_TITLE_COLOR, "Menu title color" diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 244d25877e..2c820d863d 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -295,6 +295,7 @@ default_sublabel_macro(action_bind_sublabel_pointer_enable, MENU_ default_sublabel_macro(action_bind_sublabel_thumbnails, MENU_ENUM_SUBLABEL_THUMBNAILS) default_sublabel_macro(action_bind_sublabel_left_thumbnails, MENU_ENUM_SUBLABEL_LEFT_THUMBNAILS) default_sublabel_macro(action_bind_sublabel_timedate_enable, MENU_ENUM_SUBLABEL_TIMEDATE_ENABLE) +default_sublabel_macro(action_bind_sublabel_timedate_style, MENU_ENUM_SUBLABEL_TIMEDATE_STYLE) default_sublabel_macro(action_bind_sublabel_battery_level_enable, MENU_ENUM_SUBLABEL_BATTERY_LEVEL_ENABLE) default_sublabel_macro(action_bind_sublabel_navigation_wraparound, MENU_ENUM_SUBLABEL_NAVIGATION_WRAPAROUND) default_sublabel_macro(action_bind_sublabel_audio_resampler_quality, MENU_ENUM_SUBLABEL_AUDIO_RESAMPLER_QUALITY) @@ -1273,6 +1274,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_TIMEDATE_ENABLE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_timedate_enable); break; + case MENU_ENUM_LABEL_TIMEDATE_STYLE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_timedate_style); + break; case MENU_ENUM_LABEL_THUMBNAILS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_thumbnails); break; diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 6977578495..1358337ce1 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -3629,7 +3629,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info) datetime.s = timedate; datetime.len = sizeof(timedate); - datetime.time_mode = 4; + datetime.time_mode = settings->uints.menu_timedate_style; menu_display_timedate(&datetime); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 5a37ce16be..f32e58d8b9 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -5642,6 +5642,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_TIMEDATE_ENABLE, PARSE_ONLY_BOOL, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_TIMEDATE_STYLE, + PARSE_ONLY_UINT, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_BATTERY_LEVEL_ENABLE, PARSE_ONLY_BOOL, false); diff --git a/menu/menu_driver.c b/menu/menu_driver.c index 4bae4f41b1..a04091ddde 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -368,6 +368,14 @@ void menu_display_timedate(menu_display_ctx_datetime_t *datetime) strftime(datetime->s, datetime->len, "%d/%m %H:%M", localtime(&time_)); break; + case 5: /* Time (hours-minutes), in 12 hour AM-PM designation */ +#if defined(__linux__) && !defined(ANDROID) + strftime(datetime->s, datetime->len, + "%c", localtime(&time_)); +#else + strftime(datetime->s, datetime->len, + "%I:%M %p", localtime(&time_)); +#endif } } diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 0cde556605..14370a1389 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -505,6 +505,47 @@ static void setting_get_string_representation_uint_menu_left_thumbnails( } } +static void setting_get_string_representation_uint_menu_timedate_style( + rarch_setting_t *setting, + char *s, size_t len) +{ + if (!setting) + return; + + switch (*setting->value.target.unsigned_integer) + { + case 0: + strlcpy(s, msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HMS), len); + break; + case 1: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD), len); + break; + case 2: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HMS), len); + break; + case 3: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HM), len); + break; + case 4: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_DM_HM), len); + break; + case 5: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_AM_PM), len); + break; + } +} + static void setting_get_string_representation_uint_xmb_icon_theme( rarch_setting_t *setting, char *s, size_t len) @@ -8225,6 +8266,21 @@ static bool setting_append_list( general_read_handler, SD_FLAG_ADVANCED); + CONFIG_UINT(list, list_info, + &settings->uints.menu_timedate_style, + MENU_ENUM_LABEL_TIMEDATE_STYLE, + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE, + menu_timedate_style, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler); + (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; + (*list)[list_info->index - 1].get_string_representation = + &setting_get_string_representation_uint_menu_timedate_style; + menu_settings_list_current_add_range(list, list_info, 0, 5, 1, true, true); + CONFIG_BOOL( list, list_info, &settings->bools.menu_battery_level_enable, diff --git a/msg_hash.h b/msg_hash.h index b9095515b2..41ba357eaa 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -832,6 +832,7 @@ enum msg_hash_enums MENU_LABEL(LEFT_THUMBNAILS), MENU_LABEL(XMB_VERTICAL_THUMBNAILS), MENU_LABEL(TIMEDATE_ENABLE), + MENU_LABEL(TIMEDATE_STYLE), MENU_LABEL(BATTERY_LEVEL_ENABLE), MENU_LABEL(MATERIALUI_MENU_COLOR_THEME), MENU_LABEL(QUICK_MENU_OVERRIDE_OPTIONS), @@ -2126,6 +2127,12 @@ enum msg_hash_enums MSG_CHEAT_SEARCH_ADD_MATCH_FAIL, MSG_CHEAT_SEARCH_DELETE_MATCH_SUCCESS, MSG_CHEEVOS_HARDCORE_MODE_DISABLED, + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HMS, + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD, + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HMS, + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HM, + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_DM_HM, + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_AM_PM, MSG_LAST }; From 940a03f552e43404323e376485d8c05b8f189172 Mon Sep 17 00:00:00 2001 From: =Christian Murphy Date: Mon, 1 Oct 2018 23:32:54 +0100 Subject: [PATCH 02/42] Linux friendly datetime locale settings, slightly less friendly datetime locale settings for Windows --- config.def.h | 2 +- intl/msg_hash_us.h | 10 +++++++++- menu/drivers/rgui.c | 2 +- menu/menu_driver.c | 26 ++++++++++++++++++-------- menu/menu_setting.c | 23 ++++++++++++++++------- msg_hash.h | 2 ++ 6 files changed, 47 insertions(+), 18 deletions(-) diff --git a/config.def.h b/config.def.h index 5ef2d11626..de7e1dd4fe 100644 --- a/config.def.h +++ b/config.def.h @@ -697,7 +697,7 @@ static const unsigned menu_thumbnails_default = 3; static const unsigned menu_left_thumbnails_default = 0; -static const unsigned menu_timedate_style = 3; +static const unsigned menu_timedate_style = 4; static const bool xmb_vertical_thumbnails = false; diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index d13444ba1a..fee3011d21 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -2879,7 +2879,11 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HMS, - "YYYY-MM-DD H:M:S" + "YYYY-MM-DD HH:MM:SS" + ) + MSG_HASH( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HM, + "YYYY-MM-DD HH:MM" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD, @@ -2897,6 +2901,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_DM_HM, "DD/MM HH:MM" ) + MSG_HASH( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_MD_HM, + "MM/DD HH:MM" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_AM_PM, "HH:MM (AM/PM)" diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index e7d4d982de..346be1ab5d 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -596,7 +596,7 @@ static void rgui_render(void *data, bool is_idle) datetime.s = timedate; datetime.len = sizeof(timedate); - datetime.time_mode = 3; + datetime.time_mode = 4; menu_display_timedate(&datetime); diff --git a/menu/menu_driver.c b/menu/menu_driver.c index a04091ddde..ebdfa229a6 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -17,7 +17,7 @@ #include #include - +#include #include #include #include @@ -346,32 +346,42 @@ void menu_display_timedate(menu_display_ctx_datetime_t *datetime) time(&time_); + setlocale(LC_TIME, ""); + switch (datetime->time_mode) { case 0: /* Date and time */ strftime(datetime->s, datetime->len, "%Y-%m-%d %H:%M:%S", localtime(&time_)); break; - case 1: /* Date */ + case 1: /* YY-MM-DD HH:MM */ strftime(datetime->s, datetime->len, - "%Y-%m-%d", localtime(&time_)); + "%Y-%m-%d %H:%M", localtime(&time_)); break; - case 2: /* Time */ + case 2: /* Date */ + strftime(datetime->s, datetime->len, + "%y-%m-%d", localtime(&time_)); + break; + case 3: /* Time */ strftime(datetime->s, datetime->len, "%H:%M:%S", localtime(&time_)); break; - case 3: /* Time (hours-minutes) */ + case 4: /* Time (hours-minutes) */ strftime(datetime->s, datetime->len, "%H:%M", localtime(&time_)); break; - case 4: /* Date and time, without year and seconds */ + case 5: /* Date and time, without year and seconds */ strftime(datetime->s, datetime->len, "%d/%m %H:%M", localtime(&time_)); break; - case 5: /* Time (hours-minutes), in 12 hour AM-PM designation */ + case 6: + strftime(datetime->s, datetime->len, + "%m/%d %H:%M", localtime(&time_)); + break; + case 7: /* Time (hours-minutes), in 12 hour AM-PM designation */ #if defined(__linux__) && !defined(ANDROID) strftime(datetime->s, datetime->len, - "%c", localtime(&time_)); + "%r", localtime(&time_)); #else strftime(datetime->s, datetime->len, "%I:%M %p", localtime(&time_)); diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 14370a1389..853dd69f66 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -519,26 +519,35 @@ static void setting_get_string_representation_uint_menu_timedate_style( MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HMS), len); break; case 1: - strlcpy(s, - msg_hash_to_str( - MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD), len); + strlcpy(s, msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HM), len); break; case 2: strlcpy(s, msg_hash_to_str( - MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HMS), len); + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD), len); break; case 3: strlcpy(s, msg_hash_to_str( - MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HM), len); + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HMS), len); break; case 4: strlcpy(s, msg_hash_to_str( - MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_DM_HM), len); + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HM), len); break; case 5: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_DM_HM), len); + break; + case 6: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_MD_HM), len); + break; + case 7: strlcpy(s, msg_hash_to_str( MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_AM_PM), len); @@ -8279,7 +8288,7 @@ static bool setting_append_list( (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; (*list)[list_info->index - 1].get_string_representation = &setting_get_string_representation_uint_menu_timedate_style; - menu_settings_list_current_add_range(list, list_info, 0, 5, 1, true, true); + menu_settings_list_current_add_range(list, list_info, 0, 7, 1, true, true); CONFIG_BOOL( list, list_info, diff --git a/msg_hash.h b/msg_hash.h index 41ba357eaa..0eda40602e 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -2128,10 +2128,12 @@ enum msg_hash_enums MSG_CHEAT_SEARCH_DELETE_MATCH_SUCCESS, MSG_CHEEVOS_HARDCORE_MODE_DISABLED, MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HMS, + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HM, MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD, MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HMS, MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HM, MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_DM_HM, + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_MD_HM, MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_AM_PM, MSG_LAST From 017d1b710e6c3864518adbdbba6ddcaf273b4f52 Mon Sep 17 00:00:00 2001 From: =Christian Murphy Date: Fri, 5 Oct 2018 23:11:38 +0100 Subject: [PATCH 03/42] Restore default time mode, replace non-sensical time date formats with more commonly used ones --- config.def.h | 2 +- intl/msg_hash_us.h | 6 +++--- menu/menu_driver.c | 6 +++--- menu/menu_setting.c | 2 +- msg_hash.h | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/config.def.h b/config.def.h index de7e1dd4fe..3a73c9044b 100644 --- a/config.def.h +++ b/config.def.h @@ -697,7 +697,7 @@ static const unsigned menu_thumbnails_default = 3; static const unsigned menu_left_thumbnails_default = 0; -static const unsigned menu_timedate_style = 4; +static const unsigned menu_timedate_style = 5; static const bool xmb_vertical_thumbnails = false; diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index fee3011d21..8e12aa6fe3 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -2886,8 +2886,8 @@ MSG_HASH( "YYYY-MM-DD HH:MM" ) MSG_HASH( - MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD, - "YY-MM-DD" + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_MDYYYY, + "MM-DD-YYYY HH:MM" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HMS, @@ -2907,7 +2907,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_AM_PM, - "HH:MM (AM/PM)" + "HH:MM:SS (AM/PM)" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_TITLE_COLOR, diff --git a/menu/menu_driver.c b/menu/menu_driver.c index ebdfa229a6..38303dcb68 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -358,9 +358,9 @@ void menu_display_timedate(menu_display_ctx_datetime_t *datetime) strftime(datetime->s, datetime->len, "%Y-%m-%d %H:%M", localtime(&time_)); break; - case 2: /* Date */ + case 2: /* MM-DD-YYYY HH:MM */ strftime(datetime->s, datetime->len, - "%y-%m-%d", localtime(&time_)); + "%m-%d-%Y %H:%M", localtime(&time_)); break; case 3: /* Time */ strftime(datetime->s, datetime->len, @@ -384,7 +384,7 @@ void menu_display_timedate(menu_display_ctx_datetime_t *datetime) "%r", localtime(&time_)); #else strftime(datetime->s, datetime->len, - "%I:%M %p", localtime(&time_)); + "%I:%M:%S %p", localtime(&time_)); #endif } } diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 853dd69f66..23812b4e9b 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -525,7 +525,7 @@ static void setting_get_string_representation_uint_menu_timedate_style( case 2: strlcpy(s, msg_hash_to_str( - MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD), len); + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_MDYYYY), len); break; case 3: strlcpy(s, diff --git a/msg_hash.h b/msg_hash.h index 0eda40602e..f35b4502de 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -2129,7 +2129,7 @@ enum msg_hash_enums MSG_CHEEVOS_HARDCORE_MODE_DISABLED, MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HMS, MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD_HM, - MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_YMD, + MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_MDYYYY, MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HMS, MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_HM, MENU_ENUM_LABEL_VALUE_TIMEDATE_STYLE_DM_HM, From 7366a46bc2881048ec20d2a0f6e2bd1bb1884725 Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Fri, 5 Oct 2018 19:02:50 -0400 Subject: [PATCH 04/42] convert AM/PM string from local encoding to utf8 --- menu/menu_driver.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/menu/menu_driver.c b/menu/menu_driver.c index 38303dcb68..51d1674395 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -24,6 +24,7 @@ #include #include #include +#include #ifdef WIIU #include @@ -383,8 +384,20 @@ void menu_display_timedate(menu_display_ctx_datetime_t *datetime) strftime(datetime->s, datetime->len, "%r", localtime(&time_)); #else - strftime(datetime->s, datetime->len, - "%I:%M:%S %p", localtime(&time_)); + { + char *local; + + strftime(datetime->s, datetime->len, + + "%I:%M:%S %p", localtime(&time_)); + local = local_to_utf8_string_alloc(datetime->s); + + if (local) + { + strlcpy(datetime->s, local, datetime->len); + free(local); + } + } #endif } } From 4240c895bf358fd93411a4791783a82657134498 Mon Sep 17 00:00:00 2001 From: Stuart Carnie Date: Sat, 6 Oct 2018 09:27:53 -0700 Subject: [PATCH 05/42] =?UTF-8?q?fix(macOS/Qt):=20Rename=20produce=20Retro?= =?UTF-8?q?ArchQT=20=E2=86=92=20RetroArch=20(#7374)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RetroArch_Metal.xcodeproj/project.pbxproj | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj b/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj index 2122da3cc2..2cfc05036c 100644 --- a/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj +++ b/pkg/apple/RetroArch_Metal.xcodeproj/project.pbxproj @@ -142,7 +142,7 @@ 053FC25521433F1700D98D46 /* QtConcurrent.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QtConcurrent.framework; path = /usr/local/opt/qt/lib/QtConcurrent.framework; sourceTree = ""; }; 053FC25621433F1800D98D46 /* QtNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QtNetwork.framework; path = /usr/local/opt/qt/lib/QtNetwork.framework; sourceTree = ""; }; 053FC25721433F1800D98D46 /* QtWidgets.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QtWidgets.framework; path = /usr/local/opt/qt/lib/QtWidgets.framework; sourceTree = ""; }; - 05422E592140C8DB00F09961 /* RetroArchQT.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RetroArchQT.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 05422E592140C8DB00F09961 /* RetroArch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RetroArch.app; sourceTree = BUILT_PRODUCTS_DIR; }; 05422E5B2140CE3500F09961 /* VulkanConfig.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = VulkanConfig.xcconfig; sourceTree = ""; }; 05422E5C2140CFC500F09961 /* Metal.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Metal.xcconfig; sourceTree = ""; }; 0548E2B220F976E10094A083 /* driver.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = driver.c; path = ../../driver.c; sourceTree = ""; }; @@ -1426,7 +1426,7 @@ isa = PBXGroup; children = ( 8D1107320486CEB800E47090 /* RetroArch.app */, - 05422E592140C8DB00F09961 /* RetroArchQT.app */, + 05422E592140C8DB00F09961 /* RetroArch.app */, ); name = Products; sourceTree = ""; @@ -1502,9 +1502,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - 05422E3C2140C8DB00F09961 /* RetroArchQT */ = { + 05422E3C2140C8DB00F09961 /* RetroArchQt */ = { isa = PBXNativeTarget; - buildConfigurationList = 05422E562140C8DB00F09961 /* Build configuration list for PBXNativeTarget "RetroArchQT" */; + buildConfigurationList = 05422E562140C8DB00F09961 /* Build configuration list for PBXNativeTarget "RetroArchQt" */; buildPhases = ( 053FC2782143764B00D98D46 /* ShellScript */, 05422E3D2140C8DB00F09961 /* Resources */, @@ -1518,10 +1518,10 @@ ); dependencies = ( ); - name = RetroArchQT; + name = RetroArchQt; productInstallPath = "$(HOME)/Applications"; productName = RetroArch; - productReference = 05422E592140C8DB00F09961 /* RetroArchQT.app */; + productReference = 05422E592140C8DB00F09961 /* RetroArch.app */; productType = "com.apple.product-type.application"; }; 8D1107260486CEB800E47090 /* RetroArch */ = { @@ -1563,7 +1563,7 @@ projectRoot = ""; targets = ( 8D1107260486CEB800E47090 /* RetroArch */, - 05422E3C2140C8DB00F09961 /* RetroArchQT */, + 05422E3C2140C8DB00F09961 /* RetroArchQt */, ); }; /* End PBXProject section */ @@ -1690,7 +1690,7 @@ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES; PRODUCT_BUNDLE_IDENTIFIER = libretro.RetroArch; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = RetroArch; }; name = Debug; }; @@ -1711,7 +1711,7 @@ ); PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = YES; PRODUCT_BUNDLE_IDENTIFIER = libretro.RetroArch; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = RetroArch; }; name = Release; }; @@ -1986,7 +1986,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 05422E562140C8DB00F09961 /* Build configuration list for PBXNativeTarget "RetroArchQT" */ = { + 05422E562140C8DB00F09961 /* Build configuration list for PBXNativeTarget "RetroArchQt" */ = { isa = XCConfigurationList; buildConfigurations = ( 05422E572140C8DB00F09961 /* Debug */, From 4d8a3db02f60b1470e115b073b90a447874c2f33 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 7 Oct 2018 04:32:32 +0200 Subject: [PATCH 06/42] (iOS) Fix issue https://github.com/libretro/RetroArch/issues/7298#issuecomment-427618317 --- ui/drivers/ui_cocoatouch.m | 1 - 1 file changed, 1 deletion(-) diff --git a/ui/drivers/ui_cocoatouch.m b/ui/drivers/ui_cocoatouch.m index 19f676dea1..4e637feb21 100644 --- a/ui/drivers/ui_cocoatouch.m +++ b/ui/drivers/ui_cocoatouch.m @@ -79,7 +79,6 @@ static void ui_companion_cocoatouch_event_command( void *data, enum event_command cmd) { (void)data; - command_event(cmd, NULL); } static void rarch_draw_observer(CFRunLoopObserverRef observer, From f35ee6c0c1b754c5477b26edb6770eacc1f6682c Mon Sep 17 00:00:00 2001 From: WerWolv Date: Sun, 7 Oct 2018 00:49:58 +0200 Subject: [PATCH 07/42] Updated German translation --- intl/msg_hash_de.h | 180 ++++++++++++++++++++++++++------------------- 1 file changed, 103 insertions(+), 77 deletions(-) diff --git a/intl/msg_hash_de.h b/intl/msg_hash_de.h index bb337900ad..a9eccfa635 100644 --- a/intl/msg_hash_de.h +++ b/intl/msg_hash_de.h @@ -1,3 +1,29 @@ +#ifdef HAVE_LAKKA_SWITCH +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SWITCH_GPU_PROFILE, + "GPU Übertakten" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_SWITCH_GPU_PROFILE, + "Über- oder Untertakten der Switch GPU" + ) + MSG_HASH( + MENU_ENUM_LABEL_VALUE_SWITCH_BACKLIGHT_CONTROL, + "Bildschirmhelligkeit" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL, + "Anpassen der Switch Bildschirmhelligkeit" + ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE, + "CPU Übertakten" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_SWITCH_CPU_PROFILE, + "Übertakten der Switch CPU" + ) +#endif MSG_HASH( MSG_COMPILER, "Compiler" @@ -3332,121 +3358,121 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_COLOR_BLUE, MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAMECOUNT_SHOW, "Zeige die aktuelle Anzahl an Einzelbildern an") MSG_HASH(MENU_ENUM_LABEL_VALUE_AUTOMATICALLY_ADD_CONTENT_TO_PLAYLIST, - "Automatically add content to playlist") + "Inhalt automatisch zur Playlist hinzufügen") MSG_HASH(MENU_ENUM_SUBLABEL_AUTOMATICALLY_ADD_CONTENT_TO_PLAYLIST, - "Automatically scans loaded content so they appear inside playlists.") + "Scant automatisch den geladenen Inhalt, so dass er in Playlisten angezeigt wird.") MSG_HASH(MSG_SCANNING_OF_FILE_FINISHED, - "Scanning of file finished") + "Scannen von Datei beendet") MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_QUALITY, - "Audio Resampler Quality") + "Audio Resampler Qualität") MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_RESAMPLER_QUALITY, - "Lower this value to favor performance/lower latency over audio quality, increase if you want better audio quality at the expense of performance/lower latency.") + "Verkleinere diesen Wert um Performance/kleinere Latenz gegenüber Audio Qualität zu bevorzugen, erhöhe ihn wenn du bessere Audioqualität bevorzugst auf kosten der Performance/kleinerer Latenz.") MSG_HASH(MENU_ENUM_LABEL_VALUE_STATISTICS_SHOW, - "Display Statistics") + "Statistiken anzeigen") MSG_HASH(MENU_ENUM_SUBLABEL_STATISTICS_SHOW, - "Show onscreen technical statistics.") + "Technische Onscreen-Statistiken anzeigen.") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_RGUI_BORDER_FILLER_ENABLE, - "Enable border filler") + "Rahmenfüller aktivieren.") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_RGUI_BORDER_FILLER_THICKNESS_ENABLE, - "Enable border filler thickness") + "Rahmenfüllerdicke aktivieren") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_RGUI_BACKGROUND_FILLER_THICKNESS_ENABLE, - "Enable background filler thickness") -MSG_HASH(MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION, "For CRT displays only. Attempts to use exact core/game resolution and refresh rate.") + "Hintergrundfüllerdicke aktivieren") +MSG_HASH(MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION, "Nur für CRT Bildschirme. Versuche die exakte Core-/Spielauflösung und refresh Rate zu verwenden.") MSG_HASH(MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION, "CRT SwitchRes") MSG_HASH( MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION_SUPER, - "Switch among native and ultrawide super resolutions." + "Umschalten zwischen Nativer- und ultraweiter Superauflösungen." ) -MSG_HASH(MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION_SUPER, "CRT Super Resolution") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION_SUPER, "CRT Superauflösung") MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_REWIND, - "Show Rewind Settings") + "Rückspuleinstellungen anzeigen") MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_SHOW_REWIND, - "Show/hide the Rewind options.") + "Rückspuleinstellungsoption anzeigen/verstecken ") MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_SHOW_LATENCY, - "Show/hide the Latency options.") + "Latenzoptionen anzeigen/verstecken") MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_LATENCY, - "Show Latency Settings") + "Latenzeinstellungen anzeigen") MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_SHOW_OVERLAYS, - "Show/hide the Overlay options.") + "Overlayoptionen anzeigen/verstecken") MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_OVERLAYS, - "Show Overlay Settings") + "Overlayeinstellungen anzeigen") MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_ENABLE_MENU, - "Enable menu audio") + "Menuaudio aktivieren") MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_ENABLE_MENU, - "Enable or disable menu sound.") + "Menuton aktivieren oder deaktivieren") MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_MIXER_SETTINGS, - "Mixer Settings") + "Mixer-Einstellungen") MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_MIXER_SETTINGS, - "View and/or modify audio mixer settings.") + "Anzeigen und/oder anzeigen von Audiomixer-Einstellungen.") MSG_HASH(MENU_ENUM_LABEL_VALUE_QUICK_MENU_OVERRIDE_OPTIONS, - "Overrides") + "Überschreibungen") MSG_HASH(MENU_ENUM_SUBLABEL_QUICK_MENU_OVERRIDE_OPTIONS, - "Options for overriding the global configuration.") + "Optionen zum überschreiben der globalen Konfiguration.") MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_PLAY, - "Will start playback of the audio stream. Once finished, it will remove the current audio stream from memory.") + "Wird die Wiedergabe des Audiostreams starten. Sobald dieser fertig ist, wird der jetzige Audiostream aus dem Speicher entfernt werden.") MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_PLAY_LOOPED, - "Will start playback of the audio stream. Once finished, it will loop and play the track again from the beginning.") + "Wird die Wiedergabe des Audiostreams starten. Sobald dieser fertig ist, wird dieser erneut von vorne gestartet") MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_PLAY_SEQUENTIAL, - "Will start playback of the audio stream. Once finished, it will jump to the next audio stream in sequential order and repeat this behavior. Useful as an album playback mode.") + "Wird die Wiedergabe des Audiostreams starten. Sobald dieser fertig ist, springt er zum nächsten Audiostream in sequenzieller Reihenfolge und wiederholt dieses verhalten. Nützlich als Albumwiedergabemodus.") MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_STOP, - "This will stop playback of the audio stream, but not remove it from memory. You can start playing it again by selecting 'Play'.") + "Dies wird die Wiedergabe des Audiostreams stoppen, aber ihn nicht aus dem Speicher entfernen. Du kannst die Wiedergabe fortsetzen in dem du erneut auf 'Abspielen' klickst.") MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_REMOVE, - "This will stop playback of the audio stream and remove it entirely from memory.") + "Dies wird die Wiedergabe stoppen und den Audiostream komplett aus dem Speicher entfernen.") MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_VOLUME, - "Adjust the volume of the audio stream.") + "Anpassen der Lautstärke des Audiostreams.") MSG_HASH(MENU_ENUM_SUBLABEL_ADD_TO_MIXER, - "Add this audio track to an available audio stream slot. If no slots are currently available, it will be ignored.") + "Diese Audiospur einem verfügbaren Audiostreamslot hinzufügen. Wenn momentan kein Slot verfügbar ist, wird dies ignoriert.") MSG_HASH(MENU_ENUM_SUBLABEL_ADD_TO_MIXER_AND_PLAY, - "Add this audio track to an available audio stream slot and play it. If no slots are currently available, it will be ignored.") + "Diese Audiospur einem verfügbaren Audiostreamslot hinzufügen und sie wiedergeben. Wenn momentan kein Slot verfügbar ist, wird dies ignoriert.") MSG_HASH(MENU_ENUM_LABEL_VALUE_MIXER_ACTION_PLAY, - "Play") + "Abspielen") MSG_HASH(MENU_ENUM_LABEL_VALUE_MIXER_ACTION_PLAY_LOOPED, - "Play (Looped)") + "Abspielen (Schleife)") MSG_HASH(MENU_ENUM_LABEL_VALUE_MIXER_ACTION_PLAY_SEQUENTIAL, - "Play (Sequential)") + "Abspielen (Sequenziell)") MSG_HASH(MENU_ENUM_LABEL_VALUE_MIXER_ACTION_STOP, - "Stop") + "Stopp") MSG_HASH(MENU_ENUM_LABEL_VALUE_MIXER_ACTION_REMOVE, - "Remove") + "Entfernen") MSG_HASH(MENU_ENUM_LABEL_VALUE_MIXER_ACTION_VOLUME, - "Volume") + "Lautstärke") MSG_HASH(MENU_ENUM_LABEL_VALUE_DETECT_CORE_LIST_OK_CURRENT_CORE, - "Current core") + "Aktueller Core") MSG_HASH(MENU_ENUM_LABEL_VALUE_QT_MENU_SEARCH_CLEAR, - "Clear") + "Leeren") MSG_HASH(MENU_ENUM_LABEL_VALUE_DISCORD_IN_MENU, - "In-Menu") + "Im Menu") MSG_HASH(MENU_ENUM_LABEL_VALUE_DISCORD_IN_GAME, - "In-Game") + "Im Spiel") MSG_HASH(MENU_ENUM_LABEL_VALUE_DISCORD_IN_GAME_PAUSED, - "In-Game (Paused)") + "Im Spiel (Pausiert)") MSG_HASH(MENU_ENUM_LABEL_VALUE_DISCORD_STATUS_PLAYING, - "Playing") + "Wiedergebend") MSG_HASH(MENU_ENUM_LABEL_VALUE_DISCORD_STATUS_PAUSED, - "Paused") + "Pausiert") MSG_HASH( MENU_ENUM_LABEL_VALUE_DISCORD_ALLOW, - "Enable Discord" + "Discord aktivieren" ) MSG_HASH( MENU_ENUM_SUBLABEL_DISCORD_ALLOW, - "Enable or disable Discord support. Will not work with the browser version, only native desktop client." + "Discordunterstützung aktivieren oder deaktivieren. Funktioniert nicht in der Browserversion, nur im nativen Desktop Client." ) MSG_HASH(MENU_ENUM_LABEL_VALUE_POWER_MANAGEMENT_SETTINGS, - "Power Management") + "Energieverwaltung") MSG_HASH(MENU_ENUM_SUBLABEL_POWER_MANAGEMENT_SETTINGS, - "Change power management settings.") + "Ändere die Energieverwaltungs-Einstellungen") MSG_HASH(MENU_ENUM_LABEL_VALUE_SUSTAINED_PERFORMANCE_MODE, - "Sustained Performance Mode") + "Dauerleistungsmodus") MSG_HASH(MENU_ENUM_LABEL_VALUE_SYSTEM_INFO_MPV_SUPPORT, - "mpv support") + "mpv unterstützung") MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_ADAPTIVE_VSYNC, - "Adaptive Vsync" + "Adaptiver Vsync" ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_ADAPTIVE_VSYNC, - "V-Sync is enabled until performance falls below the target refresh rate. Can minimize stuttering when performance falls below realtime, and can be more energy efficient." + "V-Sync ist aktiviert bis die Leistung unter die Zielaktualisierungsrate fällt. Kann Ruckler vermeiden, wenn die Leistung unter realtime fällt, und kann energieeffizienter sein." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CRT_SWITCHRES_SETTINGS, @@ -3454,75 +3480,75 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_CRT_SWITCHRES_SETTINGS, - "Output native, low-resolution signals for use with CRT displays." + "Native Signale mit niedgriger Auflösung ausgeben, welche mit CRT Bildschirmen benutzt werden können." ) MSG_HASH( MENU_ENUM_SUBLABEL_CRT_SWITCH_X_AXIS_CENTERING, - "Cycle through these options if the image is not centered properly on the display." + "Versuche eine dieser Optionen, wenn das Bild nicht richtig zentriert auf dem Bildschirm erscheint." ) MSG_HASH( MENU_ENUM_LABEL_VALUE_CRT_SWITCH_X_AXIS_CENTERING, - "X-Axis Centering" + "X-Achsenzentrierung" ) MSG_HASH( MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION_USE_CUSTOM_REFRESH_RATE, - "Use a custom refresh rate specified in the config file if needed.") + "Benutze eine, in der Konfiguration definierte, Aktualisierungsrate wenn notwendig.") MSG_HASH( MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION_USE_CUSTOM_REFRESH_RATE, - "Use Custom Refresh Rate") + "Benutze eine benutzerdefinierte Aktualisierungsrate.") MSG_HASH( MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION_OUTPUT_DISPLAY_ID, - "Select the output port connected to the CRT display.") + "Wähle den Ausgangsport aus, welcher mit dem CRT Bildschirm verbunden ist.") MSG_HASH( MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION_OUTPUT_DISPLAY_ID, - "Output Display ID") + "Ausgangs Bildschirm ID") MSG_HASH( MENU_ENUM_LABEL_VALUE_QUICK_MENU_START_RECORDING, - "Start Recording" + "Aufnahme starten" ) MSG_HASH( MENU_ENUM_SUBLABEL_QUICK_MENU_START_RECORDING, - "Starts recording." + "Startet die Aufnahme" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QUICK_MENU_STOP_RECORDING, - "Stop Recording" + "Aufnahme beenden" ) MSG_HASH( MENU_ENUM_SUBLABEL_QUICK_MENU_STOP_RECORDING, - "Stops recording." + "Beendet die Aufnahme" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QUICK_MENU_START_STREAMING, - "Start Streaming" + "Streamen starten" ) MSG_HASH( MENU_ENUM_SUBLABEL_QUICK_MENU_START_STREAMING, - "Starts streaming." + "Startet das Streamen" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_QUICK_MENU_STOP_STREAMING, - "Stop Streaming" + "Streamen beenden" ) MSG_HASH( MENU_ENUM_SUBLABEL_QUICK_MENU_STOP_STREAMING, - "Stops streaming." + "Beendet das Streamen" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_RECORDING_TOGGLE, - "Recording toggle" + "Aufnahme starten/stoppen" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_STREAMING_TOGGLE, - "Streaming toggle" + "Streamen starten/stoppen" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_RECORD_QUALITY, - "Record Quality" + "Aufnahmequalität" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_STREAM_QUALITY, - "Stream Quality" + "Streamingqualität" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_STREAMING_URL, @@ -3545,18 +3571,18 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_TWITCH_STREAM_KEY, MSG_HASH(MENU_ENUM_LABEL_VALUE_YOUTUBE_STREAM_KEY, "YouTube Stream Key") MSG_HASH(MENU_ENUM_LABEL_VALUE_STREAMING_MODE, - "Streaming Mode") + "Streamingmodus") MSG_HASH(MENU_ENUM_LABEL_VALUE_STREAMING_TITLE, - "Title of Stream") + "Streamtitel") MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_SPLIT_JOYCON, "Split Joy-Con" ) MSG_HASH( MENU_ENUM_LABEL_VALUE_RESET_TO_DEFAULT_CONFIG, - "Reset To Defaults" + "Auf Standardwerte zurücksetzen" ) MSG_HASH( MENU_ENUM_SUBLABEL_RESET_TO_DEFAULT_CONFIG, - "Reset the current configuration to default values." + "Setzt die momentane Konfiguration auf die Standardwerte zurück." ) From 247b21b151918e6b33ec3946369b9c37b77f5f8d Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 8 Oct 2018 04:20:07 +0200 Subject: [PATCH 08/42] (platform_switch.c) Set retro_rating level to 11 - some minor cleanups --- frontend/drivers/platform_switch.c | 82 +++++++++++++++--------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/frontend/drivers/platform_switch.c b/frontend/drivers/platform_switch.c index 6bdea42936..39cb228a47 100644 --- a/frontend/drivers/platform_switch.c +++ b/frontend/drivers/platform_switch.c @@ -57,7 +57,7 @@ static uint64_t frontend_switch_get_mem_used(void); #ifdef HAVE_LIBNX -// Splash +/* Splash */ static uint32_t *splashData = NULL; static bool psmInitialized = false; @@ -66,7 +66,7 @@ static bool psmInitialized = false; extern bool nxlink_connected; #endif -#endif // HAVE_LIBNX +#endif /* HAVE_LIBNX */ static void get_first_valid_core(char *path_return) { @@ -195,7 +195,7 @@ static void frontend_switch_deinit(void *data) socketExit(); #endif - // Splash + /* Splash */ if (splashData) { free(splashData); @@ -325,33 +325,33 @@ static void frontend_switch_exitspawn(char *s, size_t len) void argb_to_rgba8(uint32_t *buff, uint32_t height, uint32_t width) { - // Convert - for (uint32_t h = 0; h < height; h++) + uint32_t h, w; + /* Convert */ + for (h = 0; h < height; h++) { - for (uint32_t w = 0; w < width; w++) + for (w = 0; w < width; w++) { uint32_t offset = (h * width) + w; - uint32_t c = buff[offset]; + uint32_t c = buff[offset]; - uint32_t a = (uint32_t)((c & 0xff000000) >> 24); - uint32_t r = (uint32_t)((c & 0x00ff0000) >> 16); - uint32_t g = (uint32_t)((c & 0x0000ff00) >> 8); - uint32_t b = (uint32_t)(c & 0x000000ff); + uint32_t a = (uint32_t)((c & 0xff000000) >> 24); + uint32_t r = (uint32_t)((c & 0x00ff0000) >> 16); + uint32_t g = (uint32_t)((c & 0x0000ff00) >> 8); + uint32_t b = (uint32_t)(c & 0x000000ff); - buff[offset] = RGBA8(r, g, b, a); + buff[offset] = RGBA8(r, g, b, a); } } } -void frontend_switch_showsplash() +void frontend_switch_showsplash(void) { printf("[Splash] Showing splashScreen\n"); if (splashData) { - uint32_t width, height; - width = height = 0; - + uint32_t width = 0; + uint32_t height = 0; uint32_t *frambuffer = (uint32_t *)gfxGetFramebuffer(&width, &height); gfx_slow_swizzling_blit(frambuffer, splashData, width, height, 0, 0, false); @@ -362,15 +362,15 @@ void frontend_switch_showsplash() } } -// From rpng_test.c -bool rpng_load_image_argb(const char *path, uint32_t **data, unsigned *width, unsigned *height) +/* From rpng_test.c */ +bool rpng_load_image_argb(const char *path, + uint32_t **data, unsigned *width, unsigned *height) { int retval; size_t file_len; - bool ret = true; - rpng_t *rpng = NULL; - void *ptr = NULL; - + bool ret = true; + rpng_t *rpng = NULL; + void *ptr = NULL; struct nbio_t *handle = (struct nbio_t *)nbio_open(path, NBIO_READ); if (!handle) @@ -463,7 +463,7 @@ ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize) return -1; } -// Taken from glibc +/* Taken from glibc */ char *realpath(const char *name, char *resolved) { char *rpath, *dest, *extra_buf = NULL; @@ -592,14 +592,14 @@ error: return NULL; } -#endif // HAVE_LIBNX +#endif /* HAVE_LIBNX */ static void frontend_switch_shutdown(bool unused) { (void)unused; } -// runloop_get_system_info isnt initialized that early.. +/* runloop_get_system_info isnt initialized that early.. */ extern void retro_get_system_info(struct retro_system_info *info); static void frontend_switch_init(void *data) @@ -608,21 +608,21 @@ static void frontend_switch_init(void *data) #ifdef HAVE_LIBNX #ifndef HAVE_OPENGL - // Init Resolution before initDefault + /* Init Resolution before initDefault */ gfxInitResolution(1280, 720); gfxInitDefault(); gfxSetMode(GfxMode_TiledDouble); gfxConfigureTransform(0); -#endif // HAVE_OPENGL +#endif /* HAVE_OPENGL */ #ifdef NXLINK socketInitializeDefault(); nxlink_connected = nxlinkStdio() != -1; #ifndef IS_SALAMANDER verbosity_enable(); -#endif // IS_SALAMANDER -#endif // NXLINK +#endif /* IS_SALAMANDER */ +#endif /* NXLINK */ Result rc; rc = psmInitialize(); @@ -642,8 +642,8 @@ static void frontend_switch_init(void *data) uint32_t width, height; width = height = 0; - // Load splash #ifndef HAVE_OPENGL + /* Load splash */ if (!splashData) { if (sys_info) @@ -685,12 +685,12 @@ static void frontend_switch_init(void *data) frontend_switch_showsplash(); } #endif -#endif // HAVE_LIBNX (splash) +#endif /* HAVE_LIBNX (splash) */ } static int frontend_switch_get_rating(void) { - return 1000; + return 11; } enum frontend_architecture frontend_switch_get_architecture(void) @@ -718,7 +718,7 @@ static int frontend_switch_parse_drive_list(void *data, bool load_content) static uint64_t frontend_switch_get_mem_total(void) { uint64_t memoryTotal = 0; - svcGetInfo(&memoryTotal, 6, 0xffff8001, 0); // avaiable + svcGetInfo(&memoryTotal, 6, 0xffff8001, 0); memoryTotal += frontend_switch_get_mem_used(); return memoryTotal; @@ -727,7 +727,7 @@ static uint64_t frontend_switch_get_mem_total(void) static uint64_t frontend_switch_get_mem_used(void) { uint64_t memoryUsed = 0; - svcGetInfo(&memoryUsed, 7, 0xffff8001, 0); // used + svcGetInfo(&memoryUsed, 7, 0xffff8001, 0); return memoryUsed; } @@ -769,7 +769,7 @@ static void frontend_switch_get_os(char *s, size_t len, int *major, int *minor) strlcpy(s, "Horizon OS", len); #ifdef HAVE_LIBNX - // There is pretty sure a better way, but this will do just fine + /* There is pretty sure a better way, but this will do just fine */ if (kernelAbove600()) { *major = 6; @@ -796,18 +796,18 @@ static void frontend_switch_get_os(char *s, size_t len, int *major, int *minor) } else { - // either 1.0 or > 5.x + /* either 1.0 or > 5.x */ *major = 1; *minor = 0; } #else - // defaults in case we error out + /* defaults in case we error out */ *major = 0; *minor = 0; char firmware_version[0x100]; - result_t r; // used by LIB_ASSERT_OK macros + result_t r; /* used by LIB_ASSERT_OK macros */ LIB_ASSERT_OK(fail, sm_init()); ipc_object_t set_sys; @@ -835,7 +835,7 @@ fail: static void frontend_switch_get_name(char *s, size_t len) { - // TODO: Add Mariko at some point + /* TODO: Add Mariko at some point */ strlcpy(s, "Nintendo Switch", len); } @@ -853,12 +853,12 @@ frontend_ctx_driver_t frontend_ctx_switch = #else frontend_switch_set_fork, #endif -#else // HAVE_LIBNX +#else /* HAVE_LIBNX */ NULL, NULL, NULL, NULL, -#endif // HAVE_LIBNX +#endif /* HAVE_LIBNX */ frontend_switch_shutdown, frontend_switch_get_name, frontend_switch_get_os, From 57db04b389958bdd575bd4907eda2115313177ff Mon Sep 17 00:00:00 2001 From: natinusala Date: Mon, 8 Oct 2018 14:34:12 +0200 Subject: [PATCH 09/42] switch_input: add pointer capabilities --- input/drivers/switch_input.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/input/drivers/switch_input.c b/input/drivers/switch_input.c index 50e669faa6..26cfd510d5 100644 --- a/input/drivers/switch_input.c +++ b/input/drivers/switch_input.c @@ -159,7 +159,13 @@ static uint64_t switch_input_get_capabilities(void *data) { (void) data; - return (1 << RETRO_DEVICE_JOYPAD) | (1 << RETRO_DEVICE_ANALOG); + uint64_t caps = (1 << RETRO_DEVICE_JOYPAD) | (1 << RETRO_DEVICE_ANALOG); + +#ifdef HAVE_LIBNX + caps |= (1 << RETRO_DEVICE_POINTER); +#endif + + return caps; } static const input_device_driver_t *switch_input_get_joypad_driver(void *data) From 509ecab3fe75f286881270a5d4c1ba4d3e75ba66 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 8 Oct 2018 15:38:25 +0200 Subject: [PATCH 10/42] Should hopefully fix Reicast issues --- gfx/drivers/gl.c | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 66f45482d5..80fdd822d9 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1780,26 +1780,32 @@ static void *gl_init(const video_info_t *video, hwr = video_driver_get_hw_context(); - if (hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) + if (hwr) { - gfx_ctx_flags_t flags; + hwr->version_major = gl->version_major; + hwr->version_minor = gl->version_minor; - gl_query_core_context_set(true); - gl->core_context_in_use = true; - - /** - * Ensure that the rest of the frontend knows we have a core context - */ - flags.flags = 0; - BIT32_SET(flags.flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT); - - video_context_driver_set_flags(&flags); - - RARCH_LOG("[GL]: Using Core GL context, setting up VAO...\n"); - if (!gl_check_capability(GL_CAPS_VAO)) + if (hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) { - RARCH_ERR("[GL]: Failed to initialize VAOs.\n"); - goto error; + gfx_ctx_flags_t flags; + + gl_query_core_context_set(true); + gl->core_context_in_use = true; + + /** + * Ensure that the rest of the frontend knows we have a core context + */ + flags.flags = 0; + BIT32_SET(flags.flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT); + + video_context_driver_set_flags(&flags); + + RARCH_LOG("[GL]: Using Core GL context, setting up VAO...\n"); + if (!gl_check_capability(GL_CAPS_VAO)) + { + RARCH_ERR("[GL]: Failed to initialize VAOs.\n"); + goto error; + } } } @@ -1813,7 +1819,7 @@ static void *gl_init(const video_info_t *video, if (gl->renderchain_driver->restore_default_state) gl->renderchain_driver->restore_default_state(gl, gl->renderchain_data); - if (hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) + if (hwr && hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) if (gl->renderchain_driver->new_vao) gl->renderchain_driver->new_vao(gl, gl->renderchain_data); @@ -1823,7 +1829,7 @@ static void *gl_init(const video_info_t *video, gl->hw_render_use = false; gl->has_fbo = gl_check_capability(GL_CAPS_FBO); - if (gl->has_fbo && hwr->context_type != RETRO_HW_CONTEXT_NONE) + if (gl->has_fbo && hwr && hwr->context_type != RETRO_HW_CONTEXT_NONE) gl->hw_render_use = true; if (!resolve_extensions(gl, ctx_driver->ident, video)) @@ -1855,7 +1861,7 @@ static void *gl_init(const video_info_t *video, RARCH_LOG("[GL]: Using resolution %ux%u\n", temp_width, temp_height); - gl->vertex_ptr = hwr->bottom_left_origin + gl->vertex_ptr = (hwr && hwr->bottom_left_origin) ? vertexes : vertexes_flipped; /* Better pipelining with GPU due to synchronous glSubTexImage. From 508e5efdd772fce232affc884f2bc759eb00fab8 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 8 Oct 2018 18:54:26 +0200 Subject: [PATCH 11/42] Revert "Should hopefully fix Reicast issues" This reverts commit 509ecab3fe75f286881270a5d4c1ba4d3e75ba66. --- gfx/drivers/gl.c | 46 ++++++++++++++++++++-------------------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 80fdd822d9..66f45482d5 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1780,32 +1780,26 @@ static void *gl_init(const video_info_t *video, hwr = video_driver_get_hw_context(); - if (hwr) + if (hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) { - hwr->version_major = gl->version_major; - hwr->version_minor = gl->version_minor; + gfx_ctx_flags_t flags; - if (hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) + gl_query_core_context_set(true); + gl->core_context_in_use = true; + + /** + * Ensure that the rest of the frontend knows we have a core context + */ + flags.flags = 0; + BIT32_SET(flags.flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT); + + video_context_driver_set_flags(&flags); + + RARCH_LOG("[GL]: Using Core GL context, setting up VAO...\n"); + if (!gl_check_capability(GL_CAPS_VAO)) { - gfx_ctx_flags_t flags; - - gl_query_core_context_set(true); - gl->core_context_in_use = true; - - /** - * Ensure that the rest of the frontend knows we have a core context - */ - flags.flags = 0; - BIT32_SET(flags.flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT); - - video_context_driver_set_flags(&flags); - - RARCH_LOG("[GL]: Using Core GL context, setting up VAO...\n"); - if (!gl_check_capability(GL_CAPS_VAO)) - { - RARCH_ERR("[GL]: Failed to initialize VAOs.\n"); - goto error; - } + RARCH_ERR("[GL]: Failed to initialize VAOs.\n"); + goto error; } } @@ -1819,7 +1813,7 @@ static void *gl_init(const video_info_t *video, if (gl->renderchain_driver->restore_default_state) gl->renderchain_driver->restore_default_state(gl, gl->renderchain_data); - if (hwr && hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) + if (hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) if (gl->renderchain_driver->new_vao) gl->renderchain_driver->new_vao(gl, gl->renderchain_data); @@ -1829,7 +1823,7 @@ static void *gl_init(const video_info_t *video, gl->hw_render_use = false; gl->has_fbo = gl_check_capability(GL_CAPS_FBO); - if (gl->has_fbo && hwr && hwr->context_type != RETRO_HW_CONTEXT_NONE) + if (gl->has_fbo && hwr->context_type != RETRO_HW_CONTEXT_NONE) gl->hw_render_use = true; if (!resolve_extensions(gl, ctx_driver->ident, video)) @@ -1861,7 +1855,7 @@ static void *gl_init(const video_info_t *video, RARCH_LOG("[GL]: Using resolution %ux%u\n", temp_width, temp_height); - gl->vertex_ptr = (hwr && hwr->bottom_left_origin) + gl->vertex_ptr = hwr->bottom_left_origin ? vertexes : vertexes_flipped; /* Better pipelining with GPU due to synchronous glSubTexImage. From 2ef314e27da30e9067cacecf883ea030560ae419 Mon Sep 17 00:00:00 2001 From: Alfrix Date: Mon, 8 Oct 2018 16:39:04 -0300 Subject: [PATCH 12/42] Update PS3 icon --- pkg/ps3/SSNE10000/ICON0.PNG | Bin 19467 -> 20179 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/pkg/ps3/SSNE10000/ICON0.PNG b/pkg/ps3/SSNE10000/ICON0.PNG index 56a1bf78558ccf3de52db6d539b6b754c25b7ba8..4a1fc52964aa07e4d609a5fff48e4e2c9c81e38a 100644 GIT binary patch literal 20179 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 OIfMP+C#pL3r~U_`YqMbh literal 19467 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 Date: Tue, 9 Oct 2018 01:03:29 +0200 Subject: [PATCH 13/42] (WIIU) menu_display_wiiu.c should have the same ident name as the video driver --- menu/drivers_display/menu_display_wiiu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/menu/drivers_display/menu_display_wiiu.c b/menu/drivers_display/menu_display_wiiu.c index 9d6ce0794b..42f0c300cf 100644 --- a/menu/drivers_display/menu_display_wiiu.c +++ b/menu/drivers_display/menu_display_wiiu.c @@ -352,7 +352,7 @@ menu_display_ctx_driver_t menu_display_ctx_wiiu = { menu_display_wiiu_get_default_tex_coords, menu_display_wiiu_font_init_first, MENU_VIDEO_DRIVER_WIIU, - "menu_display_wiiu", + "gx2", true, menu_display_wiiu_scissor_begin, menu_display_wiiu_scissor_end From 1bd91193fd5c1497b324c2614e72ce73fe1b6a7e Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 9 Oct 2018 01:05:46 +0200 Subject: [PATCH 14/42] (Menu) All the ident names should be identical to the video driver ident names --- menu/drivers_display/menu_display_caca.c | 2 +- menu/drivers_display/menu_display_ctr.c | 2 +- menu/drivers_display/menu_display_d3d10.c | 2 +- menu/drivers_display/menu_display_d3d11.c | 2 +- menu/drivers_display/menu_display_d3d12.c | 2 +- menu/drivers_display/menu_display_d3d8.c | 2 +- menu/drivers_display/menu_display_d3d9.c | 2 +- menu/drivers_display/menu_display_gdi.c | 2 +- menu/drivers_display/menu_display_null.c | 2 +- menu/drivers_display/menu_display_sixel.c | 2 +- menu/drivers_display/menu_display_switch.c | 2 +- menu/drivers_display/menu_display_vulkan.c | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/menu/drivers_display/menu_display_caca.c b/menu/drivers_display/menu_display_caca.c index c880c34b33..f70047878b 100644 --- a/menu/drivers_display/menu_display_caca.c +++ b/menu/drivers_display/menu_display_caca.c @@ -100,7 +100,7 @@ menu_display_ctx_driver_t menu_display_ctx_caca = { menu_display_caca_get_default_tex_coords, menu_display_caca_font_init_first, MENU_VIDEO_DRIVER_CACA, - "menu_display_caca", + "caca", false, NULL, NULL diff --git a/menu/drivers_display/menu_display_ctr.c b/menu/drivers_display/menu_display_ctr.c index 693706e0f7..4ce9adc381 100644 --- a/menu/drivers_display/menu_display_ctr.c +++ b/menu/drivers_display/menu_display_ctr.c @@ -210,7 +210,7 @@ menu_display_ctx_driver_t menu_display_ctx_ctr = { menu_display_ctr_get_default_tex_coords, menu_display_ctr_font_init_first, MENU_VIDEO_DRIVER_CTR, - "menu_display_ctr", + "ctr", true, NULL, NULL diff --git a/menu/drivers_display/menu_display_d3d10.c b/menu/drivers_display/menu_display_d3d10.c index 03a18eecc2..1fcf63f0ca 100644 --- a/menu/drivers_display/menu_display_d3d10.c +++ b/menu/drivers_display/menu_display_d3d10.c @@ -288,7 +288,7 @@ menu_display_ctx_driver_t menu_display_ctx_d3d10 = { menu_display_d3d10_get_default_tex_coords, menu_display_d3d10_font_init_first, MENU_VIDEO_DRIVER_DIRECT3D10, - "menu_display_d3d10", + "d3d10", true, NULL, NULL diff --git a/menu/drivers_display/menu_display_d3d11.c b/menu/drivers_display/menu_display_d3d11.c index 95369fe9cb..8d8ceb5f2d 100644 --- a/menu/drivers_display/menu_display_d3d11.c +++ b/menu/drivers_display/menu_display_d3d11.c @@ -287,7 +287,7 @@ menu_display_ctx_driver_t menu_display_ctx_d3d11 = { menu_display_d3d11_get_default_tex_coords, menu_display_d3d11_font_init_first, MENU_VIDEO_DRIVER_DIRECT3D11, - "menu_display_d3d11", + "d3d11", true, NULL, NULL diff --git a/menu/drivers_display/menu_display_d3d12.c b/menu/drivers_display/menu_display_d3d12.c index 7225089c56..75c0650e75 100644 --- a/menu/drivers_display/menu_display_d3d12.c +++ b/menu/drivers_display/menu_display_d3d12.c @@ -308,7 +308,7 @@ menu_display_ctx_driver_t menu_display_ctx_d3d12 = { menu_display_d3d12_get_default_tex_coords, menu_display_d3d12_font_init_first, MENU_VIDEO_DRIVER_DIRECT3D12, - "menu_display_d3d12", + "d3d12", true, NULL, NULL diff --git a/menu/drivers_display/menu_display_d3d8.c b/menu/drivers_display/menu_display_d3d8.c index a18907f443..c2268c5111 100644 --- a/menu/drivers_display/menu_display_d3d8.c +++ b/menu/drivers_display/menu_display_d3d8.c @@ -285,7 +285,7 @@ menu_display_ctx_driver_t menu_display_ctx_d3d8 = { menu_display_d3d8_get_default_tex_coords, menu_display_d3d8_font_init_first, MENU_VIDEO_DRIVER_DIRECT3D8, - "menu_display_d3d8", + "d3d8", false, NULL, NULL diff --git a/menu/drivers_display/menu_display_d3d9.c b/menu/drivers_display/menu_display_d3d9.c index e6e3aa7b76..4fe2155e61 100644 --- a/menu/drivers_display/menu_display_d3d9.c +++ b/menu/drivers_display/menu_display_d3d9.c @@ -322,7 +322,7 @@ menu_display_ctx_driver_t menu_display_ctx_d3d9 = { menu_display_d3d9_get_default_tex_coords, menu_display_d3d9_font_init_first, MENU_VIDEO_DRIVER_DIRECT3D9, - "menu_display_d3d9", + "d3d9", false, NULL, NULL diff --git a/menu/drivers_display/menu_display_gdi.c b/menu/drivers_display/menu_display_gdi.c index 95e41b7b28..5fa746fb06 100644 --- a/menu/drivers_display/menu_display_gdi.c +++ b/menu/drivers_display/menu_display_gdi.c @@ -109,7 +109,7 @@ menu_display_ctx_driver_t menu_display_ctx_gdi = { menu_display_gdi_get_default_tex_coords, menu_display_gdi_font_init_first, MENU_VIDEO_DRIVER_GDI, - "menu_display_gdi", + "gdi", false, NULL, NULL diff --git a/menu/drivers_display/menu_display_null.c b/menu/drivers_display/menu_display_null.c index 8bda4a3eef..e8e3ad8faa 100644 --- a/menu/drivers_display/menu_display_null.c +++ b/menu/drivers_display/menu_display_null.c @@ -95,7 +95,7 @@ menu_display_ctx_driver_t menu_display_ctx_null = { menu_display_null_get_default_tex_coords, menu_display_null_font_init_first, MENU_VIDEO_DRIVER_GENERIC, - "menu_display_null", + "null", false, NULL, NULL diff --git a/menu/drivers_display/menu_display_sixel.c b/menu/drivers_display/menu_display_sixel.c index 734b36e972..023365b048 100644 --- a/menu/drivers_display/menu_display_sixel.c +++ b/menu/drivers_display/menu_display_sixel.c @@ -102,7 +102,7 @@ menu_display_ctx_driver_t menu_display_ctx_sixel = { menu_display_sixel_get_default_tex_coords, menu_display_sixel_font_init_first, MENU_VIDEO_DRIVER_SIXEL, - "menu_display_sixel", + "sixel", false, NULL, NULL diff --git a/menu/drivers_display/menu_display_switch.c b/menu/drivers_display/menu_display_switch.c index b2fb6ca805..8c21577eac 100644 --- a/menu/drivers_display/menu_display_switch.c +++ b/menu/drivers_display/menu_display_switch.c @@ -99,7 +99,7 @@ menu_display_ctx_driver_t menu_display_ctx_switch = { menu_display_switch_get_default_tex_coords, menu_display_switch_font_init_first, MENU_VIDEO_DRIVER_SWITCH, - "menu_display_switch", + "switch", false, NULL, NULL diff --git a/menu/drivers_display/menu_display_vulkan.c b/menu/drivers_display/menu_display_vulkan.c index dd060dd2a1..261037aa2c 100644 --- a/menu/drivers_display/menu_display_vulkan.c +++ b/menu/drivers_display/menu_display_vulkan.c @@ -386,7 +386,7 @@ menu_display_ctx_driver_t menu_display_ctx_vulkan = { menu_display_vk_get_default_tex_coords, menu_display_vk_font_init_first, MENU_VIDEO_DRIVER_VULKAN, - "menu_display_vulkan", + "vulkan", false, menu_display_vk_scissor_begin, menu_display_vk_scissor_end From 4468671cef1fe0948465b28ebfb5e78ebda26cd8 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 9 Oct 2018 01:15:47 +0200 Subject: [PATCH 15/42] Go back to this version by radius - the other one didn't work --- configuration.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/configuration.c b/configuration.c index 654f193923..4759929212 100644 --- a/configuration.c +++ b/configuration.c @@ -2352,8 +2352,17 @@ static bool check_menu_driver_compatibility(void) string_is_equal(menu_driver, "null")) return true; - if (menu_display_driver_exists(video_driver)) - return true; + /* TODO/FIXME - maintenance hazard */ + if (string_is_equal(video_driver, "d3d9") || + string_is_equal(video_driver, "d3d10") || + string_is_equal(video_driver, "d3d11") || + string_is_equal(video_driver, "d3d12") || + string_is_equal(video_driver, "gl") || + string_is_equal(video_driver, "gx2") || + string_is_equal(video_driver, "vulkan") || + string_is_equal(video_driver, "metal") || + string_is_equal(video_driver, "vita")) + return true; return false; } From 6cf0f1b08c4847773d028cb789dec2cee3e26efd Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Tue, 9 Oct 2018 01:27:20 +0200 Subject: [PATCH 16/42] Update CHANGES.md --- CHANGES.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 81ecc3dc6d..6f3b4b4f55 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,6 +1,8 @@ # 1.7.6 (future) -- MIDI: Add a Linux ALSA driver for MIDI. +- MIDI: Add a Linux ALSA driver for MIDI. +- LOCALIZATION: Update German translation. - LOCALIZATION: Update Italian translation. +- LOCALIZATION: Update Simplified Chinese translation. - LOCALIZATION: Update Japanese translation. - SCANNER: Fix GDI disc scanning. - SWITCH/LIBNX: Improve touch scaling calculation. From dc36691f2c6930fa9502151d3539cf0ee3e22d46 Mon Sep 17 00:00:00 2001 From: Twinaphex Date: Tue, 9 Oct 2018 01:31:30 +0200 Subject: [PATCH 17/42] Update CHANGES.md --- CHANGES.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 6f3b4b4f55..6aaebd3bde 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,6 @@ # 1.7.6 (future) -- MIDI: Add a Linux ALSA driver for MIDI. +- DATE: Add Date / Time style options. +- MIDI: Add a Linux ALSA driver for MIDI. - LOCALIZATION: Update German translation. - LOCALIZATION: Update Italian translation. - LOCALIZATION: Update Simplified Chinese translation. From 521b978d3105e9c8a70517a4e076282e009977ed Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 9 Oct 2018 03:43:34 +0200 Subject: [PATCH 18/42] Add sthread_create_with_priority - missing functionality from desmume rthreads implementation --- libretro-common/include/rthreads/rthreads.h | 17 ++++++ libretro-common/rthreads/rthreads.c | 64 ++++++++++++++++----- 2 files changed, 68 insertions(+), 13 deletions(-) diff --git a/libretro-common/include/rthreads/rthreads.h b/libretro-common/include/rthreads/rthreads.h index 6e248f3d94..93fc16195d 100644 --- a/libretro-common/include/rthreads/rthreads.h +++ b/libretro-common/include/rthreads/rthreads.h @@ -52,6 +52,23 @@ typedef unsigned sthread_tls_t; */ sthread_t *sthread_create(void (*thread_func)(void*), void *userdata); +/** + * sthread_create_with_priority: + * @start_routine : thread entry callback function + * @userdata : pointer to userdata that will be made + * available in thread entry callback function + * @thread_priority : thread priority hint value from [1-100] + * + * Create a new thread. It is possible for the caller to give a hint + * for the thread's priority from [1-100]. Any passed in @thread_priority + * values that are outside of this range will cause sthread_create() to + * create a new thread using the operating system's default thread + * priority. + * + * Returns: pointer to new thread if successful, otherwise NULL. + */ +sthread_t *sthread_create_with_priority(void (*thread_func)(void*), void *userdata, int thread_priority); + /** * sthread_detach: * @thread : pointer to thread object diff --git a/libretro-common/rthreads/rthreads.c b/libretro-common/rthreads/rthreads.c index b8f04f106c..ec3ff012bd 100644 --- a/libretro-common/rthreads/rthreads.c +++ b/libretro-common/rthreads/rthreads.c @@ -161,7 +161,31 @@ static void *thread_wrap(void *data_) */ sthread_t *sthread_create(void (*thread_func)(void*), void *userdata) { + return sthread_create_with_priority(thread_func, userdata, 0); +} + +/** + * sthread_create_with_priority: + * @start_routine : thread entry callback function + * @userdata : pointer to userdata that will be made + * available in thread entry callback function + * @thread_priority : thread priority hint value from [1-100] + * + * Create a new thread. It is possible for the caller to give a hint + * for the thread's priority from [1-100]. Any passed in @thread_priority + * values that are outside of this range will cause sthread_create() to + * create a new thread using the operating system's default thread + * priority. + * + * Returns: pointer to new thread if successful, otherwise NULL. + */ +sthread_t *sthread_create_with_priority(void (*thread_func)(void*), void *userdata, int thread_priority) +{ +#ifndef USE_WIN32_THREADS + pthread_attr_t thread_attr; +#endif bool thread_created = false; + bool thread_attr_needed = false; struct thread_data *data = NULL; sthread_t *thread = (sthread_t*)calloc(1, sizeof(*thread)); @@ -172,27 +196,41 @@ sthread_t *sthread_create(void (*thread_func)(void*), void *userdata) if (!data) goto error; - data->func = thread_func; - data->userdata = userdata; + data->func = thread_func; + data->userdata = userdata; #ifdef USE_WIN32_THREADS - thread->thread = CreateThread(NULL, 0, thread_wrap, data, 0, &thread->id); - thread_created = !!thread->thread; + thread->thread = CreateThread(NULL, 0, thread_wrap, data, 0, &thread->id); + thread_created = !!thread->thread; #else -#if defined(VITA) - pthread_attr_t thread_attr; pthread_attr_init(&thread_attr); + + if ( (thread_priority >= 1) && (thread_priority <= 100) ) + { + struct sched_param sp; + memset(&sp, 0, sizeof(struct sched_param)); + sp.sched_priority = thread_priority; + pthread_attr_setschedpolicy(&thread_attr, SCHED_RR); + pthread_attr_setschedparam(&thread_attr, &sp); + + thread_attr_needed = true; + } + +#if defined(VITA) pthread_attr_setstacksize(&thread_attr , 0x10000 ); - thread_created = pthread_create(&thread->id, &thread_attr, thread_wrap, data) == 0; -#else - thread_created = pthread_create(&thread->id, NULL, thread_wrap, data) == 0; -#endif + thread_attr_needed = true; #endif - if (!thread_created) - goto error; + if (thread_attr_needed) + thread_created = pthread_create(&thread->id, &thread_attr, thread_wrap, data) == 0; + else + thread_created = pthread_create(&thread->id, NULL, thread_wrap, data) == 0; - return thread; + pthread_attr_destroy(&thread_attr); +#endif + + if (thread_created) + return thread; error: if (data) From 0d699208d37edc8b29cebcf9ce779f897b371c06 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 9 Oct 2018 03:55:34 +0200 Subject: [PATCH 19/42] Update rthreads --- libretro-common/rthreads/rthreads.c | 17 ++++++++++++-- libretro-common/rthreads/switch_pthread.h | 27 +++++++++++------------ 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/libretro-common/rthreads/rthreads.c b/libretro-common/rthreads/rthreads.c index ec3ff012bd..5d651dd003 100644 --- a/libretro-common/rthreads/rthreads.c +++ b/libretro-common/rthreads/rthreads.c @@ -27,6 +27,7 @@ #endif #include +#include #include #include @@ -164,6 +165,11 @@ sthread_t *sthread_create(void (*thread_func)(void*), void *userdata) return sthread_create_with_priority(thread_func, userdata, 0); } +/* TODO/FIXME - this needs to be implemented for Switch */ +#if !defined(SWITCH) && !defined(USE_WIN32_THREADS) +#define HAVE_THREAD_ATTR +#endif + /** * sthread_create_with_priority: * @start_routine : thread entry callback function @@ -181,11 +187,11 @@ sthread_t *sthread_create(void (*thread_func)(void*), void *userdata) */ sthread_t *sthread_create_with_priority(void (*thread_func)(void*), void *userdata, int thread_priority) { -#ifndef USE_WIN32_THREADS +#ifdef HAVE_THREAD_ATTR pthread_attr_t thread_attr; + bool thread_attr_needed = false; #endif bool thread_created = false; - bool thread_attr_needed = false; struct thread_data *data = NULL; sthread_t *thread = (sthread_t*)calloc(1, sizeof(*thread)); @@ -203,6 +209,8 @@ sthread_t *sthread_create_with_priority(void (*thread_func)(void*), void *userda thread->thread = CreateThread(NULL, 0, thread_wrap, data, 0, &thread->id); thread_created = !!thread->thread; #else + +#ifdef HAVE_THREAD_ATTR pthread_attr_init(&thread_attr); if ( (thread_priority >= 1) && (thread_priority <= 100) ) @@ -215,18 +223,23 @@ sthread_t *sthread_create_with_priority(void (*thread_func)(void*), void *userda thread_attr_needed = true; } +#endif #if defined(VITA) pthread_attr_setstacksize(&thread_attr , 0x10000 ); thread_attr_needed = true; #endif +#ifdef HAVE_THREAD_ATTR if (thread_attr_needed) thread_created = pthread_create(&thread->id, &thread_attr, thread_wrap, data) == 0; else +#endif thread_created = pthread_create(&thread->id, NULL, thread_wrap, data) == 0; +#ifdef HAVE_THREAD_ATTR pthread_attr_destroy(&thread_attr); +#endif #endif if (thread_created) diff --git a/libretro-common/rthreads/switch_pthread.h b/libretro-common/rthreads/switch_pthread.h index a9ea9be1a3..0fa582b299 100644 --- a/libretro-common/rthreads/switch_pthread.h +++ b/libretro-common/rthreads/switch_pthread.h @@ -28,30 +28,29 @@ #include #include -#include "../include/retro_inline.h" -#include "../../verbosity.h" +#include -#define THREADVARS_MAGIC 0x21545624 // !TV$ +#define THREADVARS_MAGIC 0x21545624 /* !TV$ */ int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg); void pthread_exit(void *retval); -// This structure is exactly 0x20 bytes, if more is needed modify getThreadVars() below +/* This structure is exactly 0x20 bytes, if more is needed modify getThreadVars() below */ typedef struct { - // Magic value used to check if the struct is initialized + /* Magic value used to check if the struct is initialized */ u32 magic; - // Thread handle, for mutexes + /* Thread handle, for mutexes */ Handle handle; - // Pointer to the current thread (if exists) + /* Pointer to the current thread (if exists) */ Thread *thread_ptr; - // Pointer to this thread's newlib state + /* Pointer to this thread's newlib state */ struct _reent *reent; - // Pointer to this thread's thread-local segment - void *tls_tp; // !! Offset needs to be TLS+0x1F8 for __aarch64_read_tp !! + /* Pointer to this thread's thread-local segment */ + void *tls_tp; /* !! Offset needs to be TLS+0x1F8 for __aarch64_read_tp !! */ } ThreadVars; static INLINE ThreadVars *getThreadVars(void) @@ -77,9 +76,9 @@ static INLINE int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex return 0; } -INLINE int pthread_mutex_destroy(pthread_mutex_t *mutex) +static INLINE int pthread_mutex_destroy(pthread_mutex_t *mutex) { - // Nothing + /* Nothing */ *mutex = 0; return 0; @@ -101,7 +100,7 @@ static INLINE int pthread_mutex_unlock(pthread_mutex_t *mutex) INLINE int pthread_detach(pthread_t thread) { (void)thread; - // Nothing for now + /* Nothing for now */ return 0; } @@ -154,7 +153,7 @@ static INLINE int pthread_cond_broadcast(pthread_cond_t *cond) INLINE int pthread_cond_destroy(pthread_cond_t *cond) { - // Nothing + /* Nothing */ return 0; } From 262634739cd3f190ff8ff08ed014dfbe2e195754 Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Mon, 8 Oct 2018 23:29:17 -0400 Subject: [PATCH 20/42] xmb: increase sublabel size limit to handle longer strings (especially CJK languages) --- menu/drivers/xmb.c | 2 +- menu/widgets/menu_entry.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 7cfa999fcf..7b273e72d0 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -2748,7 +2748,7 @@ static int xmb_draw_item( if (i == current && width > 320 && height > 240 && !string_is_empty(entry->sublabel)) { - char entry_sublabel[255] = {0}; + char entry_sublabel[512] = {0}; label_offset = - xmb->margins_label_top; diff --git a/menu/widgets/menu_entry.c b/menu/widgets/menu_entry.c index a5e83ab32f..276c37139e 100644 --- a/menu/widgets/menu_entry.c +++ b/menu/widgets/menu_entry.c @@ -364,7 +364,7 @@ void menu_entry_get(menu_entry_t *entry, size_t stack_idx, if (cbs->action_sublabel) { - char tmp[255]; + char tmp[512]; tmp[0] = '\0'; cbs->action_sublabel(list, From a49253cb6eb0f6a319a5770692bdd956e6185e9e Mon Sep 17 00:00:00 2001 From: waitingmoon Date: Tue, 9 Oct 2018 12:30:01 +0900 Subject: [PATCH 21/42] Update JP translation (#7371) * Update JP translation * Update msg_hash_ja.h --- intl/msg_hash_ja.h | 184 +++++++++++++++++++++++---------------------- 1 file changed, 96 insertions(+), 88 deletions(-) diff --git a/intl/msg_hash_ja.h b/intl/msg_hash_ja.h index a7a9d19081..cd9030d9ce 100644 --- a/intl/msg_hash_ja.h +++ b/intl/msg_hash_ja.h @@ -96,11 +96,11 @@ MSG_HASH( ) MSG_HASH( MSG_NETPLAY_ENDIAN_DEPENDENT, - "This core does not support inter-architecture netplay between these systems" + "このコアはこれらのシステム間のアーキテクチャ間ネットプレイに対応していません" ) MSG_HASH( MSG_NETPLAY_PLATFORM_DEPENDENT, - "This core does not support inter-architecture netplay" + "このコアはアーキテクチャ間ネットプレイに対応していません" ) MSG_HASH( MSG_NETPLAY_ENTER_PASSWORD, @@ -156,7 +156,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_LATENCY_SETTINGS, - "ビデオやオーディオ、入力遅延に関係する設定を変更します。" + "ビデオやオーディオ、入力の遅延に関係する設定を変更します。" ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC, @@ -715,9 +715,9 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_FAVORITES_TAB, MSG_HASH(MENU_ENUM_LABEL_VALUE_FPS_SHOW, "フレームレートを表示") MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE, - "フレームの減速度") + "フレーム制御") MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS, - "フレームの減速度") + "フレーム制御") MSG_HASH(MENU_ENUM_LABEL_VALUE_FRONTEND_COUNTERS, "Frontend Counters") MSG_HASH(MENU_ENUM_LABEL_VALUE_GAME_SPECIFIC_OPTIONS, @@ -1103,7 +1103,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_MATERIALUI_MENU_HEADER_OPACITY, MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_DRIVER, "メニューのドライバ") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_ENUM_THROTTLE_FRAMERATE, - "メニューのフレームレートを減速") + "メニューのフレームレートを制限") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_FILE_BROWSER_SETTINGS, "設定") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_LINEAR_FILTER, @@ -1894,17 +1894,17 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SWAP_INTERVAL, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_TAB, "ビデオ") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_THREADED, - "スレッドされているビデオ") + "ビデオをスレッド化") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VFILTER, "非フリッカー") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_HEIGHT, - "カスタムのビューポートの縦幅") + "カスタムビューポートの縦幅") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_WIDTH, - "カスタムのビューポートの横幅") + "カスタムビューポートの横幅") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_X, - "カスタムのビューポートのX") + "カスタムビューポートのX位置") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VIEWPORT_CUSTOM_Y, - "カスタムのビューポートのY") + "カスタムビューポートのY位置") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VI_WIDTH, "Set VI Screen Width") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC, @@ -1912,13 +1912,21 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_VSYNC, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOWED_FULLSCREEN, "ウィンドウフルスクリーンモード") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_WIDTH, - "ウィンドウの幅") + "ウィンドウの横幅") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_HEIGHT, - "ウィンドウの縦") + "ウィンドウの縦幅") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN_X, - "フルスクリーンの幅") + "フルスクリーンの横幅") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_FULLSCREEN_Y, - "フルスクリーンの縦") + "フルスクリーンの縦幅") +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_FULLSCREEN_X, + "非ウィンドウフルスクリーンモードの横幅サイズを指定します。0を指定すると、デスクトップ解像度を使用します。" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_VIDEO_FULLSCREEN_Y, + "非ウィンドウフルスクリーンモードの縦幅サイズを指定します。0を指定すると、デスクトップ解像度を使用します。" + ) MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_DRIVER, "Wi-Fiのドライバ") MSG_HASH(MENU_ENUM_LABEL_VALUE_WIFI_SETTINGS, @@ -1984,7 +1992,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_RIBBON_ENABLE, MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SCALE_FACTOR, "メニューの倍率") MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_SHADOWS_ENABLE, - "アイコンの影を有効") + "アイコンに影を表示") MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_HISTORY, "履歴タブを表示") MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_ADD, @@ -2012,7 +2020,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_YES, MSG_HASH(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_TWO, "シェーダーのプリセット") MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_ENABLE, - "実績を有効または無効にする。詳細については、http://retroachievements.orgを参照。") + "実績を有効または無効にします。詳細については、http://retroachievements.orgを参照してください。") MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_TEST_UNOFFICIAL, "非公式実績/ベータ機能をテスト目的で有効または無効にする。") MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_HARDCORE_MODE_ENABLE, @@ -2090,7 +2098,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_SSH_ENABLE, MSG_HASH(MENU_ENUM_SUBLABEL_SUSPEND_SCREENSAVER_ENABLE, "システムのスクリーンセーバーをアクティブになることを予防する。") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_SCALE, - "Sets the window size relative to the core viewport size. Alternatively you can set a window width and height below for a fixed window size") + "コアのビューポートサイズを基準にしたウィンドウサイズを指定します。横幅と縦幅が一定の固定ウィンドウサイズを指定することもできます(下の項目)。") MSG_HASH(MENU_ENUM_SUBLABEL_USER_LANGUAGE, "インタフェースの言語を変更する。") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_BLACK_FRAME_INSERTION, @@ -2140,7 +2148,7 @@ MSG_HASH(MSG_AUTOSAVE_FAILED, MSG_HASH(MSG_AUTO_SAVE_STATE_TO, "自動ステートセーブ to") MSG_HASH(MSG_BLOCKING_SRAM_OVERWRITE, - "Blocking SRAM Overwrite") + "SRAMの上書きをブロックしています") MSG_HASH(MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT, "Bringing up command interface on port") MSG_HASH(MSG_BYTES, @@ -2166,9 +2174,9 @@ MSG_HASH(MSG_CORE_DOES_NOT_SUPPORT_SAVESTATES, MSG_HASH(MSG_CORE_OPTIONS_FILE_CREATED_SUCCESSFULLY, "コア設定ファイルの作成に成功しました") MSG_HASH(MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER, - "Could not find any next driver") + "次のドライバを見つけることができませんでした") MSG_HASH(MSG_COULD_NOT_FIND_COMPATIBLE_SYSTEM, - "Could not find compatible system.") + "対応システムを見つけることができませんでした") MSG_HASH(MSG_COULD_NOT_FIND_VALID_DATA_TRACK, "有効なデータトラックを見つけることができませんでした") MSG_HASH(MSG_COULD_NOT_OPEN_DATA_TRACK, @@ -2176,9 +2184,9 @@ MSG_HASH(MSG_COULD_NOT_OPEN_DATA_TRACK, MSG_HASH(MSG_COULD_NOT_READ_CONTENT_FILE, "コンテンツファイルを読み込むことができませんでした") MSG_HASH(MSG_COULD_NOT_READ_MOVIE_HEADER, - "Could not read movie header.") + "動画ヘッダーを読み込むことができませんでした") MSG_HASH(MSG_COULD_NOT_READ_STATE_FROM_MOVIE, - "Could not read state from movie.") + "動画から状態を読み込むことができませんでした") MSG_HASH(MSG_CRC32_CHECKSUM_MISMATCH, "CRC32 checksum mismatch between content file and saved content checksum in replay file header) replay highly likely to desync on playback.") MSG_HASH(MSG_CUSTOM_TIMING_GIVEN, @@ -2188,7 +2196,7 @@ MSG_HASH(MSG_DECOMPRESSION_ALREADY_IN_PROGRESS, MSG_HASH(MSG_DECOMPRESSION_FAILED, "解凍に失敗しました") MSG_HASH(MSG_DETECTED_VIEWPORT_OF, - "Detected viewport of") + "ビューポートを検出しました of") MSG_HASH(MSG_DID_NOT_FIND_A_VALID_CONTENT_PATCH, "有効なコンテンツパッチが見つかりませんでした") MSG_HASH(MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT, @@ -2286,7 +2294,7 @@ MSG_HASH(MSG_FAILED_TO_SEND_SRAM_DATA_TO_CLIENT, MSG_HASH(MSG_FAILED_TO_START_AUDIO_DRIVER, "オーディオドライバーの開始に失敗しました。オーディオなしで続行します") MSG_HASH(MSG_FAILED_TO_START_MOVIE_RECORD, - "映像の録画の開始に失敗しました") + "動画の録画の開始に失敗しました") MSG_HASH(MSG_FAILED_TO_START_RECORDING, "録画の開始に失敗しました") MSG_HASH(MSG_FAILED_TO_TAKE_SCREENSHOT, @@ -2374,9 +2382,9 @@ MSG_HASH(MSG_MOVIE_FILE_IS_NOT_A_VALID_BSV1_FILE, MSG_HASH(MSG_MOVIE_FORMAT_DIFFERENT_SERIALIZER_VERSION, "Movie format seems to have a different serializer version. Will most likely fail.") MSG_HASH(MSG_MOVIE_PLAYBACK_ENDED, - "Movie playback ended.") + "動画の再生を終了しました") MSG_HASH(MSG_MOVIE_RECORD_STOPPED, - "Stopping movie record.") + "動画の録画を停止しました") MSG_HASH(MSG_NETPLAY_FAILED, "ネットプレイの初期化に失敗しました") MSG_HASH(MSG_NO_CONTENT_STARTING_DUMMY_CORE, @@ -2386,7 +2394,7 @@ MSG_HASH(MSG_NO_SAVE_STATE_HAS_BEEN_OVERWRITTEN_YET, MSG_HASH(MSG_NO_STATE_HAS_BEEN_LOADED_YET, "ステートはまだロードされていません") MSG_HASH(MSG_OVERRIDES_ERROR_SAVING, - "Error saving overrides.") + "優先ファイルの保存でエラーが発生しました") MSG_HASH(MSG_OVERRIDES_SAVED_SUCCESSFULLY, "優先ファイルを保存しました") MSG_HASH(MSG_PAUSED, @@ -2394,7 +2402,7 @@ MSG_HASH(MSG_PAUSED, MSG_HASH(MSG_PROGRAM, "RetroArch") MSG_HASH(MSG_READING_FIRST_DATA_TRACK, - "Reading first data track...") + "最初のデータトラックを読み込んでいます...") MSG_HASH(MSG_RECEIVED, "received") MSG_HASH(MSG_RECORDING_TERMINATED_DUE_TO_RESIZE, @@ -2402,11 +2410,11 @@ MSG_HASH(MSG_RECORDING_TERMINATED_DUE_TO_RESIZE, MSG_HASH(MSG_RECORDING_TO, "Recording to") MSG_HASH(MSG_REDIRECTING_CHEATFILE_TO, - "Redirecting cheat file to") + "チートファイルの出力先を変更しています to") MSG_HASH(MSG_REDIRECTING_SAVEFILE_TO, - "Redirecting save file to") + "セーブファイルの出力先を変更しています to") MSG_HASH(MSG_REDIRECTING_SAVESTATE_TO, - "Redirecting savestate to") + "ステートセーブの出力先を変更しています to") MSG_HASH(MSG_REMAP_FILE_SAVED_SUCCESSFULLY, "リマップファイルを保存しました") MSG_HASH(MSG_REMAP_FILE_REMOVED_SUCCESSFULLY, @@ -2420,7 +2428,7 @@ MSG_HASH(MSG_RESET, MSG_HASH(MSG_RESTARTING_RECORDING_DUE_TO_DRIVER_REINIT, "Restarting recording due to driver reinit.") MSG_HASH(MSG_RESTORED_OLD_SAVE_STATE, - "Restored old save state.") + "以前のステートセーブを復元しました") MSG_HASH(MSG_RESTORING_DEFAULT_SHADER_PRESET_TO, "Shaders: restoring default shader preset to") MSG_HASH(MSG_REVERTING_SAVEFILE_DIRECTORY_TO, @@ -2539,15 +2547,15 @@ MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_SYNC, "オーディオを同期する。推奨。") MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_AXIS_THRESHOLD, - "How far an axis must be tilted to result in a button press." + "入力を確定するために要するスティックの傾き量です。" ) MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_BIND_TIMEOUT, - "Amount of seconds to wait until proceeding to the next bind." + "次のバインドに移るまでの待機秒数です。" ) MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_BIND_HOLD, - "Amount of seconds to hold an input to bind it." + "入力をバインドするために要するホールド秒数です。" ) MSG_HASH( MENU_ENUM_SUBLABEL_INPUT_TURBO_PERIOD, @@ -2559,19 +2567,19 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_VSYNC, - "Synchronizes the output video of the graphics card to the refresh rate of the screen. Recommended." + "グラフィックカードから出力されるビデオと画面のリフレッシュレートを同期します(推奨)。" ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_ALLOW_ROTATE, - "Allow cores to set rotation. When disabled, rotation requests are ignored. Useful for setups where one manually rotates the screen." + "コアに回転を許可します。無効にすると、回転リクエストは無視されます。手動で画面を回転したいときに便利です。" ) MSG_HASH( MENU_ENUM_SUBLABEL_DUMMY_ON_CORE_SHUTDOWN, - "Some cores might have a shutdown feature. If enabled, it will prevent the core from shutting RetroArch down. Instead, it loads a dummy core." + "一部のコアはシャットダウン機能を有している場合があります。有効にすると、コアがRetroArchをシャットダウンすることを防止し、代わりにダミーのコアをロードします。" ) MSG_HASH( MENU_ENUM_SUBLABEL_CHECK_FOR_MISSING_FIRMWARE, - "Check if all the required firmware is present before attempting to load content." + "コンテンツをロードする前に必要なファームウェアがすべて存在するかどうかを確認します。" ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE, @@ -2715,11 +2723,11 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_ROOM_NICKNAME_LAN, MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_COMPAT_CONTENT_FOUND, "対応するコンテンツが見つかりました") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_CROP_OVERSCAN, - "Cuts off a few pixels around the edges of the image that were customarily left blank by developers and sometimes contain garbage pixels.") + "開発者によって慣例的に空白にされていたイメージの端にあるいくつかのピクセルを切り取ります。 不正確なピクセルを含むこともあります。") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SMOOTH, - "Add a slight blur to the image to take the edge off of the hard pixel edges. This option has very little impact on performance.") + "画像にわずかなぼかしを加えて、ピクセルのエッジを柔らかくします。このオプションは、パフォーマンスにはほとんど影響しません。") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FILTER, - "Apply a CPU-powered video filter. NOTE: Might come at a high performance cost. Some video filters might only work for cores that use 32bit or 16bit color.") + "CPUベースのビデオフィルターを適用します。備考: パフォーマンスを多く消費するかもしれません。一部のビデオフィルターは、32bitまたは16bitカラーを使用するコアでのみ動作する可能性があります。") MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_USERNAME, "RetroAchievementsアカウントのユーザー名") MSG_HASH(MENU_ENUM_SUBLABEL_CHEEVOS_PASSWORD, @@ -2739,9 +2747,9 @@ MSG_HASH(MENU_ENUM_SUBLABEL_SYSTEM_INFORMATION, MSG_HASH(MENU_ENUM_SUBLABEL_QUIT_RETROARCH, "アプリを終了する。") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_WIDTH, - "ディスプレイのカスタムビデオ横幅を指定します。ゼロを指定すると可能な限りウィンドウをスケールします。") + "ディスプレイのカスタムビデオ横幅を指定します。0を指定すると可能な限りウィンドウをスケールします。") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_WINDOW_HEIGHT, - "ディスプレイのカスタムビデオ縦幅を指定します。ゼロを指定すると可能な限りウィンドウをスケールします。") + "ディスプレイのカスタムビデオ縦幅を指定します。0を指定すると可能な限りウィンドウをスケールします。") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MESSAGE_POS_X, "OSDのカスタムX軸を指定する。") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_MESSAGE_POS_Y, @@ -2756,7 +2764,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER, - "Only scales video in integer steps. The base size depends on system-reported geometry and aspect ratio. If 'Force Aspect' is not set, X/Y will be integer scaled independently." + "ビデオのスケールを整数に限定します。基礎サイズはシステムによって報告されたジオメトリとアスペクト比に依存します。「強制アスペクト比」が指定されていない場合、横幅と縦幅はそれぞれ独立して整数でスケールされます。" ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_GPU_SCREENSHOT, @@ -2764,11 +2772,11 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_ROTATION, - "Forces a certain rotation of the screen. The rotation is added to rotations which the core sets." + "指定した角度で画面を強制的に回転させます。この回転はコアが指定する回転に追加されます。" ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_FORCE_SRGB_DISABLE, - "Forcibly disable sRGB FBO support. Some Intel OpenGL drivers on Windows have video problems with sRGB FBO support if this is enabled. Enabling this can work around it." + "sRGB FBOの対応を強制的に無効にします。sRGB FBOの対応が有効になっている一部のWindows用Intel Open GLドライバはビデオ問題を有します。この機能を有効にすることで問題を回避できます。" ) MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_FULLSCREEN, @@ -2792,11 +2800,11 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_FASTFORWARD_RATIO, - "The maximum rate at which content will be run when using fast forward (E.g. 5x for 60 fps content => 300 fps cap). If this is set at 0x, then fastforward ratio is unlimited (no FPS cap)." + "早送り中のコンテンツの最大フレームレートです。例えば、60FPSコンテンツに5xを指定すると、最大フレームレートは300FPSになります。0xを指定した場合は無制限になります(フレームレート制限なし)。" ) MSG_HASH( MENU_ENUM_SUBLABEL_SLOWMOTION_RATIO, - "When slowmotion, content will slow down by a factor." + "スローモーション時、コンテンツは設定した比率に応じて減速します。" ) MSG_HASH( MENU_ENUM_SUBLABEL_REWIND_ENABLE, @@ -2808,11 +2816,11 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_LIBRETRO_LOG_LEVEL, - "Sets log level for cores. If a log level issued by a core is below this value, it is ignored." + "コアのログレベルを設定します。コアによって発行されたログレベルがこの値を下回る場合、無視されます。" ) MSG_HASH( MENU_ENUM_SUBLABEL_PERFCNT_ENABLE, - "Enable performance counters for RetroArch (and cores)." + "RetroArch(およびコア)のパフォーマンスカウンターを有効にします。" ) MSG_HASH( MENU_ENUM_SUBLABEL_SAVESTATE_AUTO_SAVE, @@ -2932,15 +2940,15 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_NETPLAY_IP_ADDRESS, - "The address of the host to connect to." + "ホストのIPアドレス" ) MSG_HASH( MENU_ENUM_SUBLABEL_NETPLAY_TCP_UDP_PORT, - "The port of the host IP address. Can be either a TCP or UDP port." + "ホストのIPアドレスのポート番号(TCPまたはUDPポート)" ) MSG_HASH( MENU_ENUM_SUBLABEL_NETPLAY_PASSWORD, - "The password for connecting to the netplay host. Used only in host mode." + "ネットプレイのホストに接続するためのパスワードです。ホストモードでのみ使用されます。" ) MSG_HASH( MENU_ENUM_SUBLABEL_NETPLAY_PUBLIC_ANNOUNCE, @@ -2948,7 +2956,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_NETPLAY_SPECTATE_PASSWORD, - "The password for connecting to the netplay host with only spectator privileges. Used only in host mode." + "観戦者のみに適用されるネットプレイのホストに接続するためのパスワードです。ホストモードでのみ使用されます。" ) MSG_HASH( MENU_ENUM_SUBLABEL_NETPLAY_STATELESS_MODE, @@ -2992,34 +3000,34 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_NETPLAY_ENABLE_HOST, - "ネットプレイをホスト(サーバー)モードで有効にする。" + "ネットプレイをホスト(サーバー)モードで有効にします。" ) MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_ENABLE_CLIENT, - "ネットプレイをクライアントモードで有効にする。") + "ネットプレイをクライアントモードで有効にします。") MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_DISCONNECT, "アクティブなネットプレイ接続を切断する。") MSG_HASH(MENU_ENUM_SUBLABEL_SCAN_DIRECTORY, - "フォルダの対応ファイルをスキャンしてコレクションに追加する。") + "対応ファイルをフォルダからスキャンしてコレクションに追加します。") MSG_HASH(MENU_ENUM_SUBLABEL_SCAN_FILE, - "対応ファイルをスキャンしてコレクションに追加する。") + "対応ファイルをスキャンしてコレクションに追加します。") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SWAP_INTERVAL, "Uses a custom swap interval for Vsync. Set this to effectively halve monitor refresh rate." ) MSG_HASH(MENU_ENUM_SUBLABEL_SORT_SAVEFILES_ENABLE, - "使用したコアの名前に基づいてフォルダーのステートセーブを分類する。" + "使用したコアの名前に基づいてセーブファイルをフォルダごとに分類します。" ) MSG_HASH(MENU_ENUM_SUBLABEL_SORT_SAVESTATES_ENABLE, - "使用したコアの名前に基づいてフォルダーのステートセーブを分類する。" + "使用したコアの名前に基づいてステートセーブをフォルダごとに分類します。" ) MSG_HASH(MENU_ENUM_SUBLABEL_CORE_UPDATER_BUILDBOT_URL, "URL to core updater directory on the Libretro buildbot.") MSG_HASH(MENU_ENUM_SUBLABEL_BUILDBOT_ASSETS_URL, "URL to assets updater directory on the Libretro buildbot.") MSG_HASH(MENU_ENUM_SUBLABEL_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE, - "After downloading, automatically extract archives that the downloads are contained inside." + "ダウンロード後、ダウンロードしたコンテンツが含まれるアーカイブを自動的に展開します。" ) MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_REFRESH_ROOMS, - "新しいネットプレイルームをスキャンする。") + "新しいネットプレイルームをスキャンします。") MSG_HASH(MENU_ENUM_SUBLABEL_DELETE_ENTRY, "このエントリーをコレクションから削除する。") MSG_HASH(MENU_ENUM_SUBLABEL_INFORMATION, @@ -3045,7 +3053,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_DATABASE_MANAGER, MSG_HASH(MENU_ENUM_SUBLABEL_CURSOR_MANAGER, "以前の検索を表示する。") MSG_HASH(MENU_ENUM_SUBLABEL_TAKE_SCREENSHOT, - "画面の画像をキャプチャーする。") + "画面をキャプチャーする。") MSG_HASH( MENU_ENUM_SUBLABEL_CLOSE_CONTENT, "現在動作中のゲームを終了する。すべての保存されていない変更は失われる可能性がある。" @@ -3066,7 +3074,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_UNDO_SAVE_STATE, "ステートが上書きされていた場合、以前のステートセーブにロールバックする。") MSG_HASH( MENU_ENUM_SUBLABEL_ACCOUNTS_RETRO_ACHIEVEMENTS, - "Retro Achievements service. For more information, visit http://retroachievements.org" + "RetroAchievementサービスです。詳細については、http://retroachievements.orgを参照してください。" ) MSG_HASH( MENU_ENUM_SUBLABEL_ACCOUNTS_LIST, @@ -3095,7 +3103,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_THREADED_DATA_RUNLOOP_ENABLE, MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_ENTRY_REMOVE, "ユーザーがコレクションからエントリーを削除できるようにする。") MSG_HASH(MENU_ENUM_SUBLABEL_SYSTEM_DIRECTORY, - "Sets the System directory. Cores can query for this directory to load BIOSes, system-specific configs, etc.") + "システムフォルダを指定します。コアはBIOSや特定システムの設定などをロードするため、このフォルダを探索することができます。") MSG_HASH(MENU_ENUM_SUBLABEL_RGUI_BROWSER_DIRECTORY, "ファイルブラウザーの開始ディレクトリを指定する。") MSG_HASH( @@ -3103,12 +3111,12 @@ MSG_HASH( "Usually set by developers who bundle libretro/RetroArch apps to point to assets." ) MSG_HASH(MENU_ENUM_SUBLABEL_DYNAMIC_WALLPAPERS_DIRECTORY, - "The place to store the wallpapers dynamically loaded by the menu depending on context.") + "表示内容に応じて動的にロードされる壁紙が存在するフォルダを指定します。") MSG_HASH(MENU_ENUM_SUBLABEL_THUMBNAILS_DIRECTORY, "サムネイルファイルの保存フォルダ" ) MSG_HASH(MENU_ENUM_SUBLABEL_RGUI_CONFIG_DIRECTORY, - "設定ファイルブラウザーの初期ディレクトリーを指定する。") + "設定ファイルブラウザーの初期ディレクトリを指定する。") MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_INPUT_LATENCY_FRAMES_MIN, "The number of frames of input latency for netplay to use to hide network latency. This reduces jitter and makes netplay less CPU-intensive, at the expense of noticeable input lag.") MSG_HASH(MENU_ENUM_SUBLABEL_NETPLAY_INPUT_LATENCY_FRAMES_RANGE, @@ -3128,7 +3136,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_XMB_LAYOUT, MSG_HASH(MENU_ENUM_SUBLABEL_XMB_THEME, "アイコンに異なるテーマを選択する。変更はプログラムの再起動後に反映される。") MSG_HASH(MENU_ENUM_SUBLABEL_XMB_SHADOWS_ENABLE, - "すべてのアイコンにドロップシャドウを有効にする。この設定はわずかにパフォーマンスに影響を及ぼす。") + "すべてのアイコンにドロップシャドウを適用します。この設定はわずかにパフォーマンスに影響を及ぼします。") MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_MENU_COLOR_THEME, "異なる背景色グラデーションテーマを選択する。") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_WALLPAPER_OPACITY, @@ -3136,7 +3144,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_WALLPAPER_OPACITY, MSG_HASH(MENU_ENUM_SUBLABEL_XMB_MENU_COLOR_THEME, "異なる背景色グラデーションテーマを選択する。") MSG_HASH(MENU_ENUM_SUBLABEL_XMB_RIBBON_ENABLE, - "Select an animated background effect. Can be GPU-intensive depending on the effect. If performance is unsatisfactory, either turn this off or revert to a simpler effect.") + "背景アニメーション効果を選択します。効果によってはGPUに大きな負荷をかけます。パフォーマンスが不足する場合、効果をオフにするか、より単純な効果を選択してください。") MSG_HASH(MENU_ENUM_SUBLABEL_XMB_FONT, "メニューの使用するフォントを選択する。") MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_SHOW_IMAGES, @@ -3160,9 +3168,9 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_MENU_HEADER_OPACITY, MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_MENU_FOOTER_OPACITY, "フッターの不透明度を調整する。") MSG_HASH(MENU_ENUM_SUBLABEL_DPI_OVERRIDE_ENABLE, - "The menu normally scales itself dynamically. If you want to set a specific scaling size instead, enable this.") + "通常、メニューは動的にスケールされます。特定のスケールサイズを指定したい場合に有効にしてください。") MSG_HASH(MENU_ENUM_SUBLABEL_DPI_OVERRIDE_VALUE, - "Set the custom scaling size here. NOTE: You have to enable 'DPI Override' for this scaling size to take effect.") + "カスタムスケールサイズを指定します。備考: このスケールサイズを反映するには、「優先DPI」を有効にする必要があります。") MSG_HASH(MENU_ENUM_SUBLABEL_CORE_ASSETS_DIRECTORY, "すべてのダウンロードしたファイルをこのフォルダに保存する。") MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_REMAPPING_DIRECTORY, @@ -3172,12 +3180,12 @@ MSG_HASH(MENU_ENUM_SUBLABEL_LIBRETRO_DIR_PATH, MSG_HASH(MENU_ENUM_SUBLABEL_LIBRETRO_INFO_PATH, "コアやアプリの情報ファイルをこのフォルダに存在する。") MSG_HASH(MENU_ENUM_SUBLABEL_JOYPAD_AUTOCONFIG_DIR, - "If a joypad is plugged in, that joypad will be autoconfigured if a config file corresponding to it is present inside this directory.") + "ジョイパッドを接続したとき、そのジョイパッドに対応した設定ファイルが指定したフォルダに存在していれば、そのジョイパッドは自動的に設定されます。") MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_DIRECTORY, "すべてのプレイリストをこのフォルダに保存する。") MSG_HASH( MENU_ENUM_SUBLABEL_CACHE_DIRECTORY, - "If set to a directory, content which is temporarily extracted (e.g. from archives) will be extracted to this directory." + "フォルダを指定すると、アーカイブなどから一時的に展開されるコンテンツが指定先に展開されるようになります。" ) MSG_HASH(MENU_ENUM_SUBLABEL_CURSOR_DIRECTORY, "保存したクエリをこのフォルダに保存する。") @@ -3218,10 +3226,10 @@ MSG_HASH(MENU_ENUM_SUBLABEL_RECORDING_CONFIG_DIRECTORY, MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_PATH, "OSDの使用するフォントを選択する。") MSG_HASH(MENU_ENUM_SUBLABEL_SHADER_APPLY_CHANGES, - "Changes to the shader configuration will take effect immediately. Use this if you changed the amount of shader passes, filtering, FBO scale, etc.") + "シェーダーの設定の変更を直ちに反映します。シェーダーのパス数やフィルタリング、FBOスケールなどを変更したときに使用します。") MSG_HASH( MENU_ENUM_SUBLABEL_VIDEO_SHADER_NUM_PASSES, - "Increase or decrease the amount of shader pipeline passes. You can bind a separate shader to each pipeline pass and configure its scale and filtering." + "シェーダーパイプラインのパス数を増加または減少させます。各パイプラインに別々のシェーダーをバインドし、フィルタリングとスケールを設定することができます。" ) MSG_HASH(MENU_ENUM_LABEL_VALUE_NETPLAY_USE_MITM_SERVER, "中継サーバーを使用") @@ -3310,7 +3318,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MATERIALUI_ICONS_ENABLE, MSG_HASH(MENU_ENUM_LABEL_VALUE_XMB_MAIN_MENU_ENABLE_SETTINGS, "設定タブを有効") MSG_HASH(MENU_ENUM_LABEL_VALUE_CONTENT_SHOW_SETTINGS_PASSWORD, - "設定タブを有効するパスワード") + "設定タブを有効にするパスワード") MSG_HASH(MSG_INPUT_ENABLE_SETTINGS_PASSWORD, "パスワードを入力してください") MSG_HASH(MSG_INPUT_ENABLE_SETTINGS_PASSWORD_OK, @@ -3320,7 +3328,7 @@ MSG_HASH(MSG_INPUT_ENABLE_SETTINGS_PASSWORD_NOK, MSG_HASH(MENU_ENUM_SUBLABEL_XMB_MAIN_MENU_ENABLE_SETTINGS, "設定タブを有効にする。タブを表示するには再起動が必要。") MSG_HASH(MENU_ENUM_SUBLABEL_CONTENT_SHOW_SETTINGS_PASSWORD, - "Supplying a password when hiding the settings tab makes it possible to later restore it from the menu, by going to the Main Menu tab, selecting Enable Settings Tab and entering the password.") + "設定タブを隠す際にあらかじめパスワードを設定しておくことで、そのパスワードを使用してメニューから設定タブを復元することができます。") MSG_HASH(MENU_ENUM_SUBLABEL_PLAYLIST_ENTRY_RENAME, "コレクションのエントリーの名前変更をユーザーに許可する。") MSG_HASH(MENU_ENUM_LABEL_VALUE_PLAYLIST_ENTRY_RENAME, @@ -3432,13 +3440,13 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MENU_DISABLE_KIOSK_MODE, MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_ENABLE_KIOSK_MODE, "キオスクモードを有効") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_ENABLE_KIOSK_MODE, - "Protects the setup by hiding all configuration related settings.") + "コンフィグに関係するあらゆる設定を隠すことでセットアップを保護します。") MSG_HASH(MENU_ENUM_LABEL_VALUE_MENU_KIOSK_MODE_PASSWORD, - "キオスクモードを無効するパスワードを設定") + "キオスクモードを無効にするパスワードを設定") MSG_HASH(MENU_ENUM_SUBLABEL_MENU_KIOSK_MODE_PASSWORD, - "Supplying a password when enabling kiosk mode makes it possible to later disable it from the menu, by going to the Main Menu, selecting Disable Kiosk Mode and entering the password.") + "キオスクモードを有効にする際にあらかじめパスワードを設定しておくことで、そのパスワードを使用してメニューからキオスクモードを無効にすることができます。") MSG_HASH(MSG_INPUT_KIOSK_MODE_PASSWORD, - "パスワードを入力して下さい") + "パスワードを入力してください") MSG_HASH(MSG_INPUT_KIOSK_MODE_PASSWORD_OK, "パスワードが一致しました") MSG_HASH(MSG_INPUT_KIOSK_MODE_PASSWORD_NOK, @@ -3476,7 +3484,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_OPACITY, MSG_HASH(MENU_ENUM_LABEL_VALUE_AUDIO_RESAMPLER_QUALITY, "オーディオリサンプラーの音質") MSG_HASH(MENU_ENUM_SUBLABEL_AUDIO_RESAMPLER_QUALITY, - "Lower this value to favor performance/lower latency over audio quality, increase if you want better audio quality at the expense of performance/lower latency.") + "オーディオ品質よりもパフォーマンス/遅延を優先する場合は低い設定を、パフォーマンス/遅延よりもオーディオ品質を優先する場合は高い設定を選択します。") MSG_HASH(MENU_ENUM_LABEL_VALUE_SHADER_WATCH_FOR_CHANGES, "シェーダーファイルの変更を監視") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_SHOW_DECORATIONS, @@ -3674,9 +3682,9 @@ MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_PLAY, MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_PLAY_LOOPED, "オーディオストリームの再生を開始します。再生が終わると、トラックは最初から繰り返して再生されます。") MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_PLAY_SEQUENTIAL, - "オーディオストリームの再生を開始します。再生が終わると、順番に次のオーディオストリームに移り、それを繰り返します。アルバム再生モードとして便利です。") + "オーディオストリームの再生を開始します。再生が終わると、順番に次のオーディオストリームに\n移り、それを繰り返します。アルバム再生モードとして便利です。") MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_STOP, - "オーディオストリームの再生を停止しますが、メモリからは取り除きません。「再生」を選択することで再び再生を開始できます。") + "オーディオストリームの再生を停止します。メモリからは取り除かれず、「再生」を選択することで再び再生を開始できます。") MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_REMOVE, "オーディオストリームの再生を停止してメモリから完全に取り除きます。") MSG_HASH(MENU_ENUM_SUBLABEL_MIXER_ACTION_VOLUME, @@ -3881,10 +3889,10 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION_USE_CUSTOM_REFRESH_RATE, - "Use a custom refresh rate specified in the config file if needed.") + "設定ファイルで指定されたカスタムリフレッシュレートを使用します。") MSG_HASH( MENU_ENUM_LABEL_VALUE_CRT_SWITCH_RESOLUTION_USE_CUSTOM_REFRESH_RATE, - "Use Custom Refresh Rate") + "カスタムリフレッシュレートを使用") MSG_HASH( MENU_ENUM_SUBLABEL_CRT_SWITCH_RESOLUTION_OUTPUT_DISPLAY_ID, "Select the output port connected to the CRT display.") From 0b3ac4e39d845537c82bcf04ad7b85865b9ef8bd Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 9 Oct 2018 15:28:09 +0200 Subject: [PATCH 22/42] Fix C++ comment --- gfx/drivers/gl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 66f45482d5..2c446e088a 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -953,7 +953,7 @@ static bool gl_frame(void *data, const void *frame, return false; #ifdef HAVE_LIBNX - // Should be called once per frame + /* Should be called once per frame */ if(!appletMainLoop()) return false; #endif From f277489efc81c3ba3929748da5afd52bf143ef37 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 9 Oct 2018 15:35:39 +0200 Subject: [PATCH 23/42] Comment out pthread attr for 3DS --- libretro-common/rthreads/rthreads.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libretro-common/rthreads/rthreads.c b/libretro-common/rthreads/rthreads.c index 5d651dd003..e38ffb4249 100644 --- a/libretro-common/rthreads/rthreads.c +++ b/libretro-common/rthreads/rthreads.c @@ -165,8 +165,8 @@ sthread_t *sthread_create(void (*thread_func)(void*), void *userdata) return sthread_create_with_priority(thread_func, userdata, 0); } -/* TODO/FIXME - this needs to be implemented for Switch */ -#if !defined(SWITCH) && !defined(USE_WIN32_THREADS) +/* TODO/FIXME - this needs to be implemented for Switch/3DS */ +#if !defined(SWITCH) && !defined(USE_WIN32_THREADS) && !defined(_3DS) #define HAVE_THREAD_ATTR #endif From a27bce38cdc705cf940e7df49c4f090f0eed9e88 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 9 Oct 2018 16:46:40 +0200 Subject: [PATCH 24/42] Simplify gl_get_context --- gfx/drivers/gl.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 2c446e088a..aa0f52dba7 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1506,31 +1506,38 @@ static const gfx_ctx_driver_t *gl_get_context(gl_t *gl) struct retro_hw_render_callback *hwr = video_driver_get_hw_context(); unsigned major = hwr->version_major; unsigned minor = hwr->version_minor; + enum retro_hw_context_type ctx_type = hwr->context_type; + bool hw_context_in_use = ctx_type != RETRO_HW_CONTEXT_NONE; #ifdef HAVE_OPENGLES api = GFX_CTX_OPENGL_ES_API; api_name = "OpenGL ES 2.0"; - if (hwr->context_type == RETRO_HW_CONTEXT_OPENGLES3) + switch (ctx_type) { - major = 3; - minor = 0; - api_name = "OpenGL ES 3.0"; + case RETRO_HW_CONTEXT_OPENGLES3: + major = 3; + minor = 0; + api_name = "OpenGL ES 3.0"; + break; + case RETRO_HW_CONTEXT_OPENGLES_VERSION: + api_name = "OpenGL ES 3.1+"; + break; + case RETRO_HW_CONTEXT_NONE: + default: + break; } - else if (hwr->context_type == RETRO_HW_CONTEXT_OPENGLES_VERSION) - api_name = "OpenGL ES 3.1+"; #else - api = GFX_CTX_OPENGL_API; - api_name = "OpenGL"; + api = GFX_CTX_OPENGL_API; + api_name = "OpenGL"; #endif (void)api_name; gl_shared_context_use = settings->bools.video_shared_context - && hwr->context_type != RETRO_HW_CONTEXT_NONE; + && hw_context_in_use; - if ( (libretro_get_shared_context()) - && (hwr->context_type != RETRO_HW_CONTEXT_NONE)) + if (libretro_get_shared_context() && hw_context_in_use) gl_shared_context_use = true; return video_context_driver_init_first(gl, From d4815084ec0116ffd748e85cdaae2b23c28ddf94 Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Tue, 9 Oct 2018 17:58:36 +0200 Subject: [PATCH 25/42] Update the rendering context with the GL version whether it is a core context --- gfx/drivers/gl.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index aa0f52dba7..e20b01af24 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1787,13 +1787,26 @@ static void *gl_init(const video_info_t *video, hwr = video_driver_get_hw_context(); - if (hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) + if (hwr) + { + hwr->version_major = gl->version_major; + hwr->version_minor = gl->version_minor; + hwr->context_type = RETRO_HW_CONTEXT_OPENGL; + } + + /* Check if we have a core context */ + GLint glflags = 0; + glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &glflags); + + if (glflags & GL_CONTEXT_CORE_PROFILE_BIT) { gfx_ctx_flags_t flags; gl_query_core_context_set(true); gl->core_context_in_use = true; + if (hwr) + hwr->context_type = RETRO_HW_CONTEXT_OPENGL_CORE; /** * Ensure that the rest of the frontend knows we have a core context */ @@ -1820,7 +1833,7 @@ static void *gl_init(const video_info_t *video, if (gl->renderchain_driver->restore_default_state) gl->renderchain_driver->restore_default_state(gl, gl->renderchain_data); - if (hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) + if (hwr && hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) if (gl->renderchain_driver->new_vao) gl->renderchain_driver->new_vao(gl, gl->renderchain_data); @@ -1830,7 +1843,7 @@ static void *gl_init(const video_info_t *video, gl->hw_render_use = false; gl->has_fbo = gl_check_capability(GL_CAPS_FBO); - if (gl->has_fbo && hwr->context_type != RETRO_HW_CONTEXT_NONE) + if (gl->has_fbo && hwr && hwr->context_type != RETRO_HW_CONTEXT_NONE) gl->hw_render_use = true; if (!resolve_extensions(gl, ctx_driver->ident, video)) @@ -1862,7 +1875,7 @@ static void *gl_init(const video_info_t *video, RARCH_LOG("[GL]: Using resolution %ux%u\n", temp_width, temp_height); - gl->vertex_ptr = hwr->bottom_left_origin + gl->vertex_ptr = (hwr && hwr->bottom_left_origin) ? vertexes : vertexes_flipped; /* Better pipelining with GPU due to synchronous glSubTexImage. From c11e47b08a9ab9440690a68c442ba0bf4b874979 Mon Sep 17 00:00:00 2001 From: flyinghead Date: Tue, 9 Oct 2018 19:27:55 +0200 Subject: [PATCH 26/42] Checking for core context returns an error in GL3 This error should be ignored. Mac build fix --- gfx/drivers/gl.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index e20b01af24..50e6bd4095 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1794,9 +1794,11 @@ static void *gl_init(const video_info_t *video, hwr->context_type = RETRO_HW_CONTEXT_OPENGL; } +#ifdef GL_CONTEXT_PROFILE_MASK /* Check if we have a core context */ GLint glflags = 0; glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &glflags); + while (glGetError() != GL_NO_ERROR); if (glflags & GL_CONTEXT_CORE_PROFILE_BIT) { @@ -1822,6 +1824,7 @@ static void *gl_init(const video_info_t *video, goto error; } } +#endif if (!renderchain_gl_init_first(&gl->renderchain_driver, &gl->renderchain_data)) From 8d586e1a0c30e929e51f0c75d353cc945d0fd32c Mon Sep 17 00:00:00 2001 From: flyinghead Date: Tue, 9 Oct 2018 20:31:40 +0200 Subject: [PATCH 27/42] Do not force the requested hw context to be Open GL --- gfx/drivers/gl.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 50e6bd4095..cfcd81440f 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1791,7 +1791,6 @@ static void *gl_init(const video_info_t *video, { hwr->version_major = gl->version_major; hwr->version_minor = gl->version_minor; - hwr->context_type = RETRO_HW_CONTEXT_OPENGL; } #ifdef GL_CONTEXT_PROFILE_MASK @@ -1807,8 +1806,6 @@ static void *gl_init(const video_info_t *video, gl_query_core_context_set(true); gl->core_context_in_use = true; - if (hwr) - hwr->context_type = RETRO_HW_CONTEXT_OPENGL_CORE; /** * Ensure that the rest of the frontend knows we have a core context */ @@ -1824,7 +1821,11 @@ static void *gl_init(const video_info_t *video, goto error; } } + else #endif + if (hwr && hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) + hwr->context_type = RETRO_HW_CONTEXT_OPENGL; + if (!renderchain_gl_init_first(&gl->renderchain_driver, &gl->renderchain_data)) From c02536af088f75b4c9ac06ed7366ecf8791c8238 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Tue, 9 Oct 2018 20:42:47 +0200 Subject: [PATCH 28/42] Roll all this back --- gfx/drivers/gl.c | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index cfcd81440f..aa0f52dba7 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -1787,19 +1787,7 @@ static void *gl_init(const video_info_t *video, hwr = video_driver_get_hw_context(); - if (hwr) - { - hwr->version_major = gl->version_major; - hwr->version_minor = gl->version_minor; - } - -#ifdef GL_CONTEXT_PROFILE_MASK - /* Check if we have a core context */ - GLint glflags = 0; - glGetIntegerv(GL_CONTEXT_PROFILE_MASK, &glflags); - while (glGetError() != GL_NO_ERROR); - - if (glflags & GL_CONTEXT_CORE_PROFILE_BIT) + if (hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) { gfx_ctx_flags_t flags; @@ -1821,11 +1809,6 @@ static void *gl_init(const video_info_t *video, goto error; } } - else -#endif - if (hwr && hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) - hwr->context_type = RETRO_HW_CONTEXT_OPENGL; - if (!renderchain_gl_init_first(&gl->renderchain_driver, &gl->renderchain_data)) @@ -1837,7 +1820,7 @@ static void *gl_init(const video_info_t *video, if (gl->renderchain_driver->restore_default_state) gl->renderchain_driver->restore_default_state(gl, gl->renderchain_data); - if (hwr && hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) + if (hwr->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) if (gl->renderchain_driver->new_vao) gl->renderchain_driver->new_vao(gl, gl->renderchain_data); @@ -1847,7 +1830,7 @@ static void *gl_init(const video_info_t *video, gl->hw_render_use = false; gl->has_fbo = gl_check_capability(GL_CAPS_FBO); - if (gl->has_fbo && hwr && hwr->context_type != RETRO_HW_CONTEXT_NONE) + if (gl->has_fbo && hwr->context_type != RETRO_HW_CONTEXT_NONE) gl->hw_render_use = true; if (!resolve_extensions(gl, ctx_driver->ident, video)) @@ -1879,7 +1862,7 @@ static void *gl_init(const video_info_t *video, RARCH_LOG("[GL]: Using resolution %ux%u\n", temp_width, temp_height); - gl->vertex_ptr = (hwr && hwr->bottom_left_origin) + gl->vertex_ptr = hwr->bottom_left_origin ? vertexes : vertexes_flipped; /* Better pipelining with GPU due to synchronous glSubTexImage. From 96b80990154f4d5950df5b6e9de17ebf044ed58d Mon Sep 17 00:00:00 2001 From: meepingsnesroms Date: Tue, 9 Oct 2018 15:44:03 -0700 Subject: [PATCH 29/42] Disable all the non working defines for 3DS The network stuff I started implementing and never finished and the threads are broken for an unknown reason. This basicly just disabled the menu options associated with these things as none of them are currently working --- Makefile.ctr | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Makefile.ctr b/Makefile.ctr index e72f8313d4..2427e235cc 100644 --- a/Makefile.ctr +++ b/Makefile.ctr @@ -52,7 +52,7 @@ ifeq ($(GRIFFIN_BUILD), 1) OBJ += griffin/griffin.o DEFINES += -DHAVE_GRIFFIN=1 -DHAVE_MENU -DHAVE_RGUI -DHAVE_XMB -DHAVE_MATERIALUI -DHAVE_LIBRETRODB -DHAVE_CC_RESAMPLER DEFINES += -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA -DWANT_ZLIB - DEFINES += -DHAVE_NETWORKING -DHAVE_CHEEVOS -DRC_DISABLE_LUA -DHAVE_SOCKET_LEGACY -DHAVE_THREADS + #DEFINES += -DHAVE_NETWORKING -DHAVE_CHEEVOS -DRC_DISABLE_LUA -DHAVE_SOCKET_LEGACY -DHAVE_THREADS #-DHAVE_SSL -DMBEDTLS_SSL_DEBUG_ALL #ssl is currently incompatible with griffin due to use of the "static" flag on repeating functions that will conflict when included in one file else @@ -72,11 +72,11 @@ else HAVE_XMB = 1 HAVE_STATIC_VIDEO_FILTERS = 1 HAVE_STATIC_AUDIO_FILTERS = 1 - HAVE_NETWORKING = 1 - HAVE_CHEEVOS = 1 - HAVE_SOCKET_LEGACY = 1 - HAVE_THREADS = 1 - HAVE_SSL = 1 + #HAVE_NETWORKING = 1 + #HAVE_CHEEVOS = 1 + #HAVE_SOCKET_LEGACY = 1 + #HAVE_THREADS = 1 + #HAVE_SSL = 1 include Makefile.common BLACKLIST := From fa03a634d0e59cbf1f8c1bfde398046e24884788 Mon Sep 17 00:00:00 2001 From: Alfrix Date: Tue, 9 Oct 2018 19:52:04 -0300 Subject: [PATCH 30/42] New Netplay icons --- intl/msg_hash_us.h | 2 +- menu/cbs/menu_cbs_ok.c | 7 +++++-- menu/drivers/xmb.c | 43 ++++++++++++++---------------------------- menu/menu_driver.h | 4 +--- 4 files changed, 21 insertions(+), 35 deletions(-) diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index ae8017977e..a3a118a1d1 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -5319,7 +5319,7 @@ MSG_HASH( ) MSG_HASH( MENU_ENUM_SUBLABEL_NETPLAY_ENABLE_CLIENT, - "Enables netplay in client mode." + "Enter netplay server address and connect in client mode." ) MSG_HASH( MENU_ENUM_SUBLABEL_NETPLAY_DISCONNECT, diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index e98fcf249c..d6fe477c11 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -3929,6 +3929,7 @@ void netplay_refresh_rooms_menu(file_list_t *list) { char s[8300]; int i = 0; + int room_type = 0; s[0] = '\0'; @@ -4008,14 +4009,16 @@ void netplay_refresh_rooms_menu(file_list_t *list) snprintf(s, sizeof(s), "%s: %s%s", netplay_room_list[i].lan ? "Local" : (netplay_room_list[i].host_method == NETPLAY_HOST_METHOD_MITM ? - "Internet (relay)" : "Internet (direct)"), + "Internet (Relay)" : "Internet"), netplay_room_list[i].nickname, country); + room_type = netplay_room_list[i].lan ? MENU_ROOM_LAN : (netplay_room_list[i].host_method == NETPLAY_HOST_METHOD_MITM ? MENU_ROOM_RELAY : MENU_ROOM); + menu_entries_append_enum(list, s, msg_hash_to_str(MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM), MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM, - MENU_SETTINGS_NETPLAY_ROOMS_START + i, 0, 0); + room_type, 0, 0); } netplay_rooms_free(); diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 7b273e72d0..080d3761a7 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -105,13 +105,8 @@ enum #ifdef HAVE_NETWORKING XMB_TEXTURE_NETPLAY, XMB_TEXTURE_ROOM, - XMB_TEXTURE_IROOM, - XMB_TEXTURE_LANROOM, -#if 0 - /* stub these out until we have the icons */ XMB_TEXTURE_ROOM_LAN, - XMB_TEXTURE_ROOM_MITM, -#endif + XMB_TEXTURE_ROOM_RELAY, #endif #ifdef HAVE_IMAGEVIEWER XMB_TEXTURE_IMAGES, @@ -2426,9 +2421,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, case MENU_ENUM_LABEL_NETPLAY_ENABLE_CLIENT: return xmb->textures.list[XMB_TEXTURE_ROOM]; case MENU_ENUM_LABEL_NETPLAY_REFRESH_ROOMS: - return xmb->textures.list[XMB_TEXTURE_IROOM]; - case MENU_ENUM_LABEL_NETPLAY_LAN_SCAN_SETTINGS: - return xmb->textures.list[XMB_TEXTURE_LANROOM]; + return xmb->textures.list[XMB_TEXTURE_RELOAD]; #endif default: break; @@ -2519,10 +2512,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, return xmb->textures.list[XMB_TEXTURE_RESUME]; case MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS: return xmb->textures.list[XMB_TEXTURE_RUN]; - case MENU_SETTING_ACTION: - if (xmb->depth == 3) - return xmb->textures.list[XMB_TEXTURE_SUBSETTING]; - return xmb->textures.list[XMB_TEXTURE_SETTING]; + case MENU_SETTING_GROUP: #ifdef HAVE_LAKKA_SWITCH case MENU_SET_SWITCH_BRIGHTNESS: @@ -2535,14 +2525,16 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb, #ifdef HAVE_NETWORKING case MENU_ROOM: return xmb->textures.list[XMB_TEXTURE_ROOM]; -#if 0 - /* stub these out until we have the icons */ case MENU_ROOM_LAN: return xmb->textures.list[XMB_TEXTURE_ROOM_LAN]; - case MENU_ROOM_MITM: - return xmb->textures.list[XMB_TEXTURE_ROOM_MITM]; -#endif + case MENU_ROOM_RELAY: + return xmb->textures.list[XMB_TEXTURE_ROOM_RELAY]; #endif + case MENU_SETTING_ACTION: + if (xmb->depth <= 3) + return xmb->textures.list[XMB_TEXTURE_SETTING]; + default: + return xmb->textures.list[XMB_TEXTURE_SUBSETTING]; } #ifdef HAVE_CHEEVOS @@ -4547,18 +4539,11 @@ static const char *xmb_texture_path(unsigned id) case XMB_TEXTURE_NETPLAY: return "netplay.png"; case XMB_TEXTURE_ROOM: - return "room.png"; - case XMB_TEXTURE_LANROOM: - return "netplay - LAN Room.png"; - case XMB_TEXTURE_IROOM: - return "netplay - iRoom.png"; -#if 0 - /* stub these out until we have the icons */ + return "menu_room.png"; case XMB_TEXTURE_ROOM_LAN: - return "room_lan.png"; - case XMB_TEXTURE_ROOM_MITM: - return "room_mitm.png"; -#endif + return "menu_room_lan.png"; + case XMB_TEXTURE_ROOM_RELAY: + return "menu_room_relay.png"; #endif case XMB_TEXTURE_KEY: return "key.png"; diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 7546482f5b..dee87c546a 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -171,10 +171,8 @@ enum menu_settings_type MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS, MENU_WIFI, MENU_ROOM, -/* MENU_ROOM_LAN, - MENU_ROOM_MITM, -*/ + MENU_ROOM_RELAY, MENU_NETPLAY_LAN_SCAN, MENU_INFO_MESSAGE, MENU_SETTINGS_SHADER_PARAMETER_0, From 304b4f3f57f31b6c5bdd0037ee0ef11d5acbec6b Mon Sep 17 00:00:00 2001 From: Alfrix Date: Tue, 9 Oct 2018 20:30:20 -0300 Subject: [PATCH 31/42] Use subsetting as placeholder until themes are updated --- menu/drivers/xmb.c | 268 +++++++++++++++++++++++++++++++-------------- 1 file changed, 186 insertions(+), 82 deletions(-) diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index 080d3761a7..1f0b9a92d3 100755 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -4435,181 +4435,285 @@ static bool xmb_load_image(void *userdata, void *data, enum menu_image_type type 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) { case XMB_TEXTURE_MAIN_MENU: #if defined(HAVE_LAKKA) - return "lakka.png"; + icon_name = "lakka.png"; + break; #else - return "retroarch.png"; + icon_name = "retroarch.png"; + break; #endif case XMB_TEXTURE_SETTINGS: - return "settings.png"; + icon_name = "settings.png"; + break; case XMB_TEXTURE_HISTORY: - return "history.png"; + icon_name = "history.png"; + break; case XMB_TEXTURE_FAVORITES: - return "favorites.png"; + icon_name = "favorites.png"; + break; case XMB_TEXTURE_ADD_FAVORITE: - return "add-favorite.png"; + icon_name = "add-favorite.png"; + break; case XMB_TEXTURE_MUSICS: - return "musics.png"; + icon_name = "musics.png"; + break; #if defined(HAVE_FFMPEG) || defined(HAVE_MPV) case XMB_TEXTURE_MOVIES: - return "movies.png"; + icon_name = "movies.png"; + break; #endif #ifdef HAVE_IMAGEVIEWER case XMB_TEXTURE_IMAGES: - return "images.png"; + icon_name = "images.png"; + break; #endif case XMB_TEXTURE_SETTING: - return "setting.png"; + icon_name = "setting.png"; + break; case XMB_TEXTURE_SUBSETTING: - return "subsetting.png"; + icon_name = "subsetting.png"; + break; case XMB_TEXTURE_ARROW: - return "arrow.png"; + icon_name = "arrow.png"; + break; case XMB_TEXTURE_RUN: - return "run.png"; + icon_name = "run.png"; + break; case XMB_TEXTURE_CLOSE: - return "close.png"; + icon_name = "close.png"; + break; case XMB_TEXTURE_RESUME: - return "resume.png"; + icon_name = "resume.png"; + break; case XMB_TEXTURE_CLOCK: - return "clock.png"; + icon_name = "clock.png"; + break; case XMB_TEXTURE_BATTERY_FULL: - return "battery-full.png"; + icon_name = "battery-full.png"; + break; case XMB_TEXTURE_BATTERY_CHARGING: - return "battery-charging.png"; + icon_name = "battery-charging.png"; + break; case XMB_TEXTURE_POINTER: - return "pointer.png"; + icon_name = "pointer.png"; + break; case XMB_TEXTURE_SAVESTATE: - return "savestate.png"; + icon_name = "savestate.png"; + break; case XMB_TEXTURE_LOADSTATE: - return "loadstate.png"; + icon_name = "loadstate.png"; + break; case XMB_TEXTURE_UNDO: - return "undo.png"; + icon_name = "undo.png"; + break; case XMB_TEXTURE_CORE_INFO: - return "core-infos.png"; + icon_name = "core-infos.png"; + break; case XMB_TEXTURE_WIFI: - return "wifi.png"; + icon_name = "wifi.png"; + break; case XMB_TEXTURE_CORE_OPTIONS: - return "core-options.png"; + icon_name = "core-options.png"; + break; case XMB_TEXTURE_INPUT_REMAPPING_OPTIONS: - return "core-input-remapping-options.png"; + icon_name = "core-input-remapping-options.png"; + break; case XMB_TEXTURE_CHEAT_OPTIONS: - return "core-cheat-options.png"; + icon_name = "core-cheat-options.png"; + break; case XMB_TEXTURE_DISK_OPTIONS: - return "core-disk-options.png"; + icon_name = "core-disk-options.png"; + break; case XMB_TEXTURE_SHADER_OPTIONS: - return "core-shader-options.png"; + icon_name = "core-shader-options.png"; + break; case XMB_TEXTURE_ACHIEVEMENT_LIST: - return "achievement-list.png"; + icon_name = "achievement-list.png"; + break; case XMB_TEXTURE_SCREENSHOT: - return "screenshot.png"; + icon_name = "screenshot.png"; + break; case XMB_TEXTURE_RELOAD: - return "reload.png"; + icon_name = "reload.png"; + break; case XMB_TEXTURE_RENAME: - return "rename.png"; + icon_name = "rename.png"; + break; case XMB_TEXTURE_FILE: - return "file.png"; + icon_name = "file.png"; + break; case XMB_TEXTURE_FOLDER: - return "folder.png"; + icon_name = "folder.png"; + break; case XMB_TEXTURE_ZIP: - return "zip.png"; + icon_name = "zip.png"; + break; case XMB_TEXTURE_MUSIC: - return "music.png"; + icon_name = "music.png"; + break; case XMB_TEXTURE_FAVORITE: - return "favorites-content.png"; + icon_name = "favorites-content.png"; + break; case XMB_TEXTURE_IMAGE: - return "image.png"; + icon_name = "image.png"; + break; case XMB_TEXTURE_MOVIE: - return "movie.png"; + icon_name = "movie.png"; + break; case XMB_TEXTURE_CORE: - return "core.png"; + icon_name = "core.png"; + break; case XMB_TEXTURE_RDB: - return "database.png"; + icon_name = "database.png"; + break; case XMB_TEXTURE_CURSOR: - return "cursor.png"; + icon_name = "cursor.png"; + break; case XMB_TEXTURE_SWITCH_ON: - return "on.png"; + icon_name = "on.png"; + break; case XMB_TEXTURE_SWITCH_OFF: - return "off.png"; + icon_name = "off.png"; + break; case XMB_TEXTURE_ADD: - return "add.png"; + icon_name = "add.png"; + break; #ifdef HAVE_NETWORKING case XMB_TEXTURE_NETPLAY: - return "netplay.png"; + icon_name = "netplay.png"; + break; case XMB_TEXTURE_ROOM: - return "menu_room.png"; + icon_name = "menu_room.png"; + break; case XMB_TEXTURE_ROOM_LAN: - return "menu_room_lan.png"; + icon_name = "menu_room_lan.png"; + break; case XMB_TEXTURE_ROOM_RELAY: - return "menu_room_relay.png"; + icon_name = "menu_room_relay.png"; + break; #endif case XMB_TEXTURE_KEY: - return "key.png"; + icon_name = "key.png"; + break; case XMB_TEXTURE_KEY_HOVER: - return "key-hover.png"; + icon_name = "key-hover.png"; + break; case XMB_TEXTURE_DIALOG_SLICE: - return "dialog-slice.png"; + icon_name = "dialog-slice.png"; + break; case XMB_TEXTURE_ACHIEVEMENTS: - return "menu_achievements.png"; + icon_name = "menu_achievements.png"; + break; case XMB_TEXTURE_AUDIO: - return "menu_audio.png"; + icon_name = "menu_audio.png"; + break; case XMB_TEXTURE_DRIVERS: - return "menu_drivers.png"; + icon_name = "menu_drivers.png"; + break; case XMB_TEXTURE_EXIT: - return "menu_exit.png"; + icon_name = "menu_exit.png"; + break; case XMB_TEXTURE_FRAMESKIP: - return "menu_frameskip.png"; + icon_name = "menu_frameskip.png"; + break; case XMB_TEXTURE_HELP: - return "menu_help.png"; + icon_name = "menu_help.png"; + break; case XMB_TEXTURE_INFO: - return "menu_info.png"; + icon_name = "menu_info.png"; + break; case XMB_TEXTURE_INPUT: - return "Libretro - Pad.png"; + icon_name = "Libretro - Pad.png"; + break; case XMB_TEXTURE_LATENCY: - return "menu_latency.png"; + icon_name = "menu_latency.png"; + break; case XMB_TEXTURE_NETWORK: - return "menu_network.png"; + icon_name = "menu_network.png"; + break; case XMB_TEXTURE_POWER: - return "menu_power.png"; + icon_name = "menu_power.png"; + break; case XMB_TEXTURE_RECORD: - return "menu_record.png"; + icon_name = "menu_record.png"; + break; case XMB_TEXTURE_SAVING: - return "menu_saving.png"; + icon_name = "menu_saving.png"; + break; case XMB_TEXTURE_UPDATER: - return "menu_updater.png"; + icon_name = "menu_updater.png"; + break; case XMB_TEXTURE_VIDEO: - return "menu_video.png"; + icon_name = "menu_video.png"; + break; case XMB_TEXTURE_MIXER: - return "menu_mixer.png"; + icon_name = "menu_mixer.png"; + break; case XMB_TEXTURE_LOG: - return "menu_log.png"; + icon_name = "menu_log.png"; + break; case XMB_TEXTURE_OSD: - return "menu_osd.png"; + icon_name = "menu_osd.png"; + break; case XMB_TEXTURE_UI: - return "menu_ui.png"; + icon_name = "menu_ui.png"; + break; case XMB_TEXTURE_USER: - return "menu_user.png"; + icon_name = "menu_user.png"; + break; case XMB_TEXTURE_PRIVACY: - return "menu_privacy.png"; + icon_name = "menu_privacy.png"; + break; case XMB_TEXTURE_PLAYLIST: - return "menu_playlist.png"; + icon_name = "menu_playlist.png"; + break; case XMB_TEXTURE_QUICKMENU: - return "menu_quickmenu.png"; + icon_name = "menu_quickmenu.png"; + break; case XMB_TEXTURE_REWIND: - return "menu_rewind.png"; + icon_name = "menu_rewind.png"; + break; case XMB_TEXTURE_OVERLAY: - return "menu_overlay.png"; + icon_name = "menu_overlay.png"; + break; case XMB_TEXTURE_OVERRIDE: - return "menu_override.png"; + icon_name = "menu_override.png"; + break; case XMB_TEXTURE_NOTIFICATIONS: - return "menu_notifications.png"; + icon_name = "menu_notifications.png"; + break; case XMB_TEXTURE_STREAM: - return "menu_stream.png"; + icon_name = "menu_stream.png"; + break; } - 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)) + { + /* If the icon doesn't exist at least try to return the subsetting icon*/ + if (id == XMB_TEXTURE_DIALOG_SLICE || id == XMB_TEXTURE_KEY_HOVER || id == XMB_TEXTURE_KEY_HOVER) + return NULL; + else + return "subsetting.png"; + } + else + return icon_name; + } static void xmb_context_reset_textures( From 1b1a0c8d271f7a4fe6d0a6b5fa4aefa2a0a49246 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 10 Oct 2018 02:01:13 +0200 Subject: [PATCH 32/42] Stub this out for GEKKO --- libretro-common/rthreads/rthreads.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libretro-common/rthreads/rthreads.c b/libretro-common/rthreads/rthreads.c index e38ffb4249..b5db30d788 100644 --- a/libretro-common/rthreads/rthreads.c +++ b/libretro-common/rthreads/rthreads.c @@ -166,7 +166,7 @@ sthread_t *sthread_create(void (*thread_func)(void*), void *userdata) } /* TODO/FIXME - this needs to be implemented for Switch/3DS */ -#if !defined(SWITCH) && !defined(USE_WIN32_THREADS) && !defined(_3DS) +#if !defined(SWITCH) && !defined(USE_WIN32_THREADS) && !defined(_3DS) && !defined(GEKKO) #define HAVE_THREAD_ATTR #endif From f1c5b268caf3c3dbaaf5fcb32b46c2ac3fe4a5be Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 10 Oct 2018 04:00:51 +0200 Subject: [PATCH 33/42] Hide Quick Menu properly --- menu/menu_displaylist.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index ae39a02992..c18f006b97 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -7310,9 +7310,10 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) if (!string_is_empty(system->info.library_name) && !string_is_equal(system->info.library_name, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NO_CORE))) - menu_displaylist_parse_settings_enum(menu, info, - MENU_ENUM_LABEL_CONTENT_SETTINGS, - PARSE_ACTION, false); + if (!rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL)) + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_CONTENT_SETTINGS, + PARSE_ACTION, false); if (system->load_no_content) menu_displaylist_parse_settings_enum(menu, info, From 13a0274f5779f984053cfb30998b6f874d3596e4 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 10 Oct 2018 04:25:11 +0200 Subject: [PATCH 34/42] Localize some strings --- menu/cbs/menu_cbs_sublabel.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 32d6c2b5d5..8953602cbd 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -531,12 +531,14 @@ static int action_bind_sublabel_remap_kbd_sublabel( { unsigned user_idx = (type - MENU_SETTINGS_INPUT_DESC_KBD_BEGIN) / RARCH_FIRST_CUSTOM_BIND; - snprintf(s, len, "User #%d: %s", user_idx + 1, - input_config_get_device_display_name(user_idx) ? - input_config_get_device_display_name(user_idx) : - (input_config_get_device_name(user_idx) ? - input_config_get_device_name(user_idx) : - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE))); + snprintf(s, len, "%s #%d: %s", + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_USER), + user_idx + 1, + input_config_get_device_display_name(user_idx) ? + input_config_get_device_display_name(user_idx) : + (input_config_get_device_name(user_idx) ? + input_config_get_device_name(user_idx) : + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE))); return 0; } @@ -589,12 +591,14 @@ static int action_bind_sublabel_remap_sublabel( unsigned offset = (type - MENU_SETTINGS_INPUT_DESC_BEGIN) / (RARCH_FIRST_CUSTOM_BIND + 8); - snprintf(s, len, "User #%d: %s", offset + 1, - input_config_get_device_display_name(offset) ? - input_config_get_device_display_name(offset) : - (input_config_get_device_name(offset) ? - input_config_get_device_name(offset) : - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE))); + snprintf(s, len, "%s #%d: %s", + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_USER), + offset + 1, + input_config_get_device_display_name(offset) ? + input_config_get_device_display_name(offset) : + (input_config_get_device_name(offset) ? + input_config_get_device_name(offset) : + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE))); return 0; } From d1022d90401f4c2478a6d9f7ca57abd81befc48e Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 10 Oct 2018 04:32:36 +0200 Subject: [PATCH 35/42] Cleanups --- menu/menu_displaylist.c | 154 ++++++++++++++++++++-------------------- 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index c18f006b97..96b64a43a2 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -1289,7 +1289,7 @@ static int menu_displaylist_parse_playlist(menu_displaylist_info_t *info, if (!string_is_empty(info->path)) { size_t lpl_basename_size = PATH_MAX_LENGTH * sizeof(char); - char *lpl_basename = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); + char *lpl_basename = (char*)malloc(lpl_basename_size); lpl_basename[0] = '\0'; fill_pathname_base_noext(lpl_basename, info->path, lpl_basename_size); @@ -1302,9 +1302,9 @@ static int menu_displaylist_parse_playlist(menu_displaylist_info_t *info, for (i = 0; i < list_size; i++) { - char *path_copy = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); - char *fill_buf = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); size_t path_size = PATH_MAX_LENGTH * sizeof(char); + char *path_copy = (char*)malloc(path_size); + char *fill_buf = (char*)malloc(path_size); const char *core_name = NULL; const char *path = NULL; const char *label = NULL; @@ -1337,9 +1337,10 @@ static int menu_displaylist_parse_playlist(menu_displaylist_info_t *info, if (path) { - char *path_short = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); + size_t path_size = PATH_MAX_LENGTH * sizeof(char); + char *path_short = (char*)malloc(path_size); - path_short[0] = '\0'; + path_short[0] = '\0'; fill_short_pathname_representation(path_short, path, path_size); @@ -1352,10 +1353,9 @@ static int menu_displaylist_parse_playlist(menu_displaylist_info_t *info, if (!string_is_equal(core_name, file_path_str(FILE_PATH_DETECT))) { - char *tmp = (char*) - malloc(PATH_MAX_LENGTH * sizeof(char)); + char *tmp = (char*)malloc(path_size); - tmp[0] = '\0'; + tmp[0] = '\0'; snprintf(tmp, path_size, " (%s)", core_name); strlcat(fill_buf, tmp, path_size); @@ -1486,12 +1486,13 @@ static int create_string_list_rdb_entry_string( char *output_label = NULL; int str_len = 0; struct string_list *str_list = string_list_new(); + size_t path_size = PATH_MAX_LENGTH * sizeof(char); if (!str_list) return -1; attr.i = 0; - tmp = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); + tmp = (char*)malloc(path_size); tmp[0] = '\0'; str_len += strlen(label) + 1; @@ -1515,8 +1516,7 @@ static int create_string_list_rdb_entry_string( string_list_join_concat(output_label, str_len, str_list, "|"); fill_pathname_join_concat_noext(tmp, desc, ": ", - actual_string, - PATH_MAX_LENGTH * sizeof(char)); + actual_string, path_size); menu_entries_append_enum(list, tmp, output_label, enum_idx, 0, 0, 0); @@ -1547,8 +1547,8 @@ static int create_string_list_rdb_entry_int( goto error; attr.i = 0; - tmp = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); - str = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); + tmp = (char*)malloc(path_size); + str = (char*)malloc(path_size); tmp[0] = str[0] = '\0'; str_len += strlen(label) + 1; @@ -1654,10 +1654,12 @@ static int menu_displaylist_parse_database_entry(menu_handle_t *menu, snprintf(crc_str, sizeof(crc_str), "%08X", db_info_entry->crc32); if (!string_is_empty(db_info_entry->name)) - strlcpy(thumbnail_content, db_info_entry->name, sizeof(thumbnail_content)); + strlcpy(thumbnail_content, db_info_entry->name, + sizeof(thumbnail_content)); if (!string_is_empty(thumbnail_content)) - menu_driver_set_thumbnail_content(thumbnail_content, sizeof(thumbnail_content)); + menu_driver_set_thumbnail_content(thumbnail_content, + sizeof(thumbnail_content)); menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_PATH, NULL); menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_IMAGE, NULL); @@ -3744,19 +3746,16 @@ static unsigned menu_displaylist_parse_cores( if (type == FILE_TYPE_CORE) { - char *core_path = (char*) - malloc(PATH_MAX_LENGTH * sizeof(char)); - char *display_name = (char*) - malloc(PATH_MAX_LENGTH * sizeof(char)); + size_t path_size = PATH_MAX_LENGTH * sizeof(char); + char *core_path = (char*)malloc(path_size); + char *display_name = (char*)malloc(path_size); core_path[0] = display_name[0] = '\0'; - fill_pathname_join(core_path, dir, path, - PATH_MAX_LENGTH * sizeof(char)); + fill_pathname_join(core_path, dir, path, path_size); if (core_info_list_get_display_name(list, - core_path, display_name, - PATH_MAX_LENGTH * sizeof(char))) + core_path, display_name, path_size)) file_list_set_alt_at_offset(info->list, i, display_name); free(core_path); @@ -4280,19 +4279,22 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) #ifdef HAVE_LAKKA_SWITCH case DISPLAYLIST_SWITCH_CPU_PROFILE: { - runloop_msg_queue_push("Warning : extented overclocking can damage the Switch", 1, 90, true); - + unsigned i; + char text[PATH_MAX_LENGTH]; char current_profile[PATH_MAX_LENGTH]; + FILE *profile = NULL; + const size_t profiles_count = sizeof(SWITCH_CPU_PROFILES)/sizeof(SWITCH_CPU_PROFILES[1]); + + runloop_msg_queue_push("Warning : extented overclocking can damage the Switch", 1, 90, true); - FILE* profile = popen("cpu-profile get", "r"); + profile = popen("cpu-profile get", "r"); fgets(current_profile, PATH_MAX_LENGTH, profile); pclose(profile); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); - char text[PATH_MAX_LENGTH]; - - snprintf(text, sizeof(text), "Current profile : %s", current_profile); + snprintf(text, sizeof(text), + "Current profile : %s", current_profile); menu_entries_append_enum(info->list, text, @@ -4300,24 +4302,21 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) 0, MENU_INFO_MESSAGE, 0, 0); - const size_t profiles_count = sizeof(SWITCH_CPU_PROFILES)/sizeof(SWITCH_CPU_PROFILES[1]); - - - for (int i = 0; i < profiles_count; i++) + for (i = 0; i < profiles_count; i++) { - char* profile = SWITCH_CPU_PROFILES[i]; - char* speed = SWITCH_CPU_SPEEDS[i]; - + char* profile = SWITCH_CPU_PROFILES[i]; + char* speed = SWITCH_CPU_SPEEDS[i]; + char title[PATH_MAX_LENGTH] = {0}; - + snprintf(title, sizeof(title), "%s (%s)", profile, speed); - - menu_entries_append_enum(info->list, - title, - "", - 0, MENU_SET_SWITCH_CPU_PROFILE, 0, i); - - } + + menu_entries_append_enum(info->list, + title, + "", + 0, MENU_SET_SWITCH_CPU_PROFILE, 0, i); + + } info->need_push = true; info->need_refresh = true; @@ -4327,18 +4326,20 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) } case DISPLAYLIST_SWITCH_GPU_PROFILE: { + unsigned i; + char text[PATH_MAX_LENGTH]; + char current_profile[PATH_MAX_LENGTH]; + FILE *profile = NULL; + const size_t profiles_count = sizeof(SWITCH_GPU_PROFILES)/sizeof(SWITCH_GPU_PROFILES[1]); + runloop_msg_queue_push("Warning : extented overclocking can damage the Switch", 1, 90, true); - char current_profile[PATH_MAX_LENGTH]; - - FILE* profile = popen("gpu-profile get", "r"); + profile = popen("gpu-profile get", "r"); fgets(current_profile, PATH_MAX_LENGTH, profile); pclose(profile); menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); - char text[PATH_MAX_LENGTH]; - snprintf(text, sizeof(text), "Current profile : %s", current_profile); menu_entries_append_enum(info->list, @@ -4347,22 +4348,20 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) 0, MENU_INFO_MESSAGE, 0, 0); - const size_t profiles_count = sizeof(SWITCH_GPU_PROFILES)/sizeof(SWITCH_GPU_PROFILES[1]); - for (int i = 0; i < profiles_count; i++) + for (i = 0; i < profiles_count; i++) { - char* profile = SWITCH_GPU_PROFILES[i]; - char* speed = SWITCH_GPU_SPEEDS[i]; - + char* profile = SWITCH_GPU_PROFILES[i]; + char* speed = SWITCH_GPU_SPEEDS[i]; char title[PATH_MAX_LENGTH] = {0}; - + snprintf(title, sizeof(title), "%s (%s)", profile, speed); - - menu_entries_append_enum(info->list, - title, - "", - 0, MENU_SET_SWITCH_GPU_PROFILE, 0, i); - } + + menu_entries_append_enum(info->list, + title, + "", + 0, MENU_SET_SWITCH_GPU_PROFILE, 0, i); + } info->need_push = true; info->need_refresh = true; @@ -4372,26 +4371,27 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) } case DISPLAYLIST_SWITCH_BACKLIGHT_CONTROL: { - menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); - - const size_t brightness_count = sizeof(SWITCH_BRIGHTNESS)/sizeof(SWITCH_BRIGHTNESS[1]); - - for (int i = 0; i < brightness_count; i++) - { - char title[PATH_MAX_LENGTH] = {0}; - - snprintf(title, sizeof(title), "Set to %d%%", SWITCH_BRIGHTNESS[i]); - - menu_entries_append_enum(info->list, - title, - "", - 0, MENU_SET_SWITCH_BRIGHTNESS, 0, i); + unsigned i; + const size_t brightness_count = sizeof(SWITCH_BRIGHTNESS)/sizeof(SWITCH_BRIGHTNESS[1]); + + menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); + + for (i = 0; i < brightness_count; i++) + { + char title[PATH_MAX_LENGTH] = {0}; + + snprintf(title, sizeof(title), "Set to %d%%", SWITCH_BRIGHTNESS[i]); + + menu_entries_append_enum(info->list, + title, + "", + 0, MENU_SET_SWITCH_BRIGHTNESS, 0, i); } - + info->need_push = true; info->need_refresh = true; info->need_clear = true; - + break; } #endif From b46ce0dec95e60edfedb298019c3da01dd8e8186 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 10 Oct 2018 04:36:53 +0200 Subject: [PATCH 36/42] Buildfix --- menu/menu_displaylist.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index 37d79a3d99..5c1ff8abaa 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -179,13 +179,12 @@ enum menu_displaylist_ctl_state DISPLAYLIST_CORE_CONTENT, DISPLAYLIST_CORE_CONTENT_DIRS, DISPLAYLIST_CORE_CONTENT_DIRS_SUBDIR, - DISPLAYLIST_PENDING_CLEAR, - #ifdef HAVE_LAKKA_SWITCH DISPLAYLIST_SWITCH_GPU_PROFILE, DISPLAYLIST_SWITCH_BACKLIGHT_CONTROL, DISPLAYLIST_SWITCH_CPU_PROFILE, #endif + DISPLAYLIST_PENDING_CLEAR }; typedef struct menu_displaylist_info From a31cf3c868fbead9fb0ca425e73a49f05c128e99 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 10 Oct 2018 04:49:40 +0200 Subject: [PATCH 37/42] Bake in MD5 --- Makefile.common | 3 +-- griffin/griffin.c | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Makefile.common b/Makefile.common index dbd0cac7e0..bc1ea2b9f9 100644 --- a/Makefile.common +++ b/Makefile.common @@ -252,6 +252,7 @@ OBJ += frontend/frontend.o \ $(LIBRETRO_COMM_DIR)/audio/resampler/drivers/sinc_resampler.o \ $(LIBRETRO_COMM_DIR)/audio/resampler/drivers/nearest_resampler.o \ $(LIBRETRO_COMM_DIR)/audio/resampler/drivers/null_resampler.o \ + $(LIBRETRO_COMM_DIR)/utils/md5.o \ location/drivers/nulllocation.o \ camera/drivers/nullcamera.o \ wifi/drivers/nullwifi.o \ @@ -1624,8 +1625,6 @@ ifeq ($(HAVE_NETWORKING), 1) cheevos/var.o \ cheevos/cond.o - OBJ += \ - $(LIBRETRO_COMM_DIR)/utils/md5.o ifeq ($(HAVE_LUA), 1) DEFINES += -DHAVE_LUA \ diff --git a/griffin/griffin.c b/griffin/griffin.c index 7dd8499911..30d8c7718a 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -181,9 +181,7 @@ ACHIEVEMENTS /*============================================================ MD5 ============================================================ */ -#if defined(HAVE_CHEEVOS) || (defined(HAVE_HTTPSERVER) && defined(HAVE_ZLIB)) #include "../libretro-common/utils/md5.c" -#endif /*============================================================ CHEATS From 4ed151fb35c2d954562e1377f641996b59f3db0e Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 10 Oct 2018 05:30:50 +0200 Subject: [PATCH 38/42] Cleanups - don't set core profile bit immediately --- dynamic.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/dynamic.c b/dynamic.c index 73e593298d..99030368ca 100644 --- a/dynamic.c +++ b/dynamic.c @@ -955,16 +955,8 @@ static bool dynamic_request_hw_context(enum retro_hw_context_type type, break; case RETRO_HW_CONTEXT_OPENGL_CORE: - { - gfx_ctx_flags_t flags; - flags.flags = 0; - BIT32_SET(flags.flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT); - - video_context_driver_set_flags(&flags); - - RARCH_LOG("Requesting core OpenGL context (%u.%u).\n", - major, minor); - } + RARCH_LOG("Requesting core OpenGL context (%u.%u).\n", + major, minor); break; #endif @@ -1374,6 +1366,15 @@ bool rarch_environment_cb(unsigned cmd, void *data) if (!dynamic_verify_hw_context(cb->context_type, cb->version_minor, cb->version_major)) return false; + if (cb->context_type == RETRO_HW_CONTEXT_OPENGL_CORE) + { + gfx_ctx_flags_t flags; + flags.flags = 0; + BIT32_SET(flags.flags, GFX_CTX_FLAGS_GL_CORE_CONTEXT); + + video_context_driver_set_flags(&flags); + } + cb->get_current_framebuffer = video_driver_get_current_framebuffer; cb->get_proc_address = video_driver_get_proc_address; From 641d593216bae59282971a7c41d4d00e6c55f4e9 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 10 Oct 2018 05:32:00 +0200 Subject: [PATCH 39/42] Add note --- dynamic.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dynamic.c b/dynamic.c index 99030368ca..81a03dd2a1 100644 --- a/dynamic.c +++ b/dynamic.c @@ -955,6 +955,8 @@ static bool dynamic_request_hw_context(enum retro_hw_context_type type, break; case RETRO_HW_CONTEXT_OPENGL_CORE: + /* TODO/FIXME - we should do a check here to see if + * the requested core GL version is supported */ RARCH_LOG("Requesting core OpenGL context (%u.%u).\n", major, minor); break; From f53e1ca4b18fa0339144eb8c4150fa3a86de1dca Mon Sep 17 00:00:00 2001 From: Sven <40953353+RetroSven@users.noreply.github.com> Date: Wed, 10 Oct 2018 09:15:46 -0400 Subject: [PATCH 40/42] fix new rumble types ; increase max displayed cheats to 6000 --- libretro-common/file/config_file.c | 49 +++--- libretro-common/include/file/config_file.h | 13 ++ managers/cheat_manager.c | 190 ++++++++++++--------- managers/cheat_manager.h | 5 +- menu/menu_driver.h | 2 +- menu/menu_setting.c | 2 +- 6 files changed, 159 insertions(+), 102 deletions(-) diff --git a/libretro-common/file/config_file.c b/libretro-common/file/config_file.c index 0a63e7781a..7dd671b662 100644 --- a/libretro-common/file/config_file.c +++ b/libretro-common/file/config_file.c @@ -66,7 +66,7 @@ struct config_include_list }; static config_file_t *config_file_new_internal( - const char *path, unsigned depth); + const char *path, unsigned depth, config_file_cb_t *cb); static int config_sort_compare_func(struct config_entry_list *a, struct config_entry_list *b) @@ -267,7 +267,7 @@ static void add_child_list(config_file_t *parent, config_file_t *child) parent->tail = NULL; } -static void add_sub_conf(config_file_t *conf, char *path) +static void add_sub_conf(config_file_t *conf, char *path, config_file_cb_t *cb) { char real_path[PATH_MAX_LENGTH]; config_file_t *sub_conf = NULL; @@ -314,7 +314,7 @@ static void add_sub_conf(config_file_t *conf, char *path) #endif sub_conf = (config_file_t*) - config_file_new_internal(real_path, conf->include_depth + 1); + config_file_new_internal(real_path, conf->include_depth + 1, cb); if (!sub_conf) return; @@ -324,7 +324,7 @@ static void add_sub_conf(config_file_t *conf, char *path) } static bool parse_line(config_file_t *conf, - struct config_entry_list *list, char *line) + struct config_entry_list *list, char *line, config_file_cb_t *cb) { char *comment = NULL; char *key_tmp = NULL; @@ -351,7 +351,7 @@ static bool parse_line(config_file_t *conf, if (conf->include_depth >= MAX_INCLUDE_DEPTH) fprintf(stderr, "!!! #include depth exceeded for config. Might be a cycle.\n"); else - add_sub_conf(conf, path); + add_sub_conf(conf, path, cb); free(path); } goto error; @@ -396,18 +396,19 @@ error: } static config_file_t *config_file_new_internal( - const char *path, unsigned depth) + const char *path, unsigned depth, config_file_cb_t *cb) { RFILE *file = NULL; struct config_file *conf = (struct config_file*)malloc(sizeof(*conf)); if (!conf) return NULL; - conf->path = NULL; - conf->entries = NULL; - conf->tail = NULL; - conf->includes = NULL; - conf->include_depth = 0; + conf->path = NULL; + conf->entries = NULL; + conf->tail = NULL; + conf->includes = NULL; + conf->include_depth = 0; + conf->guaranteed_no_duplicates = false ; if (!path || !*path) return conf; @@ -455,7 +456,7 @@ static config_file_t *config_file_new_internal( continue; } - if (*line && parse_line(conf, list, line)) + if (*line && parse_line(conf, list, line, cb)) { if (conf->entries) conf->tail->next = list; @@ -463,6 +464,9 @@ static config_file_t *config_file_new_internal( conf->entries = list; conf->tail = list; + + if (cb != NULL && list->key != NULL && list->value != NULL) + cb->config_file_new_entry_cb(list->key, list->value) ; } free(line); @@ -551,11 +555,12 @@ config_file_t *config_file_new_from_string(const char *from_string) if (!from_string) return conf; - conf->path = NULL; - conf->entries = NULL; - conf->tail = NULL; - conf->includes = NULL; - conf->include_depth = 0; + conf->path = NULL; + conf->entries = NULL; + conf->tail = NULL; + conf->includes = NULL; + conf->include_depth = 0; + conf->guaranteed_no_duplicates = false ; lines = string_split(from_string, "\n"); if (!lines) @@ -580,7 +585,7 @@ config_file_t *config_file_new_from_string(const char *from_string) if (line && conf) { - if (*line && parse_line(conf, list, line)) + if (*line && parse_line(conf, list, line, NULL)) { if (conf->entries) conf->tail->next = list; @@ -600,9 +605,13 @@ config_file_t *config_file_new_from_string(const char *from_string) return conf; } +config_file_t *config_file_new_with_callback(const char *path, config_file_cb_t *cb) +{ + return config_file_new_internal(path, 0, cb); +} config_file_t *config_file_new(const char *path) { - return config_file_new_internal(path, 0); + return config_file_new_internal(path, 0, NULL); } static struct config_entry_list *config_get_entry(const config_file_t *conf, @@ -834,7 +843,7 @@ bool config_get_bool(config_file_t *conf, const char *key, bool *in) void config_set_string(config_file_t *conf, const char *key, const char *val) { struct config_entry_list *last = conf->entries; - struct config_entry_list *entry = config_get_entry(conf, key, &last); + struct config_entry_list *entry = conf->guaranteed_no_duplicates?NULL:config_get_entry(conf, key, &last); if (entry && !entry->readonly) { diff --git a/libretro-common/include/file/config_file.h b/libretro-common/include/file/config_file.h index 97fca031a3..e55430472d 100644 --- a/libretro-common/include/file/config_file.h +++ b/libretro-common/include/file/config_file.h @@ -58,6 +58,7 @@ struct config_file struct config_entry_list *entries; struct config_entry_list *tail; unsigned include_depth; + bool guaranteed_no_duplicates; struct config_include_list *includes; }; @@ -65,6 +66,13 @@ struct config_file typedef struct config_file config_file_t; +struct config_file_cb +{ + void (*config_file_new_entry_cb)(char*, char*); +}; + +typedef struct config_file_cb config_file_cb_t ; + /* Config file format * - # are treated as comments. Rest of the line is ignored. * - Format is: key = value. There can be as many spaces as you like in-between. @@ -79,6 +87,11 @@ typedef struct config_file config_file_t; * NULL path will create an empty config file. */ config_file_t *config_file_new(const char *path); +/* Loads a config file. Returns NULL if file doesn't exist. + * NULL path will create an empty config file. + * Includes cb callbacks to run custom code during config file processing.*/ +config_file_t *config_file_new_with_callback(const char *path, config_file_cb_t *cb); + /* Load a config file from a string. */ config_file_t *config_file_new_from_string(const char *from_string); diff --git a/managers/cheat_manager.c b/managers/cheat_manager.c index 73971f69d2..d6cc891414 100644 --- a/managers/cheat_manager.c +++ b/managers/cheat_manager.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -171,6 +172,8 @@ bool cheat_manager_save(const char *path, const char *cheat_database, bool overw if (!conf) return false; + conf->guaranteed_no_duplicates = true ; + config_set_int(conf, "cheats", cheat_manager_state.size); for (i = 0; i < cheat_manager_state.size; i++) @@ -303,39 +306,118 @@ static void cheat_manager_new(unsigned size) return ; } +void cheat_manager_load_cb_first_pass(char *key, char *value) +{ + errno = 0 ; + + if (string_is_equal(key, "cheats")) + { + cheat_manager_state.loading_cheat_size = (unsigned)strtoul(value, NULL, 0); + + if (errno != 0) + cheat_manager_state.loading_cheat_size = 0 ; + } +} + +void cheat_manager_load_cb_second_pass(char *key, char *value) +{ + char cheat_num_str[20] ; + unsigned cheat_num ; + unsigned cheat_idx ; + int idx = 0 ; + int key_length ; + errno = 0 ; + + if (strncmp(key, "cheat", 5) != 0) + return ; + + idx = 5 ; + key_length = strlen(key) ; + + while (idx < key_length && key[idx] >= '0' && key[idx] <= '9' && idx < 24) + { + cheat_num_str[idx-5] = key[idx] ; + idx++ ; + } + + cheat_num_str[idx-5] = '\0' ; + + cheat_num = (unsigned)strtoul(cheat_num_str, NULL, 0); ; + + if (cheat_num+cheat_manager_state.loading_cheat_offset >= cheat_manager_state.size) + return ; + + key = key+idx+1 ; + + cheat_idx = cheat_num+cheat_manager_state.loading_cheat_offset ; + + if (string_is_equal(key, "address")) + cheat_manager_state.cheats[cheat_idx].address = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "address_bit_position")) + cheat_manager_state.cheats[cheat_idx].address_mask = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "big_endian")) + cheat_manager_state.cheats[cheat_idx].big_endian = (string_is_equal(value,"true") || string_is_equal(value,"1")); + else if (string_is_equal(key, "cheat_type")) + cheat_manager_state.cheats[cheat_idx].cheat_type = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "code")) + cheat_manager_state.cheats[cheat_idx].code = strdup(value) ; + else if (string_is_equal(key, "desc")) + cheat_manager_state.cheats[cheat_idx].desc = strdup(value) ; + else if (string_is_equal(key, "enable")) + cheat_manager_state.cheats[cheat_idx].state = (string_is_equal(value,"true") || string_is_equal(value,"1")); + else if (string_is_equal(key, "handler")) + cheat_manager_state.cheats[cheat_idx].handler = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "memory_search_size")) + cheat_manager_state.cheats[cheat_idx].memory_search_size = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "repeat_add_to_address")) + cheat_manager_state.cheats[cheat_idx].repeat_add_to_address = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "repeat_add_to_value")) + cheat_manager_state.cheats[cheat_idx].repeat_add_to_value = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "repeat_count")) + cheat_manager_state.cheats[cheat_idx].repeat_count = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "rumble_port")) + cheat_manager_state.cheats[cheat_idx].rumble_port = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "rumble_primary_duration")) + cheat_manager_state.cheats[cheat_idx].rumble_primary_duration = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "rumble_primary_strength")) + cheat_manager_state.cheats[cheat_idx].rumble_primary_strength = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "rumble_secondary_duration")) + cheat_manager_state.cheats[cheat_idx].rumble_secondary_duration = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "rumble_secondary_strength")) + cheat_manager_state.cheats[cheat_idx].rumble_secondary_strength = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "rumble_type")) + cheat_manager_state.cheats[cheat_idx].rumble_type = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "rumble_value")) + cheat_manager_state.cheats[cheat_idx].rumble_value = (unsigned)strtoul(value, NULL, 0); + else if (string_is_equal(key, "value")) + cheat_manager_state.cheats[cheat_idx].value = (unsigned)strtoul(value, NULL, 0); + +} + bool cheat_manager_load(const char *path, bool append) { unsigned cheats = 0, i; - config_file_t *conf = config_file_new(path); + config_file_cb_t cb ; + cb.config_file_new_entry_cb = cheat_manager_load_cb_first_pass ; + config_file_t *conf = NULL ; unsigned orig_size ; - unsigned int* data_ptrs[16] = { NULL}; - char* keys[16] = { - "cheat%u_handler", - "cheat%u_memory_search_size", - "cheat%u_cheat_type", - "cheat%u_value", - "cheat%u_address", - "cheat%u_address_bit_position", - "cheat%u_rumble_type", - "cheat%u_rumble_value", - "cheat%u_rumble_port", - "cheat%u_rumble_primary_strength", - "cheat%u_rumble_primary_duration", - "cheat%u_rumble_secondary_strength", - "cheat%u_rumble_secondary_duration", - "cheat%u_repeat_count", - "cheat%u_repeat_add_to_value", - "cheat%u_repeat_add_to_address", - }; + + cheat_manager_state.loading_cheat_size = 0 ; + + conf = config_file_new_with_callback(path, &cb); if (!conf) return false; - config_get_uint(conf, "cheats", &cheats); + cheats = cheat_manager_state.loading_cheat_size ; if (cheats == 0) goto error; + config_file_free(conf) ; + conf = NULL ; + + cheat_manager_alloc_if_empty() ; if ( append ) @@ -359,75 +441,25 @@ bool cheat_manager_load(const char *path, bool append) cheat_manager_new(cheats); } + for (i = orig_size; i < cheats; i++) { - unsigned j; - char desc_key[256]; - char code_key[256]; - char enable_key[256]; - char endian_key[256]; - char *tmp = NULL; - bool tmp_bool = false; - - data_ptrs[0] = &cheat_manager_state.cheats[i].handler; - data_ptrs[1] = &cheat_manager_state.cheats[i].memory_search_size; - data_ptrs[2] = &cheat_manager_state.cheats[i].cheat_type; - data_ptrs[3] = &cheat_manager_state.cheats[i].value; - data_ptrs[4] = &cheat_manager_state.cheats[i].address; - data_ptrs[5] = &cheat_manager_state.cheats[i].address_mask; - data_ptrs[6] = &cheat_manager_state.cheats[i].rumble_type; - data_ptrs[7] = &cheat_manager_state.cheats[i].rumble_value; - data_ptrs[8] = &cheat_manager_state.cheats[i].rumble_port; - data_ptrs[9] = &cheat_manager_state.cheats[i].rumble_primary_strength; - data_ptrs[10] = &cheat_manager_state.cheats[i].rumble_primary_duration; - data_ptrs[11] = &cheat_manager_state.cheats[i].rumble_secondary_strength; - data_ptrs[12] = &cheat_manager_state.cheats[i].rumble_secondary_duration; - data_ptrs[13] = &cheat_manager_state.cheats[i].repeat_count; - data_ptrs[14] = &cheat_manager_state.cheats[i].repeat_add_to_value; - data_ptrs[15] = &cheat_manager_state.cheats[i].repeat_add_to_address; - - endian_key[0] = desc_key[0] = code_key[0] = enable_key[0] = '\0'; - - snprintf(desc_key, sizeof(desc_key), "cheat%u_desc", i-orig_size); - snprintf(code_key, sizeof(code_key), "cheat%u_code", i-orig_size); - snprintf(enable_key, sizeof(enable_key), "cheat%u_enable", i-orig_size); - snprintf(endian_key, sizeof(endian_key), "cheat%u_endian", i-orig_size); - cheat_manager_state.cheats[i].idx = i ; - cheat_manager_state.cheats[i].desc = NULL ; cheat_manager_state.cheats[i].code = NULL ; cheat_manager_state.cheats[i].state = false ; cheat_manager_state.cheats[i].big_endian = false ; - - if (config_get_string(conf, desc_key, &tmp) && !string_is_empty(tmp)) - cheat_manager_state.cheats[i].desc = strdup(tmp) ; - - if (config_get_string(conf, code_key, &tmp) && !string_is_empty(tmp)) - cheat_manager_state.cheats[i].code = strdup(tmp) ; - - if (config_get_bool(conf, enable_key, &tmp_bool)) - cheat_manager_state.cheats[i].state = tmp_bool; - - if (config_get_bool(conf, endian_key, &tmp_bool)) - cheat_manager_state.cheats[i].big_endian = tmp_bool; - - if (tmp) - free(tmp); - cheat_manager_state.cheats[i].cheat_type = CHEAT_TYPE_SET_TO_VALUE ; cheat_manager_state.cheats[i].memory_search_size = 3; - for (j = 0 ; j < 16 ; j++ ) - { - char key[50] ; - unsigned val = 0; - snprintf(key, sizeof(key), keys[j], i-orig_size); - - if ( config_get_uint(conf, key, &val)) - *(data_ptrs[j]) = val ; - } } + cheat_manager_state.loading_cheat_offset = orig_size ; + cb.config_file_new_entry_cb = cheat_manager_load_cb_second_pass ; + conf = config_file_new_with_callback(path, &cb); + + if (!conf) + return false; + config_file_free(conf); return true; diff --git a/managers/cheat_manager.h b/managers/cheat_manager.h index 917ea711b8..1e0737bcbc 100644 --- a/managers/cheat_manager.h +++ b/managers/cheat_manager.h @@ -77,7 +77,8 @@ enum cheat_rumble_type RUMBLE_TYPE_LT_VALUE, RUMBLE_TYPE_GT_VALUE, RUMBLE_TYPE_INCREASE_BY_VALUE, - RUMBLE_TYPE_DECREASE_BY_VALUE + RUMBLE_TYPE_DECREASE_BY_VALUE, + RUMBLE_TYPE_END_LIST }; /* Some codes are ridiculously large - over 10000 bytes */ @@ -178,6 +179,8 @@ struct cheat_manager unsigned browse_address; char working_desc[CHEAT_DESC_SCRATCH_SIZE] ; char working_code[CHEAT_CODE_SCRATCH_SIZE] ; + unsigned int loading_cheat_size; + unsigned int loading_cheat_offset; }; typedef struct cheat_manager cheat_manager_t; diff --git a/menu/menu_driver.h b/menu/menu_driver.h index a48402c62b..d103367302 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -45,7 +45,7 @@ RETRO_BEGIN_DECLS #endif #ifndef MAX_CHEAT_COUNTERS -#define MAX_CHEAT_COUNTERS 100 +#define MAX_CHEAT_COUNTERS 6000 #endif #define MENU_SETTINGS_CORE_INFO_NONE 0xffff diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 1a4d06d20f..7c5dff5bf6 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -4670,7 +4670,7 @@ static bool setting_append_list( config_uint_cbs(cheat_manager_state.working_cheat.rumble_type, CHEAT_RUMBLE_TYPE, setting_uint_action_left_default,setting_uint_action_right_default, MENU_ENUM_LABEL_RUMBLE_TYPE_DISABLED,&setting_get_string_representation_uint_as_enum, - RUMBLE_TYPE_DISABLED,RUMBLE_TYPE_GT_VALUE,1) ; + RUMBLE_TYPE_DISABLED,RUMBLE_TYPE_END_LIST-1,1) ; (*list)[list_info->index - 1].action_ok = &setting_action_ok_uint; config_uint_cbs(cheat_manager_state.working_cheat.rumble_value, CHEAT_RUMBLE_VALUE, From b9699f4780ff85896cabecec33dd4ea25cf85470 Mon Sep 17 00:00:00 2001 From: Brad Parker Date: Wed, 10 Oct 2018 09:58:49 -0400 Subject: [PATCH 41/42] gdi: texture load support, fix menu text alignment, support multi-line messages --- gfx/common/gdi_common.h | 14 ++++ gfx/common/win32_common.c | 8 +- gfx/drivers/gdi_gfx.c | 66 +++++++++++++++- gfx/drivers_font/gdi_font.c | 100 ++++++++++++++++++------ menu/drivers_display/menu_display_gdi.c | 62 ++++++++++++++- 5 files changed, 218 insertions(+), 32 deletions(-) diff --git a/gfx/common/gdi_common.h b/gfx/common/gdi_common.h index 0f0b971018..ddb33b3fb3 100644 --- a/gfx/common/gdi_common.h +++ b/gfx/common/gdi_common.h @@ -27,6 +27,7 @@ typedef struct gdi #endif HDC winDC; HDC memDC; + HDC texDC; HBITMAP bmp; HBITMAP bmp_old; unsigned video_width; @@ -35,4 +36,17 @@ typedef struct gdi unsigned screen_height; } gdi_t; +typedef struct gdi_texture +{ + int width; + int height; + int active_width; + int active_height; + + enum texture_filter_type type; + void* data; + HBITMAP bmp; + HBITMAP bmp_old; +} gdi_texture_t; + #endif diff --git a/gfx/common/win32_common.c b/gfx/common/win32_common.c index 69f82746f6..b580a1bcb0 100644 --- a/gfx/common/win32_common.c +++ b/gfx/common/win32_common.c @@ -837,18 +837,18 @@ LRESULT CALLBACK WndProcGDI(HWND hwnd, UINT message, /* draw menu contents behind a gradient background */ if (gdi && gdi->memDC) { - RECT rect; + /*RECT rect; HBRUSH brush = CreateSolidBrush(RGB(1,81,127)); - GetClientRect(hwnd, &rect); + GetClientRect(hwnd, &rect);*/ StretchBlt(gdi->winDC, 0, 0, gdi->screen_width, gdi->screen_height, gdi->memDC, 0, 0, gdi->video_width, gdi->video_height, SRCCOPY); - FillRect(gdi->memDC, &rect, brush); - DeleteObject(brush); + /*FillRect(gdi->memDC, &rect, brush); + DeleteObject(brush);*/ } } else diff --git a/gfx/drivers/gdi_gfx.c b/gfx/drivers/gdi_gfx.c index dae5a1b091..6b820c1e18 100644 --- a/gfx/drivers/gdi_gfx.c +++ b/gfx/drivers/gdi_gfx.c @@ -16,6 +16,7 @@ */ #include +#include #ifdef HAVE_CONFIG_H #include "../../config.h" @@ -192,6 +193,9 @@ static bool gdi_gfx_frame(void *data, const void *frame, HWND hwnd = win32_get_window(); BITMAPINFO *info; + /* FIXME */ + video_info->xmb_shadows_enable = false; + if (!frame || !frame_width || !frame_height) return true; @@ -414,9 +418,16 @@ static void gdi_gfx_free(void *data) if (!gdi) return; + if (gdi->bmp) + DeleteObject(gdi->bmp); + + if (gdi->texDC) + { + DeleteDC(gdi->texDC); + gdi->texDC = 0; + } if (gdi->memDC) { - DeleteObject(gdi->bmp); DeleteDC(gdi->memDC); gdi->memDC = 0; } @@ -532,12 +543,61 @@ static void gdi_set_video_mode(void *data, unsigned width, unsigned height, video_context_driver_set_video_mode(&mode); } +static uintptr_t gdi_load_texture(void *video_data, void *data, + bool threaded, enum texture_filter_type filter_type) +{ + struct texture_image *image = (struct texture_image*)data; + int size = image->width * image->height * sizeof(uint32_t); + gdi_texture_t *texture = NULL; + void *tmpdata = NULL; + + if (!image || image->width > 2048 || image->height > 2048) + return 0; + + texture = calloc(1, sizeof(*texture)); + texture->width = image->width; + texture->height = image->height; + texture->active_width = image->width; + texture->active_height = image->height; + texture->data = calloc(1, texture->width * texture->height * sizeof(uint32_t)); + texture->type = filter_type; + + if (!texture->data) + { + free(texture); + return 0; + } + + memcpy(texture->data, image->pixels, texture->width * texture->height * sizeof(uint32_t)); + + return (uintptr_t)texture; +} + +static void gdi_unload_texture(void *data, uintptr_t handle) +{ + struct gdi_texture *texture = (struct gdi_texture*)handle; + + if (!texture) + return; + + if (texture->data) + free(texture->data); + + if (texture->bmp) + { + DeleteObject(texture->bmp); + texture->bmp = NULL; + } + + free(texture); +} + static const video_poke_interface_t gdi_poke_interface = { NULL, /* get_flags */ NULL, /* set_coords */ NULL, /* set_mvp */ - NULL, - NULL, + gdi_load_texture, + gdi_unload_texture, gdi_set_video_mode, win32_get_refresh_rate, NULL, diff --git a/gfx/drivers_font/gdi_font.c b/gfx/drivers_font/gdi_font.c index 1c37ddd5ed..090ab9c9d8 100644 --- a/gfx/drivers_font/gdi_font.c +++ b/gfx/drivers_font/gdi_font.c @@ -18,6 +18,7 @@ #include #include #include +#include #ifdef HAVE_CONFIG_H #include "../../config.h" @@ -85,65 +86,116 @@ static void gdi_render_msg( void *data, const char *msg, const struct font_params *params) { - float x, y, scale; - unsigned newX, newY, len; + float x, y, scale, drop_mod, alpha, drop_alpha; + int i, drop_x, drop_y, msg_strlen; + unsigned newX, newY, newDropX, newDropY; unsigned align; - unsigned red; - unsigned green; - unsigned blue; + unsigned red, green, blue; + unsigned drop_red, drop_green, drop_blue; gdi_raster_t *font = (gdi_raster_t*)data; unsigned width = video_info->width; unsigned height = video_info->height; + SIZE textSize = {0}; + struct string_list *msg_list = NULL; if (!font || string_is_empty(msg) || !font->gdi) return; if (params) { - x = params->x; - y = params->y; - scale = params->scale; - align = params->text_align; + x = params->x; + y = params->y; + drop_x = params->drop_x; + drop_y = params->drop_y; + drop_mod = params->drop_mod; + drop_alpha = params->drop_alpha; + scale = params->scale; + align = params->text_align; - red = FONT_COLOR_GET_RED(params->color); - green = FONT_COLOR_GET_GREEN(params->color); - blue = FONT_COLOR_GET_BLUE(params->color); + red = FONT_COLOR_GET_RED(params->color); + green = FONT_COLOR_GET_GREEN(params->color); + blue = FONT_COLOR_GET_BLUE(params->color); + alpha = FONT_COLOR_GET_ALPHA(params->color); } else { - x = video_info->font_msg_pos_x; - y = video_info->font_msg_pos_y; - scale = 1.0f; - align = TEXT_ALIGN_LEFT; - red = video_info->font_msg_color_r * 255.0f; - green = video_info->font_msg_color_g * 255.0f; - blue = video_info->font_msg_color_b * 255.0f; + x = video_info->font_msg_pos_x; + y = video_info->font_msg_pos_y; + drop_x = -2; + drop_y = -2; + drop_mod = 0.3f; + drop_alpha = 1.0f; + scale = 1.0f; + align = TEXT_ALIGN_LEFT; + red = video_info->font_msg_color_r * 255.0f; + green = video_info->font_msg_color_g * 255.0f; + blue = video_info->font_msg_color_b * 255.0f; + alpha = 255; } - len = utf8len(msg); + msg_strlen = strlen(msg); + + GetTextExtentPoint32(font->gdi->memDC, msg, msg_strlen, &textSize); switch (align) { case TEXT_ALIGN_LEFT: newX = x * width * scale; + newDropX = drop_x * width * scale; break; case TEXT_ALIGN_RIGHT: - newX = (x * width * scale) - len; + newX = (x * width * scale) - textSize.cx; + newDropX = (drop_x * width * scale) - textSize.cx; break; case TEXT_ALIGN_CENTER: - newX = (x * width * scale) - (len / 2); + newX = (x * width * scale) - (textSize.cx / 2); + newDropX = (drop_x * width * scale) - (textSize.cx / 2); break; default: newX = 0; + newDropX = 0; break; } - newY = height - (y * height * scale); + newY = height - (y * height * scale) - textSize.cy; + newDropY = height - (drop_y * height * scale) - textSize.cy; font->gdi->bmp_old = (HBITMAP)SelectObject(font->gdi->memDC, font->gdi->bmp); + SetBkMode(font->gdi->memDC, TRANSPARENT); + + msg_list = string_split(msg, "\n"); + + if (drop_x || drop_y) + { + float dark_alpha = drop_alpha; + drop_red = red * drop_mod * dark_alpha; + drop_green = green * drop_mod * dark_alpha; + drop_blue = blue * drop_mod * dark_alpha; + + SetTextColor(font->gdi->memDC, RGB(drop_red, drop_green, drop_blue)); + + if (msg_list) + { + for (i = 0; i < msg_list->size; i++) + { + TextOut(font->gdi->memDC, newDropX, newDropY + (textSize.cy * i), msg_list->elems[i].data, utf8len(msg_list->elems[i].data)); + } + } + } + SetTextColor(font->gdi->memDC, RGB(red, green, blue)); - TextOut(font->gdi->memDC, newX, newY, msg, len); + + if (msg_list) + { + for (i = 0; i < msg_list->size; i++) + { + TextOut(font->gdi->memDC, newX, newY + (textSize.cy * i), msg_list->elems[i].data, utf8len(msg_list->elems[i].data)); + } + + string_list_free(msg_list); + } + SelectObject(font->gdi->memDC, font->gdi->bmp_old); } diff --git a/menu/drivers_display/menu_display_gdi.c b/menu/drivers_display/menu_display_gdi.c index 95e41b7b28..552404b069 100644 --- a/menu/drivers_display/menu_display_gdi.c +++ b/menu/drivers_display/menu_display_gdi.c @@ -16,17 +16,20 @@ #include +#include #include #include #include "../../config.def.h" #include "../../gfx/font_driver.h" #include "../../gfx/video_driver.h" +#include "../../verbosity.h" #include "../menu_driver.h" #if defined(_WIN32) && !defined(_XBOX) #include "../../gfx/common/win32_common.h" +#include "../../gfx/common/gdi_common.h" #endif static void *menu_display_gdi_get_default_mvp(video_frame_info_t *video_info) @@ -45,6 +48,63 @@ static void menu_display_gdi_blend_end(video_frame_info_t *video_info) static void menu_display_gdi_draw(menu_display_ctx_draw_t *draw, video_frame_info_t *video_info) { + struct gdi_texture *texture = NULL; + gdi_t *gdi = (gdi_t*)video_driver_get_ptr(false); + BITMAPINFO info = {0}; + + if (!gdi || !draw || draw->x < 0 || draw->y < 0 || draw->width <= 1 || draw->height <= 1) + return; + + texture = (struct gdi_texture*)draw->texture; + + if (!texture || texture->width <= 1 || texture->height <= 1) + return; + + info.bmiHeader.biBitCount = 32; + info.bmiHeader.biWidth = texture->width; + info.bmiHeader.biHeight = -texture->height; + info.bmiHeader.biPlanes = 1; + info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + info.bmiHeader.biSizeImage = 0; + info.bmiHeader.biCompression = BI_RGB; + + if (gdi->memDC) + { + BLENDFUNCTION blend = {0}; + + if (!gdi->texDC) + gdi->texDC = CreateCompatibleDC(gdi->winDC); + + if (texture->bmp) + { + texture->bmp_old = SelectObject(gdi->texDC, texture->bmp); + } + else + { + /* scale texture data into a bitmap we can easily blit later */ + texture->bmp = CreateCompatibleBitmap(gdi->winDC, draw->width, draw->height); + texture->bmp_old = SelectObject(gdi->texDC, texture->bmp); + + StretchDIBits(gdi->texDC, 0, 0, draw->width, draw->height, 0, 0, texture->width, texture->height, texture->data, &info, DIB_RGB_COLORS, SRCCOPY); + } + + gdi->bmp_old = SelectObject(gdi->memDC, gdi->bmp); + + blend.BlendOp = AC_SRC_OVER; + blend.BlendFlags = 0; + blend.SourceConstantAlpha = 255;/*clamp_8bit(draw->coords->color[3] * 255.0f);*/ + blend.AlphaFormat = AC_SRC_ALPHA; + + AlphaBlend(gdi->memDC, draw->x, video_info->height - draw->height - draw->y, draw->width, draw->height, gdi->texDC, 0, 0, draw->width, draw->height, blend); + + /*TransparentBlt(gdi->memDC, draw->x, video_info->height - draw->height - draw->y, draw->width, draw->height, gdi->texDC, 0, 0, draw->width, draw->height, 0);*/ + + /* To draw without blending: */ + /*StretchBlt(gdi->memDC, draw->x, video_info->height - draw->height - draw->y, draw->width, draw->height, gdi->texDC, 0, 0, draw->width, draw->height, SRCCOPY);*/ + + SelectObject(gdi->memDC, gdi->bmp_old); + SelectObject(gdi->texDC, texture->bmp_old); + } } static void menu_display_gdi_draw_pipeline(menu_display_ctx_draw_t *draw, @@ -80,7 +140,7 @@ static bool menu_display_gdi_font_init_first( font_path, font_size, true, is_threaded, FONT_DRIVER_RENDER_GDI))) - return false; + return false; return true; } From 04cc18177181d1e022e6e353a9d11bd537d96966 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 10 Oct 2018 16:18:29 +0200 Subject: [PATCH 42/42] Cleanups --- gfx/drivers_font/gdi_font.c | 7 ++----- managers/cheat_manager.c | 7 ++++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/gfx/drivers_font/gdi_font.c b/gfx/drivers_font/gdi_font.c index 090ab9c9d8..2cb7e0e981 100644 --- a/gfx/drivers_font/gdi_font.c +++ b/gfx/drivers_font/gdi_font.c @@ -87,7 +87,8 @@ static void gdi_render_msg( const struct font_params *params) { float x, y, scale, drop_mod, alpha, drop_alpha; - int i, drop_x, drop_y, msg_strlen; + int drop_x, drop_y, msg_strlen; + unsigned i; unsigned newX, newY, newDropX, newDropY; unsigned align; unsigned red, green, blue; @@ -178,9 +179,7 @@ static void gdi_render_msg( if (msg_list) { for (i = 0; i < msg_list->size; i++) - { TextOut(font->gdi->memDC, newDropX, newDropY + (textSize.cy * i), msg_list->elems[i].data, utf8len(msg_list->elems[i].data)); - } } } @@ -189,9 +188,7 @@ static void gdi_render_msg( if (msg_list) { for (i = 0; i < msg_list->size; i++) - { TextOut(font->gdi->memDC, newX, newY + (textSize.cy * i), msg_list->elems[i].data, utf8len(msg_list->elems[i].data)); - } string_list_free(msg_list); } diff --git a/managers/cheat_manager.c b/managers/cheat_manager.c index d6cc891414..5a58463b6b 100644 --- a/managers/cheat_manager.c +++ b/managers/cheat_manager.c @@ -396,11 +396,12 @@ void cheat_manager_load_cb_second_pass(char *key, char *value) bool cheat_manager_load(const char *path, bool append) { + unsigned orig_size; unsigned cheats = 0, i; - config_file_cb_t cb ; + config_file_cb_t cb; + config_file_t *conf = NULL; + cb.config_file_new_entry_cb = cheat_manager_load_cb_first_pass ; - config_file_t *conf = NULL ; - unsigned orig_size ; cheat_manager_state.loading_cheat_size = 0 ;