mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Merge pull request #4263 from lat9nq/fix-screencaps-2
screenshots: Option to save screenshots immediately in a specified directory + Linux workaround
This commit is contained in:
		
						commit
						6c7292de33
					
				| @ -35,6 +35,7 @@ | ||||
| #define KEYS_DIR "keys" | ||||
| #define LOAD_DIR "load" | ||||
| #define DUMP_DIR "dump" | ||||
| #define SCREENSHOTS_DIR "screenshots" | ||||
| #define SHADER_DIR "shader" | ||||
| #define LOG_DIR "log" | ||||
| 
 | ||||
|  | ||||
| @ -695,6 +695,7 @@ const std::string& GetUserPath(UserPath path, const std::string& new_path) { | ||||
|         paths.emplace(UserPath::NANDDir, user_path + NAND_DIR DIR_SEP); | ||||
|         paths.emplace(UserPath::LoadDir, user_path + LOAD_DIR DIR_SEP); | ||||
|         paths.emplace(UserPath::DumpDir, user_path + DUMP_DIR DIR_SEP); | ||||
|         paths.emplace(UserPath::ScreenshotsDir, user_path + SCREENSHOTS_DIR DIR_SEP); | ||||
|         paths.emplace(UserPath::ShaderDir, user_path + SHADER_DIR DIR_SEP); | ||||
|         paths.emplace(UserPath::SysDataDir, user_path + SYSDATA_DIR DIR_SEP); | ||||
|         paths.emplace(UserPath::KeysDir, user_path + KEYS_DIR DIR_SEP); | ||||
|  | ||||
| @ -32,6 +32,7 @@ enum class UserPath { | ||||
|     SDMCDir, | ||||
|     LoadDir, | ||||
|     DumpDir, | ||||
|     ScreenshotsDir, | ||||
|     ShaderDir, | ||||
|     SysDataDir, | ||||
|     UserDir, | ||||
|  | ||||
| @ -578,7 +578,6 @@ void Config::ReadPathValues() { | ||||
| 
 | ||||
|     UISettings::values.roms_path = ReadSetting(QStringLiteral("romsPath")).toString(); | ||||
|     UISettings::values.symbols_path = ReadSetting(QStringLiteral("symbolsPath")).toString(); | ||||
|     UISettings::values.screenshot_path = ReadSetting(QStringLiteral("screenshotPath")).toString(); | ||||
|     UISettings::values.game_dir_deprecated = | ||||
|         ReadSetting(QStringLiteral("gameListRootDir"), QStringLiteral(".")).toString(); | ||||
|     UISettings::values.game_dir_deprecated_deepscan = | ||||
| @ -673,6 +672,22 @@ void Config::ReadRendererValues() { | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| 
 | ||||
| void Config::ReadScreenshotValues() { | ||||
|     qt_config->beginGroup(QStringLiteral("Screenshots")); | ||||
| 
 | ||||
|     UISettings::values.enable_screenshot_save_as = | ||||
|         ReadSetting(QStringLiteral("enable_screenshot_save_as"), true).toBool(); | ||||
|     FileUtil::GetUserPath( | ||||
|         FileUtil::UserPath::ScreenshotsDir, | ||||
|         qt_config | ||||
|             ->value(QStringLiteral("screenshot_path"), QString::fromStdString(FileUtil::GetUserPath( | ||||
|                                                            FileUtil::UserPath::ScreenshotsDir))) | ||||
|             .toString() | ||||
|             .toStdString()); | ||||
| 
 | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| 
 | ||||
| void Config::ReadShortcutValues() { | ||||
|     qt_config->beginGroup(QStringLiteral("Shortcuts")); | ||||
| 
 | ||||
| @ -754,6 +769,7 @@ void Config::ReadUIValues() { | ||||
|     ReadUIGamelistValues(); | ||||
|     ReadUILayoutValues(); | ||||
|     ReadPathValues(); | ||||
|     ReadScreenshotValues(); | ||||
|     ReadShortcutValues(); | ||||
| 
 | ||||
|     UISettings::values.single_window_mode = | ||||
| @ -1083,7 +1099,6 @@ void Config::SavePathValues() { | ||||
| 
 | ||||
|     WriteSetting(QStringLiteral("romsPath"), UISettings::values.roms_path); | ||||
|     WriteSetting(QStringLiteral("symbolsPath"), UISettings::values.symbols_path); | ||||
|     WriteSetting(QStringLiteral("screenshotPath"), UISettings::values.screenshot_path); | ||||
|     qt_config->beginWriteArray(QStringLiteral("gamedirs")); | ||||
|     for (int i = 0; i < UISettings::values.game_dirs.size(); ++i) { | ||||
|         qt_config->setArrayIndex(i); | ||||
| @ -1159,6 +1174,17 @@ void Config::SaveRendererValues() { | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| 
 | ||||
| void Config::SaveScreenshotValues() { | ||||
|     qt_config->beginGroup(QStringLiteral("Screenshots")); | ||||
| 
 | ||||
|     WriteSetting(QStringLiteral("enable_screenshot_save_as"), | ||||
|                  UISettings::values.enable_screenshot_save_as); | ||||
|     WriteSetting(QStringLiteral("screenshot_path"), | ||||
|                  QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::ScreenshotsDir))); | ||||
| 
 | ||||
|     qt_config->endGroup(); | ||||
| } | ||||
| 
 | ||||
| void Config::SaveShortcutValues() { | ||||
|     qt_config->beginGroup(QStringLiteral("Shortcuts")); | ||||
| 
 | ||||
| @ -1221,6 +1247,7 @@ void Config::SaveUIValues() { | ||||
|     SaveUIGamelistValues(); | ||||
|     SaveUILayoutValues(); | ||||
|     SavePathValues(); | ||||
|     SaveScreenshotValues(); | ||||
|     SaveShortcutValues(); | ||||
| 
 | ||||
|     WriteSetting(QStringLiteral("singleWindowMode"), UISettings::values.single_window_mode, true); | ||||
|  | ||||
| @ -51,6 +51,7 @@ private: | ||||
|     void ReadPathValues(); | ||||
|     void ReadCpuValues(); | ||||
|     void ReadRendererValues(); | ||||
|     void ReadScreenshotValues(); | ||||
|     void ReadShortcutValues(); | ||||
|     void ReadSystemValues(); | ||||
|     void ReadUIValues(); | ||||
| @ -76,6 +77,7 @@ private: | ||||
|     void SavePathValues(); | ||||
|     void SaveCpuValues(); | ||||
|     void SaveRendererValues(); | ||||
|     void SaveScreenshotValues(); | ||||
|     void SaveShortcutValues(); | ||||
|     void SaveSystemValues(); | ||||
|     void SaveUIValues(); | ||||
|  | ||||
| @ -4,9 +4,11 @@ | ||||
| 
 | ||||
| #include <array> | ||||
| #include <utility> | ||||
| #include <QFileDialog> | ||||
| 
 | ||||
| #include <QDirIterator> | ||||
| #include "common/common_types.h" | ||||
| #include "common/file_util.h" | ||||
| #include "core/settings.h" | ||||
| #include "ui_configure_ui.h" | ||||
| #include "yuzu/configuration/configure_ui.h" | ||||
| @ -55,6 +57,18 @@ ConfigureUi::ConfigureUi(QWidget* parent) : QWidget(parent), ui(new Ui::Configur | ||||
|             [=]() { ConfigureUi::UpdateSecondRowComboBox(); }); | ||||
|     connect(ui->row_2_text_combobox, QOverload<int>::of(&QComboBox::activated), | ||||
|             [=]() { ConfigureUi::UpdateFirstRowComboBox(); }); | ||||
| 
 | ||||
|     // Set screenshot path to user specification.
 | ||||
|     connect(ui->screenshot_path_button, &QToolButton::pressed, this, [this] { | ||||
|         const QString& filename = | ||||
|             QFileDialog::getExistingDirectory( | ||||
|                 this, tr("Select Screenshots Path..."), | ||||
|                 QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::ScreenshotsDir))) + | ||||
|             QDir::separator(); | ||||
|         if (!filename.isEmpty()) { | ||||
|             ui->screenshot_path_edit->setText(filename); | ||||
|         } | ||||
|     }); | ||||
| } | ||||
| 
 | ||||
| ConfigureUi::~ConfigureUi() = default; | ||||
| @ -66,6 +80,10 @@ void ConfigureUi::ApplyConfiguration() { | ||||
|     UISettings::values.icon_size = ui->icon_size_combobox->currentData().toUInt(); | ||||
|     UISettings::values.row_1_text_id = ui->row_1_text_combobox->currentData().toUInt(); | ||||
|     UISettings::values.row_2_text_id = ui->row_2_text_combobox->currentData().toUInt(); | ||||
| 
 | ||||
|     UISettings::values.enable_screenshot_save_as = ui->enable_screenshot_save_as->isChecked(); | ||||
|     FileUtil::GetUserPath(FileUtil::UserPath::ScreenshotsDir, | ||||
|                           ui->screenshot_path_edit->text().toStdString()); | ||||
|     Settings::Apply(); | ||||
| } | ||||
| 
 | ||||
| @ -80,6 +98,10 @@ void ConfigureUi::SetConfiguration() { | ||||
|     ui->show_add_ons->setChecked(UISettings::values.show_add_ons); | ||||
|     ui->icon_size_combobox->setCurrentIndex( | ||||
|         ui->icon_size_combobox->findData(UISettings::values.icon_size)); | ||||
| 
 | ||||
|     ui->enable_screenshot_save_as->setChecked(UISettings::values.enable_screenshot_save_as); | ||||
|     ui->screenshot_path_edit->setText( | ||||
|         QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::ScreenshotsDir))); | ||||
| } | ||||
| 
 | ||||
| void ConfigureUi::changeEvent(QEvent* event) { | ||||
|  | ||||
| @ -6,8 +6,8 @@ | ||||
|    <rect> | ||||
|     <x>0</x> | ||||
|     <y>0</y> | ||||
|     <width>300</width> | ||||
|     <height>377</height> | ||||
|     <width>363</width> | ||||
|     <height>391</height> | ||||
|    </rect> | ||||
|   </property> | ||||
|   <property name="windowTitle"> | ||||
| @ -127,6 +127,47 @@ | ||||
|      </layout> | ||||
|     </widget> | ||||
|    </item> | ||||
|    <item> | ||||
|     <widget class="QGroupBox" name="screenshots_GroupBox"> | ||||
|      <property name="title"> | ||||
|       <string>Screenshots</string> | ||||
|      </property> | ||||
|      <layout class="QVBoxLayout" name="verticalLayout_4"> | ||||
|       <item> | ||||
|        <layout class="QVBoxLayout" name="verticalLayout_3"> | ||||
|         <item> | ||||
|          <widget class="QCheckBox" name="enable_screenshot_save_as"> | ||||
|           <property name="text"> | ||||
|            <string>Ask Where To Save Screenshots (Windows Only)</string> | ||||
|           </property> | ||||
|          </widget> | ||||
|         </item> | ||||
|         <item> | ||||
|          <layout class="QHBoxLayout" name="horizontalLayout_4"> | ||||
|           <item> | ||||
|            <widget class="QLabel" name="label"> | ||||
|             <property name="text"> | ||||
|              <string>Screenshots Path: </string> | ||||
|             </property> | ||||
|            </widget> | ||||
|           </item> | ||||
|           <item> | ||||
|            <widget class="QLineEdit" name="screenshot_path_edit"/> | ||||
|           </item> | ||||
|           <item> | ||||
|            <widget class="QToolButton" name="screenshot_path_button"> | ||||
|             <property name="text"> | ||||
|              <string>...</string> | ||||
|             </property> | ||||
|            </widget> | ||||
|           </item> | ||||
|          </layout> | ||||
|         </item> | ||||
|        </layout> | ||||
|       </item> | ||||
|      </layout> | ||||
|     </widget> | ||||
|    </item> | ||||
|    <item> | ||||
|     <spacer name="verticalSpacer"> | ||||
|      <property name="orientation"> | ||||
|  | ||||
| @ -2321,17 +2321,28 @@ void GMainWindow::OnToggleFilterBar() { | ||||
| 
 | ||||
| void GMainWindow::OnCaptureScreenshot() { | ||||
|     OnPauseGame(); | ||||
|     QFileDialog png_dialog(this, tr("Capture Screenshot"), UISettings::values.screenshot_path, | ||||
|                            tr("PNG Image (*.png)")); | ||||
|     png_dialog.setAcceptMode(QFileDialog::AcceptSave); | ||||
|     png_dialog.setDefaultSuffix(QStringLiteral("png")); | ||||
|     if (png_dialog.exec()) { | ||||
|         const QString path = png_dialog.selectedFiles().first(); | ||||
|         if (!path.isEmpty()) { | ||||
|             UISettings::values.screenshot_path = QFileInfo(path).path(); | ||||
|             render_window->CaptureScreenshot(UISettings::values.screenshot_resolution_factor, path); | ||||
| 
 | ||||
|     const u64 title_id = Core::System::GetInstance().CurrentProcess()->GetTitleID(); | ||||
|     const auto screenshot_path = | ||||
|         QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::ScreenshotsDir)); | ||||
|     const auto date = | ||||
|         QDateTime::currentDateTime().toString(QStringLiteral("yyyy-MM-dd_hh-mm-ss-zzz")); | ||||
|     QString filename = QStringLiteral("%1%2_%3.png") | ||||
|                            .arg(screenshot_path) | ||||
|                            .arg(title_id, 16, 16, QLatin1Char{'0'}) | ||||
|                            .arg(date); | ||||
| 
 | ||||
| #ifdef _WIN32 | ||||
|     if (UISettings::values.enable_screenshot_save_as) { | ||||
|         filename = QFileDialog::getSaveFileName(this, tr("Capture Screenshot"), filename, | ||||
|                                                 tr("PNG Image (*.png)")); | ||||
|         if (filename.isEmpty()) { | ||||
|             OnStartGame(); | ||||
|             return; | ||||
|         } | ||||
|     } | ||||
| #endif | ||||
|     render_window->CaptureScreenshot(UISettings::values.screenshot_resolution_factor, filename); | ||||
|     OnStartGame(); | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -66,11 +66,11 @@ struct Values { | ||||
|     // Discord RPC
 | ||||
|     bool enable_discord_presence; | ||||
| 
 | ||||
|     bool enable_screenshot_save_as; | ||||
|     u16 screenshot_resolution_factor; | ||||
| 
 | ||||
|     QString roms_path; | ||||
|     QString symbols_path; | ||||
|     QString screenshot_path; | ||||
|     QString game_dir_deprecated; | ||||
|     bool game_dir_deprecated_deepscan; | ||||
|     QVector<UISettings::GameDir> game_dirs; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 David
						David