diff options
Diffstat (limited to 'src/layout/MasterLayout.hpp')
| -rw-r--r-- | src/layout/MasterLayout.hpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/layout/MasterLayout.hpp b/src/layout/MasterLayout.hpp new file mode 100644 index 00000000..318f8940 --- /dev/null +++ b/src/layout/MasterLayout.hpp @@ -0,0 +1,54 @@ +#pragma once + +#include "IHyprLayout.hpp" +#include <list> +#include <deque> + +enum eFullscreenMode : uint8_t; + +struct SMasterNodeData { + bool isMaster = false; + float percMaster = 0.5f; + + CWindow* pWindow = nullptr; + + Vector2D position; + Vector2D size; + + int workspaceID = -1; + + bool operator==(const SMasterNodeData& rhs) { + return pWindow == rhs.pWindow; + } +}; + +class CHyprMasterLayout : public IHyprLayout { +public: + virtual void onWindowCreatedTiling(CWindow*); + virtual void onWindowRemovedTiling(CWindow*); + virtual bool isWindowTiled(CWindow*); + virtual void recalculateMonitor(const int&); + virtual void recalculateWindow(CWindow*); + virtual void resizeActiveWindow(const Vector2D&, CWindow* pWindow = nullptr); + virtual void fullscreenRequestForWindow(CWindow*, eFullscreenMode, bool); + virtual std::any layoutMessage(SLayoutMessageHeader, std::string); + virtual SWindowRenderLayoutHints requestRenderHints(CWindow*); + virtual void switchWindows(CWindow*, CWindow*); + virtual void alterSplitRatioBy(CWindow*, float); + virtual std::string getLayoutName(); + + virtual void onEnable(); + virtual void onDisable(); + +private: + + std::list<SMasterNodeData> m_lMasterNodesData; + + int getNodesOnWorkspace(const int&); + void applyNodeDataToWindow(SMasterNodeData*); + SMasterNodeData* getNodeFromWindow(CWindow*); + SMasterNodeData* getMasterNodeOnWorkspace(const int&); + void calculateWorkspace(const int&); + + friend struct SMasterNodeData; +};
\ No newline at end of file |
