mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-29 09:05:41 +00:00
Merge pull request #2907 from CeruleanSky/DisAlignSet
Expose Display Host Alignment as a setting in ini
This commit is contained in:
commit
c9cba5e220
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 ||
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Reference in a new issue