#pragma once #include #include #include "WaylandProtocol.hpp" #include "fifo-v1.hpp" #include "../helpers/signal/Signal.hpp" class CWLSurfaceResource; class CFifoResource { public: CFifoResource(UP&& resource_, SP surface); ~CFifoResource(); bool good(); private: UP m_resource; WP m_surface; struct { CHyprSignalListener surfaceStateCommit; } m_listeners; void presented(); bool checkMonitors(bool needsSchedule = false); friend class CFifoProtocol; friend class CFifoManagerResource; }; class CFifoManagerResource { public: CFifoManagerResource(UP&& resource_); ~CFifoManagerResource(); bool good(); private: UP m_resource; }; class CFifoProtocol : public IWaylandProtocol { public: CFifoProtocol(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); private: void destroyResource(CFifoManagerResource* resource); void destroyResource(CFifoResource* resource); void onMonitorPresent(PHLMONITOR m); // std::vector> m_managers; std::vector> m_fifos; friend class CFifoManagerResource; friend class CFifoResource; }; namespace PROTO { inline UP fifo; };