#pragma once /* Implementations for: - wl_subsurface - wl_subcompositor */ #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 m_subsurface; }; class CWLSubsurfaceResource { public: CWLSubsurfaceResource(SP resource_, SP surface_, SP parent_); ~CWLSubsurfaceResource(); Vector2D posRelativeToParent(); bool good(); SP t1Parent(); bool m_sync = false; Vector2D m_position; WP m_surface; WP m_parent; WP m_self; int m_zIndex = 1; // by default, it's above struct { CSignalT<> destroy; } m_events; private: SP m_resource; void destroy(); struct { CHyprSignalListener commitSurface; } m_listeners; }; class CWLSubcompositorResource { public: CWLSubcompositorResource(SP resource_); bool good(); private: SP m_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_managers; std::vector> m_surfaces; friend class CWLSubcompositorResource; friend class CWLSubsurfaceResource; }; namespace PROTO { inline UP subcompositor; };