diff options
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") |
