#pragma once #include #include "qt-display.hpp" #include "multiview.hpp" enum class ProjectorType { Source, Scene, Preview, StudioProgram, Multiview, }; class QMouseEvent; class OBSProjector : public OBSQTDisplay { Q_OBJECT private: OBSWeakSourceAutoRelease weakSource; OBSSignal destroyedSignal; static void OBSRenderMultiview(void *data, uint32_t cx, uint32_t cy); static void OBSRender(void *data, uint32_t cx, uint32_t cy); static void OBSSourceDestroyed(void *data, calldata_t *params); void mousePressEvent(QMouseEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; void closeEvent(QCloseEvent *event) override; bool isAlwaysOnTop; bool isAlwaysOnTopOverridden = false; int savedMonitor = -1; ProjectorType type = ProjectorType::Source; Multiview *multiview = nullptr; bool ready = false; void UpdateMultiview(); void UpdateProjectorTitle(QString name); QRect prevGeometry; void SetMonitor(int monitor); QScreen *screen = nullptr; private slots: void EscapeTriggered(); void OpenFullScreenProjector(); void ResizeToContent(); void OpenWindowedProjector(); void AlwaysOnTopToggled(bool alwaysOnTop); void ScreenRemoved(QScreen *screen_); public: OBSProjector(QWidget *widget, obs_source_t *source_, int monitor, ProjectorType type_); ~OBSProjector(); OBSSource GetSource(); ProjectorType GetProjectorType(); int GetMonitor(); static void UpdateMultiviewProjectors(); void RenameProjector(QString oldName, QString newName); void SetHideCursor(); bool IsAlwaysOnTop() const; bool IsAlwaysOnTopOverridden() const; void SetIsAlwaysOnTop(bool isAlwaysOnTop, bool isOverridden); };