mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	code: Cleanup and warning fixes from the Vulkan PR (#6163)
Co-authored-by: emufan4568 <geoster3d@gmail.com> Co-authored-by: Kyle Kienapfel <Docteh@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									aa84022704
								
							
						
					
					
						commit
						1ddea27ac8
					
				
					 72 changed files with 895 additions and 626 deletions
				
			
		|  | @ -54,12 +54,12 @@ QtKeyboardDialog::QtKeyboardDialog(QWidget* parent, QtKeyboard* keyboard_) | |||
|     case ButtonConfig::None: | ||||
|         break; | ||||
|     } | ||||
|     connect(buttons, &QDialogButtonBox::accepted, this, [=] { Submit(); }); | ||||
|     connect(buttons, &QDialogButtonBox::rejected, this, [=] { | ||||
|     connect(buttons, &QDialogButtonBox::accepted, this, [this] { Submit(); }); | ||||
|     connect(buttons, &QDialogButtonBox::rejected, this, [this] { | ||||
|         button = QtKeyboard::cancel_id; | ||||
|         accept(); | ||||
|     }); | ||||
|     connect(buttons, &QDialogButtonBox::helpRequested, this, [=] { | ||||
|     connect(buttons, &QDialogButtonBox::helpRequested, this, [this] { | ||||
|         button = QtKeyboard::forgot_id; | ||||
|         accept(); | ||||
|     }); | ||||
|  |  | |||
|  | @ -32,11 +32,13 @@ EmuThread::EmuThread(Frontend::GraphicsContext& core_context) : core_context(cor | |||
| EmuThread::~EmuThread() = default; | ||||
| 
 | ||||
| static GMainWindow* GetMainWindow() { | ||||
|     for (QWidget* w : qApp->topLevelWidgets()) { | ||||
|     const auto widgets = qApp->topLevelWidgets(); | ||||
|     for (QWidget* w : widgets) { | ||||
|         if (GMainWindow* main = qobject_cast<GMainWindow*>(w)) { | ||||
|             return main; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     return nullptr; | ||||
| } | ||||
| 
 | ||||
|  | @ -46,7 +48,8 @@ void EmuThread::run() { | |||
| 
 | ||||
|     emit LoadProgress(VideoCore::LoadCallbackStage::Prepare, 0, 0); | ||||
| 
 | ||||
|     Core::System::GetInstance().Renderer().Rasterizer()->LoadDiskResources( | ||||
|     Core::System& system = Core::System::GetInstance(); | ||||
|     system.Renderer().Rasterizer()->LoadDiskResources( | ||||
|         stop_run, [this](VideoCore::LoadCallbackStage stage, std::size_t value, std::size_t total) { | ||||
|             emit LoadProgress(stage, value, total); | ||||
|         }); | ||||
|  | @ -55,18 +58,17 @@ void EmuThread::run() { | |||
| 
 | ||||
|     core_context.MakeCurrent(); | ||||
| 
 | ||||
|     if (Core::System::GetInstance().frame_limiter.IsFrameAdvancing()) { | ||||
|     if (system.frame_limiter.IsFrameAdvancing()) { | ||||
|         // Usually the loading screen is hidden after the first frame is drawn. In this case
 | ||||
|         // we hide it immediately as we need to wait for user input to start the emulation.
 | ||||
|         emit HideLoadingScreen(); | ||||
|         Core::System::GetInstance().frame_limiter.WaitOnce(); | ||||
|         system.frame_limiter.WaitOnce(); | ||||
|     } | ||||
| 
 | ||||
|     // Holds whether the cpu was running during the last iteration,
 | ||||
|     // so that the DebugModeLeft signal can be emitted before the
 | ||||
|     // next execution step.
 | ||||
|     bool was_active = false; | ||||
|     Core::System& system = Core::System::GetInstance(); | ||||
|     while (!stop_run) { | ||||
|         if (running) { | ||||
|             if (!was_active) | ||||
|  | @ -423,7 +425,7 @@ void GRenderWindow::CaptureScreenshot(u32 res_scale, const QString& screenshot_p | |||
|     screenshot_image = QImage(QSize(layout.width, layout.height), QImage::Format_RGB32); | ||||
|     VideoCore::RequestScreenshot( | ||||
|         screenshot_image.bits(), | ||||
|         [=] { | ||||
|         [this, &screenshot_path] { | ||||
|             const std::string std_screenshot_path = screenshot_path.toStdString(); | ||||
|             if (screenshot_image.mirrored(false, true).save(screenshot_path)) { | ||||
|                 LOG_INFO(Frontend, "Screenshot saved to \"{}\"", std_screenshot_path); | ||||
|  |  | |||
|  | @ -37,7 +37,7 @@ CheatDialog::CheatDialog(QWidget* parent) | |||
|     connect(ui->textNotes, &QPlainTextEdit::textChanged, this, &CheatDialog::OnTextEdited); | ||||
|     connect(ui->textCode, &QPlainTextEdit::textChanged, this, &CheatDialog::OnTextEdited); | ||||
| 
 | ||||
|     connect(ui->buttonSave, &QPushButton::clicked, | ||||
|     connect(ui->buttonSave, &QPushButton::clicked, this, | ||||
|             [this] { SaveCheat(ui->tableCheats->currentRow()); }); | ||||
|     connect(ui->buttonDelete, &QPushButton::clicked, this, &CheatDialog::OnDeleteCheat); | ||||
| 
 | ||||
|  | @ -91,7 +91,7 @@ bool CheatDialog::SaveCheat(int row) { | |||
|     } | ||||
| 
 | ||||
|     // Check if the cheat lines are valid
 | ||||
|     auto code_lines = ui->textCode->toPlainText().split(QLatin1Char{'\n'}, QString::SkipEmptyParts); | ||||
|     auto code_lines = ui->textCode->toPlainText().split(QLatin1Char{'\n'}, Qt::SkipEmptyParts); | ||||
|     for (int i = 0; i < code_lines.size(); ++i) { | ||||
|         Cheats::GatewayCheat::CheatLine cheat_line(code_lines[i].toStdString()); | ||||
|         if (cheat_line.valid) | ||||
|  | @ -190,8 +190,9 @@ void CheatDialog::OnDeleteCheat() { | |||
|     if (newly_created) { | ||||
|         newly_created = false; | ||||
|     } else { | ||||
|         Core::System::GetInstance().CheatEngine().RemoveCheat(ui->tableCheats->currentRow()); | ||||
|         Core::System::GetInstance().CheatEngine().SaveCheatFile(); | ||||
|         auto& cheat_engine = Core::System::GetInstance().CheatEngine(); | ||||
|         cheat_engine.RemoveCheat(ui->tableCheats->currentRow()); | ||||
|         cheat_engine.SaveCheatFile(); | ||||
|     } | ||||
| 
 | ||||
|     LoadCheats(); | ||||
|  |  | |||
|  | @ -518,7 +518,7 @@ void Config::ReadRendererValues() { | |||
| void Config::ReadShortcutValues() { | ||||
|     qt_config->beginGroup(QStringLiteral("Shortcuts")); | ||||
| 
 | ||||
|     for (auto [name, group, shortcut] : default_hotkeys) { | ||||
|     for (const auto& [name, group, shortcut] : default_hotkeys) { | ||||
|         auto [keyseq, context] = shortcut; | ||||
|         qt_config->beginGroup(group); | ||||
|         qt_config->beginGroup(name); | ||||
|  | @ -553,7 +553,7 @@ void Config::ReadSystemValues() { | |||
| // https://developers.google.com/media/vp9/live-encoding
 | ||||
| const QString DEFAULT_VIDEO_ENCODER_OPTIONS = | ||||
|     QStringLiteral("quality:realtime,speed:6,tile-columns:4,frame-parallel:1,threads:8,row-mt:1"); | ||||
| const QString DEFAULT_AUDIO_ENCODER_OPTIONS = QString{}; | ||||
| const QString DEFAULT_AUDIO_ENCODER_OPTIONS = QStringLiteral(""); | ||||
| 
 | ||||
| void Config::ReadVideoDumpingValues() { | ||||
|     qt_config->beginGroup(QStringLiteral("VideoDumping")); | ||||
|  | @ -1013,9 +1013,9 @@ void Config::SaveRendererValues() { | |||
|                  200); | ||||
| 
 | ||||
|     // Cast to double because Qt's written float values are not human-readable
 | ||||
|     WriteSetting(QStringLiteral("bg_red"), (double)Settings::values.bg_red, 0.0); | ||||
|     WriteSetting(QStringLiteral("bg_green"), (double)Settings::values.bg_green, 0.0); | ||||
|     WriteSetting(QStringLiteral("bg_blue"), (double)Settings::values.bg_blue, 0.0); | ||||
|     WriteSetting(QStringLiteral("bg_red"), static_cast<double>(Settings::values.bg_red), 0.0); | ||||
|     WriteSetting(QStringLiteral("bg_green"), static_cast<double>(Settings::values.bg_green), 0.0); | ||||
|     WriteSetting(QStringLiteral("bg_blue"), static_cast<double>(Settings::values.bg_blue), 0.0); | ||||
| 
 | ||||
|     WriteSetting(QStringLiteral("texture_filter_name"), | ||||
|                  QString::fromStdString(Settings::values.texture_filter_name), | ||||
|  |  | |||
|  | @ -9,8 +9,6 @@ | |||
| #include <QMessageBox> | ||||
| #include <QWidget> | ||||
| #include "citra_qt/configuration/configure_camera.h" | ||||
| #include "citra_qt/uisettings.h" | ||||
| #include "core/core.h" | ||||
| #include "core/frontend/camera/factory.h" | ||||
| #include "core/frontend/camera/interface.h" | ||||
| #include "core/hle/service/cam/cam.h" | ||||
|  | @ -91,7 +89,7 @@ void ConfigureCamera::ConnectEvents() { | |||
|                 SetConfiguration(); | ||||
|             }); | ||||
|     connect(ui->toolButton, &QToolButton::clicked, this, &ConfigureCamera::OnToolButtonClicked); | ||||
|     connect(ui->preview_button, &QPushButton::clicked, this, [=] { StartPreviewing(); }); | ||||
|     connect(ui->preview_button, &QPushButton::clicked, this, [this] { StartPreviewing(); }); | ||||
|     connect(ui->prompt_before_load, &QCheckBox::stateChanged, this, [this](int state) { | ||||
|         ui->camera_file->setDisabled(state == Qt::Checked); | ||||
|         ui->toolButton->setDisabled(state == Qt::Checked); | ||||
|  | @ -99,12 +97,11 @@ void ConfigureCamera::ConnectEvents() { | |||
|             ui->camera_file->setText(QString{}); | ||||
|         } | ||||
|     }); | ||||
|     connect(ui->camera_file, &QLineEdit::textChanged, this, [=] { StopPreviewing(); }); | ||||
|     connect(ui->system_camera, | ||||
|             static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, | ||||
|             [=] { StopPreviewing(); }); | ||||
|     connect(ui->camera_flip, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), | ||||
|             this, [=] { StopPreviewing(); }); | ||||
|     connect(ui->camera_file, &QLineEdit::textChanged, this, [this] { StopPreviewing(); }); | ||||
|     connect(ui->system_camera, qOverload<int>(&QComboBox::currentIndexChanged), this, | ||||
|             [this] { StopPreviewing(); }); | ||||
|     connect(ui->camera_flip, qOverload<int>(&QComboBox::currentIndexChanged), this, | ||||
|             [this] { StopPreviewing(); }); | ||||
| } | ||||
| 
 | ||||
| void ConfigureCamera::UpdateCameraMode() { | ||||
|  |  | |||
|  | @ -24,7 +24,9 @@ ConfigureDebug::ConfigureDebug(QWidget* parent) | |||
|         QString path = QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::LogDir)); | ||||
|         QDesktopServices::openUrl(QUrl::fromLocalFile(path)); | ||||
|     }); | ||||
|     ui->toggle_cpu_jit->setEnabled(!Core::System::GetInstance().IsPoweredOn()); | ||||
| 
 | ||||
|     const bool is_powered_on = Core::System::GetInstance().IsPoweredOn(); | ||||
|     ui->toggle_cpu_jit->setEnabled(!is_powered_on); | ||||
| } | ||||
| 
 | ||||
| ConfigureDebug::~ConfigureDebug() = default; | ||||
|  |  | |||
|  | @ -114,6 +114,9 @@ | |||
|      <layout class="QVBoxLayout" name="verticalLayout_4"> | ||||
|       <item> | ||||
|        <widget class="QCheckBox" name="toggle_cpu_jit"> | ||||
|         <property name="toolTip"> | ||||
|          <string><html><head/><body><p>Enables the use of the ARM JIT compiler for emulating the 3DS CPUs. Don't disable unless for debugging purposes</p></body></html></string> | ||||
|         </property> | ||||
|         <property name="text"> | ||||
|          <string>Enable CPU JIT</string> | ||||
|         </property> | ||||
|  |  | |||
|  | @ -192,10 +192,10 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|         if (!button_map[button_id]) | ||||
|             continue; | ||||
|         button_map[button_id]->setContextMenuPolicy(Qt::CustomContextMenu); | ||||
|         connect(button_map[button_id], &QPushButton::clicked, [=]() { | ||||
|         connect(button_map[button_id], &QPushButton::clicked, [this, button_id]() { | ||||
|             HandleClick( | ||||
|                 button_map[button_id], | ||||
|                 [=](const Common::ParamPackage& params) { | ||||
|                 [this, button_id](const Common::ParamPackage& params) { | ||||
|                     buttons_param[button_id] = params; | ||||
|                     // If the user closes the dialog, the changes are reverted in
 | ||||
|                     // `GMainWindow::OnConfigure()`
 | ||||
|  | @ -204,16 +204,16 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                 }, | ||||
|                 InputCommon::Polling::DeviceType::Button); | ||||
|         }); | ||||
|         connect(button_map[button_id], &QPushButton::customContextMenuRequested, | ||||
|                 [=](const QPoint& menu_location) { | ||||
|         connect(button_map[button_id], &QPushButton::customContextMenuRequested, this, | ||||
|                 [this, button_id](const QPoint& menu_location) { | ||||
|                     QMenu context_menu; | ||||
|                     context_menu.addAction(tr("Clear"), [&] { | ||||
|                     context_menu.addAction(tr("Clear"), this, [&] { | ||||
|                         buttons_param[button_id].Clear(); | ||||
|                         button_map[button_id]->setText(tr("[not set]")); | ||||
|                         ApplyConfiguration(); | ||||
|                         Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|                     }); | ||||
|                     context_menu.addAction(tr("Restore Default"), [&] { | ||||
|                     context_menu.addAction(tr("Restore Default"), this, [&] { | ||||
|                         buttons_param[button_id] = Common::ParamPackage{ | ||||
|                             InputCommon::GenerateKeyboardParam(Config::default_buttons[button_id])}; | ||||
|                         button_map[button_id]->setText(ButtonToText(buttons_param[button_id])); | ||||
|  | @ -230,27 +230,29 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                 continue; | ||||
|             analog_map_buttons[analog_id][sub_button_id]->setContextMenuPolicy( | ||||
|                 Qt::CustomContextMenu); | ||||
|             connect(analog_map_buttons[analog_id][sub_button_id], &QPushButton::clicked, [=]() { | ||||
|                 HandleClick( | ||||
|                     analog_map_buttons[analog_id][sub_button_id], | ||||
|                     [=](const Common::ParamPackage& params) { | ||||
|                         SetAnalogButton(params, analogs_param[analog_id], | ||||
|                                         analog_sub_buttons[sub_button_id]); | ||||
|                         ApplyConfiguration(); | ||||
|                         Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|                     }, | ||||
|                     InputCommon::Polling::DeviceType::Button); | ||||
|             }); | ||||
|             connect(analog_map_buttons[analog_id][sub_button_id], &QPushButton::clicked, this, | ||||
|                     [this, analog_id, sub_button_id]() { | ||||
|                         HandleClick( | ||||
|                             analog_map_buttons[analog_id][sub_button_id], | ||||
|                             [this, analog_id, sub_button_id](const Common::ParamPackage& params) { | ||||
|                                 SetAnalogButton(params, analogs_param[analog_id], | ||||
|                                                 analog_sub_buttons[sub_button_id]); | ||||
|                                 ApplyConfiguration(); | ||||
|                                 Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|                             }, | ||||
|                             InputCommon::Polling::DeviceType::Button); | ||||
|                     }); | ||||
|             connect(analog_map_buttons[analog_id][sub_button_id], | ||||
|                     &QPushButton::customContextMenuRequested, [=](const QPoint& menu_location) { | ||||
|                     &QPushButton::customContextMenuRequested, this, | ||||
|                     [this, analog_id, sub_button_id](const QPoint& menu_location) { | ||||
|                         QMenu context_menu; | ||||
|                         context_menu.addAction(tr("Clear"), [&] { | ||||
|                         context_menu.addAction(tr("Clear"), this, [&] { | ||||
|                             analogs_param[analog_id].Erase(analog_sub_buttons[sub_button_id]); | ||||
|                             analog_map_buttons[analog_id][sub_button_id]->setText(tr("[not set]")); | ||||
|                             ApplyConfiguration(); | ||||
|                             Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|                         }); | ||||
|                         context_menu.addAction(tr("Restore Default"), [&] { | ||||
|                         context_menu.addAction(tr("Restore Default"), this, [&] { | ||||
|                             Common::ParamPackage params{InputCommon::GenerateKeyboardParam( | ||||
|                                 Config::default_analogs[analog_id][sub_button_id])}; | ||||
|                             SetAnalogButton(params, analogs_param[analog_id], | ||||
|  | @ -264,7 +266,7 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                             menu_location)); | ||||
|                     }); | ||||
|         } | ||||
|         connect(analog_map_stick[analog_id], &QPushButton::clicked, [=]() { | ||||
|         connect(analog_map_stick[analog_id], &QPushButton::clicked, this, [this, analog_id]() { | ||||
|             if (QMessageBox::information( | ||||
|                     this, tr("Information"), | ||||
|                     tr("After pressing OK, first move your joystick horizontally, " | ||||
|  | @ -272,7 +274,7 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                     QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok) { | ||||
|                 HandleClick( | ||||
|                     analog_map_stick[analog_id], | ||||
|                     [=](const Common::ParamPackage& params) { | ||||
|                     [this, analog_id](const Common::ParamPackage& params) { | ||||
|                         analogs_param[analog_id] = params; | ||||
|                         ApplyConfiguration(); | ||||
|                         Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|  | @ -280,29 +282,31 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                     InputCommon::Polling::DeviceType::Analog); | ||||
|             } | ||||
|         }); | ||||
|         connect(analog_map_deadzone_and_modifier_slider[analog_id], &QSlider::valueChanged, [=] { | ||||
|             const int slider_value = analog_map_deadzone_and_modifier_slider[analog_id]->value(); | ||||
|             const auto engine = analogs_param[analog_id].Get("engine", ""); | ||||
|             if (engine == "sdl" || engine == "gcpad") { | ||||
|                 analog_map_deadzone_and_modifier_slider_label[analog_id]->setText( | ||||
|                     tr("Deadzone: %1%").arg(slider_value)); | ||||
|                 analogs_param[analog_id].Set("deadzone", slider_value / 100.0f); | ||||
|             } else { | ||||
|                 analog_map_deadzone_and_modifier_slider_label[analog_id]->setText( | ||||
|                     tr("Modifier Scale: %1%").arg(slider_value)); | ||||
|                 analogs_param[analog_id].Set("modifier_scale", slider_value / 100.0f); | ||||
|             } | ||||
|             ApplyConfiguration(); | ||||
|             Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|         }); | ||||
|         connect(analog_map_deadzone_and_modifier_slider[analog_id], &QSlider::valueChanged, this, | ||||
|                 [this, analog_id] { | ||||
|                     const int slider_value = | ||||
|                         analog_map_deadzone_and_modifier_slider[analog_id]->value(); | ||||
|                     const auto engine = analogs_param[analog_id].Get("engine", ""); | ||||
|                     if (engine == "sdl" || engine == "gcpad") { | ||||
|                         analog_map_deadzone_and_modifier_slider_label[analog_id]->setText( | ||||
|                             tr("Deadzone: %1%").arg(slider_value)); | ||||
|                         analogs_param[analog_id].Set("deadzone", slider_value / 100.0f); | ||||
|                     } else { | ||||
|                         analog_map_deadzone_and_modifier_slider_label[analog_id]->setText( | ||||
|                             tr("Modifier Scale: %1%").arg(slider_value)); | ||||
|                         analogs_param[analog_id].Set("modifier_scale", slider_value / 100.0f); | ||||
|                     } | ||||
|                     ApplyConfiguration(); | ||||
|                     Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|                 }); | ||||
|     } | ||||
| 
 | ||||
|     // The Circle Mod button is common for both the sticks, so update the modifier settings
 | ||||
|     // for both the sticks.
 | ||||
|     connect(ui->buttonCircleMod, &QPushButton::clicked, [=]() { | ||||
|     connect(ui->buttonCircleMod, &QPushButton::clicked, this, [this]() { | ||||
|         HandleClick( | ||||
|             ui->buttonCircleMod, | ||||
|             [=](const Common::ParamPackage& params) { | ||||
|             [this](const Common::ParamPackage& params) { | ||||
|                 for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; | ||||
|                      analog_id++) { | ||||
|                     SetAnalogButton(params, analogs_param[analog_id], "modifier"); | ||||
|  | @ -312,10 +316,10 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|             }, | ||||
|             InputCommon::Polling::DeviceType::Button); | ||||
|     }); | ||||
|     connect(ui->buttonCircleMod, &QPushButton::customContextMenuRequested, | ||||
|     connect(ui->buttonCircleMod, &QPushButton::customContextMenuRequested, this, | ||||
|             [&](const QPoint& menu_location) { | ||||
|                 QMenu context_menu; | ||||
|                 context_menu.addAction(tr("Clear"), [&] { | ||||
|                 context_menu.addAction(tr("Clear"), this, [&] { | ||||
|                     for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; | ||||
|                          analog_id++) { | ||||
|                         analogs_param[analog_id].Erase("modifier"); | ||||
|  | @ -325,7 +329,7 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                     Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|                 }); | ||||
| 
 | ||||
|                 context_menu.addAction(tr("Restore Default"), [&] { | ||||
|                 context_menu.addAction(tr("Restore Default"), this, [&] { | ||||
|                     for (int analog_id = 0; analog_id < Settings::NativeAnalog::NumAnalogs; | ||||
|                          analog_id++) { | ||||
|                         Common::ParamPackage params{InputCommon::GenerateKeyboardParam( | ||||
|  | @ -341,7 +345,7 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|                 context_menu.exec(ui->buttonCircleMod->mapToGlobal(menu_location)); | ||||
|             }); | ||||
| 
 | ||||
|     connect(ui->buttonMotionTouch, &QPushButton::clicked, [this] { | ||||
|     connect(ui->buttonMotionTouch, &QPushButton::clicked, this, [this] { | ||||
|         QDialog* motion_touch_dialog = new ConfigureMotionTouch(this); | ||||
|         return motion_touch_dialog->exec(); | ||||
|     }); | ||||
|  | @ -356,18 +360,17 @@ ConfigureInput::ConfigureInput(QWidget* parent) | |||
|     connect(ui->buttonDelete, &QPushButton::clicked, this, &ConfigureInput::DeleteProfile); | ||||
|     connect(ui->buttonRename, &QPushButton::clicked, this, &ConfigureInput::RenameProfile); | ||||
| 
 | ||||
|     connect(ui->profile, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), | ||||
|             [this](int i) { | ||||
|                 ApplyConfiguration(); | ||||
|                 Settings::SaveProfile(Settings::values.current_input_profile_index); | ||||
|                 Settings::LoadProfile(i); | ||||
|                 LoadConfiguration(); | ||||
|             }); | ||||
|     connect(ui->profile, qOverload<int>(&QComboBox::currentIndexChanged), this, [this](int i) { | ||||
|         ApplyConfiguration(); | ||||
|         Settings::SaveProfile(Settings::values.current_input_profile_index); | ||||
|         Settings::LoadProfile(i); | ||||
|         LoadConfiguration(); | ||||
|     }); | ||||
| 
 | ||||
|     timeout_timer->setSingleShot(true); | ||||
|     connect(timeout_timer.get(), &QTimer::timeout, [this]() { SetPollingResult({}, true); }); | ||||
|     connect(timeout_timer.get(), &QTimer::timeout, this, [this]() { SetPollingResult({}, true); }); | ||||
| 
 | ||||
|     connect(poll_timer.get(), &QTimer::timeout, [this]() { | ||||
|     connect(poll_timer.get(), &QTimer::timeout, this, [this]() { | ||||
|         Common::ParamPackage params; | ||||
|         for (auto& poller : device_pollers) { | ||||
|             params = poller->GetNextInput(); | ||||
|  | @ -554,7 +557,7 @@ void ConfigureInput::AutoMap() { | |||
|                                  QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Cancel) { | ||||
|         return; | ||||
|     } | ||||
|     input_setter = [=](const Common::ParamPackage& params) { | ||||
|     input_setter = [this](const Common::ParamPackage& params) { | ||||
|         MapFromButton(params); | ||||
|         ApplyConfiguration(); | ||||
|         Settings::SaveProfile(ui->profile->currentIndex()); | ||||
|  |  | |||
|  | @ -47,6 +47,9 @@ CalibrationConfigurationDialog::CalibrationConfigurationDialog(QWidget* parent, | |||
|             case CalibrationConfigurationJob::Status::Completed: | ||||
|                 text = tr("Configuration completed!"); | ||||
|                 break; | ||||
|             default: | ||||
|                 LOG_ERROR(Frontend, "Unknown calibration status {}", status); | ||||
|                 break; | ||||
|             } | ||||
|             QMetaObject::invokeMethod(this, "UpdateLabelText", Q_ARG(QString, text)); | ||||
|             if (status == CalibrationConfigurationJob::Status::Completed) { | ||||
|  | @ -102,9 +105,9 @@ ConfigureMotionTouch::ConfigureMotionTouch(QWidget* parent) | |||
|            "style=\"text-decoration: underline; color:#039be5;\">Learn More</span></a>")); | ||||
| 
 | ||||
|     timeout_timer->setSingleShot(true); | ||||
|     connect(timeout_timer.get(), &QTimer::timeout, [this]() { SetPollingResult({}, true); }); | ||||
|     connect(timeout_timer.get(), &QTimer::timeout, this, [this]() { SetPollingResult({}, true); }); | ||||
| 
 | ||||
|     connect(poll_timer.get(), &QTimer::timeout, [this]() { | ||||
|     connect(poll_timer.get(), &QTimer::timeout, this, [this]() { | ||||
|         Common::ParamPackage params; | ||||
|         for (auto& poller : device_pollers) { | ||||
|             params = poller->GetNextInput(); | ||||
|  | @ -202,7 +205,7 @@ void ConfigureMotionTouch::ConnectEvents() { | |||
|             [this]([[maybe_unused]] int index) { UpdateUiDisplay(); }); | ||||
|     connect(ui->touch_provider, qOverload<int>(&QComboBox::currentIndexChanged), this, | ||||
|             [this]([[maybe_unused]] int index) { UpdateUiDisplay(); }); | ||||
|     connect(ui->motion_controller_button, &QPushButton::clicked, [=]() { | ||||
|     connect(ui->motion_controller_button, &QPushButton::clicked, this, [this]() { | ||||
|         if (QMessageBox::information(this, tr("Information"), | ||||
|                                      tr("After pressing OK, press a button on the controller whose " | ||||
|                                         "motion you want to track."), | ||||
|  | @ -210,7 +213,7 @@ void ConfigureMotionTouch::ConnectEvents() { | |||
|             ui->motion_controller_button->setText(tr("[press button]")); | ||||
|             ui->motion_controller_button->setFocus(); | ||||
| 
 | ||||
|             input_setter = [=](const Common::ParamPackage& params) { | ||||
|             input_setter = [this](const Common::ParamPackage& params) { | ||||
|                 guid = params.Get("guid", "0"); | ||||
|                 port = params.Get("port", 0); | ||||
|             }; | ||||
|  |  | |||
|  | @ -511,7 +511,7 @@ void TouchScreenPreview::mouseMoveEvent(QMouseEvent* event) { | |||
|     } | ||||
|     const auto pos = MapToDeviceCoords(event->x(), event->y()); | ||||
|     if (pos) { | ||||
|         coord_label->setText(QStringLiteral("X: %1, Y: %2").arg(pos->x()).arg(pos->y())); | ||||
|         coord_label->setText(QStringLiteral("X: %1, Y: %2").arg(pos->x(), pos->y())); | ||||
|     } else { | ||||
|         coord_label->clear(); | ||||
|     } | ||||
|  | @ -572,7 +572,7 @@ bool TouchScreenPreview::eventFilter(QObject* obj, QEvent* event) { | |||
|             emit DotMoved(drag_state.dot->property(PropId).toInt(), *device_coord); | ||||
|             if (coord_label) { | ||||
|                 coord_label->setText( | ||||
|                     QStringLiteral("X: %1, Y: %2").arg(device_coord->x()).arg(device_coord->y())); | ||||
|                     QStringLiteral("X: %1, Y: %2").arg(device_coord->x(), device_coord->y())); | ||||
|             } | ||||
|         } | ||||
|         return true; | ||||
|  |  | |||
|  | @ -9,7 +9,6 @@ | |||
| #include <QVBoxLayout> | ||||
| #include "citra_qt/debugger/graphics/graphics_breakpoints.h" | ||||
| #include "citra_qt/debugger/graphics/graphics_breakpoints_p.h" | ||||
| #include "common/assert.h" | ||||
| 
 | ||||
| BreakPointModel::BreakPointModel(std::shared_ptr<Pica::DebugContext> debug_context, QObject* parent) | ||||
|     : QAbstractListModel(parent), context_weak(debug_context), | ||||
|  | @ -60,12 +59,15 @@ QVariant BreakPointModel::data(const QModelIndex& index, int role) const { | |||
| } | ||||
| 
 | ||||
| Qt::ItemFlags BreakPointModel::flags(const QModelIndex& index) const { | ||||
|     if (!index.isValid()) | ||||
|         return 0; | ||||
|     if (!index.isValid()) { | ||||
|         return {}; | ||||
|     } | ||||
| 
 | ||||
|     Qt::ItemFlags flags = Qt::ItemIsEnabled; | ||||
|     if (index.column() == 0) | ||||
|     if (index.column() == 0) { | ||||
|         flags |= Qt::ItemIsUserCheckable; | ||||
|     } | ||||
| 
 | ||||
|     return flags; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -14,7 +14,6 @@ | |||
| #include <QTreeView> | ||||
| #include <QVBoxLayout> | ||||
| #include "citra_qt/debugger/graphics/graphics_cmdlists.h" | ||||
| #include "citra_qt/util/spinbox.h" | ||||
| #include "citra_qt/util/util.h" | ||||
| #include "common/vector_math.h" | ||||
| #include "core/core.h" | ||||
|  | @ -130,7 +129,7 @@ void GPUCommandListWidget::OnCommandDoubleClicked(const QModelIndex& index) { | |||
|         COMMAND_IN_RANGE(command_id, texturing.texture1) || | ||||
|         COMMAND_IN_RANGE(command_id, texturing.texture2)) { | ||||
| 
 | ||||
|         unsigned texture_index; | ||||
|         [[maybe_unused]] u32 texture_index; | ||||
|         if (COMMAND_IN_RANGE(command_id, texturing.texture0)) { | ||||
|             texture_index = 0; | ||||
|         } else if (COMMAND_IN_RANGE(command_id, texturing.texture1)) { | ||||
|  |  | |||
|  | @ -34,12 +34,15 @@ void SurfacePicture::mousePressEvent(QMouseEvent* event) { | |||
|     if (!(event->buttons() & Qt::LeftButton)) | ||||
|         return; | ||||
| 
 | ||||
|     if (pixmap() == nullptr) | ||||
|     const QPixmap pixmap = this->pixmap(Qt::ReturnByValue); | ||||
|     if (pixmap.isNull()) { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     if (surface_widget) | ||||
|         surface_widget->Pick(event->x() * pixmap()->width() / width(), | ||||
|                              event->y() * pixmap()->height() / height()); | ||||
|     if (surface_widget) { | ||||
|         surface_widget->Pick(event->x() * pixmap.width() / width(), | ||||
|                              event->y() * pixmap.height() / height()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void SurfacePicture::mouseMoveEvent(QMouseEvent* event) { | ||||
|  | @ -314,57 +317,46 @@ void GraphicsSurfaceWidget::Pick(int x, int y) { | |||
|         case Format::RGBA8: { | ||||
|             auto value = Color::DecodeRGBA8(pixel) / 255.0f; | ||||
|             return QStringLiteral("Red: %1, Green: %2, Blue: %3, Alpha: %4") | ||||
|                 .arg(QString::number(value.r(), 'f', 2)) | ||||
|                 .arg(QString::number(value.g(), 'f', 2)) | ||||
|                 .arg(QString::number(value.b(), 'f', 2)) | ||||
|                 .arg(QString::number(value.a(), 'f', 2)); | ||||
|                 .arg(QString::number(value.r(), 'f', 2), QString::number(value.g(), 'f', 2), | ||||
|                      QString::number(value.b(), 'f', 2), QString::number(value.a(), 'f', 2)); | ||||
|         } | ||||
|         case Format::RGB8: { | ||||
|             auto value = Color::DecodeRGB8(pixel) / 255.0f; | ||||
|             return QStringLiteral("Red: %1, Green: %2, Blue: %3") | ||||
|                 .arg(QString::number(value.r(), 'f', 2)) | ||||
|                 .arg(QString::number(value.g(), 'f', 2)) | ||||
|                 .arg(QString::number(value.b(), 'f', 2)); | ||||
|                 .arg(QString::number(value.r(), 'f', 2), QString::number(value.g(), 'f', 2), | ||||
|                      QString::number(value.b(), 'f', 2)); | ||||
|         } | ||||
|         case Format::RGB5A1: { | ||||
|             auto value = Color::DecodeRGB5A1(pixel) / 255.0f; | ||||
|             return QStringLiteral("Red: %1, Green: %2, Blue: %3, Alpha: %4") | ||||
|                 .arg(QString::number(value.r(), 'f', 2)) | ||||
|                 .arg(QString::number(value.g(), 'f', 2)) | ||||
|                 .arg(QString::number(value.b(), 'f', 2)) | ||||
|                 .arg(QString::number(value.a(), 'f', 2)); | ||||
|                 .arg(QString::number(value.r(), 'f', 2), QString::number(value.g(), 'f', 2), | ||||
|                      QString::number(value.b(), 'f', 2), QString::number(value.a(), 'f', 2)); | ||||
|         } | ||||
|         case Format::RGB565: { | ||||
|             auto value = Color::DecodeRGB565(pixel) / 255.0f; | ||||
|             return QStringLiteral("Red: %1, Green: %2, Blue: %3") | ||||
|                 .arg(QString::number(value.r(), 'f', 2)) | ||||
|                 .arg(QString::number(value.g(), 'f', 2)) | ||||
|                 .arg(QString::number(value.b(), 'f', 2)); | ||||
|                 .arg(QString::number(value.r(), 'f', 2), QString::number(value.g(), 'f', 2), | ||||
|                      QString::number(value.b(), 'f', 2)); | ||||
|         } | ||||
|         case Format::RGBA4: { | ||||
|             auto value = Color::DecodeRGBA4(pixel) / 255.0f; | ||||
|             return QStringLiteral("Red: %1, Green: %2, Blue: %3, Alpha: %4") | ||||
|                 .arg(QString::number(value.r(), 'f', 2)) | ||||
|                 .arg(QString::number(value.g(), 'f', 2)) | ||||
|                 .arg(QString::number(value.b(), 'f', 2)) | ||||
|                 .arg(QString::number(value.a(), 'f', 2)); | ||||
|                 .arg(QString::number(value.r(), 'f', 2), QString::number(value.g(), 'f', 2), | ||||
|                      QString::number(value.b(), 'f', 2), QString::number(value.a(), 'f', 2)); | ||||
|         } | ||||
|         case Format::IA8: | ||||
|             return QStringLiteral("Index: %1, Alpha: %2").arg(pixel[0]).arg(pixel[1]); | ||||
|             return QStringLiteral("Index: %1, Alpha: %2").arg(pixel[0], pixel[1]); | ||||
|         case Format::RG8: { | ||||
|             auto value = Color::DecodeRG8(pixel) / 255.0f; | ||||
|             return QStringLiteral("Red: %1, Green: %2") | ||||
|                 .arg(QString::number(value.r(), 'f', 2)) | ||||
|                 .arg(QString::number(value.g(), 'f', 2)); | ||||
|                 .arg(QString::number(value.r(), 'f', 2), QString::number(value.g(), 'f', 2)); | ||||
|         } | ||||
|         case Format::I8: | ||||
|             return QStringLiteral("Index: %1").arg(*pixel); | ||||
|         case Format::A8: | ||||
|             return QStringLiteral("Alpha: %1").arg(QString::number(*pixel / 255.0f, 'f', 2)); | ||||
|         case Format::IA4: | ||||
|             return QStringLiteral("Index: %1, Alpha: %2") | ||||
|                 .arg(*pixel & 0xF) | ||||
|                 .arg((*pixel & 0xF0) >> 4); | ||||
|             return QStringLiteral("Index: %1, Alpha: %2").arg(*pixel & 0xF, (*pixel & 0xF0) >> 4); | ||||
|         case Format::I4: { | ||||
|             u8 i = (*pixel >> ((offset % 2) ? 4 : 0)) & 0xF; | ||||
|             return QStringLiteral("Index: %1").arg(i); | ||||
|  | @ -390,8 +382,7 @@ void GraphicsSurfaceWidget::Pick(int x, int y) { | |||
|         case Format::X24S8: { | ||||
|             auto values = Color::DecodeD24S8(pixel); | ||||
|             return QStringLiteral("Depth: %1, Stencil: %2") | ||||
|                 .arg(QString::number(values[0] / (float)0xFFFFFF, 'f', 4)) | ||||
|                 .arg(values[1]); | ||||
|                 .arg(QString::number(values[0] / (float)0xFFFFFF, 'f', 4), values[1]); | ||||
|         } | ||||
|         case Format::Unknown: | ||||
|             return QStringLiteral("Unknown format"); | ||||
|  | @ -401,8 +392,8 @@ void GraphicsSurfaceWidget::Pick(int x, int y) { | |||
|     }; | ||||
| 
 | ||||
|     QString nibbles; | ||||
|     for (unsigned i = 0; i < nibbles_per_pixel; i++) { | ||||
|         unsigned nibble_index = i; | ||||
|     for (u32 i = 0; i < nibbles_per_pixel; i++) { | ||||
|         u32 nibble_index = i; | ||||
|         if (nibble_mode) { | ||||
|             nibble_index += (offset % 2) ? 0 : 1; | ||||
|         } | ||||
|  | @ -412,7 +403,7 @@ void GraphicsSurfaceWidget::Pick(int x, int y) { | |||
|     } | ||||
| 
 | ||||
|     surface_info_label->setText( | ||||
|         QStringLiteral("Raw: 0x%3\n(%4)").arg(nibbles).arg(GetText(surface_format, pixel))); | ||||
|         QStringLiteral("Raw: 0x%3\n(%4)").arg(nibbles, GetText(surface_format, pixel))); | ||||
|     surface_info_label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); | ||||
| } | ||||
| 
 | ||||
|  | @ -676,8 +667,8 @@ void GraphicsSurfaceWidget::SaveSurface() { | |||
|     } | ||||
| 
 | ||||
|     if (selected_filter == png_filter) { | ||||
|         const QPixmap* const pixmap = surface_picture_label->pixmap(); | ||||
|         ASSERT_MSG(pixmap != nullptr, "No pixmap set"); | ||||
|         const QPixmap pixmap = surface_picture_label->pixmap(Qt::ReturnByValue); | ||||
|         ASSERT_MSG(!pixmap.isNull(), "No pixmap set"); | ||||
| 
 | ||||
|         QFile file{filename}; | ||||
|         if (!file.open(QIODevice::WriteOnly)) { | ||||
|  | @ -685,7 +676,7 @@ void GraphicsSurfaceWidget::SaveSurface() { | |||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         if (!pixmap->save(&file, "PNG")) { | ||||
|         if (!pixmap.save(&file, "PNG")) { | ||||
|             QMessageBox::warning(this, tr("Error"), | ||||
|                                  tr("Failed to save surface data to file '%1'").arg(filename)); | ||||
|         } | ||||
|  |  | |||
|  | @ -111,13 +111,13 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con | |||
|                 } | ||||
|             }; | ||||
| 
 | ||||
|             const Instruction instr = par->info.code[index.row()]; | ||||
|             const Instruction& instr = par->info.code[index.row()]; | ||||
|             const OpCode opcode = instr.opcode; | ||||
|             const OpCode::Info opcode_info = opcode.GetInfo(); | ||||
|             const u32 operand_desc_id = opcode_info.type == OpCode::Type::MultiplyAdd | ||||
|                                             ? instr.mad.operand_desc_id.Value() | ||||
|                                             : instr.common.operand_desc_id.Value(); | ||||
|             const SwizzlePattern swizzle = par->info.swizzle_info[operand_desc_id].pattern; | ||||
|             const SwizzlePattern& swizzle = par->info.swizzle_info[operand_desc_id].pattern; | ||||
| 
 | ||||
|             // longest known instruction name: "setemit "
 | ||||
|             int kOpcodeColumnWidth = 8; | ||||
|  | @ -407,8 +407,8 @@ GraphicsVertexShaderWidget::GraphicsVertexShaderWidget( | |||
|                 static_cast<void (QSignalMapper::*)()>(&QSignalMapper::map)); | ||||
|         input_data_mapper->setMapping(input_data[i], i); | ||||
|     } | ||||
|     connect(input_data_mapper, static_cast<void (QSignalMapper::*)(int)>(&QSignalMapper::mapped), | ||||
|             this, &GraphicsVertexShaderWidget::OnInputAttributeChanged); | ||||
|     connect(input_data_mapper, &QSignalMapper::mappedInt, this, | ||||
|             &GraphicsVertexShaderWidget::OnInputAttributeChanged); | ||||
| 
 | ||||
|     auto main_widget = new QWidget; | ||||
|     auto main_layout = new QVBoxLayout; | ||||
|  | @ -514,8 +514,10 @@ void GraphicsVertexShaderWidget::Reload(bool replace_vertex_data, void* vertex_d | |||
|         info.code.push_back({instr}); | ||||
|     int num_attributes = shader_config.max_input_attribute_index + 1; | ||||
| 
 | ||||
|     for (auto pattern : shader_setup.swizzle_data) | ||||
|         info.swizzle_info.push_back({pattern}); | ||||
|     for (auto pattern : shader_setup.swizzle_data) { | ||||
|         const nihstro::SwizzleInfo swizzle_info = {.pattern = nihstro::SwizzlePattern{pattern}}; | ||||
|         info.swizzle_info.push_back(swizzle_info); | ||||
|     } | ||||
| 
 | ||||
|     u32 entry_point = Pica::g_state.regs.vs.main_offset; | ||||
|     info.labels.insert({entry_point, "main"}); | ||||
|  |  | |||
|  | @ -57,6 +57,7 @@ QString IPCRecorderWidget::GetStatusStr(const IPCDebugger::RequestRecord& record | |||
|         return tr("HLE Unimplemented"); | ||||
|     default: | ||||
|         UNREACHABLE(); | ||||
|         return QLatin1String{}; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -160,7 +160,8 @@ void MicroProfileWidget::mouseReleaseEvent(QMouseEvent* event) { | |||
| } | ||||
| 
 | ||||
| void MicroProfileWidget::wheelEvent(QWheelEvent* event) { | ||||
|     MicroProfileMousePosition(event->x() / x_scale, event->y() / y_scale, event->delta() / 120); | ||||
|     MicroProfileMousePosition(event->position().x() / x_scale, event->position().y() / y_scale, | ||||
|                               event->angleDelta().y() / 120); | ||||
|     event->accept(); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -114,7 +114,7 @@ void OptionSetDialog::InitializeUI(const std::string& initial_value) { | |||
|             ui->formatLabel->text().append(QStringLiteral("\n")); | ||||
|         } | ||||
|         ui->formatLabel->setText( | ||||
|             ui->formatLabel->text().append(tr("Range: %1 - %2").arg(option.min).arg(option.max))); | ||||
|             ui->formatLabel->text().append(tr("Range: %1 - %2").arg(option.min, option.max))); | ||||
|     } | ||||
| 
 | ||||
|     // Decide and initialize layout
 | ||||
|  |  | |||
|  | @ -169,8 +169,7 @@ GameListSearchField::GameListSearchField(GameList* parent) : QWidget{parent} { | |||
|  * @return true if the haystack contains all words of userinput | ||||
|  */ | ||||
| static bool ContainsAllWords(const QString& haystack, const QString& userinput) { | ||||
|     const QStringList userinput_split = | ||||
|         userinput.split(QLatin1Char{' '}, QString::SplitBehavior::SkipEmptyParts); | ||||
|     const QStringList userinput_split = userinput.split(QLatin1Char{' '}, Qt::SkipEmptyParts); | ||||
| 
 | ||||
|     return std::all_of(userinput_split.begin(), userinput_split.end(), | ||||
|                        [&haystack](const QString& s) { return haystack.contains(s); }); | ||||
|  | @ -511,42 +510,42 @@ void GameList::AddGamePopup(QMenu& context_menu, const QString& path, u64 progra | |||
| 
 | ||||
|     navigate_to_gamedb_entry->setVisible(it != compatibility_list.end()); | ||||
| 
 | ||||
|     connect(open_save_location, &QAction::triggered, [this, program_id] { | ||||
|     connect(open_save_location, &QAction::triggered, this, [this, program_id] { | ||||
|         emit OpenFolderRequested(program_id, GameListOpenTarget::SAVE_DATA); | ||||
|     }); | ||||
|     connect(open_extdata_location, &QAction::triggered, [this, extdata_id] { | ||||
|     connect(open_extdata_location, &QAction::triggered, this, [this, extdata_id] { | ||||
|         emit OpenFolderRequested(extdata_id, GameListOpenTarget::EXT_DATA); | ||||
|     }); | ||||
|     connect(open_application_location, &QAction::triggered, [this, program_id] { | ||||
|     connect(open_application_location, &QAction::triggered, this, [this, program_id] { | ||||
|         emit OpenFolderRequested(program_id, GameListOpenTarget::APPLICATION); | ||||
|     }); | ||||
|     connect(open_update_location, &QAction::triggered, [this, program_id] { | ||||
|     connect(open_update_location, &QAction::triggered, this, [this, program_id] { | ||||
|         emit OpenFolderRequested(program_id, GameListOpenTarget::UPDATE_DATA); | ||||
|     }); | ||||
|     connect(open_texture_dump_location, &QAction::triggered, [this, program_id] { | ||||
|     connect(open_texture_dump_location, &QAction::triggered, this, [this, program_id] { | ||||
|         if (FileUtil::CreateFullPath(fmt::format("{}textures/{:016X}/", | ||||
|                                                  FileUtil::GetUserPath(FileUtil::UserPath::DumpDir), | ||||
|                                                  program_id))) { | ||||
|             emit OpenFolderRequested(program_id, GameListOpenTarget::TEXTURE_DUMP); | ||||
|         } | ||||
|     }); | ||||
|     connect(open_texture_load_location, &QAction::triggered, [this, program_id] { | ||||
|     connect(open_texture_load_location, &QAction::triggered, this, [this, program_id] { | ||||
|         if (FileUtil::CreateFullPath(fmt::format("{}textures/{:016X}/", | ||||
|                                                  FileUtil::GetUserPath(FileUtil::UserPath::LoadDir), | ||||
|                                                  program_id))) { | ||||
|             emit OpenFolderRequested(program_id, GameListOpenTarget::TEXTURE_LOAD); | ||||
|         } | ||||
|     }); | ||||
|     connect(open_mods_location, &QAction::triggered, [this, program_id] { | ||||
|     connect(open_mods_location, &QAction::triggered, this, [this, program_id] { | ||||
|         if (FileUtil::CreateFullPath(fmt::format("{}mods/{:016X}/", | ||||
|                                                  FileUtil::GetUserPath(FileUtil::UserPath::LoadDir), | ||||
|                                                  program_id))) { | ||||
|             emit OpenFolderRequested(program_id, GameListOpenTarget::MODS); | ||||
|         } | ||||
|     }); | ||||
|     connect(dump_romfs, &QAction::triggered, | ||||
|     connect(dump_romfs, &QAction::triggered, this, | ||||
|             [this, path, program_id] { emit DumpRomFSRequested(path, program_id); }); | ||||
|     connect(navigate_to_gamedb_entry, &QAction::triggered, [this, program_id]() { | ||||
|     connect(navigate_to_gamedb_entry, &QAction::triggered, this, [this, program_id]() { | ||||
|         emit NavigateToGamedbEntryRequested(program_id, compatibility_list); | ||||
|     }); | ||||
| }; | ||||
|  | @ -561,11 +560,11 @@ void GameList::AddCustomDirPopup(QMenu& context_menu, QModelIndex selected) { | |||
|     deep_scan->setCheckable(true); | ||||
|     deep_scan->setChecked(game_dir.deep_scan); | ||||
| 
 | ||||
|     connect(deep_scan, &QAction::triggered, [this, &game_dir] { | ||||
|     connect(deep_scan, &QAction::triggered, this, [this, &game_dir] { | ||||
|         game_dir.deep_scan = !game_dir.deep_scan; | ||||
|         PopulateAsync(UISettings::values.game_dirs); | ||||
|     }); | ||||
|     connect(delete_dir, &QAction::triggered, [this, &game_dir, selected] { | ||||
|     connect(delete_dir, &QAction::triggered, this, [this, &game_dir, selected] { | ||||
|         UISettings::values.game_dirs.removeOne(game_dir); | ||||
|         item_model->invisibleRootItem()->removeRow(selected.row()); | ||||
|     }); | ||||
|  | @ -583,7 +582,7 @@ void GameList::AddPermDirPopup(QMenu& context_menu, QModelIndex selected) { | |||
|     move_up->setEnabled(row > 0); | ||||
|     move_down->setEnabled(row < item_model->rowCount() - 2); | ||||
| 
 | ||||
|     connect(move_up, &QAction::triggered, [this, selected, row, game_dir_index] { | ||||
|     connect(move_up, &QAction::triggered, this, [this, selected, row, game_dir_index] { | ||||
|         const int other_index = selected.sibling(row - 1, 0).data(GameListDir::GameDirRole).toInt(); | ||||
|         // swap the items in the settings
 | ||||
|         std::swap(UISettings::values.game_dirs[game_dir_index], | ||||
|  | @ -598,7 +597,7 @@ void GameList::AddPermDirPopup(QMenu& context_menu, QModelIndex selected) { | |||
|         tree_view->setExpanded(selected, UISettings::values.game_dirs[game_dir_index].expanded); | ||||
|     }); | ||||
| 
 | ||||
|     connect(move_down, &QAction::triggered, [this, selected, row, game_dir_index] { | ||||
|     connect(move_down, &QAction::triggered, this, [this, selected, row, game_dir_index] { | ||||
|         const int other_index = selected.sibling(row + 1, 0).data(GameListDir::GameDirRole).toInt(); | ||||
|         // swap the items in the settings
 | ||||
|         std::swap(UISettings::values.game_dirs[game_dir_index], | ||||
|  | @ -613,7 +612,7 @@ void GameList::AddPermDirPopup(QMenu& context_menu, QModelIndex selected) { | |||
|         tree_view->setExpanded(selected, UISettings::values.game_dirs[game_dir_index].expanded); | ||||
|     }); | ||||
| 
 | ||||
|     connect(open_directory_location, &QAction::triggered, [this, game_dir_index] { | ||||
|     connect(open_directory_location, &QAction::triggered, this, [this, game_dir_index] { | ||||
|         emit OpenDirectory(UISettings::values.game_dirs[game_dir_index].path); | ||||
|     }); | ||||
| } | ||||
|  | @ -640,7 +639,7 @@ void GameList::LoadCompatibilityList() { | |||
|     const QJsonDocument json = QJsonDocument::fromJson(content); | ||||
|     const QJsonArray arr = json.array(); | ||||
| 
 | ||||
|     for (const QJsonValue value : arr) { | ||||
|     for (const QJsonValue& value : arr) { | ||||
|         const QJsonObject game = value.toObject(); | ||||
|         const QString compatibility_key = QStringLiteral("compatibility"); | ||||
| 
 | ||||
|  | @ -652,7 +651,7 @@ void GameList::LoadCompatibilityList() { | |||
|         const QString directory = game[QStringLiteral("directory")].toString(); | ||||
|         const QJsonArray ids = game[QStringLiteral("releases")].toArray(); | ||||
| 
 | ||||
|         for (const QJsonValue id_ref : ids) { | ||||
|         for (const QJsonValue& id_ref : ids) { | ||||
|             const QJsonObject id_object = id_ref.toObject(); | ||||
|             const QString id = id_object[QStringLiteral("id")].toString(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -152,8 +152,8 @@ static void InitializeLogging() { | |||
| } | ||||
| 
 | ||||
| GMainWindow::GMainWindow() | ||||
|     : config(std::make_unique<Config>()), emu_thread(nullptr), | ||||
|       ui(std::make_unique<Ui::MainWindow>()) { | ||||
|     : ui{std::make_unique<Ui::MainWindow>()}, config{std::make_unique<Config>()}, emu_thread{ | ||||
|                                                                                       nullptr} { | ||||
|     InitializeLogging(); | ||||
|     Debugger::ToggleConsole(); | ||||
|     Settings::LogSettings(); | ||||
|  | @ -263,7 +263,7 @@ void GMainWindow::InitializeWidgets() { | |||
|     loading_screen = new LoadingScreen(this); | ||||
|     loading_screen->hide(); | ||||
|     ui->horizontalLayout->addWidget(loading_screen); | ||||
|     connect(loading_screen, &LoadingScreen::Hidden, [&] { | ||||
|     connect(loading_screen, &LoadingScreen::Hidden, this, [&] { | ||||
|         loading_screen->Clear(); | ||||
|         if (emulation_running) { | ||||
|             render_window->show(); | ||||
|  | @ -432,13 +432,13 @@ void GMainWindow::InitializeSaveStateMenuActions() { | |||
|         ui->menu_Save_State->addAction(actions_save_state[i]); | ||||
|     } | ||||
| 
 | ||||
|     connect(ui->action_Load_from_Newest_Slot, &QAction::triggered, [this] { | ||||
|     connect(ui->action_Load_from_Newest_Slot, &QAction::triggered, this, [this] { | ||||
|         UpdateSaveStates(); | ||||
|         if (newest_slot != 0) { | ||||
|             actions_load_state[newest_slot - 1]->trigger(); | ||||
|         } | ||||
|     }); | ||||
|     connect(ui->action_Save_to_Oldest_Slot, &QAction::triggered, [this] { | ||||
|     connect(ui->action_Save_to_Oldest_Slot, &QAction::triggered, this, [this] { | ||||
|         UpdateSaveStates(); | ||||
|         actions_save_state[oldest_slot - 1]->trigger(); | ||||
|     }); | ||||
|  | @ -677,7 +677,7 @@ void GMainWindow::ConnectWidgetEvents() { | |||
|     connect(game_list_placeholder, &GameListPlaceholder::AddDirectory, this, | ||||
|             &GMainWindow::OnGameListAddDirectory); | ||||
|     connect(game_list, &GameList::ShowList, this, &GMainWindow::OnGameListShowList); | ||||
|     connect(game_list, &GameList::PopulatingCompleted, | ||||
|     connect(game_list, &GameList::PopulatingCompleted, this, | ||||
|             [this] { multiplayer_state->UpdateGameList(game_list->GetModel()); }); | ||||
| 
 | ||||
|     connect(this, &GMainWindow::EmulationStarting, render_window, | ||||
|  | @ -768,7 +768,7 @@ void GMainWindow::ConnectMenuEvents() { | |||
|     connect(ui->action_Close_Movie, &QAction::triggered, this, &GMainWindow::OnCloseMovie); | ||||
|     connect(ui->action_Save_Movie, &QAction::triggered, this, &GMainWindow::OnSaveMovie); | ||||
|     connect(ui->action_Movie_Read_Only_Mode, &QAction::toggled, this, | ||||
|             [this](bool checked) { Core::Movie::GetInstance().SetReadOnly(checked); }); | ||||
|             [](bool checked) { Core::Movie::GetInstance().SetReadOnly(checked); }); | ||||
|     connect(ui->action_Enable_Frame_Advancing, &QAction::triggered, this, [this] { | ||||
|         if (emulation_running) { | ||||
|             Core::System::GetInstance().frame_limiter.SetFrameAdvancing( | ||||
|  | @ -1413,7 +1413,7 @@ void GMainWindow::OnGameListDumpRomFS(QString game_path, u64 program_id) { | |||
|                     program_id | 0x0004000e00000000); | ||||
|     using FutureWatcher = QFutureWatcher<std::pair<Loader::ResultStatus, Loader::ResultStatus>>; | ||||
|     auto* future_watcher = new FutureWatcher(this); | ||||
|     connect(future_watcher, &FutureWatcher::finished, | ||||
|     connect(future_watcher, &FutureWatcher::finished, this, | ||||
|             [this, dialog, base_path, update_path, future_watcher] { | ||||
|                 dialog->hide(); | ||||
|                 const auto& [base, update] = future_watcher->result(); | ||||
|  | @ -1515,7 +1515,7 @@ void GMainWindow::InstallCIA(QStringList filepaths) { | |||
|         const auto cia_progress = [&](std::size_t written, std::size_t total) { | ||||
|             emit UpdateProgress(written, total); | ||||
|         }; | ||||
|         for (const auto current_path : filepaths) { | ||||
|         for (const auto& current_path : filepaths) { | ||||
|             status = Service::AM::InstallCIA(current_path.toStdString(), cia_progress); | ||||
|             emit CIAInstallReport(status, current_path); | ||||
|         } | ||||
|  | @ -1553,6 +1553,10 @@ void GMainWindow::OnCIAInstallReport(Service::AM::InstallStatus status, QString | |||
|                                  "before being used with Citra. A real 3DS is required.") | ||||
|                                   .arg(filename)); | ||||
|         break; | ||||
|     case Service::AM::InstallStatus::ErrorFileNotFound: | ||||
|         QMessageBox::critical(this, tr("Unable to find File"), | ||||
|                               tr("Could not find %1").arg(filename)); | ||||
|         break; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -1730,6 +1734,8 @@ void GMainWindow::ToggleScreenLayout() { | |||
|     case Settings::LayoutOption::SideScreen: | ||||
|         new_layout = Settings::LayoutOption::Default; | ||||
|         break; | ||||
|     default: | ||||
|         LOG_ERROR(Frontend, "Unknown layout option {}", Settings::values.layout_option); | ||||
|     } | ||||
| 
 | ||||
|     Settings::values.layout_option = new_layout; | ||||
|  | @ -1976,7 +1982,7 @@ void GMainWindow::OnCaptureScreenshot() { | |||
|     const QString filename = game_title.remove(QRegularExpression(QStringLiteral("[\\/:?\"<>|]"))); | ||||
|     const QString timestamp = | ||||
|         QDateTime::currentDateTime().toString(QStringLiteral("dd.MM.yy_hh.mm.ss.z")); | ||||
|     path.append(QStringLiteral("/%1_%2.png").arg(filename).arg(timestamp)); | ||||
|     path.append(QStringLiteral("/%1_%2.png").arg(filename, timestamp)); | ||||
|     render_window->CaptureScreenshot(UISettings::values.screenshot_resolution_factor, path); | ||||
|     OnStartGame(); | ||||
| } | ||||
|  | @ -2051,7 +2057,7 @@ void GMainWindow::UpdateStatusBar() { | |||
|         message_label_used_for_movie = true; | ||||
|         ui->action_Save_Movie->setEnabled(true); | ||||
|     } else if (play_mode == Core::Movie::PlayMode::Playing) { | ||||
|         message_label->setText(tr("Playing %1 / %2").arg(current).arg(total)); | ||||
|         message_label->setText(tr("Playing %1 / %2").arg(current, total)); | ||||
|         message_label->setVisible(true); | ||||
|         message_label_used_for_movie = true; | ||||
|         ui->action_Save_Movie->setEnabled(false); | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <memory> | ||||
| #include <unordered_map> | ||||
| #include <unordered_set> | ||||
| #include <QDialog> | ||||
| #include <QSortFilterProxyModel> | ||||
|  |  | |||
|  | @ -7,7 +7,6 @@ | |||
| #include <QIcon> | ||||
| #include <QMessageBox> | ||||
| #include <QStandardItemModel> | ||||
| #include "citra_qt/game_list.h" | ||||
| #include "citra_qt/multiplayer/client_room.h" | ||||
| #include "citra_qt/multiplayer/direct_connect.h" | ||||
| #include "citra_qt/multiplayer/host_room.h" | ||||
|  | @ -16,7 +15,6 @@ | |||
| #include "citra_qt/multiplayer/state.h" | ||||
| #include "citra_qt/uisettings.h" | ||||
| #include "citra_qt/util/clickable_label.h" | ||||
| #include "common/announce_multiplayer_room.h" | ||||
| #include "common/logging/log.h" | ||||
| 
 | ||||
| MultiplayerState::MultiplayerState(QWidget* parent, QStandardItemModel* game_list_model, | ||||
|  | @ -231,8 +229,9 @@ bool MultiplayerState::OnCloseRoom() { | |||
|         if (room->GetState() != Network::Room::State::Open) { | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|         // Save ban list
 | ||||
|         UISettings::values.ban_list = std::move(room->GetBanList()); | ||||
|         UISettings::values.ban_list = room->GetBanList(); | ||||
| 
 | ||||
|         room->Destroy(); | ||||
|         announce_multiplayer_session->Stop(); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue