mirror of
https://github.com/redstrate/Astra.git
synced 2025-04-24 05:17:46 +00:00
Add a configuration menu for gamescope
This commit is contained in:
parent
7435bba6e8
commit
f270cfe1ec
8 changed files with 133 additions and 7 deletions
|
@ -29,7 +29,9 @@ set(SRC
|
|||
src/assetupdater.cpp
|
||||
src/assetupdater.h
|
||||
src/launcherwindow.cpp
|
||||
src/launcherwindow.h)
|
||||
src/launcherwindow.h
|
||||
src/gamescopesettingswindow.cpp
|
||||
src/gamescopesettingswindow.h)
|
||||
|
||||
set(LIBRARIES
|
||||
Qt5::Core Qt5::Widgets Qt5::Network qt5keychain QuaZip)
|
||||
|
|
63
src/gamescopesettingswindow.cpp
Normal file
63
src/gamescopesettingswindow.cpp
Normal file
|
@ -0,0 +1,63 @@
|
|||
#include "gamescopesettingswindow.h"
|
||||
|
||||
#include <QFormLayout>
|
||||
#include <QPushButton>
|
||||
#include <QDesktopServices>
|
||||
#include <QLabel>
|
||||
#include <QFileDialog>
|
||||
#include <QCheckBox>
|
||||
#include <QGroupBox>
|
||||
#include <QMessageBox>
|
||||
#include <QProcess>
|
||||
#include <QGridLayout>
|
||||
#include <QToolTip>
|
||||
#include <QSpinBox>
|
||||
|
||||
#include "launchercore.h"
|
||||
#include "launcherwindow.h"
|
||||
|
||||
GamescopeSettingsWindow::GamescopeSettingsWindow(ProfileSettings& settings, QWidget* parent) : QDialog(parent) {
|
||||
setWindowTitle("Gamescope Settings");
|
||||
setWindowModality(Qt::WindowModality::ApplicationModal);
|
||||
|
||||
auto mainLayout = new QFormLayout(this);
|
||||
setLayout(mainLayout);
|
||||
|
||||
auto fullscreenBox = new QCheckBox("Fullscreen");
|
||||
fullscreenBox->setChecked(settings.gamescope.fullscreen);
|
||||
connect(fullscreenBox, &QCheckBox::clicked, [&](bool checked) {
|
||||
settings.gamescope.fullscreen = checked;
|
||||
});
|
||||
mainLayout->addWidget(fullscreenBox);
|
||||
|
||||
auto borderlessBox = new QCheckBox("Borderless");
|
||||
borderlessBox->setChecked(settings.gamescope.fullscreen);
|
||||
connect(borderlessBox, &QCheckBox::clicked, [&](bool checked) {
|
||||
settings.gamescope.borderless = checked;
|
||||
});
|
||||
mainLayout->addWidget(borderlessBox);
|
||||
|
||||
auto widthBox = new QSpinBox();
|
||||
widthBox->setValue(settings.gamescope.width);
|
||||
widthBox->setSpecialValueText("Default");
|
||||
connect(widthBox, QOverload<int>::of(&QSpinBox::valueChanged), [&](int value) {
|
||||
settings.gamescope.width = value;
|
||||
});
|
||||
mainLayout->addRow("Width", widthBox);
|
||||
|
||||
auto heightBox = new QSpinBox();
|
||||
heightBox->setValue(settings.gamescope.height);
|
||||
heightBox->setSpecialValueText("Default");
|
||||
connect(heightBox, QOverload<int>::of(&QSpinBox::valueChanged), [&](int value) {
|
||||
settings.gamescope.height = value;
|
||||
});
|
||||
mainLayout->addRow("Height", heightBox);
|
||||
|
||||
auto refreshRateBox = new QSpinBox();
|
||||
refreshRateBox->setValue(settings.gamescope.refreshRate);
|
||||
refreshRateBox->setSpecialValueText("Default");
|
||||
connect(refreshRateBox, QOverload<int>::of(&QSpinBox::valueChanged), [&](int value) {
|
||||
settings.gamescope.refreshRate = value;
|
||||
});
|
||||
mainLayout->addRow("Refresh Rate", refreshRateBox);
|
||||
}
|
18
src/gamescopesettingswindow.h
Normal file
18
src/gamescopesettingswindow.h
Normal file
|
@ -0,0 +1,18 @@
|
|||
#pragma once
|
||||
|
||||
#include <QDialog>
|
||||
#include <QListWidget>
|
||||
#include <QComboBox>
|
||||
#include <QLineEdit>
|
||||
#include <QCheckBox>
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
|
||||
class LauncherCore;
|
||||
class LauncherWindow;
|
||||
struct ProfileSettings;
|
||||
|
||||
class GamescopeSettingsWindow : public QDialog {
|
||||
public:
|
||||
GamescopeSettingsWindow(ProfileSettings& settings, QWidget* parent = nullptr);
|
||||
};
|
|
@ -212,8 +212,21 @@ void LauncherCore::launchExecutable(const ProfileSettings& profile, QProcess* pr
|
|||
#if defined(Q_OS_LINUX)
|
||||
if(profile.useGamescope) {
|
||||
arguments.push_back("gamescope");
|
||||
|
||||
if(profile.gamescope.fullscreen)
|
||||
arguments.push_back("-f");
|
||||
|
||||
if(profile.gamescope.borderless)
|
||||
arguments.push_back("-b");
|
||||
|
||||
if(profile.gamescope.width >= 0)
|
||||
arguments.push_back("-w " + QString::number(profile.gamescope.width));
|
||||
|
||||
if(profile.gamescope.height >= 0)
|
||||
arguments.push_back("-h " + QString::number(profile.gamescope.height));
|
||||
|
||||
if(profile.gamescope.refreshRate >= 0)
|
||||
arguments.push_back("-r " + QString::number(profile.gamescope.refreshRate));
|
||||
}
|
||||
|
||||
if(profile.useGamemode)
|
||||
|
@ -319,6 +332,13 @@ void LauncherCore::readInitialInformation() {
|
|||
profile.enableDXVKhud = settings.value("enableDXVKhud", false).toBool();
|
||||
profile.enableWatchdog = settings.value("enableWatchdog", false).toBool();
|
||||
|
||||
// gamescope
|
||||
profile.gamescope.fullscreen = settings.value("gamescopeFullscreen", true).toBool();
|
||||
profile.gamescope.borderless = settings.value("gamescopeBorderless", true).toBool();
|
||||
profile.gamescope.width = settings.value("gamescopeWidth", 0).toInt();
|
||||
profile.gamescope.height = settings.value("gamescopeHeight", 0).toInt();
|
||||
profile.gamescope.refreshRate = settings.value("gamescopeRefreshRate", 0).toInt();
|
||||
|
||||
profile.enableDalamud = settings.value("enableDalamud", false).toBool();
|
||||
|
||||
profileSettings[settings.value("index").toInt()] = profile;
|
||||
|
@ -482,6 +502,13 @@ void LauncherCore::saveSettings() {
|
|||
settings.setValue("useGamescope", profile.useGamescope);
|
||||
settings.setValue("useGamemode", profile.useGamemode);
|
||||
|
||||
// gamescope
|
||||
settings.setValue("gamescopeFullscreen", profile.gamescope.fullscreen);
|
||||
settings.setValue("gamescopeBorderless", profile.gamescope.borderless);
|
||||
settings.setValue("gamescopeWidth", profile.gamescope.width);
|
||||
settings.setValue("gamescopeHeight", profile.gamescope.height);
|
||||
settings.setValue("gamescopeRefreshRate", profile.gamescope.refreshRate);
|
||||
|
||||
// login
|
||||
settings.setValue("encryptArguments", profile.encryptArguments);
|
||||
settings.setValue("isSapphire", profile.isSapphire);
|
||||
|
|
|
@ -39,6 +39,14 @@ struct ProfileSettings {
|
|||
bool enableDXVKhud = false;
|
||||
bool enableDalamud = false;
|
||||
|
||||
struct GamescopeOptions {
|
||||
bool fullscreen = true;
|
||||
bool borderless = true;
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
int refreshRate = 0;
|
||||
} gamescope;
|
||||
|
||||
// login
|
||||
bool encryptArguments = true;
|
||||
bool isSapphire = false;
|
||||
|
|
|
@ -20,7 +20,7 @@ LauncherWindow::LauncherWindow(LauncherCore& core, QWidget* parent) : QMainWindo
|
|||
|
||||
QAction* settingsAction = fileMenu->addAction("Settings...");
|
||||
connect(settingsAction, &QAction::triggered, [=] {
|
||||
auto window = new SettingsWindow(*this, this->core);
|
||||
auto window = new SettingsWindow(*this, this->core, this);
|
||||
connect(&this->core, &LauncherCore::settingsChanged, window, &SettingsWindow::reloadControls);
|
||||
window->show();
|
||||
});
|
||||
|
|
|
@ -14,8 +14,9 @@
|
|||
|
||||
#include "launchercore.h"
|
||||
#include "launcherwindow.h"
|
||||
#include "gamescopesettingswindow.h"
|
||||
|
||||
SettingsWindow::SettingsWindow(LauncherWindow& window, LauncherCore& core, QWidget* parent) : core(core), window(window), QWidget(parent) {
|
||||
SettingsWindow::SettingsWindow(LauncherWindow& window, LauncherCore& core, QWidget* parent) : core(core), window(window), QDialog(parent) {
|
||||
setWindowTitle("Settings");
|
||||
setWindowModality(Qt::WindowModality::ApplicationModal);
|
||||
|
||||
|
@ -270,6 +271,13 @@ SettingsWindow::SettingsWindow(LauncherWindow& window, LauncherCore& core, QWidg
|
|||
});
|
||||
wineBoxLayout->addWidget(gamescopeLabel);
|
||||
|
||||
auto gamescopeCfg = new QPushButton("Configure...");
|
||||
connect(gamescopeCfg, &QPushButton::pressed, [&] {
|
||||
auto gamescopeSettingsWindow = new GamescopeSettingsWindow(getCurrentProfile(), this);
|
||||
gamescopeSettingsWindow->show();
|
||||
});
|
||||
wineBoxLayout->addWidget(gamescopeCfg);
|
||||
|
||||
connect(useGamescope, &QCheckBox::stateChanged, [this](int state) {
|
||||
getCurrentProfile().useGamescope = state;
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include <QWidget>
|
||||
#include <QDialog>
|
||||
#include <QListWidget>
|
||||
#include <QComboBox>
|
||||
#include <QLineEdit>
|
||||
|
@ -12,7 +12,7 @@ class LauncherCore;
|
|||
class LauncherWindow;
|
||||
struct ProfileSettings;
|
||||
|
||||
class SettingsWindow : public QWidget {
|
||||
class SettingsWindow : public QDialog {
|
||||
public:
|
||||
SettingsWindow(LauncherWindow& window, LauncherCore& core, QWidget* parent = nullptr);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue