summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJordan Woyak <jordan.woyak@gmail.com>2026-10-02 03:47:24 -0500
committerGitHub <noreply@github.com>2026-10-02 03:47:24 -0500
commit8fe19d11187889de269f1fd01a23116f2de343ea (patch)
tree63c68826f9e2414937ba21cba087aec2f9ef4154 /Source/Core
parent5390a61e521013738a75102daa43513d79423192 (diff)
parent0cbf5a80abad9b007e46c648999953bc50e0af2f (diff)
Merge pull request #14860 from JoshuaVandaele/inputsyntax-nodecimal
Input Syntax: Add floor, ceil, round, and trunc functions
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt/Config/Mapping/IOWindow.cpp4
-rw-r--r--Source/Core/InputCommon/ControlReference/FunctionExpression.cpp68
2 files changed, 72 insertions, 0 deletions
diff --git a/Source/Core/DolphinQt/Config/Mapping/IOWindow.cpp b/Source/Core/DolphinQt/Config/Mapping/IOWindow.cpp
index 3412022f6b..0ba47bcacc 100644
--- a/Source/Core/DolphinQt/Config/Mapping/IOWindow.cpp
+++ b/Source/Core/DolphinQt/Config/Mapping/IOWindow.cpp
@@ -356,6 +356,10 @@ void IOWindow::CreateMainLayout()
m_functions_combo->addItem(QStringLiteral("atan2"));
m_functions_combo->addItem(QStringLiteral("sqrt"));
m_functions_combo->addItem(QStringLiteral("pow"));
+ m_functions_combo->addItem(QStringLiteral("floor"));
+ m_functions_combo->addItem(QStringLiteral("ceil"));
+ m_functions_combo->addItem(QStringLiteral("round"));
+ m_functions_combo->addItem(QStringLiteral("trunc"));
m_functions_combo->addItem(QStringLiteral("min"));
m_functions_combo->addItem(QStringLiteral("max"));
m_functions_combo->addItem(QStringLiteral("clamp"));
diff --git a/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp b/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp
index 603298de93..9dc9608ed1 100644
--- a/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp
+++ b/Source/Core/InputCommon/ControlReference/FunctionExpression.cpp
@@ -220,6 +220,66 @@ private:
ControlState GetValue() override { return std::pow(GetArg(0).GetValue(), GetArg(1).GetValue()); }
};
+// usage: floor(expression)
+class FloorExpression : public FunctionExpression
+{
+private:
+ ArgumentValidation ValidateArguments() override
+ {
+ if (GetArgCount() == 1)
+ return ArgumentsAreValid{};
+ else
+ return ExpectedArguments{"expression"};
+ }
+
+ ControlState GetValue() override { return std::floor(GetArg(0).GetValue()); }
+};
+
+// usage: ceil(expression)
+class CeilExpression : public FunctionExpression
+{
+private:
+ ArgumentValidation ValidateArguments() override
+ {
+ if (GetArgCount() == 1)
+ return ArgumentsAreValid{};
+ else
+ return ExpectedArguments{"expression"};
+ }
+
+ ControlState GetValue() override { return std::ceil(GetArg(0).GetValue()); }
+};
+
+// usage: round(expression)
+class RoundExpression : public FunctionExpression
+{
+private:
+ ArgumentValidation ValidateArguments() override
+ {
+ if (GetArgCount() == 1)
+ return ArgumentsAreValid{};
+ else
+ return ExpectedArguments{"expression"};
+ }
+
+ ControlState GetValue() override { return std::round(GetArg(0).GetValue()); }
+};
+
+// usage: trunc(expression)
+class TruncExpression : public FunctionExpression
+{
+private:
+ ArgumentValidation ValidateArguments() override
+ {
+ if (GetArgCount() == 1)
+ return ArgumentsAreValid{};
+ else
+ return ExpectedArguments{"expression"};
+ }
+
+ ControlState GetValue() override { return std::trunc(GetArg(0).GetValue()); }
+};
+
// usage: min(a, b)
class MinExpression : public FunctionExpression
{
@@ -660,6 +720,14 @@ std::unique_ptr<FunctionExpression> MakeFunctionExpression(std::string_view name
return std::make_unique<SqrtExpression>();
if (name == "pow")
return std::make_unique<PowExpression>();
+ if (name == "floor")
+ return std::make_unique<FloorExpression>();
+ if (name == "ceil")
+ return std::make_unique<CeilExpression>();
+ if (name == "round")
+ return std::make_unique<RoundExpression>();
+ if (name == "trunc")
+ return std::make_unique<TruncExpression>();
if (name == "min")
return std::make_unique<MinExpression>();
if (name == "max")