diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 14553ed708..c2e0de6390 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -10930,6 +10930,10 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_5_3_CENTRE, "5:3 (Centered)" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_AUTO, + "Auto" + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_LOCK_NONE, "OFF" diff --git a/menu/drivers/rgui.c b/menu/drivers/rgui.c index eda5ca396c..ac610898b0 100644 --- a/menu/drivers/rgui.c +++ b/menu/drivers/rgui.c @@ -5954,7 +5954,7 @@ static void rgui_update_menu_viewport( else { delta = (device_aspect / desired_aspect - 1.0f) / 2.0f + 0.5f; - rgui->menu_video_settings.viewport.height = (unsigned)(2.0 * vp.full_height * delta); + rgui->menu_video_settings.viewport.height = (unsigned)(2.0f * (float)vp.full_height * delta); rgui->menu_video_settings.viewport.width = vp.full_width; } #else @@ -6175,6 +6175,23 @@ static bool rgui_set_aspect_ratio( ( 4.0f / 3.0f) * (float)rgui->frame_buf.height); } break; + case RGUI_ASPECT_RATIO_AUTO: + { + /* Use 4:3 as base, and adjust width according to core geometry */ + video_driver_state_t *video_st = video_state_get_ptr(); + + if (rgui->frame_buf.height == 240) + rgui->frame_buf.width = 320; + else + rgui->frame_buf.width = RGUI_ROUND_FB_WIDTH( + (4.0f / 3.0f) * (float)rgui->frame_buf.height); + base_term_width = rgui->frame_buf.width; + + if (video_st && video_st->av_info.geometry.aspect_ratio > 0) + rgui->frame_buf.width = RGUI_ROUND_FB_WIDTH( + rgui->frame_buf.height * video_st->av_info.geometry.aspect_ratio); + } + break; default: /* 4:3 */ if (rgui->frame_buf.height == 240) @@ -7777,6 +7794,10 @@ static void rgui_toggle(void *userdata, bool menu_on) /* Apply menu video settings */ rgui_set_video_config(rgui, settings, &rgui->menu_video_settings, false); } + else if (rgui->menu_aspect_ratio == RGUI_ASPECT_RATIO_AUTO) + { + rgui_set_aspect_ratio(rgui, p_disp, false); + } } else { diff --git a/menu/menu_defines.h b/menu/menu_defines.h index 1a16682cb9..ba37b2f148 100644 --- a/menu/menu_defines.h +++ b/menu/menu_defines.h @@ -346,7 +346,7 @@ enum rgui_aspect_ratio RGUI_ASPECT_RATIO_3_2_CENTRE, RGUI_ASPECT_RATIO_5_3, RGUI_ASPECT_RATIO_5_3_CENTRE, - + RGUI_ASPECT_RATIO_AUTO, RGUI_ASPECT_RATIO_LAST }; diff --git a/menu/menu_setting.c b/menu/menu_setting.c index ad1466dbe1..5eaa5dc1b0 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -3945,6 +3945,12 @@ static void setting_get_string_representation_uint_rgui_aspect_ratio( MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_5_3_CENTRE), len); break; + case RGUI_ASPECT_RATIO_AUTO: + strlcpy(s, + msg_hash_to_str( + MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_AUTO), + len); + break; } } diff --git a/msg_hash.h b/msg_hash.h index dbbc4612f9..a9e57ab3d0 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -3513,7 +3513,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_3_2_CENTRE, MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_5_3, MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_5_3_CENTRE, - + MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_AUTO, MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_LOCK_NONE, MENU_ENUM_LABEL_VALUE_RGUI_ASPECT_RATIO_LOCK_FIT_SCREEN,