summaryrefslogtreecommitdiff
path: root/src/protocols/AlphaModifier.hpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-04-21 21:21:22 +0100
committerVaxry <vaxry@vaxry.net>2024-04-21 21:21:22 +0100
commitf587c3e0ba92109302032f89321d94b5d0f89236 (patch)
tree65034aed209a3e10c41a15c6a30d30bf526adf72 /src/protocols/AlphaModifier.hpp
parent87173bd09daa4b56adabcfc72a29aec957cb8a13 (diff)
alpha-modifier: add support for protocol
Diffstat (limited to 'src/protocols/AlphaModifier.hpp')
-rw-r--r--src/protocols/AlphaModifier.hpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/protocols/AlphaModifier.hpp b/src/protocols/AlphaModifier.hpp
new file mode 100644
index 00000000..292c2e14
--- /dev/null
+++ b/src/protocols/AlphaModifier.hpp
@@ -0,0 +1,47 @@
+#pragma once
+
+#include <memory>
+#include <vector>
+#include <unordered_map>
+#include "WaylandProtocol.hpp"
+#include "alpha-modifier-v1.hpp"
+
+class CAlphaModifier {
+ public:
+ CAlphaModifier(SP<CWpAlphaModifierSurfaceV1> resource_, wlr_surface* surface);
+ ~CAlphaModifier();
+
+ bool good();
+ wlr_surface* getSurface();
+ void onSurfaceDestroy();
+
+ private:
+ SP<CWpAlphaModifierSurfaceV1> resource;
+ wlr_surface* pSurface = nullptr;
+
+ void setSurfaceAlpha(float a);
+
+ DYNLISTENER(surfaceDestroy);
+};
+
+class CAlphaModifierProtocol : public IWaylandProtocol {
+ public:
+ CAlphaModifierProtocol(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 onManagerResourceDestroy(wl_resource* res);
+ void destroyModifier(CAlphaModifier* decoration);
+ void onGetSurface(CWpAlphaModifierV1* pMgr, uint32_t id, wlr_surface* surface);
+
+ //
+ std::vector<UP<CWpAlphaModifierV1>> m_vManagers;
+ std::unordered_map<wlr_surface*, UP<CAlphaModifier>> m_mAlphaModifiers; // xdg_toplevel -> deco
+
+ friend class CAlphaModifier;
+};
+
+namespace PROTO {
+ inline UP<CAlphaModifierProtocol> alphaModifier;
+}; \ No newline at end of file