summaryrefslogtreecommitdiff
path: root/src/layout/algorithm
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2026-03-02 16:21:20 +0000
committerGitHub <noreply@github.com>2026-03-02 16:21:20 +0000
commit9f98f7440b73a301938c5bc588281dad7b4eded7 (patch)
tree1949ed9f13fe78bc3cbe0d26de8999aeb42b87b4 /src/layout/algorithm
parent5cb128103584acf8bb5cfbf05927084178413165 (diff)
algo/dwindle: add back splitratio (#13498)
Diffstat (limited to 'src/layout/algorithm')
-rw-r--r--src/layout/algorithm/tiled/dwindle/DwindleAlgorithm.cpp19
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 {};