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.
master
jp9000 2016-01-25 05:25:16 -08:00
parent 9b5ac1fbd2
commit 9e4761347d
2 changed files with 44 additions and 14 deletions

View File

@ -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);
}
}

View File

@ -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();