window-projector.hpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #pragma once
  2. #include <obs.hpp>
  3. #include "qt-display.hpp"
  4. #include "multiview.hpp"
  5. enum class ProjectorType {
  6. Source,
  7. Scene,
  8. Preview,
  9. StudioProgram,
  10. Multiview,
  11. };
  12. class QMouseEvent;
  13. class OBSProjector : public OBSQTDisplay {
  14. Q_OBJECT
  15. private:
  16. OBSWeakSourceAutoRelease weakSource;
  17. std::vector<OBSSignal> sigs;
  18. static void OBSRenderMultiview(void *data, uint32_t cx, uint32_t cy);
  19. static void OBSRender(void *data, uint32_t cx, uint32_t cy);
  20. static void OBSSourceRenamed(void *data, calldata_t *params);
  21. static void OBSSourceDestroyed(void *data, calldata_t *params);
  22. void mousePressEvent(QMouseEvent *event) override;
  23. void mouseDoubleClickEvent(QMouseEvent *event) override;
  24. void closeEvent(QCloseEvent *event) override;
  25. bool isAlwaysOnTop;
  26. bool isAlwaysOnTopOverridden = false;
  27. int savedMonitor = -1;
  28. ProjectorType type = ProjectorType::Source;
  29. Multiview *multiview = nullptr;
  30. bool ready = false;
  31. void UpdateMultiview();
  32. void UpdateProjectorTitle(QString name);
  33. QRect prevGeometry;
  34. void SetMonitor(int monitor);
  35. QScreen *screen = nullptr;
  36. private slots:
  37. void EscapeTriggered();
  38. void OpenFullScreenProjector();
  39. void ResizeToContent();
  40. void OpenWindowedProjector();
  41. void AlwaysOnTopToggled(bool alwaysOnTop);
  42. void ScreenRemoved(QScreen *screen_);
  43. void RenameProjector(QString oldName, QString newName);
  44. public:
  45. OBSProjector(QWidget *widget, obs_source_t *source_, int monitor, ProjectorType type_);
  46. ~OBSProjector();
  47. OBSSource GetSource();
  48. ProjectorType GetProjectorType();
  49. int GetMonitor();
  50. static void UpdateMultiviewProjectors();
  51. void SetHideCursor();
  52. bool IsAlwaysOnTop() const;
  53. bool IsAlwaysOnTopOverridden() const;
  54. void SetIsAlwaysOnTop(bool isAlwaysOnTop, bool isOverridden);
  55. };