diff options
Diffstat (limited to 'src/yuzu')
-rw-r--r-- | src/yuzu/configuration/config.cpp | 6 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_graphics.cpp | 10 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_graphics.ui | 30 | ||||
-rw-r--r-- | src/yuzu/main.cpp | 29 |
4 files changed, 64 insertions, 11 deletions
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 0bd46dbac..df55c3e3d 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -83,7 +83,8 @@ void Config::ReadValues() { qt_config->beginGroup("Renderer"); Settings::values.resolution_factor = qt_config->value("resolution_factor", 1.0).toFloat(); - Settings::values.toggle_framelimit = qt_config->value("toggle_framelimit", true).toBool(); + Settings::values.use_frame_limit = qt_config->value("use_frame_limit", true).toBool(); + Settings::values.frame_limit = qt_config->value("frame_limit", 100).toInt(); Settings::values.use_accurate_framebuffers = qt_config->value("use_accurate_framebuffers", false).toBool(); @@ -203,7 +204,8 @@ void Config::SaveValues() { qt_config->beginGroup("Renderer"); qt_config->setValue("resolution_factor", (double)Settings::values.resolution_factor); - qt_config->setValue("toggle_framelimit", Settings::values.toggle_framelimit); + qt_config->setValue("use_frame_limit", Settings::values.use_frame_limit); + qt_config->setValue("frame_limit", Settings::values.frame_limit); qt_config->setValue("use_accurate_framebuffers", Settings::values.use_accurate_framebuffers); // Cast to double because Qt's written float values are not human-readable diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp index 4afe0f81b..ee1287028 100644 --- a/src/yuzu/configuration/configure_graphics.cpp +++ b/src/yuzu/configuration/configure_graphics.cpp @@ -12,6 +12,10 @@ ConfigureGraphics::ConfigureGraphics(QWidget* parent) ui->setupUi(this); this->setConfiguration(); + + ui->frame_limit->setEnabled(Settings::values.use_frame_limit); + connect(ui->toggle_frame_limit, &QCheckBox::stateChanged, ui->frame_limit, + &QSpinBox::setEnabled); } ConfigureGraphics::~ConfigureGraphics() = default; @@ -58,13 +62,15 @@ Resolution FromResolutionFactor(float factor) { void ConfigureGraphics::setConfiguration() { ui->resolution_factor_combobox->setCurrentIndex( static_cast<int>(FromResolutionFactor(Settings::values.resolution_factor))); - ui->toggle_framelimit->setChecked(Settings::values.toggle_framelimit); + ui->toggle_frame_limit->setChecked(Settings::values.use_frame_limit); + ui->frame_limit->setValue(Settings::values.frame_limit); ui->use_accurate_framebuffers->setChecked(Settings::values.use_accurate_framebuffers); } void ConfigureGraphics::applyConfiguration() { Settings::values.resolution_factor = ToResolutionFactor(static_cast<Resolution>(ui->resolution_factor_combobox->currentIndex())); - Settings::values.toggle_framelimit = ui->toggle_framelimit->isChecked(); + Settings::values.use_frame_limit = ui->toggle_frame_limit->isChecked(); + Settings::values.frame_limit = ui->frame_limit->value(); Settings::values.use_accurate_framebuffers = ui->use_accurate_framebuffers->isChecked(); } diff --git a/src/yuzu/configuration/configure_graphics.ui b/src/yuzu/configuration/configure_graphics.ui index 7d092df03..3bc18c26e 100644 --- a/src/yuzu/configuration/configure_graphics.ui +++ b/src/yuzu/configuration/configure_graphics.ui @@ -23,11 +23,31 @@ </property> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> - <widget class="QCheckBox" name="toggle_framelimit"> - <property name="text"> - <string>Limit framerate</string> - </property> - </widget> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QCheckBox" name="toggle_frame_limit"> + <property name="text"> + <string>Limit Speed Percent</string> + </property> + </widget> + </item> + <item> + <widget class="QSpinBox" name="frame_limit"> + <property name="suffix"> + <string>%</string> + </property> + <property name="minimum"> + <number>1</number> + </property> + <property name="maximum"> + <number>9999</number> + </property> + <property name="value"> + <number>100</number> + </property> + </widget> + </item> + </layout> </item> <item> <widget class="QCheckBox" name="use_accurate_framebuffers"> diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 11d2331df..41f765f12 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -226,6 +226,10 @@ void GMainWindow::InitializeHotkeys() { Qt::ApplicationShortcut); hotkey_registry.RegisterHotkey("Main Window", "Toggle Speed Limit", QKeySequence("CTRL+Z"), Qt::ApplicationShortcut); + hotkey_registry.RegisterHotkey("Main Window", "Increase Speed Limit", QKeySequence("+"), + Qt::ApplicationShortcut); + hotkey_registry.RegisterHotkey("Main Window", "Decrease Speed Limit", QKeySequence("-"), + Qt::ApplicationShortcut); hotkey_registry.LoadHotkeys(); connect(hotkey_registry.GetHotkey("Main Window", "Load File", this), &QShortcut::activated, @@ -255,9 +259,24 @@ void GMainWindow::InitializeHotkeys() { }); connect(hotkey_registry.GetHotkey("Main Window", "Toggle Speed Limit", this), &QShortcut::activated, this, [&] { - Settings::values.toggle_framelimit = !Settings::values.toggle_framelimit; + Settings::values.use_frame_limit = !Settings::values.use_frame_limit; UpdateStatusBar(); }); + constexpr u16 SPEED_LIMIT_STEP = 5; + connect(hotkey_registry.GetHotkey("Main Window", "Increase Speed Limit", this), + &QShortcut::activated, this, [&] { + if (Settings::values.frame_limit < 9999 - SPEED_LIMIT_STEP) { + Settings::values.frame_limit += SPEED_LIMIT_STEP; + UpdateStatusBar(); + } + }); + connect(hotkey_registry.GetHotkey("Main Window", "Decrease Speed Limit", this), + &QShortcut::activated, this, [&] { + if (Settings::values.frame_limit > SPEED_LIMIT_STEP) { + Settings::values.frame_limit -= SPEED_LIMIT_STEP; + UpdateStatusBar(); + } + }); } void GMainWindow::SetDefaultUIGeometry() { @@ -910,7 +929,13 @@ void GMainWindow::UpdateStatusBar() { auto results = Core::System::GetInstance().GetAndResetPerfStats(); - emu_speed_label->setText(tr("Speed: %1%").arg(results.emulation_speed * 100.0, 0, 'f', 0)); + if (Settings::values.use_frame_limit) { + emu_speed_label->setText(tr("Speed: %1% / %2%") + .arg(results.emulation_speed * 100.0, 0, 'f', 0) + .arg(Settings::values.frame_limit)); + } else { + emu_speed_label->setText(tr("Speed: %1%").arg(results.emulation_speed * 100.0, 0, 'f', 0)); + } game_fps_label->setText(tr("Game: %1 FPS").arg(results.game_fps, 0, 'f', 0)); emu_frametime_label->setText(tr("Frame: %1 ms").arg(results.frametime * 1000.0, 0, 'f', 2)); |