diff options
| author | Jordan Woyak <jordan.woyak@gmail.com> | 2026-10-02 03:47:24 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-10-02 03:47:24 -0500 |
| commit | 8fe19d11187889de269f1fd01a23116f2de343ea (patch) | |
| tree | 63c68826f9e2414937ba21cba087aec2f9ef4154 /Source/Core | |
| parent | 5390a61e521013738a75102daa43513d79423192 (diff) | |
| parent | 0cbf5a80abad9b007e46c648999953bc50e0af2f (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.cpp | 4 | ||||
| -rw-r--r-- | Source/Core/InputCommon/ControlReference/FunctionExpression.cpp | 68 |
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") |
