summaryrefslogtreecommitdiff
path: root/src/layout/DwindleLayout.hpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-19 15:59:53 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-03-19 15:59:53 +0100
commit61e10e20484e8867656d39cbaa6d75c3aab7eba6 (patch)
treec57b575aff261990764929ad855176228791aa26 /src/layout/DwindleLayout.hpp
parente664b0b6920571b864776319dd32153e104e748d (diff)
added a layoutmanager and basic dwindle
Diffstat (limited to 'src/layout/DwindleLayout.hpp')
-rw-r--r--src/layout/DwindleLayout.hpp40
1 files changed, 40 insertions, 0 deletions
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 <list>
+
+struct SDwindleNodeData {
+ SDwindleNodeData* pParent = nullptr;
+ bool isNode = false;
+
+ CWindow* pWindow = nullptr;
+
+ std::array<SDwindleNodeData*, 2> 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<SDwindleNodeData> m_lDwindleNodesData;
+
+ int getNodesOnMonitor(const int&);
+ void applyNodeDataToWindow(SDwindleNodeData*);
+ SDwindleNodeData* getNodeFromWindow(CWindow*);
+ SDwindleNodeData* getFirstNodeOnMonitor(const int&);
+}; \ No newline at end of file