summaryrefslogtreecommitdiff
path: root/src/desktop/view
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2026-04-28 18:10:25 +0100
committerGitHub <noreply@github.com>2026-04-28 18:10:25 +0100
commit94b90a2cb0b4a0e13018cd5ebbf09394abf3b96b (patch)
tree484d32baaab1acdaab7a817c86aa89f117a21059 /src/desktop/view
parentab75bbfbecdfb4a0355106f740944c87cb9edd4c (diff)
config/lua: add ExpressionVec2, allow using a table for vec2 rules (#14197)
Diffstat (limited to 'src/desktop/view')
-rw-r--r--src/desktop/view/Window.cpp18
-rw-r--r--src/desktop/view/Window.hpp1
2 files changed, 12 insertions, 7 deletions
diff --git a/src/desktop/view/Window.cpp b/src/desktop/view/Window.cpp
index 53347722..e75c93a5 100644
--- a/src/desktop/view/Window.cpp
+++ b/src/desktop/view/Window.cpp
@@ -1645,12 +1645,16 @@ std::optional<double> CWindow::calculateSingleExpr(const std::string& s) {
}
std::optional<Vector2D> CWindow::calculateExpression(const std::string& s) {
- auto spacePos = s.find(' ');
- if (spacePos == std::string::npos)
+ const auto parsed = Math::parseExpressionVec2(s);
+ if (!parsed)
return std::nullopt;
- const auto LHS = calculateSingleExpr(s.substr(0, spacePos));
- const auto RHS = calculateSingleExpr(s.substr(spacePos + 1));
+ return calculateExpression(*parsed);
+}
+
+std::optional<Vector2D> CWindow::calculateExpression(const Math::SExpressionVec2& expr) {
+ const auto LHS = calculateSingleExpr(expr.x);
+ const auto RHS = calculateSingleExpr(expr.y);
if (!LHS || !RHS)
return std::nullopt;
@@ -2011,10 +2015,10 @@ void CWindow::mapWindow() {
} else {
bool setPseudo = false;
- if (!m_ruleApplicator->static_.size.empty()) {
- const auto COMPUTED = calculateExpression(m_ruleApplicator->static_.size);
+ if (m_ruleApplicator->static_.size) {
+ const auto COMPUTED = calculateExpression(*m_ruleApplicator->static_.size);
if (!COMPUTED)
- Log::logger->log(Log::ERR, "failed to parse {} as an expression", m_ruleApplicator->static_.size);
+ Log::logger->log(Log::ERR, "failed to parse {} as an expression", m_ruleApplicator->static_.size->toString());
else {
setPseudo = true;
m_target->setPseudoSize(*COMPUTED);
diff --git a/src/desktop/view/Window.hpp b/src/desktop/view/Window.hpp
index 35c08326..ff6fad96 100644
--- a/src/desktop/view/Window.hpp
+++ b/src/desktop/view/Window.hpp
@@ -356,6 +356,7 @@ namespace Desktop::View {
SP<CWLSurfaceResource> getSolitaryResource();
Vector2D getReportedSize();
std::optional<Vector2D> calculateExpression(const std::string& s);
+ std::optional<Vector2D> calculateExpression(const Math::SExpressionVec2& expr);
std::optional<Vector2D> minSize();
std::optional<Vector2D> maxSize();
SP<Layout::ITarget> layoutTarget();