summaryrefslogtreecommitdiff
path: root/Source/Core/DolphinQt/Config/ConfigControls/ConfigFloatSlider.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/DolphinQt/Config/ConfigControls/ConfigFloatSlider.cpp')
-rw-r--r--Source/Core/DolphinQt/Config/ConfigControls/ConfigFloatSlider.cpp48
1 files changed, 48 insertions, 0 deletions
diff --git a/Source/Core/DolphinQt/Config/ConfigControls/ConfigFloatSlider.cpp b/Source/Core/DolphinQt/Config/ConfigControls/ConfigFloatSlider.cpp
new file mode 100644
index 0000000000..f881f6653f
--- /dev/null
+++ b/Source/Core/DolphinQt/Config/ConfigControls/ConfigFloatSlider.cpp
@@ -0,0 +1,48 @@
+// Copyright 2023 Dolphin Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "DolphinQt/Config/ConfigControls/ConfigFloatSlider.h"
+
+#include <QSignalBlocker>
+
+#include "Common/Config/Config.h"
+
+#include "DolphinQt/Settings.h"
+
+ConfigFloatSlider::ConfigFloatSlider(float minimum, float maximum,
+ const Config::Info<float>& setting, float step)
+ : ToolTipSlider(Qt::Horizontal), m_minimum(minimum), m_setting(setting), m_step(step)
+{
+ const float range = maximum - minimum;
+ const int steps = std::round(range / step);
+ const int interval = std::round(range / steps);
+ const int current_value = std::round((Config::Get(m_setting) - minimum) / step);
+
+ setMinimum(0);
+ setMaximum(steps);
+ setTickInterval(interval);
+ setValue(current_value);
+
+ connect(this, &ConfigFloatSlider::valueChanged, this, &ConfigFloatSlider::Update);
+
+ connect(&Settings::Instance(), &Settings::ConfigChanged, this, [this] {
+ QFont bf = font();
+ bf.setBold(Config::GetActiveLayerForConfig(m_setting) != Config::LayerType::Base);
+ setFont(bf);
+
+ const QSignalBlocker blocker(this);
+ const int current_value = std::round((Config::Get(m_setting) - m_minimum) / m_step);
+ setValue(current_value);
+ });
+}
+
+void ConfigFloatSlider::Update(int value)
+{
+ const float current_value = (m_step * value) + m_minimum;
+ Config::SetBaseOrCurrent(m_setting, current_value);
+}
+
+float ConfigFloatSlider::GetValue() const
+{
+ return (m_step * value()) + m_minimum;
+}