Merge pull request #2907 from CeruleanSky/DisAlignSet

Expose Display Host Alignment as a setting in ini
This commit is contained in:
Connor McLaughlin 2022-10-13 17:26:51 +10:00 committed by GitHub
commit c9cba5e220
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 56 additions and 8 deletions

View file

@ -233,18 +233,18 @@ void HostDisplay::CalculateDrawRect(s32 window_width, s32 window_height, float*
} }
if (out_top_padding) if (out_top_padding)
{ {
switch (m_display_alignment) switch (g_settings.display_alignment)
{ {
case Alignment::RightOrBottom: case DisplayAlignment::RightOrBottom:
*out_top_padding = std::max<float>(static_cast<float>(window_height) - (display_height * scale), 0.0f); *out_top_padding = std::max<float>(static_cast<float>(window_height) - (display_height * scale), 0.0f);
break; break;
case Alignment::Center: case DisplayAlignment::Center:
*out_top_padding = *out_top_padding =
std::max<float>((static_cast<float>(window_height) - (display_height * scale)) / 2.0f, 0.0f); std::max<float>((static_cast<float>(window_height) - (display_height * scale)) / 2.0f, 0.0f);
break; break;
case Alignment::LeftOrTop: case DisplayAlignment::LeftOrTop:
default: default:
*out_top_padding = 0.0f; *out_top_padding = 0.0f;
break; break;
@ -260,18 +260,18 @@ void HostDisplay::CalculateDrawRect(s32 window_width, s32 window_height, float*
if (out_left_padding) if (out_left_padding)
{ {
switch (m_display_alignment) switch (g_settings.display_alignment)
{ {
case Alignment::RightOrBottom: case DisplayAlignment::RightOrBottom:
*out_left_padding = std::max<float>(static_cast<float>(window_width) - (display_width * scale), 0.0f); *out_left_padding = std::max<float>(static_cast<float>(window_width) - (display_width * scale), 0.0f);
break; break;
case Alignment::Center: case DisplayAlignment::Center:
*out_left_padding = *out_left_padding =
std::max<float>((static_cast<float>(window_width) - (display_width * scale)) / 2.0f, 0.0f); std::max<float>((static_cast<float>(window_width) - (display_width * scale)) / 2.0f, 0.0f);
break; break;
case Alignment::LeftOrTop: case DisplayAlignment::LeftOrTop:
default: default:
*out_left_padding = 0.0f; *out_left_padding = 0.0f;
break; break;

View file

@ -242,6 +242,10 @@ void Settings::Load(SettingsInterface& si)
std::clamp<int>(si.GetIntValue("Display", "CustomAspectRatioNumerator", 4), 1, std::numeric_limits<u16>::max())); std::clamp<int>(si.GetIntValue("Display", "CustomAspectRatioNumerator", 4), 1, std::numeric_limits<u16>::max()));
display_aspect_ratio_custom_denominator = static_cast<u16>( display_aspect_ratio_custom_denominator = static_cast<u16>(
std::clamp<int>(si.GetIntValue("Display", "CustomAspectRatioDenominator", 3), 1, std::numeric_limits<u16>::max())); std::clamp<int>(si.GetIntValue("Display", "CustomAspectRatioDenominator", 3), 1, std::numeric_limits<u16>::max()));
display_alignment =
ParseDisplayAlignment(
si.GetStringValue("Display", "Alignment", GetDisplayAlignmentName(DEFAULT_DISPLAY_ALIGNMENT)).c_str())
.value_or(DEFAULT_DISPLAY_ALIGNMENT);
display_force_4_3_for_24bit = si.GetBoolValue("Display", "Force4_3For24Bit", false); display_force_4_3_for_24bit = si.GetBoolValue("Display", "Force4_3For24Bit", false);
display_active_start_offset = static_cast<s16>(si.GetIntValue("Display", "ActiveStartOffset", 0)); display_active_start_offset = static_cast<s16>(si.GetIntValue("Display", "ActiveStartOffset", 0));
display_active_end_offset = static_cast<s16>(si.GetIntValue("Display", "ActiveEndOffset", 0)); display_active_end_offset = static_cast<s16>(si.GetIntValue("Display", "ActiveEndOffset", 0));
@ -454,6 +458,7 @@ void Settings::Save(SettingsInterface& si) const
si.SetIntValue("Display", "LineEndOffset", display_line_end_offset); si.SetIntValue("Display", "LineEndOffset", display_line_end_offset);
si.SetBoolValue("Display", "Force4_3For24Bit", display_force_4_3_for_24bit); si.SetBoolValue("Display", "Force4_3For24Bit", display_force_4_3_for_24bit);
si.SetStringValue("Display", "AspectRatio", GetDisplayAspectRatioName(display_aspect_ratio)); si.SetStringValue("Display", "AspectRatio", GetDisplayAspectRatioName(display_aspect_ratio));
si.SetStringValue("Display", "Alignment", GetDisplayAlignmentName(display_alignment));
si.SetIntValue("Display", "CustomAspectRatioNumerator", display_aspect_ratio_custom_numerator); si.SetIntValue("Display", "CustomAspectRatioNumerator", display_aspect_ratio_custom_numerator);
si.GetIntValue("Display", "CustomAspectRatioDenominator", display_aspect_ratio_custom_denominator); si.GetIntValue("Display", "CustomAspectRatioDenominator", display_aspect_ratio_custom_denominator);
si.SetBoolValue("Display", "LinearFiltering", display_linear_filtering); si.SetBoolValue("Display", "LinearFiltering", display_linear_filtering);
@ -1046,6 +1051,35 @@ float Settings::GetDisplayAspectRatioValue() const
} }
} }
static std::array<const char*, 3> s_display_alignment_names = {{"LeftOrTop", "Center", "RightOrBottom"}};
static std::array<const char*, 3> s_display_alignment_display_names = {
{TRANSLATABLE("DisplayAlignment", "LeftOrTop"), TRANSLATABLE("DisplayAlignment", "Center"),
TRANSLATABLE("DisplayAlignment", "RightOrBottom")}};
std::optional<DisplayAlignment> Settings::ParseDisplayAlignment(const char* str)
{
int index = 0;
for (const char* name : s_display_alignment_names)
{
if (StringUtil::Strcasecmp(name, str) == 0)
return static_cast<DisplayAlignment>(index);
index++;
}
return std::nullopt;
}
const char* Settings::GetDisplayAlignmentName(DisplayAlignment alignment)
{
return s_display_alignment_names[static_cast<int>(alignment)];
}
const char* Settings::GetDisplayAlignmentDisplayName(DisplayAlignment alignment)
{
return s_display_alignment_display_names[static_cast<int>(alignment)];
}
static constexpr const char* s_audio_backend_names[] = { static constexpr const char* s_audio_backend_names[] = {
"Null", "Null",
#ifdef WITH_CUBEB #ifdef WITH_CUBEB

View file

@ -115,6 +115,7 @@ struct Settings
bool gpu_pgxp_depth_buffer = false; bool gpu_pgxp_depth_buffer = false;
DisplayCropMode display_crop_mode = DEFAULT_DISPLAY_CROP_MODE; DisplayCropMode display_crop_mode = DEFAULT_DISPLAY_CROP_MODE;
DisplayAspectRatio display_aspect_ratio = DEFAULT_DISPLAY_ASPECT_RATIO; DisplayAspectRatio display_aspect_ratio = DEFAULT_DISPLAY_ASPECT_RATIO;
DisplayAlignment display_alignment = DEFAULT_DISPLAY_ALIGNMENT;
u16 display_aspect_ratio_custom_numerator = 0; u16 display_aspect_ratio_custom_numerator = 0;
u16 display_aspect_ratio_custom_denominator = 0; u16 display_aspect_ratio_custom_denominator = 0;
s16 display_active_start_offset = 0; s16 display_active_start_offset = 0;
@ -359,6 +360,10 @@ struct Settings
static std::optional<DisplayAspectRatio> ParseDisplayAspectRatio(const char* str); static std::optional<DisplayAspectRatio> ParseDisplayAspectRatio(const char* str);
static const char* GetDisplayAspectRatioName(DisplayAspectRatio ar); static const char* GetDisplayAspectRatioName(DisplayAspectRatio ar);
static std::optional<DisplayAlignment> ParseDisplayAlignment(const char* str);
static const char* GetDisplayAlignmentName(DisplayAlignment alignment);
static const char* GetDisplayAlignmentDisplayName(DisplayAlignment alignment);
static std::optional<AudioBackend> ParseAudioBackend(const char* str); static std::optional<AudioBackend> ParseAudioBackend(const char* str);
static const char* GetAudioBackendName(AudioBackend backend); static const char* GetAudioBackendName(AudioBackend backend);
static const char* GetAudioBackendDisplayName(AudioBackend backend); static const char* GetAudioBackendDisplayName(AudioBackend backend);
@ -416,6 +421,7 @@ struct Settings
static constexpr DisplayCropMode DEFAULT_DISPLAY_CROP_MODE = DisplayCropMode::Overscan; static constexpr DisplayCropMode DEFAULT_DISPLAY_CROP_MODE = DisplayCropMode::Overscan;
static constexpr DisplayAspectRatio DEFAULT_DISPLAY_ASPECT_RATIO = DisplayAspectRatio::Auto; static constexpr DisplayAspectRatio DEFAULT_DISPLAY_ASPECT_RATIO = DisplayAspectRatio::Auto;
static constexpr DisplayAlignment DEFAULT_DISPLAY_ALIGNMENT = DisplayAlignment::Center;
static constexpr float DEFAULT_OSD_SCALE = 100.0f; static constexpr float DEFAULT_OSD_SCALE = 100.0f;
static constexpr u8 DEFAULT_CDROM_READAHEAD_SECTORS = 8; static constexpr u8 DEFAULT_CDROM_READAHEAD_SECTORS = 8;

View file

@ -3179,6 +3179,7 @@ void System::CheckForSettingsChanges(const Settings& old_settings)
g_settings.gpu_downsample_mode != old_settings.gpu_downsample_mode || g_settings.gpu_downsample_mode != old_settings.gpu_downsample_mode ||
g_settings.display_crop_mode != old_settings.display_crop_mode || g_settings.display_crop_mode != old_settings.display_crop_mode ||
g_settings.display_aspect_ratio != old_settings.display_aspect_ratio || g_settings.display_aspect_ratio != old_settings.display_aspect_ratio ||
g_settings.display_alignment != old_settings.display_alignment ||
g_settings.gpu_pgxp_enable != old_settings.gpu_pgxp_enable || g_settings.gpu_pgxp_enable != old_settings.gpu_pgxp_enable ||
g_settings.gpu_pgxp_texture_correction != old_settings.gpu_pgxp_texture_correction || g_settings.gpu_pgxp_texture_correction != old_settings.gpu_pgxp_texture_correction ||
g_settings.gpu_pgxp_color_correction != old_settings.gpu_pgxp_color_correction || g_settings.gpu_pgxp_color_correction != old_settings.gpu_pgxp_color_correction ||

View file

@ -109,6 +109,13 @@ enum class DisplayAspectRatio : u8
Count Count
}; };
enum class DisplayAlignment
{
LeftOrTop,
Center,
RightOrBottom
};
enum class AudioBackend : u8 enum class AudioBackend : u8
{ {
Null, Null,