#pragma once /* Implementations for: - wl_subsurface - wl_subcompositor */ #include #include #include #include "../WaylandProtocol.hpp" #include "wayland.hpp" #include "../../helpers/signal/Signal.hpp" #include "../types/SurfaceRole.hpp" class CWLSurfaceResource; class CWLSubsurfaceResource; class CSubsurfaceRole : public ISurfaceRole { public: CSubsurfaceRole(SP sub); virtual eSurfaceRole role() { return SURFACE_ROLE_SUBSURFACE; } WP subsurface; }; class CWLSubsurfaceResource { public: CWLSubsurfaceResource(SP resource_, SP surface_, SP parent_); ~CWLSubsurfaceResource(); Vector2D posRelativeToParent(); bool good(); SP t1Parent(); bool sync = false; Vector2D position; WP surface; WP parent; WP self; int zIndex = 1; // by default, it's above struct { CSignal destroy; } events; private: SP resource; void destroy(); struct { CHyprSignalListener commitSurface; } listeners; }; class CWLSubcompositorResource { public: CWLSubcompositorResource(SP resource_); bool good(); private: SP resource; }; class CWLSubcompositorProtocol : public IWaylandProtocol { public: CWLSubcompositorProtocol(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(CWLSubcompositorResource* resource); void destroyResource(CWLSubsurfaceResource* resource); // std::vector> m_vManagers; std::vector> m_vSurfaces; friend class CWLSubcompositorResource; friend class CWLSubsurfaceResource; }; namespace PROTO { inline UP subcompositor; };