1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-28 08:48:48 +02:00

Implemented UI scaling option in Launcher

This commit is contained in:
Ivan Savenko 2023-06-29 19:52:25 +03:00
parent 8efa7911b7
commit aa5a32f9c4
2 changed files with 41 additions and 1 deletions

View File

@ -79,6 +79,8 @@ void CSettingsView::loadSettings()
else
ui->comboBoxFullScreen->setCurrentIndex(settings["video"]["fullscreen"].Bool());
#endif
fillValidScalingRange();
ui->spinBoxInterfaceScaling->setValue(settings["video"]["resolution"]["scaling"].Float());
ui->comboBoxFriendlyAI->setCurrentText(QString::fromStdString(settings["server"]["friendlyAI"].String()));
@ -151,6 +153,39 @@ static QVector<QSize> findAvailableResolutions(int displayIndex)
return result;
}
QSize CSettingsView::getPreferredRenderingResolution()
{
#ifndef VCMI_MOBILE
bool fullscreen = settings["video"]["fullscreen"].Bool();
bool realFullscreen = settings["video"]["realFullscreen"].Bool();
if (!fullscreen || realFullscreen)
{
int resX = settings["video"]["resolution"]["width"].Integer();
int resY = settings["video"]["resolution"]["height"].Integer();
return QSize(resX, resY);
}
#endif
return QApplication::primaryScreen()->geometry().size();
}
void CSettingsView::fillValidScalingRange()
{
//FIXME: this code is copy of ScreenHandler::getSupportedScalingRange
// H3 resolution, any resolution smaller than that is not correctly supported
static const QSize minResolution = {800, 600};
// arbitrary limit on *downscaling*. Allow some downscaling, if requested by user. Should be generally limited to 100+ for all but few devices
static const double minimalScaling = 50;
QSize renderResolution = getPreferredRenderingResolution();
double maximalScalingWidth = 100.0 * renderResolution.width() / minResolution.width();
double maximalScalingHeight = 100.0 * renderResolution.height() / minResolution.height();
double maximalScaling = std::min(maximalScalingWidth, maximalScalingHeight);
ui->spinBoxInterfaceScaling->setRange(minimalScaling, maximalScaling);
}
void CSettingsView::fillValidResolutionsForScreen(int screenIndex)
{
ui->comboBoxResolution->blockSignals(true); // avoid saving wrong resolution after adding first item from the list
@ -195,7 +230,6 @@ CSettingsView::~CSettingsView()
delete ui;
}
void CSettingsView::on_comboBoxResolution_currentTextChanged(const QString & arg1)
{
QStringList list = arg1.split("x");
@ -203,6 +237,8 @@ void CSettingsView::on_comboBoxResolution_currentTextChanged(const QString & arg
Settings node = settings.write["video"]["resolution"];
node["width"].Float() = list[0].toInt();
node["height"].Float() = list[1].toInt();
fillValidScalingRange();
}
void CSettingsView::on_comboBoxFullScreen_currentIndexChanged(int index)
@ -211,6 +247,8 @@ void CSettingsView::on_comboBoxFullScreen_currentIndexChanged(int index)
Settings nodeRealFullscreen = settings.write["video"]["realFullscreen"];
nodeFullscreen->Bool() = (index != 0);
nodeRealFullscreen->Bool() = (index == 2);
fillValidScalingRange();
}
void CSettingsView::on_comboBoxAutoCheck_currentIndexChanged(int index)

View File

@ -67,4 +67,6 @@ private:
Ui::CSettingsView * ui;
void fillValidResolutionsForScreen(int screenIndex);
void fillValidScalingRange();
QSize getPreferredRenderingResolution();
};