window-projector.hpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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,
  46. ProjectorType type_);
  47. ~OBSProjector();
  48. OBSSource GetSource();
  49. ProjectorType GetProjectorType();
  50. int GetMonitor();
  51. static void UpdateMultiviewProjectors();
  52. void SetHideCursor();
  53. bool IsAlwaysOnTop() const;
  54. bool IsAlwaysOnTopOverridden() const;
  55. void SetIsAlwaysOnTop(bool isAlwaysOnTop, bool isOverridden);
  56. };