diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2026-05-06 13:56:12 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-06 13:56:12 +0100 |
| commit | 1681bea42dd2f11ba3fe6df05560d0b231de3c76 (patch) | |
| tree | 899103dbddf675a01758c7cdd379224c9c81a7fb /src/config/lua/layout/LuaLayoutProvider.hpp | |
| parent | 5f1350f522d3fe3af78cbe30a98311763b3509d5 (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.hpp | 59 |
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); + }; + +} |
