window-projector.hpp 1.6 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. OBSSource source;
  17. OBSSignal removedSignal;
  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 OBSSourceRemoved(void *data, calldata_t *params);
  21. void mousePressEvent(QMouseEvent *event) override;
  22. void mouseDoubleClickEvent(QMouseEvent *event) override;
  23. void closeEvent(QCloseEvent *event) override;
  24. bool isAlwaysOnTop;
  25. bool isAlwaysOnTopOverridden = false;
  26. int savedMonitor = -1;
  27. ProjectorType type = ProjectorType::Source;
  28. Multiview *multiview = nullptr;
  29. bool ready = false;
  30. void UpdateMultiview();
  31. void UpdateProjectorTitle(QString name);
  32. QRect prevGeometry;
  33. void SetMonitor(int monitor);
  34. QScreen *screen = nullptr;
  35. private slots:
  36. void EscapeTriggered();
  37. void OpenFullScreenProjector();
  38. void ResizeToContent();
  39. void OpenWindowedProjector();
  40. void AlwaysOnTopToggled(bool alwaysOnTop);
  41. void ScreenRemoved(QScreen *screen_);
  42. public:
  43. OBSProjector(QWidget *widget, obs_source_t *source_, int monitor,
  44. ProjectorType type_);
  45. ~OBSProjector();
  46. OBSSource GetSource();
  47. ProjectorType GetProjectorType();
  48. int GetMonitor();
  49. static void UpdateMultiviewProjectors();
  50. void RenameProjector(QString oldName, QString newName);
  51. void SetHideCursor();
  52. bool IsAlwaysOnTop() const;
  53. bool IsAlwaysOnTopOverridden() const;
  54. void SetIsAlwaysOnTop(bool isAlwaysOnTop, bool isOverridden);
  55. };