diff --git a/rpcs3/rpcs3qt/gui_application.cpp b/rpcs3/rpcs3qt/gui_application.cpp index 349c97b0cf..b0cc77cc8a 100644 --- a/rpcs3/rpcs3qt/gui_application.cpp +++ b/rpcs3/rpcs3qt/gui_application.cpp @@ -281,8 +281,17 @@ std::unique_ptr gui_application::get_gs_frame() if (m_gui_settings->GetValue(gui::gs_resize).toBool()) { - w = m_gui_settings->GetValue(gui::gs_width).toInt(); - h = m_gui_settings->GetValue(gui::gs_height).toInt(); + if (m_gui_settings->GetValue(gui::gs_resize_manual).toBool()) + { + w = m_gui_settings->GetValue(gui::gs_width).toInt(); + h = m_gui_settings->GetValue(gui::gs_height).toInt(); + } + else + { + const qreal device_pixel_ratio = devicePixelRatio(); + w /= device_pixel_ratio; + h /= device_pixel_ratio; + } } const auto screen = m_main_window ? m_main_window->screen() : primaryScreen(); diff --git a/rpcs3/rpcs3qt/gui_settings.h b/rpcs3/rpcs3qt/gui_settings.h index 782d035f18..ea397370d9 100644 --- a/rpcs3/rpcs3qt/gui_settings.h +++ b/rpcs3/rpcs3qt/gui_settings.h @@ -212,6 +212,7 @@ namespace gui const gui_save gs_showMouseFs = gui_save(gs_frame, "showMouseInFullscreen", false); const gui_save gs_lockMouseFs = gui_save(gs_frame, "lockMouseInFullscreen", true); const gui_save gs_resize = gui_save(gs_frame, "resize", false); + const gui_save gs_resize_manual = gui_save(gs_frame, "resizeManual", true); const gui_save gs_width = gui_save(gs_frame, "width", 1280); const gui_save gs_height = gui_save(gs_frame, "height", 720); const gui_save gs_hideMouseIdle = gui_save(gs_frame, "hideMouseOnIdle", false); diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index e2e4e8b17b..81c6b7e823 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -1754,9 +1754,12 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std }); const bool enable_buttons = m_gui_settings->GetValue(gui::gs_resize).toBool(); + const bool use_manual_resize = m_gui_settings->GetValue(gui::gs_resize_manual).toBool(); ui->gs_resizeOnBoot->setChecked(enable_buttons); - ui->gs_width->setEnabled(enable_buttons); - ui->gs_height->setEnabled(enable_buttons); + ui->gs_resizeOnBootManual->setChecked(use_manual_resize); + ui->gs_resizeOnBootManual->setEnabled(enable_buttons); + ui->gs_width->setEnabled(enable_buttons && use_manual_resize); + ui->gs_height->setEnabled(enable_buttons && use_manual_resize); const QRect screen = QGuiApplication::primaryScreen()->geometry(); const int width = m_gui_settings->GetValue(gui::gs_width).toInt(); @@ -1766,9 +1769,18 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std connect(ui->gs_resizeOnBoot, &QCheckBox::toggled, [this](bool checked) { + const bool enabled = checked && ui->gs_resizeOnBootManual->isChecked(); m_gui_settings->SetValue(gui::gs_resize, checked); - ui->gs_width->setEnabled(checked); - ui->gs_height->setEnabled(checked); + ui->gs_resizeOnBootManual->setEnabled(checked); + ui->gs_width->setEnabled(enabled); + ui->gs_height->setEnabled(enabled); + }); + connect(ui->gs_resizeOnBootManual, &QCheckBox::toggled, [this](bool checked) + { + const bool enabled = checked && ui->gs_resizeOnBoot->isChecked(); + m_gui_settings->SetValue(gui::gs_resize_manual, checked); + ui->gs_width->setEnabled(enabled); + ui->gs_height->setEnabled(enabled); }); connect(ui->gs_width, &QSpinBox::editingFinished, [this]() { diff --git a/rpcs3/rpcs3qt/settings_dialog.ui b/rpcs3/rpcs3qt/settings_dialog.ui index 24336998d7..4c47106b7e 100644 --- a/rpcs3/rpcs3qt/settings_dialog.ui +++ b/rpcs3/rpcs3qt/settings_dialog.ui @@ -2991,6 +2991,13 @@ + + + + Resize manually + + +