Run screenshot capture function in paused state by capturing next frame (#116)

* Allow screenshot capture in paused state by unpausing to capture next frame

* Change `QMessageBox::No` to `QMessageBox::Yes`

* Fix formatting

* Fix formatting
This commit is contained in:
RocketRobz 2024-05-23 12:21:54 -06:00 committed by GitHub
parent 54aee70e68
commit e15d4c0d4a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -974,7 +974,7 @@ void GMainWindow::UpdateMenuState() {
action->setEnabled(emulation_running); action->setEnabled(emulation_running);
} }
ui->action_Capture_Screenshot->setEnabled(emulation_running && !is_paused); ui->action_Capture_Screenshot->setEnabled(emulation_running);
if (emulation_running && is_paused) { if (emulation_running && is_paused) {
ui->action_Pause->setText(tr("&Continue")); ui->action_Pause->setText(tr("&Continue"));
@ -2412,33 +2412,47 @@ void GMainWindow::OnSaveMovie() {
} }
void GMainWindow::OnCaptureScreenshot() { void GMainWindow::OnCaptureScreenshot() {
if (!emu_thread || !emu_thread->IsRunning()) [[unlikely]] { if (!emu_thread) [[unlikely]] {
return; return;
} }
OnPauseGame(); const bool was_running = emu_thread->IsRunning();
std::string path = UISettings::values.screenshot_path.GetValue();
if (!FileUtil::IsDirectory(path)) { if (was_running ||
if (!FileUtil::CreateFullPath(path)) { (QMessageBox::question(
QMessageBox::information(this, tr("Invalid Screenshot Directory"), this, tr("Game will unpause"),
tr("Cannot create specified screenshot directory. Screenshot " tr("The game will be unpaused, and the next frame will be captured. Is this okay?"),
"path is set back to its default value.")); QMessageBox::Yes | QMessageBox::No, QMessageBox::No) == QMessageBox::Yes)) {
path = FileUtil::GetUserPath(FileUtil::UserPath::UserDir); if (was_running) {
path.append("screenshots/"); OnPauseGame();
UISettings::values.screenshot_path = path; }
}; std::string path = UISettings::values.screenshot_path.GetValue();
if (!FileUtil::IsDirectory(path)) {
if (!FileUtil::CreateFullPath(path)) {
QMessageBox::information(
this, tr("Invalid Screenshot Directory"),
tr("Cannot create specified screenshot directory. Screenshot "
"path is set back to its default value."));
path = FileUtil::GetUserPath(FileUtil::UserPath::UserDir);
path.append("screenshots/");
UISettings::values.screenshot_path = path;
};
}
static QRegularExpression expr(QStringLiteral("[\\/:?\"<>|]"));
const std::string filename = game_title.remove(expr).toStdString();
const std::string timestamp = QDateTime::currentDateTime()
.toString(QStringLiteral("dd.MM.yy_hh.mm.ss.z"))
.toStdString();
path.append(fmt::format("/{}_{}.png", filename, timestamp));
auto* const screenshot_window =
secondary_window->HasFocus() ? secondary_window : render_window;
screenshot_window->CaptureScreenshot(
UISettings::values.screenshot_resolution_factor.GetValue(),
QString::fromStdString(path));
OnStartGame();
} }
static QRegularExpression expr(QStringLiteral("[\\/:?\"<>|]"));
const std::string filename = game_title.remove(expr).toStdString();
const std::string timestamp =
QDateTime::currentDateTime().toString(QStringLiteral("dd.MM.yy_hh.mm.ss.z")).toStdString();
path.append(fmt::format("/{}_{}.png", filename, timestamp));
auto* const screenshot_window = secondary_window->HasFocus() ? secondary_window : render_window;
screenshot_window->CaptureScreenshot(UISettings::values.screenshot_resolution_factor.GetValue(),
QString::fromStdString(path));
OnStartGame();
} }
void GMainWindow::OnDumpVideo() { void GMainWindow::OnDumpVideo() {