#pragma once #include #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 resource, PHLMONITOR pMonitor); CImageCaptureSource(SP resource, PHLWINDOW pWindow); bool good(); std::string getName(); std::string getTypeName(); CBox logicalBox(); WP m_self; private: SP 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 sourceFromResource(wl_resource* resource); void destroyResource(CExtOutputImageCaptureSourceManagerV1* resource); void destroyResource(CExtForeignToplevelImageCaptureSourceManagerV1* resource); void destroyResource(CImageCaptureSource* resource); private: UP m_output; UP m_toplevel; std::vector> m_outputManagers; std::vector> m_toplevelManagers; std::vector> m_sources; friend class COutputImageCaptureSourceProtocol; friend class CToplevelImageCaptureSourceProtocol; }; namespace PROTO { inline UP imageCaptureSource; };