From 03ec86f2480f8d96651070af6e5e0529243bed35 Mon Sep 17 00:00:00 2001 From: Filoppi Date: Thu, 8 Jun 2023 03:10:12 +0300 Subject: [PATCH] Qt: Add float config tooltip slider --- Source/Core/DolphinQt/CMakeLists.txt | 2 + .../ConfigControls/ConfigFloatSlider.cpp | 48 +++++++++++++++++++ .../Config/ConfigControls/ConfigFloatSlider.h | 30 ++++++++++++ Source/Core/DolphinQt/DolphinQt.vcxproj | 2 + 4 files changed, 82 insertions(+) create mode 100644 Source/Core/DolphinQt/Config/ConfigControls/ConfigFloatSlider.cpp create mode 100644 Source/Core/DolphinQt/Config/ConfigControls/ConfigFloatSlider.h diff --git a/Source/Core/DolphinQt/CMakeLists.txt b/Source/Core/DolphinQt/CMakeLists.txt index 573a3236a0..3c2c848d33 100644 --- a/Source/Core/DolphinQt/CMakeLists.txt +++ b/Source/Core/DolphinQt/CMakeLists.txt @@ -47,6 +47,8 @@ add_executable(dolphin-emu Config/ConfigControls/ConfigInteger.h Config/ConfigControls/ConfigRadio.cpp Config/ConfigControls/ConfigRadio.h + Config/ConfigControls/ConfigFloatSlider.cpp + Config/ConfigControls/ConfigFloatSlider.h Config/ConfigControls/ConfigSlider.cpp Config/ConfigControls/ConfigSlider.h Config/ControllerInterface/ControllerInterfaceWindow.cpp 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 + +#include "Common/Config/Config.h" + +#include "DolphinQt/Settings.h" + +ConfigFloatSlider::ConfigFloatSlider(float minimum, float maximum, + const Config::Info& 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; +} diff --git a/Source/Core/DolphinQt/Config/ConfigControls/ConfigFloatSlider.h b/Source/Core/DolphinQt/Config/ConfigControls/ConfigFloatSlider.h new file mode 100644 index 0000000000..e20739cfe4 --- /dev/null +++ b/Source/Core/DolphinQt/Config/ConfigControls/ConfigFloatSlider.h @@ -0,0 +1,30 @@ +// Copyright 2023 Dolphin Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "DolphinQt/Config/ToolTipControls/ToolTipSlider.h" + +namespace Config +{ +template +class Info; +} + +// Automatically converts an int slider into a float one. +// Do not read the int values or ranges directly from it. +class ConfigFloatSlider : public ToolTipSlider +{ + Q_OBJECT +public: + ConfigFloatSlider(float minimum, float maximum, const Config::Info& setting, float step); + void Update(int value); + + // Returns the adjusted float value + float GetValue() const; + +private: + float m_minimum; + float m_step; + const Config::Info& m_setting; +}; diff --git a/Source/Core/DolphinQt/DolphinQt.vcxproj b/Source/Core/DolphinQt/DolphinQt.vcxproj index 896bde5458..cd0f3a7487 100644 --- a/Source/Core/DolphinQt/DolphinQt.vcxproj +++ b/Source/Core/DolphinQt/DolphinQt.vcxproj @@ -60,6 +60,7 @@ + @@ -263,6 +264,7 @@ +