summaryrefslogtreecommitdiff
path: root/src/protocols/ImageCaptureSource.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/protocols/ImageCaptureSource.hpp')
-rw-r--r--src/protocols/ImageCaptureSource.hpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/protocols/ImageCaptureSource.hpp b/src/protocols/ImageCaptureSource.hpp
new file mode 100644
index 00000000..47580dd2
--- /dev/null
+++ b/src/protocols/ImageCaptureSource.hpp
@@ -0,0 +1,73 @@
+#pragma once
+
+#include <vector>
+
+#include "../defines.hpp"
+#include "../helpers/signal/Signal.hpp"
+#include "WaylandProtocol.hpp"
+#include "ext-image-capture-source-v1.hpp"
+
+class CImageCopyCaptureSession;
+
+class CImageCaptureSource {
+ public:
+ CImageCaptureSource(SP<CExtImageCaptureSourceV1> resource, PHLMONITOR pMonitor);
+ CImageCaptureSource(SP<CExtImageCaptureSourceV1> resource, PHLWINDOW pWindow);
+
+ bool good();
+ std::string getName();
+ std::string getTypeName();
+ CBox logicalBox();
+
+ WP<CImageCaptureSource> m_self;
+
+ private:
+ SP<CExtImageCaptureSourceV1> m_resource;
+
+ PHLMONITORREF m_monitor;
+ PHLWINDOWREF m_window;
+
+ friend class CImageCopyCaptureSession;
+ friend class CImageCopyCaptureCursorSession;
+};
+
+class COutputImageCaptureSourceProtocol : public IWaylandProtocol {
+ public:
+ COutputImageCaptureSourceProtocol(const wl_interface* iface, const int& ver, const std::string& name);
+
+ virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id);
+};
+
+class CToplevelImageCaptureSourceProtocol : public IWaylandProtocol {
+ public:
+ CToplevelImageCaptureSourceProtocol(const wl_interface* iface, const int& ver, const std::string& name);
+
+ virtual void bindManager(wl_client* client, void* data, uint32_t ver, uint32_t id);
+};
+
+class CImageCaptureSourceProtocol {
+ public:
+ CImageCaptureSourceProtocol();
+
+ SP<CImageCaptureSource> sourceFromResource(wl_resource* resource);
+
+ void destroyResource(CExtOutputImageCaptureSourceManagerV1* resource);
+ void destroyResource(CExtForeignToplevelImageCaptureSourceManagerV1* resource);
+ void destroyResource(CImageCaptureSource* resource);
+
+ private:
+ UP<COutputImageCaptureSourceProtocol> m_output;
+ UP<CToplevelImageCaptureSourceProtocol> m_toplevel;
+
+ std::vector<SP<CExtOutputImageCaptureSourceManagerV1>> m_outputManagers;
+ std::vector<SP<CExtForeignToplevelImageCaptureSourceManagerV1>> m_toplevelManagers;
+
+ std::vector<SP<CImageCaptureSource>> m_sources;
+
+ friend class COutputImageCaptureSourceProtocol;
+ friend class CToplevelImageCaptureSourceProtocol;
+};
+
+namespace PROTO {
+ inline UP<CImageCaptureSourceProtocol> imageCaptureSource;
+};