提交 9e476134 编写于 作者: J jp9000

UI: Fix a case where output res. stays invalid

If the base resolution is set to an invalid resolution, it would cause
the output resolution to automatically change to an invalid resolution.
After the invalid resolution was set for the output resolution, it would
stay at that invalid resolution.

This fixes it so it always tries to find the output resolution closest
to what was last actually set or actually edited.
上级 9b5ac1fb
......@@ -829,8 +829,7 @@ static const double vals[] =
static const size_t numVals = sizeof(vals)/sizeof(double);
void OBSBasicSettings::ResetDownscales(uint32_t cx, uint32_t cy,
uint32_t out_cx, uint32_t out_cy)
void OBSBasicSettings::ResetDownscales(uint32_t cx, uint32_t cy)
{
QString advRescale;
QString advRecRescale;
......@@ -838,11 +837,14 @@ void OBSBasicSettings::ResetDownscales(uint32_t cx, uint32_t cy,
QString oldOutputRes;
string bestScale;
int bestPixelDiff = 0x7FFFFFFF;
uint32_t out_cx = outputCX;
uint32_t out_cy = outputCY;
advRescale = ui->advOutRescale->lineEdit()->text();
advRecRescale = ui->advOutRecRescale->lineEdit()->text();
advFFRescale = ui->advOutFFRescale->lineEdit()->text();
oldOutputRes = ui->outputResolution->lineEdit()->text();
ui->outputResolution->blockSignals(true);
ui->outputResolution->clear();
ui->advOutRescale->clear();
......@@ -852,6 +854,10 @@ void OBSBasicSettings::ResetDownscales(uint32_t cx, uint32_t cy,
if (!out_cx || !out_cy) {
out_cx = cx;
out_cy = cy;
oldOutputRes = ui->baseResolution->lineEdit()->text();
} else {
oldOutputRes = QString::number(out_cx) + "x" +
QString::number(out_cy);
}
for (size_t idx = 0; idx < numVals; idx++) {
......@@ -894,6 +900,8 @@ void OBSBasicSettings::ResetDownscales(uint32_t cx, uint32_t cy,
else
ui->outputResolution->lineEdit()->setText(bestScale.c_str());
ui->outputResolution->blockSignals(false);
if (advRescale.isEmpty())
advRescale = res.c_str();
if (advRecRescale.isEmpty())
......@@ -946,11 +954,14 @@ void OBSBasicSettings::LoadResolutionLists()
ui->baseResolution->addItem(res.c_str());
}
ResetDownscales(cx, cy, out_cx, out_cy);
string outputResString = ResString(out_cx, out_cy);
ui->baseResolution->lineEdit()->setText(ResString(cx, cy).c_str());
ui->outputResolution->lineEdit()->setText(
ResString(out_cx, out_cy).c_str());
RecalcOutputResPixels(outputResString.c_str());
ResetDownscales(cx, cy);
ui->outputResolution->lineEdit()->setText(outputResString.c_str());
}
static inline void LoadFPSCommon(OBSBasic *main, Ui::OBSBasicSettings *ui)
......@@ -2617,18 +2628,32 @@ static bool ValidResolutions(Ui::OBSBasicSettings *ui)
return true;
}
void OBSBasicSettings::RecalcOutputResPixels(const char *resText)
{
uint32_t newCX;
uint32_t newCY;
ConvertResText(resText, newCX, newCY);
if (newCX && newCY) {
outputCX = newCX;
outputCY = newCY;
}
}
void OBSBasicSettings::on_outputResolution_editTextChanged(const QString &text)
{
if (!loading)
RecalcOutputResPixels(QT_TO_UTF8(text));
}
void OBSBasicSettings::on_baseResolution_editTextChanged(const QString &text)
{
if (!loading && ValidResolutions(ui.get())) {
QString baseResolution = text;
uint32_t cx, cy, out_cx, out_cy;
uint32_t cx, cy;
ConvertResText(QT_TO_UTF8(baseResolution), cx, cy);
QString outRes = ui->outputResolution->lineEdit()->text();
ConvertResText(QT_TO_UTF8(outRes), out_cx, out_cy);
ResetDownscales(cx, cy, out_cx, out_cy);
ResetDownscales(cx, cy);
}
}
......
......@@ -121,6 +121,9 @@ private:
OBSSignal hotkeyRegistered;
OBSSignal hotkeyUnregistered;
uint32_t outputCX = 0;
uint32_t outputCY = 0;
void SaveCombo(QComboBox *widget, const char *section,
const char *value);
void SaveComboData(QComboBox *widget, const char *section,
......@@ -210,8 +213,7 @@ private:
/* video */
void LoadRendererList();
void ResetDownscales(uint32_t cx, uint32_t cy,
uint32_t out_cx, uint32_t out_cy);
void ResetDownscales(uint32_t cx, uint32_t cy);
void LoadDownscaleFilters();
void LoadResolutionLists();
void LoadFPSData();
......@@ -230,6 +232,8 @@ private:
void FillSimpleRecordingValues();
void RecalcOutputResPixels(const char *resText);
private slots:
void on_theme_activated(int idx);
......@@ -249,6 +253,7 @@ private slots:
void on_colorFormat_currentIndexChanged(const QString &text);
void on_outputResolution_editTextChanged(const QString &text);
void on_baseResolution_editTextChanged(const QString &text);
void GeneralChanged();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册