diff --git a/UI/qt-display.hpp b/UI/qt-display.hpp index 1edba68de0db6b..949a7a0a265d48 100644 --- a/UI/qt-display.hpp +++ b/UI/qt-display.hpp @@ -5,12 +5,16 @@ #define GREY_COLOR_BACKGROUND 0xFF4C4C4C +class OBSProjector; + class OBSQTDisplay : public QWidget { Q_OBJECT Q_PROPERTY(QColor displayBackgroundColor MEMBER backgroundColor READ GetDisplayBackgroundColor WRITE SetDisplayBackgroundColor) + friend class OBSProjector; + OBSDisplay display; virtual void paintEvent(QPaintEvent *event) override; diff --git a/UI/window-projector.cpp b/UI/window-projector.cpp index 98dbe39da20003..9fbcb84bca0b6d 100644 --- a/UI/window-projector.cpp +++ b/UI/window-projector.cpp @@ -19,11 +19,16 @@ static size_t maxSrcs, numSrcs; OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, int monitor, ProjectorType type_) - : OBSQTDisplay(widget, Qt::Window), + : display(this), source(source_), removedSignal(obs_source_get_signal_handler(source), "remove", OBSSourceRemoved, this) { + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget(&display); + layout->setContentsMargins(0, 0, 0, 0); + this->setLayout(layout); + isAlwaysOnTop = config_get_bool(GetGlobalConfig(), "BasicWindow", "ProjectorAlwaysOnTop"); @@ -32,7 +37,7 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, int monitor, // Mark the window as a projector so SetDisplayAffinity // can skip it - windowHandle()->setProperty("isOBSProjectorWindow", true); + display.windowHandle()->setProperty("isOBSProjectorWindow", true); #if defined(__linux__) || defined(__FreeBSD__) || defined(__DragonFly__) // Prevents resizing of projector windows @@ -69,12 +74,14 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, int monitor, auto addDrawCallback = [this]() { bool isMultiview = type == ProjectorType::Multiview; obs_display_add_draw_callback( - GetDisplay(), + display.GetDisplay(), isMultiview ? OBSRenderMultiview : OBSRender, this); - obs_display_set_background_color(GetDisplay(), 0x000000); + obs_display_set_background_color(display.GetDisplay(), + 0x000000); }; - connect(this, &OBSQTDisplay::DisplayCreated, addDrawCallback); + display.connect(&display, &OBSQTDisplay::DisplayCreated, + addDrawCallback); connect(App(), &QGuiApplication::screenRemoved, this, &OBSProjector::ScreenRemoved); @@ -106,8 +113,8 @@ OBSProjector::~OBSProjector() { bool isMultiview = type == ProjectorType::Multiview; obs_display_remove_draw_callback( - GetDisplay(), isMultiview ? OBSRenderMultiview : OBSRender, - this); + display.GetDisplay(), + isMultiview ? OBSRenderMultiview : OBSRender, this); if (source) obs_source_dec_showing(source); @@ -874,7 +881,7 @@ static int getSourceByPosition(int x, int y, float ratio) void OBSProjector::mouseDoubleClickEvent(QMouseEvent *event) { - OBSQTDisplay::mouseDoubleClickEvent(event); + display.mouseDoubleClickEvent(event); if (!mouseSwitching) return; @@ -901,7 +908,7 @@ void OBSProjector::mouseDoubleClickEvent(QMouseEvent *event) void OBSProjector::mousePressEvent(QMouseEvent *event) { - OBSQTDisplay::mousePressEvent(event); + display.mousePressEvent(event); if (event->button() == Qt::RightButton) { OBSBasic *main = diff --git a/UI/window-projector.hpp b/UI/window-projector.hpp index fc9bf7e199eb64..a0bd6fbfac4979 100644 --- a/UI/window-projector.hpp +++ b/UI/window-projector.hpp @@ -26,12 +26,13 @@ enum class MultiviewLayout : uint8_t { SCENES_ONLY_25_SCENES = 9, }; -class OBSProjector : public OBSQTDisplay { +class OBSProjector : public QWidget { Q_OBJECT private: OBSSource source; OBSSignal removedSignal; + OBSQTDisplay display; static void OBSRenderMultiview(void *data, uint32_t cx, uint32_t cy); static void OBSRender(void *data, uint32_t cx, uint32_t cy);