From f4fec42165f245e8ad35456a25bfada8428ba1f2 Mon Sep 17 00:00:00 2001 From: Filoppi Date: Tue, 4 May 2021 23:50:23 +0300 Subject: [PATCH] Add mixed comments to input code, make some tooltip clearer --- Source/Core/Core/HW/GCPadEmu.cpp | 13 +++++++++---- Source/Core/Core/HW/WiimoteEmu/ExtensionPort.cpp | 1 - .../Config/ToolTipControls/ToolTipWidget.h | 4 +++- .../ControlReference/ExpressionParser.cpp | 5 +++++ .../InputCommon/ControlReference/ExpressionParser.h | 3 +++ .../ControllerEmu/ControlGroup/ControlGroup.cpp | 2 +- .../ControllerEmu/ControlGroup/IMUGyroscope.cpp | 2 +- Source/Core/InputCommon/ControllerEmu/StickGate.cpp | 5 +++++ Source/Core/InputCommon/InputConfig.cpp | 1 - Source/Core/VideoCommon/RenderBase.cpp | 1 + 10 files changed, 28 insertions(+), 9 deletions(-) diff --git a/Source/Core/Core/HW/GCPadEmu.cpp b/Source/Core/Core/HW/GCPadEmu.cpp index c41cfc472f..ffcf3f556b 100644 --- a/Source/Core/Core/HW/GCPadEmu.cpp +++ b/Source/Core/Core/HW/GCPadEmu.cpp @@ -93,10 +93,15 @@ GCPad::GCPad(const unsigned int index) : m_index(index) // options groups.emplace_back(m_options = new ControllerEmu::ControlGroup(_trans("Options"))); - m_options->AddSetting(&m_always_connected_setting, - // i18n: Treat a controller as always being connected regardless of what - // devices the user actually has plugged in - _trans("Always Connected"), false); + m_options->AddSetting( + &m_always_connected_setting, + // i18n: Treat a controller as always being connected regardless of what + // devices the user actually has plugged in + {_trans("Always Connected"), _trans(""), + _trans("Always connected if checked.\n" + "If unchecked, it will link the emulated controller connection state\n" + "to the real default device connection state (if there is one).")}, + false); } std::string GCPad::GetName() const diff --git a/Source/Core/Core/HW/WiimoteEmu/ExtensionPort.cpp b/Source/Core/Core/HW/WiimoteEmu/ExtensionPort.cpp index 8a9c6de766..c94242da4a 100644 --- a/Source/Core/Core/HW/WiimoteEmu/ExtensionPort.cpp +++ b/Source/Core/Core/HW/WiimoteEmu/ExtensionPort.cpp @@ -23,7 +23,6 @@ void ExtensionPort::AttachExtension(Extension* ext) m_extension = ext; m_i2c_bus.AddSlave(m_extension); - ; } } // namespace WiimoteEmu diff --git a/Source/Core/DolphinQt/Config/ToolTipControls/ToolTipWidget.h b/Source/Core/DolphinQt/Config/ToolTipControls/ToolTipWidget.h index 8b5ffe5518..2aea3e0b29 100644 --- a/Source/Core/DolphinQt/Config/ToolTipControls/ToolTipWidget.h +++ b/Source/Core/DolphinQt/Config/ToolTipControls/ToolTipWidget.h @@ -10,6 +10,8 @@ #include "DolphinQt/Config/Graphics/BalloonTip.h" +constexpr int TOOLTIP_DELAY = 300; + template class ToolTipWidget : public Derived { @@ -25,7 +27,7 @@ private: { if (m_timer_id) return; - m_timer_id = this->startTimer(300); + m_timer_id = this->startTimer(TOOLTIP_DELAY); } void leaveEvent(QEvent* event) override diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp index c96ea0599c..5e69cc42d9 100644 --- a/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp +++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.cpp @@ -371,6 +371,7 @@ public: } case TOK_ASSIGN: { + // Use this carefully as it's extremely powerful and can end up in unforeseen situations lhs->SetValue(rhs->GetValue()); return lhs->GetValue(); } @@ -565,6 +566,9 @@ private: // This class proxies all methods to its either left-hand child if it has bound controls, or its // right-hand child. Its intended use is for supporting old-style barewords expressions. +// Note that if you have a keyboard device as default device and the expression is a single digit +// number, this will usually resolve in a numerical key instead of a numerical value. +// Though if this expression belongs to NumericSetting, it will likely be simplifed back to a value. class CoalesceExpression : public Expression { public: @@ -945,6 +949,7 @@ static std::unique_ptr ParseBarewordExpression(const std::string& st qualifier.control_name = str; qualifier.has_device = false; + // This control expression will only work (find the specified control) with the default device. return std::make_unique(qualifier); } diff --git a/Source/Core/InputCommon/ControlReference/ExpressionParser.h b/Source/Core/InputCommon/ControlReference/ExpressionParser.h index 9789e9afe0..14670848ae 100644 --- a/Source/Core/InputCommon/ControlReference/ExpressionParser.h +++ b/Source/Core/InputCommon/ControlReference/ExpressionParser.h @@ -63,7 +63,9 @@ public: enum class ParseStatus { Successful, + // Note that the expression could still work in this case (be valid and return a value) SyntaxError, + // Will return the default value EmptyExpression, }; @@ -107,6 +109,7 @@ class ControlQualifier public: bool has_device; Core::DeviceQualifier device_qualifier; + // Makes no distinction between input and output std::string control_name; ControlQualifier() : has_device(false) {} diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp index 84c7238e48..6dde9d3c44 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/ControlGroup.cpp @@ -44,7 +44,7 @@ void ControlGroup::AddDeadzoneSetting(SettingValue* value, double maximu // i18n: The percent symbol. _trans("%"), // i18n: Refers to the dead-zone setting of gamepad inputs. - _trans("Input strength to ignore.")}, + _trans("Input strength to ignore and remap.")}, 0, 0, maximum_deadzone); } diff --git a/Source/Core/InputCommon/ControllerEmu/ControlGroup/IMUGyroscope.cpp b/Source/Core/InputCommon/ControllerEmu/ControlGroup/IMUGyroscope.cpp index b5408cfe34..95c74b1896 100644 --- a/Source/Core/InputCommon/ControllerEmu/ControlGroup/IMUGyroscope.cpp +++ b/Source/Core/InputCommon/ControllerEmu/ControlGroup/IMUGyroscope.cpp @@ -40,7 +40,7 @@ IMUGyroscope::IMUGyroscope(std::string name_, std::string ui_name_) // i18n: "°/s" is the symbol for degrees (angular measurement) divided by seconds. _trans("°/s"), // i18n: Refers to the dead-zone setting of gyroscope input. - _trans("Angular velocity to ignore.")}, + _trans("Angular velocity to ignore and remap.")}, 2, 0, 180); AddSetting(&m_calibration_period_setting, diff --git a/Source/Core/InputCommon/ControllerEmu/StickGate.cpp b/Source/Core/InputCommon/ControllerEmu/StickGate.cpp index d1b230c373..60a3c062bd 100644 --- a/Source/Core/InputCommon/ControllerEmu/StickGate.cpp +++ b/Source/Core/InputCommon/ControllerEmu/StickGate.cpp @@ -128,6 +128,7 @@ std::optional SquareStickGate::GetIdealCalibrationSampleCount() const ReshapableInput::ReshapableInput(std::string name_, std::string ui_name_, GroupType type_) : ControlGroup(std::move(name_), std::move(ui_name_), type_) { + // 50 is not always enough but users can set it to more with an expression AddDeadzoneSetting(&m_deadzone_setting, 50); } @@ -285,6 +286,10 @@ ReshapableInput::ReshapeData ReshapableInput::Reshape(ControlState x, ControlSta x -= m_center.x; y -= m_center.y; + // We run this even if both x and y will be zero. + // In that case, std::atan2(0, 0) returns a valid non-NaN value, but the exact value + // (which depends on the signs of x and y) does not matter here as dist is zero + // TODO: make the AtAngle functions work with negative angles: ControlState angle = std::atan2(y, x) + MathUtil::TAU; diff --git a/Source/Core/InputCommon/InputConfig.cpp b/Source/Core/InputCommon/InputConfig.cpp index 140e66e261..3b9fb7f809 100644 --- a/Source/Core/InputCommon/InputConfig.cpp +++ b/Source/Core/InputCommon/InputConfig.cpp @@ -133,7 +133,6 @@ bool InputConfig::LoadConfig(bool isGC) } #endif controller->LoadConfig(&config); - // Update refs controller->UpdateReferences(g_controller_interface); controller_names.push_back(controller->GetName()); diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp index ba91c0551e..bfb65d71ce 100644 --- a/Source/Core/VideoCommon/RenderBase.cpp +++ b/Source/Core/VideoCommon/RenderBase.cpp @@ -770,6 +770,7 @@ void Renderer::UpdateDrawRectangle() const float win_width = static_cast(m_backbuffer_width); const float win_height = static_cast(m_backbuffer_height); + // FIXME: this breaks at very low widget sizes // Make ControllerInterface aware of the render window region actually being used // to adjust mouse cursor inputs. g_controller_interface.SetAspectRatioAdjustment(draw_aspect_ratio / (win_width / win_height));