summaryrefslogtreecommitdiff
path: root/src/config/lua/layout/LuaLayoutProvider.hpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2026-05-06 13:56:12 +0100
committerGitHub <noreply@github.com>2026-05-06 13:56:12 +0100
commit1681bea42dd2f11ba3fe6df05560d0b231de3c76 (patch)
tree899103dbddf675a01758c7cdd379224c9c81a7fb /src/config/lua/layout/LuaLayoutProvider.hpp
parent5f1350f522d3fe3af78cbe30a98311763b3509d5 (diff)
config/lua: add simple layout API (#14258)
Adds a simple layout lua api
Diffstat (limited to 'src/config/lua/layout/LuaLayoutProvider.hpp')
-rw-r--r--src/config/lua/layout/LuaLayoutProvider.hpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/config/lua/layout/LuaLayoutProvider.hpp b/src/config/lua/layout/LuaLayoutProvider.hpp
new file mode 100644
index 00000000..4e223670
--- /dev/null
+++ b/src/config/lua/layout/LuaLayoutProvider.hpp
@@ -0,0 +1,59 @@
+#pragma once
+
+#include "../../../helpers/memory/Memory.hpp"
+#include "../../../helpers/math/Math.hpp"
+#include "../../../layout/algorithm/TiledAlgorithm.hpp"
+
+#include <optional>
+#include <string>
+#include <string_view>
+#include <vector>
+
+extern "C" {
+#include <lua.h>
+#include <lauxlib.h>
+}
+
+namespace Config::Lua {
+ class CConfigManager;
+}
+
+namespace Config::Lua::Layouts {
+
+ struct SLuaLayoutProvider {
+ CConfigManager* manager = nullptr;
+ lua_State* state = nullptr;
+ std::string name;
+ int tableRef = LUA_NOREF;
+ bool active = true;
+ bool didError = false;
+ };
+
+ class CLuaTiledAlgorithm : public Layout::ITiledAlgorithm {
+ public:
+ explicit CLuaTiledAlgorithm(SP<SLuaLayoutProvider> provider);
+ virtual ~CLuaTiledAlgorithm() = default;
+
+ virtual void newTarget(SP<Layout::ITarget> target);
+ virtual void movedTarget(SP<Layout::ITarget> target, std::optional<Vector2D> focalPoint = std::nullopt);
+ virtual void removeTarget(SP<Layout::ITarget> target);
+ virtual void resizeTarget(const Vector2D& Δ, SP<Layout::ITarget> target, Layout::eRectCorner corner = Layout::CORNER_NONE);
+ virtual void recalculate();
+ virtual void swapTargets(SP<Layout::ITarget> a, SP<Layout::ITarget> b);
+ virtual void moveTargetInDirection(SP<Layout::ITarget> t, Math::eDirection dir, bool silent);
+ virtual Config::ErrorResult layoutMsg(const std::string_view& sv);
+ virtual std::optional<Vector2D> predictSizeForNewTarget();
+ virtual SP<Layout::ITarget> getNextCandidate(SP<Layout::ITarget> old);
+ virtual std::optional<std::string> layoutName() const;
+
+ private:
+ SP<SLuaLayoutProvider> m_provider;
+ std::vector<WP<Layout::ITarget>> m_targets;
+
+ std::vector<SP<Layout::ITarget>> liveTargets();
+ bool callRecalculate(const std::vector<SP<Layout::ITarget>>& targets);
+ void applyDefaultGrid(const std::vector<SP<Layout::ITarget>>& targets);
+ void reportError(const std::string& message);
+ };
+
+}