summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar lat9nq2023-05-08 17:33:10 -0400
committerGravatar lat9nq2023-07-21 10:56:07 -0400
commitd35577d3ed0bfc56ddf85a2e8b163d9d02bec809 (patch)
tree54ab3ccf2ac728a75993c9931a39d4739206e25a /src
parentconfiguration: Use buttons instead of highlights (diff)
downloadyuzu-d35577d3ed0bfc56ddf85a2e8b163d9d02bec809.tar.gz
yuzu-d35577d3ed0bfc56ddf85a2e8b163d9d02bec809.tar.xz
yuzu-d35577d3ed0bfc56ddf85a2e8b163d9d02bec809.zip
configuration: Implement slider
Diffstat (limited to 'src')
-rw-r--r--src/common/settings.h13
-rw-r--r--src/yuzu/configuration/configuration_shared.cpp203
-rw-r--r--src/yuzu/configuration/configuration_shared.h6
-rw-r--r--src/yuzu/configuration/configure_graphics.cpp31
-rw-r--r--src/yuzu/configuration/configure_graphics.h2
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.cpp2
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.h2
7 files changed, 188 insertions, 71 deletions
diff --git a/src/common/settings.h b/src/common/settings.h
index 2879237cc..4ca8299b3 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -200,6 +200,8 @@ public:
200 virtual bool RuntimeModfiable() const = 0; 200 virtual bool RuntimeModfiable() const = 0;
201 virtual void SetGlobal(bool global) {} 201 virtual void SetGlobal(bool global) {}
202 virtual constexpr u32 Id() const = 0; 202 virtual constexpr u32 Id() const = 0;
203 virtual std::string MinVal() const = 0;
204 virtual std::string MaxVal() const = 0;
203 virtual bool UsingGlobal() const { 205 virtual bool UsingGlobal() const {
204 return false; 206 return false;
205 } 207 }
@@ -336,7 +338,7 @@ protected:
336 if constexpr (std::is_same<Type, std::string>()) { 338 if constexpr (std::is_same<Type, std::string>()) {
337 return value_; 339 return value_;
338 } else if constexpr (std::is_same<Type, std::optional<u32>>()) { 340 } else if constexpr (std::is_same<Type, std::optional<u32>>()) {
339 return value_.has_value() ? std::to_string(*value_) : "0"; 341 return value_.has_value() ? std::to_string(*value_) : "none";
340 } else if constexpr (std::is_same<Type, bool>()) { 342 } else if constexpr (std::is_same<Type, bool>()) {
341 return value_ ? "true" : "false"; 343 return value_ ? "true" : "false";
342 } else { 344 } else {
@@ -401,7 +403,7 @@ public:
401 if constexpr (std::is_same<Type, std::string>()) { 403 if constexpr (std::is_same<Type, std::string>()) {
402 this->SetValue(input); 404 this->SetValue(input);
403 } else if constexpr (std::is_same<Type, std::optional<u32>>()) { 405 } else if constexpr (std::is_same<Type, std::optional<u32>>()) {
404 this->SetValue(static_cast<u32>(std::stoll(input))); 406 this->SetValue(static_cast<u32>(std::stoul(input)));
405 } else if constexpr (std::is_same<Type, bool>()) { 407 } else if constexpr (std::is_same<Type, bool>()) {
406 this->SetValue(input == "true"); 408 this->SetValue(input == "true");
407 } else { 409 } else {
@@ -435,6 +437,13 @@ public:
435 return id; 437 return id;
436 } 438 }
437 439
440 virtual std::string MinVal() const override {
441 return this->ToString(minimum);
442 }
443 virtual std::string MaxVal() const override {
444 return this->ToString(maximum);
445 }
446
438protected: 447protected:
439 Type value{}; ///< The setting 448 Type value{}; ///< The setting
440 const Type default_value{}; ///< The default value 449 const Type default_value{}; ///< The default value
diff --git a/src/yuzu/configuration/configuration_shared.cpp b/src/yuzu/configuration/configuration_shared.cpp
index 45165c2e9..076d9cc0d 100644
--- a/src/yuzu/configuration/configuration_shared.cpp
+++ b/src/yuzu/configuration/configuration_shared.cpp
@@ -13,10 +13,14 @@
13#include <QStyle> 13#include <QStyle>
14#include <QWidget> 14#include <QWidget>
15#include <qabstractbutton.h> 15#include <qabstractbutton.h>
16#include <qabstractslider.h>
17#include <qboxlayout.h>
16#include <qcheckbox.h> 18#include <qcheckbox.h>
17#include <qcombobox.h> 19#include <qcombobox.h>
18#include <qnamespace.h> 20#include <qnamespace.h>
21#include <qsize.h>
19#include <qsizepolicy.h> 22#include <qsizepolicy.h>
23#include <qsurfaceformat.h>
20#include "common/settings.h" 24#include "common/settings.h"
21#include "yuzu/configuration/configuration_shared.h" 25#include "yuzu/configuration/configuration_shared.h"
22#include "yuzu/configuration/configure_per_game.h" 26#include "yuzu/configuration/configure_per_game.h"
@@ -24,7 +28,7 @@
24 28
25namespace ConfigurationShared { 29namespace ConfigurationShared {
26 30
27static QPushButton* CreateClearGlobalButton(QWidget* parent, Settings::BasicSetting* setting) { 31static QPushButton* CreateRestoreGlobalButton(QWidget* parent, Settings::BasicSetting* setting) {
28 QStyle* style = parent->style(); 32 QStyle* style = parent->style();
29 QIcon* icon = new QIcon(style->standardIcon(QStyle::SP_DialogResetButton)); 33 QIcon* icon = new QIcon(style->standardIcon(QStyle::SP_DialogResetButton));
30 QPushButton* button = new QPushButton(*icon, QStringLiteral(""), parent); 34 QPushButton* button = new QPushButton(*icon, QStringLiteral(""), parent);
@@ -40,10 +44,8 @@ static QPushButton* CreateClearGlobalButton(QWidget* parent, Settings::BasicSett
40 return button; 44 return button;
41} 45}
42 46
43static std::pair<QWidget*, std::function<void()>> CreateCheckBox(Settings::BasicSetting* setting, 47static std::tuple<QWidget*, void*, QPushButton*, std::function<void()>> CreateCheckBox(
44 const QString& label, 48 Settings::BasicSetting* setting, const QString& label, QWidget* parent) {
45 QWidget* parent,
46 std::list<CheckState>& trackers) {
47 QWidget* widget = new QWidget(parent); 49 QWidget* widget = new QWidget(parent);
48 QHBoxLayout* layout = new QHBoxLayout(widget); 50 QHBoxLayout* layout = new QHBoxLayout(widget);
49 51
@@ -54,13 +56,15 @@ static std::pair<QWidget*, std::function<void()>> CreateCheckBox(Settings::Basic
54 56
55 std::function<void()> load_func; 57 std::function<void()> load_func;
56 58
59 QPushButton* button{nullptr};
60
57 layout->addWidget(checkbox); 61 layout->addWidget(checkbox);
58 if (Settings::IsConfiguringGlobal()) { 62 if (Settings::IsConfiguringGlobal()) {
59 load_func = [setting, checkbox]() { 63 load_func = [setting, checkbox]() {
60 setting->LoadString(checkbox->checkState() == Qt::Checked ? "true" : "false"); 64 setting->LoadString(checkbox->checkState() == Qt::Checked ? "true" : "false");
61 }; 65 };
62 } else { 66 } else {
63 auto* button = CreateClearGlobalButton(parent, setting); 67 button = CreateRestoreGlobalButton(parent, setting);
64 layout->addWidget(button); 68 layout->addWidget(button);
65 69
66 QObject::connect(checkbox, &QCheckBox::stateChanged, [button](int) { 70 QObject::connect(checkbox, &QCheckBox::stateChanged, [button](int) {
@@ -86,7 +90,7 @@ static std::pair<QWidget*, std::function<void()>> CreateCheckBox(Settings::Basic
86 90
87 layout->setContentsMargins(0, 0, 0, 0); 91 layout->setContentsMargins(0, 0, 0, 0);
88 92
89 return {widget, load_func}; 93 return {widget, checkbox, button, load_func};
90} 94}
91 95
92static std::tuple<QWidget*, QComboBox*, QPushButton*, std::function<void()>> CreateCombobox( 96static std::tuple<QWidget*, QComboBox*, QPushButton*, std::function<void()>> CreateCombobox(
@@ -122,7 +126,7 @@ static std::tuple<QWidget*, QComboBox*, QPushButton*, std::function<void()>> Cre
122 setting->LoadString(std::to_string(combobox->currentIndex())); 126 setting->LoadString(std::to_string(combobox->currentIndex()));
123 }; 127 };
124 } else if (managed) { 128 } else if (managed) {
125 button = CreateClearGlobalButton(parent, setting); 129 button = CreateRestoreGlobalButton(parent, setting);
126 layout->addWidget(button); 130 layout->addWidget(button);
127 131
128 QObject::connect(button, &QAbstractButton::clicked, [button, combobox, setting](bool) { 132 QObject::connect(button, &QAbstractButton::clicked, [button, combobox, setting](bool) {
@@ -149,8 +153,8 @@ static std::tuple<QWidget*, QComboBox*, QPushButton*, std::function<void()>> Cre
149 return {group, combobox, button, load_func}; 153 return {group, combobox, button, load_func};
150} 154}
151 155
152static std::tuple<QWidget*, void*, std::function<void()>> CreateLineEdit( 156static std::tuple<QWidget*, void*, QPushButton*, std::function<void()>> CreateLineEdit(
153 Settings::BasicSetting* setting, const QString& label, QWidget* parent) { 157 Settings::BasicSetting* setting, const QString& label, QWidget* parent, bool managed = true) {
154 QWidget* widget = new QWidget(parent); 158 QWidget* widget = new QWidget(parent);
155 widget->setObjectName(label); 159 widget->setObjectName(label);
156 160
@@ -160,58 +164,140 @@ static std::tuple<QWidget*, void*, std::function<void()>> CreateLineEdit(
160 const QString text = QString::fromStdString(setting->ToString()); 164 const QString text = QString::fromStdString(setting->ToString());
161 line_edit->setText(text); 165 line_edit->setText(text);
162 166
163 std::function<void()> load_func; 167 std::function<void()> load_func = []() {};
164 168
169 QLabel* q_label = new QLabel(label, widget);
165 // setSizePolicy lets widget expand and take an equal part of the space as the line edit 170 // setSizePolicy lets widget expand and take an equal part of the space as the line edit
166 if (Settings::IsConfiguringGlobal()) { 171 q_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
167 QLabel* q_label = new QLabel(label, widget); 172 layout->addWidget(q_label);
168 q_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); 173
169 layout->addWidget(q_label); 174 layout->addWidget(line_edit);
170 175
176 QPushButton* button{nullptr};
177
178 if (Settings::IsConfiguringGlobal() && !managed) {
171 load_func = [line_edit, setting]() { 179 load_func = [line_edit, setting]() {
172 std::string load_text = line_edit->text().toStdString(); 180 std::string load_text = line_edit->text().toStdString();
173 setting->LoadString(load_text); 181 setting->LoadString(load_text);
174 }; 182 };
175 } else { 183 } else if (!managed) {
176 QCheckBox* checkbox = new QCheckBox(label, parent); 184 button = CreateRestoreGlobalButton(parent, setting);
177 checkbox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); 185 layout->addWidget(button);
178 layout->addWidget(checkbox);
179
180 const auto highlight_func = [widget, line_edit](int state) {
181 bool using_global = state != Qt::Checked;
182 SetHighlight(widget, !using_global);
183 line_edit->setEnabled(!using_global);
184 };
185 186
186 QObject::connect(checkbox, qOverload<int>(&QCheckBox::stateChanged), widget, 187 QObject::connect(button, &QAbstractButton::clicked, [=](bool) {
187 highlight_func); 188 button->setEnabled(false);
189 button->setVisible(false);
188 190
189 checkbox->setCheckState(setting->UsingGlobal() ? Qt::Unchecked : Qt::Checked); 191 line_edit->setText(QString::fromStdString(setting->ToStringGlobal()));
190 highlight_func(checkbox->checkState()); 192 });
191 193
192 load_func = [checkbox, setting, line_edit]() { 194 QObject::connect(line_edit, &QLineEdit::textChanged, [=](QString) {
193 if (checkbox->checkState() == Qt::Checked) { 195 button->setEnabled(true);
194 setting->SetGlobal(false); 196 button->setVisible(true);
197 });
195 198
196 std::string load_text = line_edit->text().toStdString(); 199 load_func = [=]() {
197 setting->LoadString(load_text); 200 bool using_global = !button->isEnabled();
198 } else { 201 setting->SetGlobal(using_global);
199 setting->SetGlobal(true); 202 if (!using_global) {
203 setting->LoadString(line_edit->text().toStdString());
200 } 204 }
201 }; 205 };
202 } 206 }
203 207
204 layout->addWidget(line_edit); 208 layout->setContentsMargins(0, 0, 0, 0);
209
210 return {widget, line_edit, button, load_func};
211}
212
213static std::tuple<QWidget*, void*, QPushButton*, std::function<void()>> CreateSlider(
214 Settings::BasicSetting* setting, const QString& name, QWidget* parent, bool reversed,
215 float multiplier) {
216 QWidget* widget = new QWidget(parent);
217 QHBoxLayout* layout = new QHBoxLayout(widget);
218 QSlider* slider = new QSlider(Qt::Horizontal, widget);
219 QLabel* label = new QLabel(name, widget);
220 QPushButton* button{nullptr};
221 QLabel* feedback = new QLabel(widget);
222
223 layout->addWidget(label);
224 layout->addWidget(slider);
225 layout->addWidget(feedback);
226
227 label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
205 228
206 layout->setContentsMargins(0, 0, 0, 0); 229 layout->setContentsMargins(0, 0, 0, 0);
207 230
208 return {widget, line_edit, load_func}; 231 int max_val = std::stoi(setting->MaxVal());
232
233 QObject::connect(slider, &QAbstractSlider::valueChanged, [=](int value) {
234 int present = (reversed ? max_val - value : value) * multiplier;
235 feedback->setText(
236 QStringLiteral("%1%").arg(QString::fromStdString(std::to_string(present))));
237 });
238
239 slider->setValue(std::stoi(setting->ToString()));
240 slider->setMinimum(std::stoi(setting->MinVal()));
241 slider->setMaximum(max_val);
242
243 if (reversed) {
244 slider->setInvertedAppearance(true);
245 }
246
247 std::function<void()> load_func;
248
249 if (Settings::IsConfiguringGlobal()) {
250 load_func = [=]() { setting->LoadString(std::to_string(slider->value())); };
251 } else {
252 button = CreateRestoreGlobalButton(parent, setting);
253 layout->addWidget(button);
254
255 QObject::connect(button, &QAbstractButton::clicked, [=](bool) {
256 slider->setValue(std::stoi(setting->ToStringGlobal()));
257
258 button->setEnabled(false);
259 button->setVisible(false);
260 });
261
262 QObject::connect(slider, &QAbstractSlider::sliderMoved, [=](int) {
263 button->setEnabled(true);
264 button->setVisible(true);
265 });
266
267 load_func = [=]() {
268 bool using_global = !button->isEnabled();
269 setting->SetGlobal(using_global);
270 if (!using_global) {
271 setting->LoadString(std::to_string(slider->value()));
272 }
273 };
274 }
275
276 return {widget, slider, button, []() {}};
277}
278
279static std::tuple<QWidget*, void*, void*, QPushButton*, std::function<void()>>
280CreateCheckBoxWithLineEdit(Settings::BasicSetting* setting, const QString& label, QWidget* parent) {
281 auto tuple = CreateCheckBox(setting, label, parent);
282 auto* widget = std::get<0>(tuple);
283 auto* checkbox = std::get<1>(tuple);
284 auto* button = std::get<2>(tuple);
285 auto load_func = std::get<3>(tuple);
286 QHBoxLayout* layout = dynamic_cast<QHBoxLayout*>(widget->layout());
287
288 auto line_edit_tuple = CreateLineEdit(setting, label, parent, false);
289 auto* line_edit_widget = std::get<0>(line_edit_tuple);
290 auto* line_edit = std::get<1>(line_edit_tuple);
291
292 layout->insertWidget(1, line_edit_widget);
293
294 return {widget, checkbox, line_edit, button, load_func};
209} 295}
210 296
211std::tuple<QWidget*, void*, QPushButton*> CreateWidget( 297std::tuple<QWidget*, void*, QPushButton*> CreateWidget(
212 Settings::BasicSetting* setting, const TranslationMap& translations, QWidget* parent, 298 Settings::BasicSetting* setting, const TranslationMap& translations, QWidget* parent,
213 bool runtime_lock, std::forward_list<std::function<void(bool)>>& apply_funcs, 299 bool runtime_lock, std::forward_list<std::function<void(bool)>>& apply_funcs,
214 std::list<CheckState>& trackers, RequestType request, bool managed) { 300 RequestType request, bool managed, float multiplier, const std::string& text_box_default) {
215 if (!Settings::IsConfiguringGlobal() && !setting->Switchable()) { 301 if (!Settings::IsConfiguringGlobal() && !setting->Switchable()) {
216 LOG_DEBUG(Frontend, "\"{}\" is not switchable, skipping...", setting->GetLabel()); 302 LOG_DEBUG(Frontend, "\"{}\" is not switchable, skipping...", setting->GetLabel());
217 return {nullptr, nullptr, nullptr}; 303 return {nullptr, nullptr, nullptr};
@@ -242,9 +328,27 @@ std::tuple<QWidget*, void*, QPushButton*> CreateWidget(
242 QPushButton* button; 328 QPushButton* button;
243 329
244 if (type == typeid(bool)) { 330 if (type == typeid(bool)) {
245 auto pair = CreateCheckBox(setting, label, parent, trackers); 331 switch (request) {
246 widget = pair.first; 332 case RequestType::Default: {
247 load_func = pair.second; 333 auto tuple = CreateCheckBox(setting, label, parent);
334 widget = std::get<0>(tuple);
335 extra = std::get<1>(tuple);
336 button = std::get<2>(tuple);
337 load_func = std::get<3>(tuple);
338 break;
339 }
340 case RequestType::LineEdit: {
341 auto tuple = CreateCheckBoxWithLineEdit(setting, label, parent);
342 widget = std::get<0>(tuple);
343 break;
344 }
345 case RequestType::ComboBox:
346 case RequestType::SpinBox:
347 case RequestType::Slider:
348 case RequestType::ReverseSlider:
349 case RequestType::MaxEnum:
350 break;
351 }
248 } else if (setting->IsEnum()) { 352 } else if (setting->IsEnum()) {
249 auto tuple = CreateCombobox(setting, label, parent, managed); 353 auto tuple = CreateCombobox(setting, label, parent, managed);
250 widget = std::get<0>(tuple); 354 widget = std::get<0>(tuple);
@@ -253,11 +357,13 @@ std::tuple<QWidget*, void*, QPushButton*> CreateWidget(
253 load_func = std::get<3>(tuple); 357 load_func = std::get<3>(tuple);
254 } else if (type == typeid(u32) || type == typeid(int)) { 358 } else if (type == typeid(u32) || type == typeid(int)) {
255 switch (request) { 359 switch (request) {
360 case RequestType::LineEdit:
256 case RequestType::Default: { 361 case RequestType::Default: {
257 auto tuple = CreateLineEdit(setting, label, parent); 362 auto tuple = CreateLineEdit(setting, label, parent);
258 widget = std::get<0>(tuple); 363 widget = std::get<0>(tuple);
259 extra = std::get<1>(tuple); 364 extra = std::get<1>(tuple);
260 load_func = std::get<2>(tuple); 365 button = std::get<2>(tuple);
366 load_func = std::get<3>(tuple);
261 break; 367 break;
262 } 368 }
263 case RequestType::ComboBox: { 369 case RequestType::ComboBox: {
@@ -268,8 +374,17 @@ std::tuple<QWidget*, void*, QPushButton*> CreateWidget(
268 load_func = std::get<3>(tuple); 374 load_func = std::get<3>(tuple);
269 break; 375 break;
270 } 376 }
271 case RequestType::SpinBox:
272 case RequestType::Slider: 377 case RequestType::Slider:
378 case RequestType::ReverseSlider: {
379 auto tuple = CreateSlider(setting, label, parent, request == RequestType::ReverseSlider,
380 multiplier);
381 widget = std::get<0>(tuple);
382 extra = std::get<1>(tuple);
383 button = std::get<2>(tuple);
384 load_func = std::get<3>(tuple);
385 break;
386 }
387 case RequestType::SpinBox:
273 case RequestType::MaxEnum: 388 case RequestType::MaxEnum:
274 break; 389 break;
275 } 390 }
diff --git a/src/yuzu/configuration/configuration_shared.h b/src/yuzu/configuration/configuration_shared.h
index 63df11d26..ef3b7c9a9 100644
--- a/src/yuzu/configuration/configuration_shared.h
+++ b/src/yuzu/configuration/configuration_shared.h
@@ -48,14 +48,16 @@ enum class RequestType {
48 ComboBox, 48 ComboBox,
49 SpinBox, 49 SpinBox,
50 Slider, 50 Slider,
51 ReverseSlider,
52 LineEdit,
51 MaxEnum, 53 MaxEnum,
52}; 54};
53 55
54std::tuple<QWidget*, void*, QPushButton*> CreateWidget( 56std::tuple<QWidget*, void*, QPushButton*> CreateWidget(
55 Settings::BasicSetting* setting, const TranslationMap& translations, QWidget* parent, 57 Settings::BasicSetting* setting, const TranslationMap& translations, QWidget* parent,
56 bool runtime_lock, std::forward_list<std::function<void(bool)>>& apply_funcs, 58 bool runtime_lock, std::forward_list<std::function<void(bool)>>& apply_funcs,
57 std::list<CheckState>& trackers, RequestType request = RequestType::Default, 59 RequestType request = RequestType::Default, bool managed = true, float multiplier = 1.0f,
58 bool managed = true); 60 const std::string& text_box_default = "");
59 61
60// Global-aware apply and set functions 62// Global-aware apply and set functions
61 63
diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp
index 1145b6c43..d3ca7e8cc 100644
--- a/src/yuzu/configuration/configure_graphics.cpp
+++ b/src/yuzu/configuration/configure_graphics.cpp
@@ -97,7 +97,6 @@ ConfigureGraphics::ConfigureGraphics(
97 Settings::values.bg_blue.GetValue())); 97 Settings::values.bg_blue.GetValue()));
98 UpdateAPILayout(); 98 UpdateAPILayout();
99 PopulateVSyncModeSelection(); //< must happen after UpdateAPILayout 99 PopulateVSyncModeSelection(); //< must happen after UpdateAPILayout
100 // SetFSRIndicatorText(ui->fsr_sharpening_slider->sliderPosition());
101 100
102 // VSync setting needs to be determined after populating the VSync combobox 101 // VSync setting needs to be determined after populating the VSync combobox
103 if (Settings::IsConfiguringGlobal()) { 102 if (Settings::IsConfiguringGlobal()) {
@@ -134,18 +133,13 @@ ConfigureGraphics::ConfigureGraphics(
134 // } 133 // }
135 // UpdateBackgroundColorButton(new_bg_color); 134 // UpdateBackgroundColorButton(new_bg_color);
136 // }); 135 // });
136 // ui->bg_label->setVisible(Settings::IsConfiguringGlobal());
137 // ui->bg_combobox->setVisible(!Settings::IsConfiguringGlobal());
137 138
138 api_combobox->setEnabled(!UISettings::values.has_broken_vulkan && api_combobox->isEnabled()); 139 api_combobox->setEnabled(!UISettings::values.has_broken_vulkan && api_combobox->isEnabled());
139 ui->api_widget->setEnabled( 140 ui->api_widget->setEnabled(
140 (!UISettings::values.has_broken_vulkan || Settings::IsConfiguringGlobal()) && 141 (!UISettings::values.has_broken_vulkan || Settings::IsConfiguringGlobal()) &&
141 ui->api_widget->isEnabled()); 142 ui->api_widget->isEnabled());
142 // ui->bg_label->setVisible(Settings::IsConfiguringGlobal());
143 // ui->bg_combobox->setVisible(!Settings::IsConfiguringGlobal());
144
145 // connect(ui->fsr_sharpening_slider, &QSlider::valueChanged, this,
146 // &ConfigureGraphics::SetFSRIndicatorText);
147 // ui->fsr_sharpening_combobox->setVisible(!Settings::IsConfiguringGlobal());
148 // ui->fsr_sharpening_label->setVisible(Settings::IsConfiguringGlobal());
149} 143}
150 144
151void ConfigureGraphics::PopulateVSyncModeSelection() { 145void ConfigureGraphics::PopulateVSyncModeSelection() {
@@ -230,11 +224,19 @@ void ConfigureGraphics::SetConfiguration() {
230 setting->Id() == Settings::values.shader_backend.Id() || 224 setting->Id() == Settings::values.shader_backend.Id() ||
231 setting->Id() == Settings::values.vsync_mode.Id()) { 225 setting->Id() == Settings::values.vsync_mode.Id()) {
232 return ConfigurationShared::CreateWidget( 226 return ConfigurationShared::CreateWidget(
233 setting, translations, this, runtime_lock, apply_funcs, trackers, 227 setting, translations, this, runtime_lock, apply_funcs,
234 ConfigurationShared::RequestType::ComboBox, false); 228 ConfigurationShared::RequestType::ComboBox, false);
229 } else if (setting->Id() == Settings::values.fsr_sharpening_slider.Id()) {
230 return ConfigurationShared::CreateWidget(
231 setting, translations, this, runtime_lock, apply_funcs,
232 ConfigurationShared::RequestType::ReverseSlider, true, 0.5f);
233 } else if (setting->Id() == Settings::values.use_speed_limit.Id()) {
234 return ConfigurationShared::CreateWidget(
235 setting, translations, this, runtime_lock, apply_funcs,
236 ConfigurationShared::RequestType::LineEdit, true, 1.0f, setting->ToString());
235 } else { 237 } else {
236 return ConfigurationShared::CreateWidget(setting, translations, this, runtime_lock, 238 return ConfigurationShared::CreateWidget(setting, translations, this, runtime_lock,
237 apply_funcs, trackers); 239 apply_funcs);
238 } 240 }
239 }(); 241 }();
240 242
@@ -251,13 +253,11 @@ void ConfigureGraphics::SetConfiguration() {
251 QObject::connect(api_restore_global_button, &QAbstractButton::clicked, 253 QObject::connect(api_restore_global_button, &QAbstractButton::clicked,
252 [=](bool) { UpdateAPILayout(); }); 254 [=](bool) { UpdateAPILayout(); });
253 255
256 // Detach API's restore button and place it where we want
254 widget->layout()->removeWidget(api_restore_global_button); 257 widget->layout()->removeWidget(api_restore_global_button);
255 api_layout->addWidget(api_restore_global_button); 258 api_layout->addWidget(api_restore_global_button);
256 } 259 }
257 } else if (setting->Id() == Settings::values.vulkan_device.Id()) { 260 } else if (setting->Id() == Settings::values.vulkan_device.Id()) {
258 api_layout->addWidget(widget);
259 api_combobox = reinterpret_cast<QComboBox*>(extra);
260 } else if (setting->Id() == Settings::values.vulkan_device.Id()) {
261 hold_api.push_front(widget); 261 hold_api.push_front(widget);
262 vulkan_device_combobox = reinterpret_cast<QComboBox*>(extra); 262 vulkan_device_combobox = reinterpret_cast<QComboBox*>(extra);
263 vulkan_device_widget = widget; 263 vulkan_device_widget = widget;
@@ -284,11 +284,6 @@ void ConfigureGraphics::SetConfiguration() {
284 } 284 }
285} 285}
286 286
287void ConfigureGraphics::SetFSRIndicatorText(int percentage) {
288 // ui->fsr_sharpening_value->setText(
289 // tr("%1%", "FSR sharpening percentage (e.g. 50%)").arg(100 - (percentage / 2)));
290}
291
292const QString ConfigureGraphics::TranslateVSyncMode(VkPresentModeKHR mode, 287const QString ConfigureGraphics::TranslateVSyncMode(VkPresentModeKHR mode,
293 Settings::RendererBackend backend) const { 288 Settings::RendererBackend backend) const {
294 switch (mode) { 289 switch (mode) {
diff --git a/src/yuzu/configuration/configure_graphics.h b/src/yuzu/configuration/configure_graphics.h
index 12a588127..a049458a8 100644
--- a/src/yuzu/configuration/configure_graphics.h
+++ b/src/yuzu/configuration/configure_graphics.h
@@ -58,7 +58,6 @@ private:
58 58
59 void RetrieveVulkanDevices(); 59 void RetrieveVulkanDevices();
60 60
61 void SetFSRIndicatorText(int percentage);
62 /* Turns a Vulkan present mode into a textual string for a UI 61 /* Turns a Vulkan present mode into a textual string for a UI
63 * (and eventually for a human to read) */ 62 * (and eventually for a human to read) */
64 const QString TranslateVSyncMode(VkPresentModeKHR mode, 63 const QString TranslateVSyncMode(VkPresentModeKHR mode,
@@ -69,7 +68,6 @@ private:
69 std::unique_ptr<Ui::ConfigureGraphics> ui; 68 std::unique_ptr<Ui::ConfigureGraphics> ui;
70 QColor bg_color; 69 QColor bg_color;
71 70
72 std::list<ConfigurationShared::CheckState> trackers{};
73 std::forward_list<std::function<void(bool)>> apply_funcs{}; 71 std::forward_list<std::function<void(bool)>> apply_funcs{};
74 72
75 std::vector<VkDeviceInfo::Record>& records; 73 std::vector<VkDeviceInfo::Record>& records;
diff --git a/src/yuzu/configuration/configure_graphics_advanced.cpp b/src/yuzu/configuration/configure_graphics_advanced.cpp
index 8a53ad111..4a3868693 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.cpp
+++ b/src/yuzu/configuration/configure_graphics_advanced.cpp
@@ -33,7 +33,7 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {
33 for (auto setting : 33 for (auto setting :
34 Settings::values.linkage.by_category[Settings::Category::RendererAdvanced]) { 34 Settings::values.linkage.by_category[Settings::Category::RendererAdvanced]) {
35 auto [widget, extra, button] = ConfigurationShared::CreateWidget( 35 auto [widget, extra, button] = ConfigurationShared::CreateWidget(
36 setting, translations, this, runtime_lock, apply_funcs, trackers); 36 setting, translations, this, runtime_lock, apply_funcs);
37 37
38 if (widget == nullptr) { 38 if (widget == nullptr) {
39 continue; 39 continue;
diff --git a/src/yuzu/configuration/configure_graphics_advanced.h b/src/yuzu/configuration/configure_graphics_advanced.h
index 3ac6b4bce..327134ee6 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.h
+++ b/src/yuzu/configuration/configure_graphics_advanced.h
@@ -34,8 +34,6 @@ private:
34 34
35 std::unique_ptr<Ui::ConfigureGraphicsAdvanced> ui; 35 std::unique_ptr<Ui::ConfigureGraphicsAdvanced> ui;
36 36
37 std::list<ConfigurationShared::CheckState> trackers{};
38
39 const Core::System& system; 37 const Core::System& system;
40 const ConfigurationShared::TranslationMap& translations; 38 const ConfigurationShared::TranslationMap& translations;
41 std::forward_list<std::function<void(bool)>> apply_funcs; 39 std::forward_list<std::function<void(bool)>> apply_funcs;