diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2026-03-02 16:21:20 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-02 16:21:20 +0000 |
| commit | 9f98f7440b73a301938c5bc588281dad7b4eded7 (patch) | |
| tree | 1949ed9f13fe78bc3cbe0d26de8999aeb42b87b4 /src/layout/algorithm/tiled | |
| parent | 5cb128103584acf8bb5cfbf05927084178413165 (diff) | |
algo/dwindle: add back splitratio (#13498)
Diffstat (limited to 'src/layout/algorithm/tiled')
| -rw-r--r-- | src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp b/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp index f5e230f8..32afc3ab 100644 --- a/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp +++ b/src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp @@ -714,6 +714,25 @@ std::expected<void, std::string> CDwindleAlgorithm::layoutMsg(const std::string_ break; } } + } else if (ARGS[0] == "splitratio") { + auto ratio = ARGS[1]; + bool exact = ARGS[2].starts_with("exact"); + + if (ratio.empty()) + return std::unexpected("splitratio requires an arg"); + + auto delta = getPlusMinusKeywordResult(std::string{ratio}, 0.F); + + if (!CURRENT_NODE || !CURRENT_NODE->pParent) + return std::unexpected("cannot alter split ratio on no / single node"); + + if (!delta) + return std::unexpected(std::format("failed to parse \"{}\" as a delta", ratio)); + + const float newRatio = exact ? *delta : CURRENT_NODE->pParent->splitRatio + *delta; + CURRENT_NODE->pParent->splitRatio = std::clamp(newRatio, 0.1F, 1.9F); + + CURRENT_NODE->pParent->recalcSizePosRecursive(); } return {}; |
