2015-04-04 07:37:02 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <obs.hpp>
|
|
|
|
#include "qt-display.hpp"
|
2022-01-08 07:02:55 +00:00
|
|
|
#include "multiview.hpp"
|
2018-02-28 03:57:54 +00:00
|
|
|
|
|
|
|
enum class ProjectorType {
|
|
|
|
Source,
|
2018-02-28 18:01:31 +00:00
|
|
|
Scene,
|
2018-02-28 03:57:54 +00:00
|
|
|
Preview,
|
|
|
|
StudioProgram,
|
|
|
|
Multiview,
|
|
|
|
};
|
2015-04-04 07:37:02 +00:00
|
|
|
|
2015-04-13 21:31:36 +00:00
|
|
|
class QMouseEvent;
|
|
|
|
|
2015-04-04 07:37:02 +00:00
|
|
|
class OBSProjector : public OBSQTDisplay {
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
private:
|
2022-03-11 10:05:11 +00:00
|
|
|
OBSWeakSourceAutoRelease weakSource;
|
2024-02-13 09:27:33 +00:00
|
|
|
std::vector<OBSSignal> sigs;
|
2015-04-04 07:37:02 +00:00
|
|
|
|
2017-10-21 17:51:01 +00:00
|
|
|
static void OBSRenderMultiview(void *data, uint32_t cx, uint32_t cy);
|
2015-04-04 07:37:02 +00:00
|
|
|
static void OBSRender(void *data, uint32_t cx, uint32_t cy);
|
2024-02-13 09:27:33 +00:00
|
|
|
static void OBSSourceRenamed(void *data, calldata_t *params);
|
2022-03-11 10:05:11 +00:00
|
|
|
static void OBSSourceDestroyed(void *data, calldata_t *params);
|
2015-04-04 07:37:02 +00:00
|
|
|
|
2015-04-13 21:31:36 +00:00
|
|
|
void mousePressEvent(QMouseEvent *event) override;
|
2017-12-12 20:45:15 +00:00
|
|
|
void mouseDoubleClickEvent(QMouseEvent *event) override;
|
2019-10-08 05:43:10 +00:00
|
|
|
void closeEvent(QCloseEvent *event) override;
|
2015-04-13 21:31:36 +00:00
|
|
|
|
2020-04-27 21:26:20 +00:00
|
|
|
bool isAlwaysOnTop;
|
|
|
|
bool isAlwaysOnTopOverridden = false;
|
2019-10-08 05:43:10 +00:00
|
|
|
int savedMonitor = -1;
|
2017-10-21 17:51:01 +00:00
|
|
|
ProjectorType type = ProjectorType::Source;
|
2018-03-20 06:20:45 +00:00
|
|
|
|
2022-01-08 07:02:55 +00:00
|
|
|
Multiview *multiview = nullptr;
|
2017-10-21 17:51:01 +00:00
|
|
|
|
2022-01-08 07:02:55 +00:00
|
|
|
bool ready = false;
|
2018-03-08 19:04:22 +00:00
|
|
|
|
2017-10-21 17:51:01 +00:00
|
|
|
void UpdateMultiview();
|
2018-03-01 00:43:07 +00:00
|
|
|
void UpdateProjectorTitle(QString name);
|
2016-12-29 15:21:53 +00:00
|
|
|
|
2019-10-08 05:43:10 +00:00
|
|
|
QRect prevGeometry;
|
|
|
|
void SetMonitor(int monitor);
|
|
|
|
|
2020-05-29 02:21:04 +00:00
|
|
|
QScreen *screen = nullptr;
|
|
|
|
|
2015-04-04 07:37:02 +00:00
|
|
|
private slots:
|
|
|
|
void EscapeTriggered();
|
2019-10-08 05:43:10 +00:00
|
|
|
void OpenFullScreenProjector();
|
2020-04-10 10:47:06 +00:00
|
|
|
void ResizeToContent();
|
2019-10-08 05:43:10 +00:00
|
|
|
void OpenWindowedProjector();
|
2020-04-27 21:26:20 +00:00
|
|
|
void AlwaysOnTopToggled(bool alwaysOnTop);
|
2020-05-29 02:21:04 +00:00
|
|
|
void ScreenRemoved(QScreen *screen_);
|
2024-02-13 09:27:33 +00:00
|
|
|
void RenameProjector(QString oldName, QString newName);
|
2015-04-04 07:37:02 +00:00
|
|
|
|
|
|
|
public:
|
2018-03-01 02:34:11 +00:00
|
|
|
OBSProjector(QWidget *widget, obs_source_t *source_, int monitor,
|
2019-10-08 05:43:10 +00:00
|
|
|
ProjectorType type_);
|
2015-04-04 07:37:02 +00:00
|
|
|
~OBSProjector();
|
|
|
|
|
2018-02-28 18:34:17 +00:00
|
|
|
OBSSource GetSource();
|
|
|
|
ProjectorType GetProjectorType();
|
|
|
|
int GetMonitor();
|
2017-10-21 17:51:01 +00:00
|
|
|
static void UpdateMultiviewProjectors();
|
2020-06-14 02:00:55 +00:00
|
|
|
void SetHideCursor();
|
2020-04-27 21:26:20 +00:00
|
|
|
|
|
|
|
bool IsAlwaysOnTop() const;
|
|
|
|
bool IsAlwaysOnTopOverridden() const;
|
|
|
|
void SetIsAlwaysOnTop(bool isAlwaysOnTop, bool isOverridden);
|
2015-04-04 07:37:02 +00:00
|
|
|
};
|