summaryrefslogtreecommitdiff
path: root/src/protocols/GammaControl.hpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2024-04-22 18:21:03 +0100
committerVaxry <vaxry@vaxry.net>2024-04-22 18:21:03 +0100
commit741c75d907916d760163f910e65186d410e27874 (patch)
treee0170d0418418b20dc9fc5f96bb3b0c3bc9e4c58 /src/protocols/GammaControl.hpp
parentdafc9ed4eb225e87d09cc92273dd390b8a15dbd0 (diff)
gamma-control: move to new impl
Diffstat (limited to 'src/protocols/GammaControl.hpp')
-rw-r--r--src/protocols/GammaControl.hpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/protocols/GammaControl.hpp b/src/protocols/GammaControl.hpp
new file mode 100644
index 00000000..074a51f0
--- /dev/null
+++ b/src/protocols/GammaControl.hpp
@@ -0,0 +1,58 @@
+#pragma once
+
+#include <memory>
+#include <vector>
+#include <cstdint>
+#include "WaylandProtocol.hpp"
+#include "wlr-gamma-control-unstable-v1.hpp"
+#include "../helpers/signal/Listener.hpp"
+
+class CMonitor;
+
+class CGammaControl {
+ public:
+ CGammaControl(SP<CZwlrGammaControlV1> resource_, wl_resource* output);
+ ~CGammaControl();
+
+ bool good();
+ void applyToMonitor();
+ CMonitor* getMonitor();
+
+ private:
+ SP<CZwlrGammaControlV1> resource;
+ CMonitor* pMonitor = nullptr;
+ size_t gammaSize = 0;
+ bool gammaTableSet = false;
+ std::vector<uint16_t> gammaTable;
+
+ void onMonitorDestroy();
+
+ struct {
+ CHyprSignalListener monitorDisconnect;
+ CHyprSignalListener monitorDestroy;
+ } listeners;
+};
+
+class CGammaControlProtocol : public IWaylandProtocol {
+ public:
+ CGammaControlProtocol(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);
+
+ void applyGammaToState(CMonitor* pMonitor);
+
+ private:
+ void onManagerResourceDestroy(wl_resource* res);
+ void destroyGammaControl(CGammaControl* gamma);
+ void onGetGammaControl(CZwlrGammaControlManagerV1* pMgr, uint32_t id, wl_resource* output);
+
+ //
+ std::vector<UP<CZwlrGammaControlManagerV1>> m_vManagers;
+ std::vector<UP<CGammaControl>> m_vGammaControllers;
+
+ friend class CGammaControl;
+};
+
+namespace PROTO {
+ inline UP<CGammaControlProtocol> gamma;
+};