diff --git a/libobs/obs-data.h b/libobs/obs-data.h
index 0549b84a6..2dc99e545 100644
--- a/libobs/obs-data.h
+++ b/libobs/obs-data.h
@@ -88,6 +88,8 @@ struct obs_data {
pthread_mutex_t displays_mutex;
pthread_mutex_t outputs_mutex;
pthread_mutex_t encoders_mutex;
+
+ volatile bool valid;
};
struct obs_subsystem {
diff --git a/libobs/obs-video.c b/libobs/obs-video.c
index 738af426a..235e804d2 100644
--- a/libobs/obs-video.c
+++ b/libobs/obs-video.c
@@ -92,6 +92,9 @@ static inline void render_displays(void)
{
size_t i;
+ if (!obs->data.valid)
+ return;
+
/* render extra displays/swaps */
pthread_mutex_lock(&obs->data.displays_mutex);
diff --git a/libobs/obs.c b/libobs/obs.c
index eb8b02160..b9d51d1f4 100644
--- a/libobs/obs.c
+++ b/libobs/obs.c
@@ -243,11 +243,11 @@ static bool obs_init_data(void)
if (pthread_mutex_init(&data->encoders_mutex, &attr) != 0)
goto fail;
- success = true;
+ data->valid = true;
fail:
pthread_mutexattr_destroy(&attr);
- return success;
+ return data->valid;
}
static void obs_free_data(void)
@@ -255,6 +255,8 @@ static void obs_free_data(void)
struct obs_data *data = &obs->data;
uint32_t i;
+ data->valid = false;
+
for (i = 0; i < MAX_CHANNELS; i++)
obs_set_output_source(i, NULL);
diff --git a/obs/forms/OBSBasic.ui b/obs/forms/OBSBasic.ui
index 550f84698..7f4d29fb9 100644
--- a/obs/forms/OBSBasic.ui
+++ b/obs/forms/OBSBasic.ui
@@ -8,7 +8,7 @@
0
0
927
- 703
+ 700
@@ -36,24 +36,34 @@
0
-
- -
-
-
-
- 0
- 0
-
-
-
-
- 32
- 32
-
-
-
-
-
+
+
+ 32
+ 32
+
+
+
+
+
+ 50
+ 30
+ 32
+ 32
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 32
+ 32
+
+
+
-
diff --git a/obs/obs-app.cpp b/obs/obs-app.cpp
index e40be0464..8a5c9bb83 100644
--- a/obs/obs-app.cpp
+++ b/obs/obs-app.cpp
@@ -26,7 +26,9 @@
#include "window-basic-main.hpp"
#include "platform.hpp"
+#ifdef _WIN32
#include
+#endif
using namespace std;
diff --git a/obs/qt-display.hpp b/obs/qt-display.hpp
index 8cf7a45f9..f14acaf74 100644
--- a/obs/qt-display.hpp
+++ b/obs/qt-display.hpp
@@ -6,14 +6,15 @@ class OBSQTDisplay : public QWidget {
Q_OBJECT
public:
- inline OBSQTDisplay(QWidget *parent = 0, Qt::WindowFlags f = 0)
- : QWidget(parent, f)
+ inline OBSQTDisplay(QWidget *parent = 0, Qt::WindowFlags flags = 0)
+ : QWidget(parent, flags)
{
- setAutoFillBackground(false);
- setAttribute(Qt::WA_OpaquePaintEvent);
- setAttribute(Qt::WA_NativeWindow);
setAttribute(Qt::WA_PaintOnScreen);
+ setAttribute(Qt::WA_StaticContents);
setAttribute(Qt::WA_NoSystemBackground);
+ setAttribute(Qt::WA_OpaquePaintEvent);
+ setAttribute(Qt::WA_DontCreateNativeAncestors);
+ setAttribute(Qt::WA_NativeWindow);
}
virtual QPaintEngine *paintEngine() const {return nullptr;}
diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp
index 4f0f17e0f..f36ed344a 100644
--- a/obs/window-basic-main.cpp
+++ b/obs/window-basic-main.cpp
@@ -281,28 +281,33 @@ bool OBSBasic::InitAudio()
void OBSBasic::ResizePreview(uint32_t cx, uint32_t cy)
{
double targetAspect, baseAspect;
- QSize targetSize, newSize;
+ QSize targetSize;
+ int x, y;
/* resize preview panel to fix to the top section of the window */
targetSize = ui->previewContainer->size();
targetAspect = double(targetSize.width()) / double(targetSize.height());
baseAspect = double(cx) / double(cy);
- if (targetAspect > baseAspect)
- newSize = QSize(targetSize.height() * baseAspect,
- targetSize.height());
- else
- newSize = QSize(targetSize.width(),
- targetSize.width() / baseAspect);
+ if (targetAspect > baseAspect) {
+ cx = targetSize.height() * baseAspect;
+ cy = targetSize.height();
+ } else {
+ cx = targetSize.width();
+ cy = targetSize.width() / baseAspect;
+ }
- //ui->preview->resize(newSize);
+ x = targetSize.width() /2 - cx/2;
+ y = targetSize.height()/2 - cy/2;
+
+ ui->preview->setGeometry(x, y, cx, cy);
graphics_t graphics = obs_graphics();
- /*if (graphics) {
+ if (graphics && isVisible()) {
gs_entercontext(graphics);
- gs_resize(newSize.width(), newSize.height());
+ gs_resize(cx, cy);
gs_leavecontext();
- }*/
+ }
}
void OBSBasic::closeEvent(QCloseEvent *event)