#pragma once #include #include #include #include "WaylandProtocol.hpp" #include "wlr-virtual-pointer-unstable-v1.hpp" #include "../helpers/signal/Signal.hpp" #include "../devices/IPointer.hpp" #include "../helpers/Monitor.hpp" class CVirtualPointerV1Resource { public: CVirtualPointerV1Resource(SP resource_, PHLMONITORREF boundOutput_); ~CVirtualPointerV1Resource(); struct { CSignalT<> destroy; CSignalT move; CSignalT warp; CSignalT button; CSignalT axis; CSignalT<> frame; CSignalT swipeBegin; CSignalT swipeUpdate; CSignalT swipeEnd; CSignalT pinchBegin; CSignalT pinchUpdate; CSignalT pinchEnd; CSignalT holdBegin; CSignalT holdEnd; } m_events; bool good(); wl_client* client(); std::string m_name; PHLMONITORREF m_boundOutput; private: SP m_resource; uint32_t m_axis = 0; std::array m_axisEvents; }; class CVirtualPointerProtocol : public IWaylandProtocol { public: CVirtualPointerProtocol(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); struct { CSignalT> newPointer; } m_events; private: void onManagerResourceDestroy(wl_resource* res); void destroyResource(CVirtualPointerV1Resource* pointer); void onCreatePointer(CZwlrVirtualPointerManagerV1* pMgr, wl_resource* seat, uint32_t id, PHLMONITORREF output); // std::vector> m_managers; std::vector> m_pointers; friend class CVirtualPointerV1Resource; }; namespace PROTO { inline UP virtualPointer; };