From 1681bea42dd2f11ba3fe6df05560d0b231de3c76 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Wed, 6 May 2026 13:56:12 +0100 Subject: config/lua: add simple layout API (#14258) Adds a simple layout lua api --- src/config/lua/layout/LuaLayoutProvider.hpp | 59 +++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/config/lua/layout/LuaLayoutProvider.hpp (limited to 'src/config/lua/layout/LuaLayoutProvider.hpp') 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 +#include +#include +#include + +extern "C" { +#include +#include +} + +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 provider); + virtual ~CLuaTiledAlgorithm() = default; + + virtual void newTarget(SP target); + virtual void movedTarget(SP target, std::optional focalPoint = std::nullopt); + virtual void removeTarget(SP target); + virtual void resizeTarget(const Vector2D& Δ, SP target, Layout::eRectCorner corner = Layout::CORNER_NONE); + virtual void recalculate(); + virtual void swapTargets(SP a, SP b); + virtual void moveTargetInDirection(SP t, Math::eDirection dir, bool silent); + virtual Config::ErrorResult layoutMsg(const std::string_view& sv); + virtual std::optional predictSizeForNewTarget(); + virtual SP getNextCandidate(SP old); + virtual std::optional layoutName() const; + + private: + SP m_provider; + std::vector> m_targets; + + std::vector> liveTargets(); + bool callRecalculate(const std::vector>& targets); + void applyDefaultGrid(const std::vector>& targets); + void reportError(const std::string& message); + }; + +} -- cgit v1.2.3