Browse Source

UI: Apply minimum width to Stats fields

Helps prevent Stats dock from resizing OBS when long text is set.
jpark37 5 years ago
parent
commit
dbf318a388
1 changed files with 27 additions and 7 deletions
  1. 27 7
      UI/window-basic-stats.cpp

+ 27 - 7
UI/window-basic-stats.cpp

@@ -32,6 +32,22 @@ void OBSBasicStats::OBSFrontendEvent(enum obs_frontend_event event, void *ptr)
 	}
 }
 
+static QString MakeTimeLeftText(int hours, int minutes)
+{
+	return QString::asprintf("%d %s, %d %s", hours,
+				 QT_TO_UTF8(QTStr("Hours")), minutes,
+				 QT_TO_UTF8(QTStr("Minutes")));
+}
+
+static QString MakeMissedFramesText(uint32_t total_lagged,
+				    uint32_t total_rendered, long double num)
+{
+	return QString("%1 / %2 (%3%)")
+		.arg(QString::number(total_lagged),
+		     QString::number(total_rendered),
+		     QString::number(num, 'f', 1));
+}
+
 OBSBasicStats::OBSBasicStats(QWidget *parent, bool closeable)
 	: QWidget(parent),
 	  cpu_info(os_cpu_usage_info_start()),
@@ -65,6 +81,10 @@ OBSBasicStats::OBSBasicStats(QWidget *parent, bool closeable)
 	recordTimeLeft = new QLabel(this);
 	memUsage = new QLabel(this);
 
+	QString str = MakeTimeLeftText(99999, 59);
+	int textWidth = recordTimeLeft->fontMetrics().boundingRect(str).width();
+	recordTimeLeft->setMinimumWidth(textWidth);
+
 	newStat("CPUUsage", cpuUsage, 0);
 	newStat("HDDSpaceAvailable", hddSpace, 0);
 	newStat("DiskFullIn", recordTimeLeft, 0);
@@ -74,6 +94,11 @@ OBSBasicStats::OBSBasicStats(QWidget *parent, bool closeable)
 	renderTime = new QLabel(this);
 	skippedFrames = new QLabel(this);
 	missedFrames = new QLabel(this);
+
+	str = MakeMissedFramesText(999999, 999999, 99.99);
+	textWidth = missedFrames->fontMetrics().boundingRect(str).width();
+	missedFrames->setMinimumWidth(textWidth);
+
 	row = 0;
 
 	newStatBare("FPS", fps, 2);
@@ -388,10 +413,7 @@ void OBSBasicStats::Update()
 		      : 0.0l;
 	num *= 100.0l;
 
-	str = QString("%1 / %2 (%3%)")
-		      .arg(QString::number(total_lagged),
-			   QString::number(total_rendered),
-			   QString::number(num, 'f', 1));
+	str = MakeMissedFramesText(total_lagged, total_rendered, num);
 	missedFrames->setText(str);
 
 	if (num > 5.0l)
@@ -445,9 +467,7 @@ void OBSBasicStats::RecordingTimeLeft()
 	int minutes = totalMinutes % 60;
 	int hours = totalMinutes / 60;
 
-	QString text = QString::asprintf("%d %s, %d %s", hours,
-					 QT_TO_UTF8(QTStr("Hours")), minutes,
-					 QT_TO_UTF8(QTStr("Minutes")));
+	QString text = MakeTimeLeftText(hours, minutes);
 	recordTimeLeft->setText(text);
 	recordTimeLeft->setMinimumWidth(recordTimeLeft->width());
 }