Browse Source

Ensure sizes passed to OBS are actual pixel sizes

This should fix GS rendering on surfaces on HiDPI displays; moving
windows between displays with differing pixel ratios currently requires
a manual resize
Palana 11 years ago
parent
commit
f447a44f9c
3 changed files with 10 additions and 5 deletions
  1. 5 0
      obs/display-helpers.hpp
  2. 3 3
      obs/window-basic-main.cpp
  3. 2 2
      obs/window-basic-properties.cpp

+ 5 - 0
obs/display-helpers.hpp

@@ -40,3 +40,8 @@ static inline void GetScaleAndCenterPos(
 	x = windowCX/2 - newCX/2;
 	y = windowCY/2 - newCY/2;
 }
+
+static inline QSize GetPixelSize(QWidget *widget)
+{
+	return widget->size() * widget->devicePixelRatio();
+}

+ 3 - 3
obs/window-basic-main.cpp

@@ -433,7 +433,7 @@ bool OBSBasic::ResetVideo()
 	//required to make opengl display stuff on osx(?)
 	ResizePreview(ovi.base_width, ovi.base_height);
 
-	QSize size = ui->preview->size();
+	QSize size = GetPixelSize(ui->preview);
 	ovi.window_width  = size.width();
 	ovi.window_height = size.height();
 
@@ -515,7 +515,7 @@ void OBSBasic::ResizePreview(uint32_t cx, uint32_t cy)
 	QSize  targetSize;
 
 	/* resize preview panel to fix to the top section of the window */
-	targetSize = ui->preview->size();
+	targetSize = GetPixelSize(ui->preview);
 	GetScaleAndCenterPos(int(cx), int(cy),
 			targetSize.width(), targetSize.height(),
 			previewX, previewY, previewScale);
@@ -555,7 +555,7 @@ void OBSBasic::timerEvent(QTimerEvent *event)
 		killTimer(resizeTimer);
 		resizeTimer = 0;
 
-		QSize size = ui->preview->size();
+		QSize size = GetPixelSize(ui->preview);
 		obs_resize(size.width(), size.height());
 	}
 }

+ 2 - 2
obs/window-basic-properties.cpp

@@ -95,7 +95,7 @@ void OBSBasicProperties::timerEvent(QTimerEvent *event)
 		killTimer(resizeTimer);
 		resizeTimer = 0;
 
-		QSize size = ui->preview->size();
+		QSize size = GetPixelSize(ui->preview);
 		obs_display_resize(display, size.width(), size.height());
 	}
 }
@@ -107,7 +107,7 @@ void OBSBasicProperties::Init()
 	show();
 	App()->processEvents();
 
-	QSize previewSize = ui->preview->size();
+	QSize previewSize = GetPixelSize(ui->preview);
 	init_data.cx      = uint32_t(previewSize.width());
 	init_data.cy      = uint32_t(previewSize.height());
 	init_data.format  = GS_RGBA;