From 61e10e20484e8867656d39cbaa6d75c3aab7eba6 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Sat, 19 Mar 2022 15:59:53 +0100 Subject: added a layoutmanager and basic dwindle --- src/layout/DwindleLayout.hpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/layout/DwindleLayout.hpp (limited to 'src/layout/DwindleLayout.hpp') diff --git a/src/layout/DwindleLayout.hpp b/src/layout/DwindleLayout.hpp new file mode 100644 index 00000000..b666d72a --- /dev/null +++ b/src/layout/DwindleLayout.hpp @@ -0,0 +1,40 @@ +#pragma once + +#include "IHyprLayout.hpp" +#include + +struct SDwindleNodeData { + SDwindleNodeData* pParent = nullptr; + bool isNode = false; + + CWindow* pWindow = nullptr; + + std::array children = { nullptr, nullptr }; + + Vector2D position; + Vector2D size; + + int monitorID = -1; + + // For list lookup + bool operator==(const SDwindleNodeData& rhs) { + return pWindow == rhs.pWindow && monitorID == rhs.monitorID && position == rhs.position && size == rhs.size && pParent == rhs.pParent; + } + + // TODO: recalcsizepos for dynamic +}; + +class CHyprDwindleLayout : public IHyprLayout { +public: + virtual void onWindowCreated(CWindow*); + virtual void onWindowRemoved(CWindow*); + +private: + + std::list m_lDwindleNodesData; + + int getNodesOnMonitor(const int&); + void applyNodeDataToWindow(SDwindleNodeData*); + SDwindleNodeData* getNodeFromWindow(CWindow*); + SDwindleNodeData* getFirstNodeOnMonitor(const int&); +}; \ No newline at end of file -- cgit v1.2.3