mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-08-17 07:49:21 +00:00
Merge branch 'master' of https://github.com/dolphin-emu/dolphin into dolphin-emu-master
This commit is contained in:
commit
c18016e795
767 changed files with 87644 additions and 70168 deletions
|
@ -21,6 +21,7 @@
|
|||
|
||||
#include "DolphinQt/Config/CheatCodeEditor.h"
|
||||
#include "DolphinQt/Config/CheatWarningWidget.h"
|
||||
#include "DolphinQt/Config/HardcoreWarningWidget.h"
|
||||
#include "DolphinQt/QtUtils/NonDefaultQPushButton.h"
|
||||
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
|
||||
|
||||
|
@ -55,6 +56,9 @@ ARCodeWidget::~ARCodeWidget() = default;
|
|||
void ARCodeWidget::CreateWidgets()
|
||||
{
|
||||
m_warning = new CheatWarningWidget(m_game_id, m_restart_required, this);
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
m_hc_warning = new HardcoreWarningWidget(this);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
m_code_list = new QListWidget;
|
||||
m_code_add = new NonDefaultQPushButton(tr("&Add New Code..."));
|
||||
m_code_edit = new NonDefaultQPushButton(tr("&Edit Code..."));
|
||||
|
@ -76,6 +80,9 @@ void ARCodeWidget::CreateWidgets()
|
|||
QVBoxLayout* layout = new QVBoxLayout;
|
||||
|
||||
layout->addWidget(m_warning);
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
layout->addWidget(m_hc_warning);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
layout->addWidget(m_code_list);
|
||||
layout->addLayout(button_layout);
|
||||
|
||||
|
@ -86,6 +93,10 @@ void ARCodeWidget::ConnectWidgets()
|
|||
{
|
||||
connect(m_warning, &CheatWarningWidget::OpenCheatEnableSettings, this,
|
||||
&ARCodeWidget::OpenGeneralSettings);
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
connect(m_hc_warning, &HardcoreWarningWidget::OpenAchievementSettings, this,
|
||||
&ARCodeWidget::OpenAchievementSettings);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
||||
connect(m_code_list, &QListWidget::itemChanged, this, &ARCodeWidget::OnItemChanged);
|
||||
connect(m_code_list, &QListWidget::itemSelectionChanged, this, &ARCodeWidget::OnSelectionChanged);
|
||||
|
|
|
@ -16,6 +16,9 @@ struct ARCode;
|
|||
}
|
||||
|
||||
class CheatWarningWidget;
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
class HardcoreWarningWidget;
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
class QLabel;
|
||||
class QListWidget;
|
||||
class QListWidgetItem;
|
||||
|
@ -32,6 +35,9 @@ public:
|
|||
|
||||
signals:
|
||||
void OpenGeneralSettings();
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
void OpenAchievementSettings();
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
||||
private:
|
||||
void OnSelectionChanged();
|
||||
|
@ -56,6 +62,9 @@ private:
|
|||
u16 m_game_revision;
|
||||
|
||||
CheatWarningWidget* m_warning;
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
HardcoreWarningWidget* m_hc_warning;
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
QListWidget* m_code_list;
|
||||
QPushButton* m_code_add;
|
||||
QPushButton* m_code_edit;
|
||||
|
|
|
@ -13,7 +13,7 @@ ConfigChoice::ConfigChoice(const QStringList& options, const Config::Info<int>&
|
|||
: m_setting(setting)
|
||||
{
|
||||
addItems(options);
|
||||
connect(this, qOverload<int>(&QComboBox::currentIndexChanged), this, &ConfigChoice::Update);
|
||||
connect(this, &QComboBox::currentIndexChanged, this, &ConfigChoice::Update);
|
||||
setCurrentIndex(Config::Get(m_setting));
|
||||
|
||||
connect(&Settings::Instance(), &Settings::ConfigChanged, this, [this] {
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
ConfigFloatSlider::ConfigFloatSlider(float minimum, float maximum,
|
||||
const Config::Info<float>& setting, float step)
|
||||
: ToolTipSlider(Qt::Horizontal), m_minimum(minimum), m_setting(setting), m_step(step)
|
||||
: ToolTipSlider(Qt::Horizontal), m_minimum(minimum), m_step(step), m_setting(setting)
|
||||
{
|
||||
const float range = maximum - minimum;
|
||||
const int steps = std::round(range / step);
|
||||
|
@ -31,8 +31,8 @@ ConfigFloatSlider::ConfigFloatSlider(float minimum, float maximum,
|
|||
setFont(bf);
|
||||
|
||||
const QSignalBlocker blocker(this);
|
||||
const int current_value = std::round((Config::Get(m_setting) - m_minimum) / m_step);
|
||||
setValue(current_value);
|
||||
const int value = std::round((Config::Get(m_setting) - m_minimum) / m_step);
|
||||
setValue(value);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ ConfigInteger::ConfigInteger(int minimum, int maximum, const Config::Info<int>&
|
|||
|
||||
setValue(Config::Get(setting));
|
||||
|
||||
connect(this, qOverload<int>(&ConfigInteger::valueChanged), this, &ConfigInteger::Update);
|
||||
connect(this, &ConfigInteger::valueChanged, this, &ConfigInteger::Update);
|
||||
connect(&Settings::Instance(), &Settings::ConfigChanged, this, [this] {
|
||||
QFont bf = font();
|
||||
bf.setBold(Config::GetActiveLayerForConfig(m_setting) != Config::LayerType::Base);
|
||||
|
|
|
@ -9,6 +9,8 @@
|
|||
#include <QPushButton>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
#include "Core/AchievementManager.h"
|
||||
#include "Core/Config/AchievementSettings.h"
|
||||
#include "Core/Config/FreeLookSettings.h"
|
||||
#include "Core/ConfigManager.h"
|
||||
#include "Core/Core.h"
|
||||
|
@ -36,6 +38,10 @@ void FreeLookWidget::CreateLayout()
|
|||
m_enable_freelook->SetDescription(
|
||||
tr("Allows manipulation of the in-game camera.<br><br><dolphin_emphasis>If unsure, "
|
||||
"leave this unchecked.</dolphin_emphasis>"));
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
const bool hardcore = AchievementManager::GetInstance().IsHardcoreModeActive();
|
||||
m_enable_freelook->setEnabled(!hardcore);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
m_freelook_controller_configure_button = new NonDefaultQPushButton(tr("Configure Controller"));
|
||||
|
||||
m_freelook_control_type = new ConfigChoice({tr("Six Axis"), tr("First Person"), tr("Orbital")},
|
||||
|
@ -106,6 +112,10 @@ void FreeLookWidget::LoadSettings()
|
|||
{
|
||||
const bool checked = Config::Get(Config::FREE_LOOK_ENABLED);
|
||||
m_enable_freelook->setChecked(checked);
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
const bool hardcore = AchievementManager::GetInstance().IsHardcoreModeActive();
|
||||
m_enable_freelook->setEnabled(!hardcore);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
m_freelook_control_type->setEnabled(checked);
|
||||
m_freelook_controller_configure_button->setEnabled(checked);
|
||||
m_freelook_background_input->setEnabled(checked);
|
||||
|
|
|
@ -9,10 +9,12 @@
|
|||
#include <QVBoxLayout>
|
||||
|
||||
#include "DolphinQt/Config/FreeLookWidget.h"
|
||||
#include "DolphinQt/Config/HardcoreWarningWidget.h"
|
||||
|
||||
FreeLookWindow::FreeLookWindow(QWidget* parent) : QDialog(parent)
|
||||
{
|
||||
CreateMainLayout();
|
||||
ConnectWidgets();
|
||||
|
||||
setWindowTitle(tr("Free Look Settings"));
|
||||
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
|
||||
|
@ -20,11 +22,26 @@ FreeLookWindow::FreeLookWindow(QWidget* parent) : QDialog(parent)
|
|||
|
||||
void FreeLookWindow::CreateMainLayout()
|
||||
{
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
m_hc_warning = new HardcoreWarningWidget(this);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
m_button_box = new QDialogButtonBox(QDialogButtonBox::Close);
|
||||
connect(m_button_box, &QDialogButtonBox::rejected, this, &QDialog::reject);
|
||||
|
||||
auto* main_layout = new QVBoxLayout();
|
||||
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
main_layout->addWidget(m_hc_warning);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
main_layout->addWidget(new FreeLookWidget(this));
|
||||
main_layout->addWidget(m_button_box);
|
||||
setLayout(main_layout);
|
||||
}
|
||||
|
||||
void FreeLookWindow::ConnectWidgets()
|
||||
{
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
connect(m_hc_warning, &HardcoreWarningWidget::OpenAchievementSettings, this,
|
||||
&FreeLookWindow::OpenAchievementSettings);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
}
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
|
||||
#include <QDialog>
|
||||
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
class HardcoreWarningWidget;
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
class QDialogButtonBox;
|
||||
|
||||
class FreeLookWindow final : public QDialog
|
||||
|
@ -13,8 +16,17 @@ class FreeLookWindow final : public QDialog
|
|||
public:
|
||||
explicit FreeLookWindow(QWidget* parent);
|
||||
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
signals:
|
||||
void OpenAchievementSettings();
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
||||
private:
|
||||
void CreateMainLayout();
|
||||
void ConnectWidgets();
|
||||
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
HardcoreWarningWidget* m_hc_warning;
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
QDialogButtonBox* m_button_box;
|
||||
};
|
||||
|
|
|
@ -215,12 +215,10 @@ void GameConfigWidget::ConnectWidgets()
|
|||
m_use_dsp_hle, m_manual_texture_sampling, m_use_monoscopic_shadows})
|
||||
connect(box, &QCheckBox::stateChanged, this, &GameConfigWidget::SaveSettings);
|
||||
|
||||
connect(m_deterministic_dual_core, qOverload<int>(&QComboBox::currentIndexChanged), this,
|
||||
&GameConfigWidget::SaveSettings);
|
||||
connect(m_depth_slider, qOverload<int>(&QSlider::valueChanged), this,
|
||||
&GameConfigWidget::SaveSettings);
|
||||
connect(m_convergence_spin, qOverload<int>(&QSpinBox::valueChanged), this,
|
||||
connect(m_deterministic_dual_core, &QComboBox::currentIndexChanged, this,
|
||||
&GameConfigWidget::SaveSettings);
|
||||
connect(m_depth_slider, &QSlider::valueChanged, this, &GameConfigWidget::SaveSettings);
|
||||
connect(m_convergence_spin, &QSpinBox::valueChanged, this, &GameConfigWidget::SaveSettings);
|
||||
}
|
||||
|
||||
void GameConfigWidget::LoadCheckBox(QCheckBox* checkbox, const std::string& section,
|
||||
|
|
|
@ -108,11 +108,10 @@ void GamecubeControllersWidget::ConnectWidgets()
|
|||
{
|
||||
for (size_t i = 0; i < m_gc_controller_boxes.size(); ++i)
|
||||
{
|
||||
connect(m_gc_controller_boxes[i], qOverload<int>(&QComboBox::currentIndexChanged), this,
|
||||
[this, i] {
|
||||
OnGCTypeChanged(i);
|
||||
SaveSettings();
|
||||
});
|
||||
connect(m_gc_controller_boxes[i], &QComboBox::currentIndexChanged, this, [this, i] {
|
||||
OnGCTypeChanged(i);
|
||||
SaveSettings();
|
||||
});
|
||||
connect(m_gc_buttons[i], &QPushButton::clicked, this, [this, i] { OnGCPadConfigure(i); });
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include "DolphinQt/Config/CheatCodeEditor.h"
|
||||
#include "DolphinQt/Config/CheatWarningWidget.h"
|
||||
#include "DolphinQt/Config/HardcoreWarningWidget.h"
|
||||
#include "DolphinQt/QtUtils/ModalMessageBox.h"
|
||||
#include "DolphinQt/QtUtils/NonDefaultQPushButton.h"
|
||||
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
|
||||
|
@ -61,6 +62,9 @@ GeckoCodeWidget::~GeckoCodeWidget() = default;
|
|||
void GeckoCodeWidget::CreateWidgets()
|
||||
{
|
||||
m_warning = new CheatWarningWidget(m_game_id, m_restart_required, this);
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
m_hc_warning = new HardcoreWarningWidget(this);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
m_code_list = new QListWidget;
|
||||
m_name_label = new QLabel;
|
||||
m_creator_label = new QLabel;
|
||||
|
@ -102,6 +106,9 @@ void GeckoCodeWidget::CreateWidgets()
|
|||
auto* layout = new QVBoxLayout;
|
||||
|
||||
layout->addWidget(m_warning);
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
layout->addWidget(m_hc_warning);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
layout->addWidget(m_code_list);
|
||||
|
||||
auto* info_layout = new QFormLayout;
|
||||
|
@ -150,6 +157,10 @@ void GeckoCodeWidget::ConnectWidgets()
|
|||
connect(m_download_codes, &QPushButton::clicked, this, &GeckoCodeWidget::DownloadCodes);
|
||||
connect(m_warning, &CheatWarningWidget::OpenCheatEnableSettings, this,
|
||||
&GeckoCodeWidget::OpenGeneralSettings);
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
connect(m_hc_warning, &HardcoreWarningWidget::OpenAchievementSettings, this,
|
||||
&GeckoCodeWidget::OpenAchievementSettings);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
}
|
||||
|
||||
void GeckoCodeWidget::OnSelectionChanged()
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
#include "Common/CommonTypes.h"
|
||||
|
||||
class CheatWarningWidget;
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
class HardcoreWarningWidget;
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
class QLabel;
|
||||
class QListWidget;
|
||||
class QListWidgetItem;
|
||||
|
@ -32,6 +35,9 @@ public:
|
|||
|
||||
signals:
|
||||
void OpenGeneralSettings();
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
void OpenAchievementSettings();
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
||||
private:
|
||||
void OnSelectionChanged();
|
||||
|
@ -56,6 +62,9 @@ private:
|
|||
u16 m_game_revision;
|
||||
|
||||
CheatWarningWidget* m_warning;
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
HardcoreWarningWidget* m_hc_warning;
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
QListWidget* m_code_list;
|
||||
QLabel* m_name_label;
|
||||
QLabel* m_creator_label;
|
||||
|
|
|
@ -36,6 +36,10 @@ AdvancedWidget::AdvancedWidget(GraphicsWindow* parent)
|
|||
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this](Core::State state) {
|
||||
OnEmulationStateChanged(state != Core::State::Uninitialized);
|
||||
});
|
||||
connect(m_manual_texture_sampling, &QCheckBox::toggled, [this, parent] {
|
||||
SaveSettings();
|
||||
emit parent->UseFastTextureSamplingChanged();
|
||||
});
|
||||
|
||||
OnBackendChanged();
|
||||
OnEmulationStateChanged(Core::GetState() != Core::State::Uninitialized);
|
||||
|
@ -355,8 +359,9 @@ void AdvancedWidget::AddDescriptions()
|
|||
"level 9 but finish in significantly less time.<br><br>"
|
||||
"<dolphin_emphasis>If unsure, leave this at 6.</dolphin_emphasis>");
|
||||
static const char TR_CROPPING_DESCRIPTION[] = QT_TR_NOOP(
|
||||
"Crops the picture from its native aspect ratio to 4:3 or "
|
||||
"16:9.<br><br><dolphin_emphasis>If unsure, leave this unchecked.</dolphin_emphasis>");
|
||||
"Crops the picture from its native aspect ratio (which rarely exactly matches 4:3 or 16:9),"
|
||||
" to the specific user target aspect ratio (e.g. 4:3 or 16:9).<br><br>"
|
||||
"<dolphin_emphasis>If unsure, leave this unchecked.</dolphin_emphasis>");
|
||||
static const char TR_PROGRESSIVE_SCAN_DESCRIPTION[] = QT_TR_NOOP(
|
||||
"Enables progressive scan if supported by the emulated software. Most games don't have "
|
||||
"any issue with this.<br><br><dolphin_emphasis>If unsure, leave this "
|
||||
|
|
|
@ -51,7 +51,7 @@ void ColorCorrectionConfigWindow::Create()
|
|||
"Controls the base luminance of a paper white surface in nits. Useful for adjusting to "
|
||||
"different environmental lighting conditions when using a HDR display.<br><br>HDR output is "
|
||||
"required for this setting to take effect.<br><br><dolphin_emphasis>If unsure, leave this at "
|
||||
"200.</dolphin_emphasis>");
|
||||
"203.</dolphin_emphasis>");
|
||||
|
||||
// Color Space:
|
||||
|
||||
|
|
|
@ -39,6 +39,10 @@ EnhancementsWidget::EnhancementsWidget(GraphicsWindow* parent) : m_block_save(fa
|
|||
AddDescriptions();
|
||||
connect(parent, &GraphicsWindow::BackendChanged,
|
||||
[this](const QString& backend) { LoadSettings(); });
|
||||
connect(parent, &GraphicsWindow::UseFastTextureSamplingChanged, this,
|
||||
&EnhancementsWidget::LoadSettings);
|
||||
connect(parent, &GraphicsWindow::UseGPUTextureDecodingChanged, this,
|
||||
&EnhancementsWidget::LoadSettings);
|
||||
}
|
||||
|
||||
constexpr int TEXTURE_FILTERING_DEFAULT = 0;
|
||||
|
@ -62,14 +66,19 @@ void EnhancementsWidget::CreateWidgets()
|
|||
auto* enhancements_layout = new QGridLayout();
|
||||
enhancements_box->setLayout(enhancements_layout);
|
||||
|
||||
// Only display the first 8 scales, which most users will not go beyond.
|
||||
QStringList resolution_options{
|
||||
tr("Auto (Multiple of 640x528)"), tr("Native (640x528)"),
|
||||
tr("2x Native (1280x1056) for 720p"), tr("3x Native (1920x1584) for 1080p"),
|
||||
tr("4x Native (2560x2112) for 1440p"), tr("5x Native (3200x2640)"),
|
||||
tr("6x Native (3840x3168) for 4K"), tr("7x Native (4480x3696)"),
|
||||
tr("8x Native (5120x4224) for 5K")};
|
||||
const int visible_resolution_option_count = static_cast<int>(resolution_options.size());
|
||||
QStringList resolution_options{tr("Auto (Multiple of 640x528)"), tr("Native (640x528)")};
|
||||
// From 2x up.
|
||||
// To calculate the suggested internal resolution scale for each common output resolution,
|
||||
// we find the minimum multiplier that results in an equal or greater resolution than the
|
||||
// output one, on both width and height.
|
||||
// Note that often games don't render to the full resolution, but have some black bars
|
||||
// on the edges; this is not accounted for in the calculations.
|
||||
const QStringList resolution_extra_options{
|
||||
tr("720p"), tr("1080p"), tr("1440p"), QStringLiteral(""),
|
||||
tr("4K"), QStringLiteral(""), tr("5K"), QStringLiteral(""),
|
||||
QStringLiteral(""), QStringLiteral(""), tr("8K")};
|
||||
const int visible_resolution_option_count = static_cast<int>(resolution_options.size()) +
|
||||
static_cast<int>(resolution_extra_options.size());
|
||||
|
||||
// If the current scale is greater than the max scale in the ini, add sufficient options so that
|
||||
// when the settings are saved we don't lose the user-modified value from the ini.
|
||||
|
@ -77,10 +86,22 @@ void EnhancementsWidget::CreateWidgets()
|
|||
std::max(Config::Get(Config::GFX_EFB_SCALE), Config::Get(Config::GFX_MAX_EFB_SCALE));
|
||||
for (int scale = static_cast<int>(resolution_options.size()); scale <= max_efb_scale; scale++)
|
||||
{
|
||||
resolution_options.append(tr("%1x Native (%2x%3)")
|
||||
.arg(QString::number(scale),
|
||||
QString::number(static_cast<int>(EFB_WIDTH) * scale),
|
||||
QString::number(static_cast<int>(EFB_HEIGHT) * scale)));
|
||||
const QString scale_text = QString::number(scale);
|
||||
const QString width_text = QString::number(static_cast<int>(EFB_WIDTH) * scale);
|
||||
const QString height_text = QString::number(static_cast<int>(EFB_HEIGHT) * scale);
|
||||
const int extra_index = resolution_options.size() - 2;
|
||||
const QString extra_text = resolution_extra_options.size() > extra_index ?
|
||||
resolution_extra_options[extra_index] :
|
||||
QStringLiteral("");
|
||||
if (extra_text.isEmpty())
|
||||
{
|
||||
resolution_options.append(tr("%1x Native (%2x%3)").arg(scale_text, width_text, height_text));
|
||||
}
|
||||
else
|
||||
{
|
||||
resolution_options.append(
|
||||
tr("%1x Native (%2x%3) for %4").arg(scale_text, width_text, height_text, extra_text));
|
||||
}
|
||||
}
|
||||
|
||||
m_ir_combo = new ConfigChoice(resolution_options, Config::GFX_EFB_SCALE);
|
||||
|
@ -211,15 +232,13 @@ void EnhancementsWidget::CreateWidgets()
|
|||
|
||||
void EnhancementsWidget::ConnectWidgets()
|
||||
{
|
||||
connect(m_aa_combo, qOverload<int>(&QComboBox::currentIndexChanged),
|
||||
connect(m_aa_combo, &QComboBox::currentIndexChanged, [this](int) { SaveSettings(); });
|
||||
connect(m_texture_filtering_combo, &QComboBox::currentIndexChanged,
|
||||
[this](int) { SaveSettings(); });
|
||||
connect(m_texture_filtering_combo, qOverload<int>(&QComboBox::currentIndexChanged),
|
||||
connect(m_output_resampling_combo, &QComboBox::currentIndexChanged,
|
||||
[this](int) { SaveSettings(); });
|
||||
connect(m_output_resampling_combo, qOverload<int>(&QComboBox::currentIndexChanged),
|
||||
[this](int) { SaveSettings(); });
|
||||
connect(m_pp_effect, qOverload<int>(&QComboBox::currentIndexChanged),
|
||||
[this](int) { SaveSettings(); });
|
||||
connect(m_3d_mode, qOverload<int>(&QComboBox::currentIndexChanged), [this] {
|
||||
connect(m_pp_effect, &QComboBox::currentIndexChanged, [this](int) { SaveSettings(); });
|
||||
connect(m_3d_mode, &QComboBox::currentIndexChanged, [this] {
|
||||
m_block_save = true;
|
||||
m_configure_color_correction->setEnabled(g_Config.backend_info.bSupportsPostProcessing);
|
||||
LoadPPShaders();
|
||||
|
@ -278,7 +297,7 @@ void EnhancementsWidget::LoadPPShaders()
|
|||
.arg(tr(g_video_backend->GetDisplayName().c_str())));
|
||||
|
||||
VideoCommon::PostProcessingConfiguration pp_shader;
|
||||
if (selected_shader != "(off)" && supports_postprocessing)
|
||||
if (selected_shader != "" && supports_postprocessing)
|
||||
{
|
||||
pp_shader.LoadShader(selected_shader);
|
||||
m_configure_pp_effect->setEnabled(pp_shader.HasOptions());
|
||||
|
@ -292,6 +311,9 @@ void EnhancementsWidget::LoadPPShaders()
|
|||
void EnhancementsWidget::LoadSettings()
|
||||
{
|
||||
m_block_save = true;
|
||||
m_texture_filtering_combo->setEnabled(Config::Get(Config::GFX_HACK_FAST_TEXTURE_SAMPLING));
|
||||
m_arbitrary_mipmap_detection->setEnabled(!Config::Get(Config::GFX_ENABLE_GPU_TEXTURE_DECODING));
|
||||
|
||||
// Anti-Aliasing
|
||||
|
||||
const u32 aa_selection = Config::Get(Config::GFX_MSAA);
|
||||
|
@ -451,11 +473,11 @@ void EnhancementsWidget::SaveSettings()
|
|||
const bool passive = g_Config.stereo_mode == StereoMode::Passive;
|
||||
Config::SetBaseOrCurrent(Config::GFX_ENHANCE_POST_SHADER,
|
||||
(!anaglyph && !passive && m_pp_effect->currentIndex() == 0) ?
|
||||
"(off)" :
|
||||
"" :
|
||||
m_pp_effect->currentText().toStdString());
|
||||
|
||||
VideoCommon::PostProcessingConfiguration pp_shader;
|
||||
if (Config::Get(Config::GFX_ENHANCE_POST_SHADER) != "(off)")
|
||||
if (Config::Get(Config::GFX_ENHANCE_POST_SHADER) != "")
|
||||
{
|
||||
pp_shader.LoadShader(Config::Get(Config::GFX_ENHANCE_POST_SHADER));
|
||||
m_configure_pp_effect->setEnabled(pp_shader.HasOptions());
|
||||
|
@ -488,7 +510,8 @@ void EnhancementsWidget::AddDescriptions()
|
|||
"that are at oblique viewing angles. Force Nearest and Force Linear override the texture "
|
||||
"scaling filter selected by the game.<br><br>Any option except 'Default' will alter the look "
|
||||
"of the game's textures and might cause issues in a small number of "
|
||||
"games.<br><br><dolphin_emphasis>If unsure, select 'Default'.</dolphin_emphasis>");
|
||||
"games.<br><br>This option is incompatible with Manual Texture Sampling.<br><br>"
|
||||
"<dolphin_emphasis>If unsure, select 'Default'.</dolphin_emphasis>");
|
||||
static const char TR_OUTPUT_RESAMPLING_DESCRIPTION[] =
|
||||
QT_TR_NOOP("Affects how the game output is scaled to the window resolution."
|
||||
"<br>The performance mostly depends on the number of samples each method uses."
|
||||
|
@ -538,12 +561,11 @@ void EnhancementsWidget::AddDescriptions()
|
|||
"causes slowdowns or graphical issues.<br><br><dolphin_emphasis>If unsure, leave "
|
||||
"this unchecked.</dolphin_emphasis>");
|
||||
static const char TR_WIDESCREEN_HACK_DESCRIPTION[] = QT_TR_NOOP(
|
||||
"Forces the game to output graphics for any aspect ratio. Use with \"Aspect Ratio\" set to "
|
||||
"\"Force 16:9\" to force 4:3-only games to run at 16:9.<br><br>Rarely produces good "
|
||||
"results and "
|
||||
"often partially breaks graphics and game UIs. Unnecessary (and detrimental) if using any "
|
||||
"AR/Gecko-code widescreen patches.<br><br><dolphin_emphasis>If unsure, leave "
|
||||
"this unchecked.</dolphin_emphasis>");
|
||||
"Forces the game to output graphics at any aspect ratio by expanding the view frustum "
|
||||
"without stretching the image.<br>This is a hack, and its results will vary widely game "
|
||||
"to game (it often causes the UI to stretch).<br>"
|
||||
"Game-specific AR/Gecko-code aspect ratio patches are preferable over this if available."
|
||||
"<br><br><dolphin_emphasis>If unsure, leave this unchecked.</dolphin_emphasis>");
|
||||
static const char TR_REMOVE_FOG_DESCRIPTION[] =
|
||||
QT_TR_NOOP("Makes distant objects more visible by removing fog, thus increasing the overall "
|
||||
"detail.<br><br>Disabling fog will break some games which rely on proper fog "
|
||||
|
@ -584,7 +606,7 @@ void EnhancementsWidget::AddDescriptions()
|
|||
"resolution, such as in games that use very low resolution mipmaps. Disabling this can also "
|
||||
"reduce stutter in games that frequently load new textures. This feature is not compatible "
|
||||
"with GPU Texture Decoding.<br><br><dolphin_emphasis>If unsure, leave this "
|
||||
"checked.</dolphin_emphasis>");
|
||||
"unchecked.</dolphin_emphasis>");
|
||||
static const char TR_HDR_DESCRIPTION[] = QT_TR_NOOP(
|
||||
"Enables scRGB HDR output (if supported by your graphics backend and monitor)."
|
||||
" Fullscreen might be required."
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include "DolphinQt/Config/ConfigControls/ConfigBool.h"
|
||||
#include "DolphinQt/Config/ConfigControls/ConfigChoice.h"
|
||||
#include "DolphinQt/Config/ConfigControls/ConfigInteger.h"
|
||||
#include "DolphinQt/Config/ConfigControls/ConfigRadio.h"
|
||||
#include "DolphinQt/Config/Graphics/GraphicsWindow.h"
|
||||
#include "DolphinQt/Config/ToolTipControls/ToolTipComboBox.h"
|
||||
|
@ -54,9 +55,20 @@ void GeneralWidget::CreateWidgets()
|
|||
m_video_layout = new QGridLayout();
|
||||
|
||||
m_backend_combo = new ToolTipComboBox();
|
||||
m_aspect_combo =
|
||||
new ConfigChoice({tr("Auto"), tr("Force 16:9"), tr("Force 4:3"), tr("Stretch to Window")},
|
||||
Config::GFX_ASPECT_RATIO);
|
||||
m_aspect_combo = new ConfigChoice(
|
||||
{tr("Auto"), tr("Force 16:9"), tr("Force 4:3"), tr("Stretch to Window"), tr("Custom")},
|
||||
Config::GFX_ASPECT_RATIO);
|
||||
m_custom_aspect_label = new QLabel(tr("Custom Aspect Ratio:"));
|
||||
m_custom_aspect_label->setHidden(true);
|
||||
constexpr int MAX_CUSTOM_ASPECT_RATIO_RESOLUTION = 10000;
|
||||
m_custom_aspect_width = new ConfigInteger(1, MAX_CUSTOM_ASPECT_RATIO_RESOLUTION,
|
||||
Config::GFX_CUSTOM_ASPECT_RATIO_WIDTH);
|
||||
m_custom_aspect_width->setEnabled(false);
|
||||
m_custom_aspect_width->setHidden(true);
|
||||
m_custom_aspect_height = new ConfigInteger(1, MAX_CUSTOM_ASPECT_RATIO_RESOLUTION,
|
||||
Config::GFX_CUSTOM_ASPECT_RATIO_HEIGHT);
|
||||
m_custom_aspect_height->setEnabled(false);
|
||||
m_custom_aspect_height->setHidden(true);
|
||||
m_adapter_combo = new ToolTipComboBox;
|
||||
m_enable_vsync = new ConfigBool(tr("V-Sync"), Config::GFX_VSYNC);
|
||||
m_enable_fullscreen = new ConfigBool(tr("Start in Fullscreen"), Config::MAIN_FULLSCREEN);
|
||||
|
@ -70,16 +82,20 @@ void GeneralWidget::CreateWidgets()
|
|||
}
|
||||
|
||||
m_video_layout->addWidget(new QLabel(tr("Backend:")), 0, 0);
|
||||
m_video_layout->addWidget(m_backend_combo, 0, 1);
|
||||
m_video_layout->addWidget(m_backend_combo, 0, 1, 1, -1);
|
||||
|
||||
m_video_layout->addWidget(new QLabel(tr("Adapter:")), 1, 0);
|
||||
m_video_layout->addWidget(m_adapter_combo, 1, 1);
|
||||
m_video_layout->addWidget(m_adapter_combo, 1, 1, 1, -1);
|
||||
|
||||
m_video_layout->addWidget(new QLabel(tr("Aspect Ratio:")), 3, 0);
|
||||
m_video_layout->addWidget(m_aspect_combo, 3, 1);
|
||||
m_video_layout->addWidget(m_aspect_combo, 3, 1, 1, -1);
|
||||
|
||||
m_video_layout->addWidget(m_enable_vsync, 4, 0);
|
||||
m_video_layout->addWidget(m_enable_fullscreen, 4, 1);
|
||||
m_video_layout->addWidget(m_custom_aspect_label, 4, 0);
|
||||
m_video_layout->addWidget(m_custom_aspect_width, 4, 1);
|
||||
m_video_layout->addWidget(m_custom_aspect_height, 4, 2);
|
||||
|
||||
m_video_layout->addWidget(m_enable_vsync, 5, 0);
|
||||
m_video_layout->addWidget(m_enable_fullscreen, 5, 1, 1, -1);
|
||||
|
||||
// Other
|
||||
auto* m_options_box = new QGroupBox(tr("Other"));
|
||||
|
@ -134,13 +150,20 @@ void GeneralWidget::CreateWidgets()
|
|||
void GeneralWidget::ConnectWidgets()
|
||||
{
|
||||
// Video Backend
|
||||
connect(m_backend_combo, qOverload<int>(&QComboBox::currentIndexChanged), this,
|
||||
&GeneralWidget::SaveSettings);
|
||||
connect(m_adapter_combo, qOverload<int>(&QComboBox::currentIndexChanged), this, [&](int index) {
|
||||
connect(m_backend_combo, &QComboBox::currentIndexChanged, this, &GeneralWidget::SaveSettings);
|
||||
connect(m_adapter_combo, &QComboBox::currentIndexChanged, this, [&](int index) {
|
||||
g_Config.iAdapter = index;
|
||||
Config::SetBaseOrCurrent(Config::GFX_ADAPTER, index);
|
||||
emit BackendChanged(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND)));
|
||||
});
|
||||
connect(m_aspect_combo, qOverload<int>(&QComboBox::currentIndexChanged), this, [&](int index) {
|
||||
const bool is_custom_aspect_ratio = (index == static_cast<int>(AspectMode::Custom));
|
||||
m_custom_aspect_width->setEnabled(is_custom_aspect_ratio);
|
||||
m_custom_aspect_height->setEnabled(is_custom_aspect_ratio);
|
||||
m_custom_aspect_label->setHidden(!is_custom_aspect_ratio);
|
||||
m_custom_aspect_width->setHidden(!is_custom_aspect_ratio);
|
||||
m_custom_aspect_height->setHidden(!is_custom_aspect_ratio);
|
||||
});
|
||||
}
|
||||
|
||||
void GeneralWidget::LoadSettings()
|
||||
|
@ -148,6 +171,13 @@ void GeneralWidget::LoadSettings()
|
|||
// Video Backend
|
||||
m_backend_combo->setCurrentIndex(m_backend_combo->findData(
|
||||
QVariant(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND)))));
|
||||
|
||||
const bool is_custom_aspect_ratio = (Config::Get(Config::GFX_ASPECT_RATIO) == AspectMode::Custom);
|
||||
m_custom_aspect_width->setEnabled(is_custom_aspect_ratio);
|
||||
m_custom_aspect_height->setEnabled(is_custom_aspect_ratio);
|
||||
m_custom_aspect_label->setHidden(!is_custom_aspect_ratio);
|
||||
m_custom_aspect_width->setHidden(!is_custom_aspect_ratio);
|
||||
m_custom_aspect_height->setHidden(!is_custom_aspect_ratio);
|
||||
}
|
||||
|
||||
void GeneralWidget::SaveSettings()
|
||||
|
@ -210,11 +240,15 @@ void GeneralWidget::AddDescriptions()
|
|||
QT_TR_NOOP("Uses the main Dolphin window for rendering rather than "
|
||||
"a separate render window.<br><br><dolphin_emphasis>If unsure, leave "
|
||||
"this unchecked.</dolphin_emphasis>");
|
||||
static const char TR_ASPECT_RATIO_DESCRIPTION[] = QT_TR_NOOP(
|
||||
"Selects which aspect ratio to use when rendering.<br><br>Auto: Uses the native aspect "
|
||||
"ratio<br>Force 16:9: Mimics an analog TV with a widescreen aspect ratio.<br>Force 4:3: "
|
||||
"Mimics a standard 4:3 analog TV.<br>Stretch to Window: Stretches the picture to the "
|
||||
"window size.<br><br><dolphin_emphasis>If unsure, select Auto.</dolphin_emphasis>");
|
||||
static const char TR_ASPECT_RATIO_DESCRIPTION[] =
|
||||
QT_TR_NOOP("Selects which aspect ratio to use when rendering.<br>"
|
||||
"Each game can have a slightly different native aspect ratio."
|
||||
"<br><br>Auto: Uses the native aspect ratio"
|
||||
"<br>Force 16:9: Mimics an analog TV with a widescreen aspect ratio."
|
||||
"<br>Force 4:3: Mimics a standard 4:3 analog TV."
|
||||
"<br>Stretch to Window: Stretches the picture to the window size."
|
||||
"<br>Custom: For games running with specific custom aspect ratio cheats.<br><br>"
|
||||
"<dolphin_emphasis>If unsure, select Auto.</dolphin_emphasis>");
|
||||
static const char TR_VSYNC_DESCRIPTION[] = QT_TR_NOOP(
|
||||
"Waits for vertical blanks in order to prevent tearing.<br><br>Decreases performance "
|
||||
"if emulation speed is below 100%.<br><br><dolphin_emphasis>If unsure, leave "
|
||||
|
@ -263,6 +297,9 @@ void GeneralWidget::AddDescriptions()
|
|||
m_aspect_combo->SetTitle(tr("Aspect Ratio"));
|
||||
m_aspect_combo->SetDescription(tr(TR_ASPECT_RATIO_DESCRIPTION));
|
||||
|
||||
m_custom_aspect_width->SetTitle(tr("Custom Aspect Ratio Width"));
|
||||
m_custom_aspect_height->SetTitle(tr("Custom Aspect Ratio Height"));
|
||||
|
||||
m_enable_vsync->SetDescription(tr(TR_VSYNC_DESCRIPTION));
|
||||
|
||||
m_enable_fullscreen->SetDescription(tr(TR_FULLSCREEN_DESCRIPTION));
|
||||
|
|
|
@ -9,10 +9,12 @@
|
|||
|
||||
class ConfigBool;
|
||||
class ConfigChoice;
|
||||
class ConfigInteger;
|
||||
class ConfigRadioInt;
|
||||
class GraphicsWindow;
|
||||
class QCheckBox;
|
||||
class QComboBox;
|
||||
class QLabel;
|
||||
class QRadioButton;
|
||||
class QGridLayout;
|
||||
class ToolTipComboBox;
|
||||
|
@ -41,6 +43,9 @@ private:
|
|||
ToolTipComboBox* m_backend_combo;
|
||||
ToolTipComboBox* m_adapter_combo;
|
||||
ConfigChoice* m_aspect_combo;
|
||||
QLabel* m_custom_aspect_label;
|
||||
ConfigInteger* m_custom_aspect_width;
|
||||
ConfigInteger* m_custom_aspect_height;
|
||||
ConfigBool* m_enable_vsync;
|
||||
ConfigBool* m_enable_fullscreen;
|
||||
|
||||
|
|
|
@ -24,6 +24,8 @@ public:
|
|||
|
||||
signals:
|
||||
void BackendChanged(const QString& backend);
|
||||
void UseFastTextureSamplingChanged();
|
||||
void UseGPUTextureDecodingChanged();
|
||||
|
||||
private:
|
||||
void CreateMainLayout();
|
||||
|
|
|
@ -31,6 +31,10 @@ HacksWidget::HacksWidget(GraphicsWindow* parent)
|
|||
connect(parent, &GraphicsWindow::BackendChanged, this, &HacksWidget::OnBackendChanged);
|
||||
OnBackendChanged(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND)));
|
||||
connect(&Settings::Instance(), &Settings::ConfigChanged, this, &HacksWidget::LoadSettings);
|
||||
connect(m_gpu_texture_decoding, &QCheckBox::toggled, [this, parent] {
|
||||
SaveSettings();
|
||||
emit parent->UseGPUTextureDecodingChanged();
|
||||
});
|
||||
}
|
||||
|
||||
void HacksWidget::CreateWidgets()
|
||||
|
@ -264,8 +268,8 @@ void HacksWidget::AddDescriptions()
|
|||
static const char TR_GPU_DECODING_DESCRIPTION[] = QT_TR_NOOP(
|
||||
"Enables texture decoding using the GPU instead of the CPU.<br><br>This may result in "
|
||||
"performance gains in some scenarios, or on systems where the CPU is the "
|
||||
"bottleneck.<br><br><dolphin_emphasis>If unsure, leave this "
|
||||
"unchecked.</dolphin_emphasis>");
|
||||
"bottleneck.<br><br>This option is incompatible with Arbitrary Mipmap Detection.<br><br>"
|
||||
"<dolphin_emphasis>If unsure, leave this unchecked.</dolphin_emphasis>");
|
||||
static const char TR_FAST_DEPTH_CALC_DESCRIPTION[] = QT_TR_NOOP(
|
||||
"Uses a less accurate algorithm to calculate depth values.<br><br>Causes issues in a few "
|
||||
"games, but can result in a decent speed increase depending on the game and/or "
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "Core/ConfigManager.h"
|
||||
#include "Core/Core.h"
|
||||
#include "DolphinQt/Config/GraphicsModWarningWidget.h"
|
||||
#include "DolphinQt/QtUtils/ClearLayoutRecursively.h"
|
||||
#include "DolphinQt/Settings.h"
|
||||
#include "UICommon/GameFile.h"
|
||||
#include "VideoCommon/GraphicsModSystem/Config/GraphicsMod.h"
|
||||
|
@ -209,14 +210,14 @@ void GraphicsModListWidget::OnModChanged(std::optional<std::string> absolute_pat
|
|||
|
||||
if (!mod->m_author.empty())
|
||||
{
|
||||
auto* author_label = new QLabel(tr("By: ") + QString::fromStdString(mod->m_author));
|
||||
auto* author_label = new QLabel(tr("By: %1").arg(QString::fromStdString(mod->m_author)));
|
||||
m_mod_meta_layout->addWidget(author_label);
|
||||
}
|
||||
|
||||
if (!mod->m_description.empty())
|
||||
{
|
||||
auto* description_label =
|
||||
new QLabel(tr("Description: ") + QString::fromStdString(mod->m_description));
|
||||
new QLabel(tr("Description: %1").arg(QString::fromStdString(mod->m_description)));
|
||||
description_label->setWordWrap(true);
|
||||
m_mod_meta_layout->addWidget(description_label);
|
||||
}
|
||||
|
@ -240,31 +241,6 @@ void GraphicsModListWidget::SaveModList()
|
|||
m_needs_save = true;
|
||||
}
|
||||
|
||||
void GraphicsModListWidget::ClearLayoutRecursively(QLayout* layout)
|
||||
{
|
||||
while (QLayoutItem* child = layout->takeAt(0))
|
||||
{
|
||||
if (child == nullptr)
|
||||
continue;
|
||||
|
||||
if (child->widget())
|
||||
{
|
||||
layout->removeWidget(child->widget());
|
||||
delete child->widget();
|
||||
}
|
||||
else if (child->layout())
|
||||
{
|
||||
ClearLayoutRecursively(child->layout());
|
||||
layout->removeItem(child);
|
||||
}
|
||||
else
|
||||
{
|
||||
layout->removeItem(child);
|
||||
}
|
||||
delete child;
|
||||
}
|
||||
}
|
||||
|
||||
void GraphicsModListWidget::SaveToDisk()
|
||||
{
|
||||
m_needs_save = false;
|
||||
|
|
|
@ -56,8 +56,6 @@ private:
|
|||
|
||||
void SaveModList();
|
||||
|
||||
void ClearLayoutRecursively(QLayout* layout);
|
||||
|
||||
void OpenGraphicsModDir();
|
||||
|
||||
void CalculateGameRunning(Core::State state);
|
||||
|
|
62
Source/Core/DolphinQt/Config/HardcoreWarningWidget.cpp
Normal file
62
Source/Core/DolphinQt/Config/HardcoreWarningWidget.cpp
Normal file
|
@ -0,0 +1,62 @@
|
|||
// Copyright 2023 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
#include "DolphinQt/Config/HardcoreWarningWidget.h"
|
||||
|
||||
#include <QHBoxLayout>
|
||||
#include <QLabel>
|
||||
#include <QPixmap>
|
||||
#include <QPushButton>
|
||||
#include <QStyle>
|
||||
|
||||
#include "Core/Config/AchievementSettings.h"
|
||||
#include "Core/ConfigManager.h"
|
||||
#include "Core/Core.h"
|
||||
|
||||
#include "DolphinQt/Settings.h"
|
||||
|
||||
HardcoreWarningWidget::HardcoreWarningWidget(QWidget* parent) : QWidget(parent)
|
||||
{
|
||||
CreateWidgets();
|
||||
ConnectWidgets();
|
||||
|
||||
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this] { Update(); });
|
||||
|
||||
Update();
|
||||
}
|
||||
|
||||
void HardcoreWarningWidget::CreateWidgets()
|
||||
{
|
||||
const auto size = 1.5 * QFontMetrics(font()).height();
|
||||
|
||||
QPixmap warning_icon = style()->standardIcon(QStyle::SP_MessageBoxWarning).pixmap(size, size);
|
||||
|
||||
auto* icon = new QLabel;
|
||||
icon->setPixmap(warning_icon);
|
||||
|
||||
m_text = new QLabel(tr("This feature is disabled in hardcore mode."));
|
||||
m_settings_button = new QPushButton(tr("Achievement Settings"));
|
||||
|
||||
auto* layout = new QHBoxLayout;
|
||||
|
||||
layout->addWidget(icon);
|
||||
layout->addWidget(m_text, 1);
|
||||
layout->addWidget(m_settings_button);
|
||||
|
||||
layout->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
setLayout(layout);
|
||||
}
|
||||
|
||||
void HardcoreWarningWidget::ConnectWidgets()
|
||||
{
|
||||
connect(m_settings_button, &QPushButton::clicked, this,
|
||||
&HardcoreWarningWidget::OpenAchievementSettings);
|
||||
}
|
||||
|
||||
void HardcoreWarningWidget::Update()
|
||||
{
|
||||
setHidden(!Config::Get(Config::RA_HARDCORE_ENABLED));
|
||||
}
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
30
Source/Core/DolphinQt/Config/HardcoreWarningWidget.h
Normal file
30
Source/Core/DolphinQt/Config/HardcoreWarningWidget.h
Normal file
|
@ -0,0 +1,30 @@
|
|||
// Copyright 2023 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
#include <QWidget>
|
||||
|
||||
class QLabel;
|
||||
class QPushButton;
|
||||
|
||||
class HardcoreWarningWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit HardcoreWarningWidget(QWidget* parent);
|
||||
|
||||
signals:
|
||||
void OpenAchievementSettings();
|
||||
|
||||
private:
|
||||
void CreateWidgets();
|
||||
void ConnectWidgets();
|
||||
|
||||
void Update();
|
||||
|
||||
QLabel* m_text;
|
||||
QPushButton* m_settings_button;
|
||||
};
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
|
@ -225,8 +225,7 @@ void InfoWidget::CreateLanguageSelector()
|
|||
if (m_language_selector->count() == 1)
|
||||
m_language_selector->setDisabled(true);
|
||||
|
||||
connect(m_language_selector, qOverload<int>(&QComboBox::currentIndexChanged), this,
|
||||
&InfoWidget::ChangeLanguage);
|
||||
connect(m_language_selector, &QComboBox::currentIndexChanged, this, &InfoWidget::ChangeLanguage);
|
||||
}
|
||||
|
||||
void InfoWidget::ChangeLanguage()
|
||||
|
|
|
@ -163,8 +163,7 @@ void LogWidget::ConnectWidgets()
|
|||
m_log_ring_buffer.clear();
|
||||
});
|
||||
connect(m_log_wrap, &QCheckBox::toggled, this, &LogWidget::SaveSettings);
|
||||
connect(m_log_font, qOverload<int>(&QComboBox::currentIndexChanged), this,
|
||||
&LogWidget::SaveSettings);
|
||||
connect(m_log_font, &QComboBox::currentIndexChanged, this, &LogWidget::SaveSettings);
|
||||
connect(this, &QDockWidget::topLevelChanged, this, &LogWidget::SaveSettings);
|
||||
connect(&Settings::Instance(), &Settings::LogVisibilityChanged, this, &LogWidget::setVisible);
|
||||
}
|
||||
|
|
|
@ -458,13 +458,12 @@ void IOWindow::ConnectWidgets()
|
|||
|
||||
connect(m_button_box, &QDialogButtonBox::clicked, this, &IOWindow::OnDialogButtonPressed);
|
||||
connect(m_devices_combo, &QComboBox::currentTextChanged, this, &IOWindow::OnDeviceChanged);
|
||||
connect(m_scalar_spinbox, qOverload<int>(&QSpinBox::valueChanged), this,
|
||||
&IOWindow::OnRangeChanged);
|
||||
connect(m_scalar_spinbox, &QSpinBox::valueChanged, this, &IOWindow::OnRangeChanged);
|
||||
|
||||
connect(m_expression_text, &QPlainTextEdit::textChanged,
|
||||
[this] { UpdateExpression(m_expression_text->toPlainText().toStdString()); });
|
||||
|
||||
connect(m_variables_combo, qOverload<int>(&QComboBox::activated), [this](int index) {
|
||||
connect(m_variables_combo, &QComboBox::activated, [this](int index) {
|
||||
if (index == 0)
|
||||
return;
|
||||
|
||||
|
@ -482,7 +481,7 @@ void IOWindow::ConnectWidgets()
|
|||
m_variables_combo->setCurrentIndex(0);
|
||||
});
|
||||
|
||||
connect(m_operators_combo, qOverload<int>(&QComboBox::activated), [this](int index) {
|
||||
connect(m_operators_combo, &QComboBox::activated, [this](int index) {
|
||||
if (index == 0)
|
||||
return;
|
||||
|
||||
|
@ -491,7 +490,7 @@ void IOWindow::ConnectWidgets()
|
|||
m_operators_combo->setCurrentIndex(0);
|
||||
});
|
||||
|
||||
connect(m_functions_combo, qOverload<int>(&QComboBox::activated), [this](int index) {
|
||||
connect(m_functions_combo, &QComboBox::activated, [this](int index) {
|
||||
if (index == 0)
|
||||
return;
|
||||
|
||||
|
|
|
@ -18,12 +18,11 @@ MappingDouble::MappingDouble(MappingWidget* parent, ControllerEmu::NumericSettin
|
|||
if (const auto ui_description = m_setting.GetUIDescription())
|
||||
setToolTip(tr(ui_description));
|
||||
|
||||
connect(this, qOverload<double>(&QDoubleSpinBox::valueChanged), this,
|
||||
[this, parent](double value) {
|
||||
m_setting.SetValue(value);
|
||||
ConfigChanged();
|
||||
parent->SaveSettings();
|
||||
});
|
||||
connect(this, &QDoubleSpinBox::valueChanged, this, [this, parent](double value) {
|
||||
m_setting.SetValue(value);
|
||||
ConfigChanged();
|
||||
parent->SaveSettings();
|
||||
});
|
||||
|
||||
connect(parent, &MappingWidget::ConfigChanged, this, &MappingDouble::ConfigChanged);
|
||||
connect(parent, &MappingWidget::Update, this, &MappingDouble::Update);
|
||||
|
|
|
@ -185,8 +185,7 @@ void MappingWindow::ConnectWidgets()
|
|||
connect(&Settings::Instance(), &Settings::DevicesChanged, this,
|
||||
&MappingWindow::OnGlobalDevicesChanged);
|
||||
connect(this, &MappingWindow::ConfigChanged, this, &MappingWindow::OnGlobalDevicesChanged);
|
||||
connect(m_devices_combo, qOverload<int>(&QComboBox::currentIndexChanged), this,
|
||||
&MappingWindow::OnSelectDevice);
|
||||
connect(m_devices_combo, &QComboBox::currentIndexChanged, this, &MappingWindow::OnSelectDevice);
|
||||
|
||||
connect(m_reset_clear, &QPushButton::clicked, this, &MappingWindow::OnClearFieldsPressed);
|
||||
connect(m_reset_default, &QPushButton::clicked, this, &MappingWindow::OnDefaultFieldsPressed);
|
||||
|
@ -194,8 +193,7 @@ void MappingWindow::ConnectWidgets()
|
|||
connect(m_profiles_load, &QPushButton::clicked, this, &MappingWindow::OnLoadProfilePressed);
|
||||
connect(m_profiles_delete, &QPushButton::clicked, this, &MappingWindow::OnDeleteProfilePressed);
|
||||
|
||||
connect(m_profiles_combo, qOverload<int>(&QComboBox::currentIndexChanged), this,
|
||||
&MappingWindow::OnSelectProfile);
|
||||
connect(m_profiles_combo, &QComboBox::currentIndexChanged, this, &MappingWindow::OnSelectProfile);
|
||||
connect(m_profiles_combo, &QComboBox::editTextChanged, this,
|
||||
&MappingWindow::OnProfileTextChanged);
|
||||
|
||||
|
|
|
@ -76,10 +76,9 @@ void WiimoteEmuGeneral::CreateMainLayout()
|
|||
|
||||
void WiimoteEmuGeneral::Connect()
|
||||
{
|
||||
connect(m_extension_combo, qOverload<int>(&QComboBox::currentIndexChanged), this,
|
||||
connect(m_extension_combo, &QComboBox::currentIndexChanged, this,
|
||||
&WiimoteEmuGeneral::OnAttachmentChanged);
|
||||
connect(m_extension_combo, qOverload<int>(&QComboBox::activated), this,
|
||||
&WiimoteEmuGeneral::OnAttachmentSelected);
|
||||
connect(m_extension_combo, &QComboBox::activated, this, &WiimoteEmuGeneral::OnAttachmentSelected);
|
||||
connect(this, &MappingWidget::ConfigChanged, this, &WiimoteEmuGeneral::ConfigChanged);
|
||||
connect(this, &MappingWidget::Update, this, &WiimoteEmuGeneral::Update);
|
||||
}
|
||||
|
|
|
@ -87,7 +87,7 @@ void NewPatchDialog::CreateWidgets()
|
|||
|
||||
void NewPatchDialog::ConnectWidgets()
|
||||
{
|
||||
connect(m_name_edit, qOverload<const QString&>(&QLineEdit::textEdited),
|
||||
connect(m_name_edit, &QLineEdit::textEdited,
|
||||
[this](const QString& name) { m_patch.name = name.toStdString(); });
|
||||
|
||||
connect(m_add_button, &QPushButton::clicked, this, &NewPatchDialog::AddEntry);
|
||||
|
@ -162,20 +162,17 @@ QGroupBox* NewPatchDialog::CreateEntry(const PatchEngine::PatchEntry& entry)
|
|||
layout->addWidget(remove, 5, 0, 1, -1);
|
||||
box->setLayout(layout);
|
||||
|
||||
connect(address, qOverload<const QString&>(&QLineEdit::textEdited),
|
||||
[new_entry](const QString& text) {
|
||||
new_entry->entry.address = OnTextEdited(new_entry->address, text);
|
||||
});
|
||||
connect(address, &QLineEdit::textEdited, [new_entry](const QString& text) {
|
||||
new_entry->entry.address = OnTextEdited(new_entry->address, text);
|
||||
});
|
||||
|
||||
connect(value, qOverload<const QString&>(&QLineEdit::textEdited),
|
||||
[new_entry](const QString& text) {
|
||||
new_entry->entry.value = OnTextEdited(new_entry->value, text);
|
||||
});
|
||||
connect(value, &QLineEdit::textEdited, [new_entry](const QString& text) {
|
||||
new_entry->entry.value = OnTextEdited(new_entry->value, text);
|
||||
});
|
||||
|
||||
connect(comparand, qOverload<const QString&>(&QLineEdit::textEdited),
|
||||
[new_entry](const QString& text) {
|
||||
new_entry->entry.comparand = OnTextEdited(new_entry->comparand, text);
|
||||
});
|
||||
connect(comparand, &QLineEdit::textEdited, [new_entry](const QString& text) {
|
||||
new_entry->entry.comparand = OnTextEdited(new_entry->comparand, text);
|
||||
});
|
||||
|
||||
connect(remove, &QPushButton::clicked, [this, box, new_entry] {
|
||||
if (m_entries.size() > 1)
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "Core/ConfigManager.h"
|
||||
#include "Core/PatchEngine.h"
|
||||
|
||||
#include "DolphinQt/Config/HardcoreWarningWidget.h"
|
||||
#include "DolphinQt/Config/NewPatchDialog.h"
|
||||
#include "DolphinQt/QtUtils/SetWindowDecorations.h"
|
||||
|
||||
|
@ -40,23 +41,38 @@ PatchesWidget::PatchesWidget(const UICommon::GameFile& game)
|
|||
|
||||
void PatchesWidget::CreateWidgets()
|
||||
{
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
m_hc_warning = new HardcoreWarningWidget(this);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
m_list = new QListWidget;
|
||||
m_add_button = new QPushButton(tr("&Add..."));
|
||||
m_edit_button = new QPushButton();
|
||||
m_remove_button = new QPushButton(tr("&Remove"));
|
||||
|
||||
auto* layout = new QGridLayout;
|
||||
auto* grid_layout = new QGridLayout;
|
||||
|
||||
layout->addWidget(m_list, 0, 0, 1, -1);
|
||||
layout->addWidget(m_add_button, 1, 0);
|
||||
layout->addWidget(m_edit_button, 1, 2);
|
||||
layout->addWidget(m_remove_button, 1, 1);
|
||||
grid_layout->addWidget(m_list, 0, 0, 1, -1);
|
||||
grid_layout->addWidget(m_add_button, 1, 0);
|
||||
grid_layout->addWidget(m_edit_button, 1, 2);
|
||||
grid_layout->addWidget(m_remove_button, 1, 1);
|
||||
|
||||
auto* layout = new QVBoxLayout;
|
||||
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
layout->addWidget(m_hc_warning);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
layout->addLayout(grid_layout);
|
||||
|
||||
setLayout(layout);
|
||||
}
|
||||
|
||||
void PatchesWidget::ConnectWidgets()
|
||||
{
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
connect(m_hc_warning, &HardcoreWarningWidget::OpenAchievementSettings, this,
|
||||
&PatchesWidget::OpenAchievementSettings);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
||||
connect(m_list, &QListWidget::itemSelectionChanged, this, &PatchesWidget::UpdateActions);
|
||||
connect(m_list, &QListWidget::itemChanged, this, &PatchesWidget::OnItemChanged);
|
||||
connect(m_remove_button, &QPushButton::clicked, this, &PatchesWidget::OnRemove);
|
||||
|
|
|
@ -9,12 +9,11 @@
|
|||
#include <QWidget>
|
||||
|
||||
#include "Common/CommonTypes.h"
|
||||
#include "Core/PatchEngine.h"
|
||||
|
||||
namespace PatchEngine
|
||||
{
|
||||
struct Patch;
|
||||
}
|
||||
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
class HardcoreWarningWidget;
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
class QListWidget;
|
||||
class QListWidgetItem;
|
||||
class QPushButton;
|
||||
|
@ -26,9 +25,15 @@ class GameFile;
|
|||
|
||||
class PatchesWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit PatchesWidget(const UICommon::GameFile& game);
|
||||
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
signals:
|
||||
void OpenAchievementSettings();
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
||||
private:
|
||||
void CreateWidgets();
|
||||
void ConnectWidgets();
|
||||
|
@ -41,6 +46,9 @@ private:
|
|||
void OnRemove();
|
||||
void OnEdit();
|
||||
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
HardcoreWarningWidget* m_hc_warning;
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
QListWidget* m_list;
|
||||
QPushButton* m_add_button;
|
||||
QPushButton* m_edit_button;
|
||||
|
|
|
@ -51,6 +51,14 @@ PropertiesDialog::PropertiesDialog(QWidget* parent, const UICommon::GameFile& ga
|
|||
&PropertiesDialog::OpenGeneralSettings);
|
||||
|
||||
connect(ar, &ARCodeWidget::OpenGeneralSettings, this, &PropertiesDialog::OpenGeneralSettings);
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
connect(ar, &ARCodeWidget::OpenAchievementSettings, this,
|
||||
&PropertiesDialog::OpenAchievementSettings);
|
||||
connect(gecko, &GeckoCodeWidget::OpenAchievementSettings, this,
|
||||
&PropertiesDialog::OpenAchievementSettings);
|
||||
connect(patches, &PatchesWidget::OpenAchievementSettings, this,
|
||||
&PropertiesDialog::OpenAchievementSettings);
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
|
||||
connect(graphics_mod_list, &GraphicsModListWidget::OpenGraphicsSettings, this,
|
||||
&PropertiesDialog::OpenGraphicsSettings);
|
||||
|
|
|
@ -19,4 +19,7 @@ public:
|
|||
signals:
|
||||
void OpenGeneralSettings();
|
||||
void OpenGraphicsSettings();
|
||||
#ifdef USE_RETRO_ACHIEVEMENTS
|
||||
void OpenAchievementSettings();
|
||||
#endif // USE_RETRO_ACHIEVEMENTS
|
||||
};
|
||||
|
|
|
@ -133,7 +133,7 @@ void BalloonTip::UpdateBoundsAndRedraw(const QPoint& pos, ShowArrow show_arrow)
|
|||
const QRect screen_rect = screen->geometry();
|
||||
|
||||
QSize sh = sizeHint();
|
||||
// The look should resemble the default tooltip style set in Settings::SetCurrentUserStyle()
|
||||
// The look should resemble the default tooltip style set in Settings::ApplyStyle()
|
||||
const int border = 1;
|
||||
const int arrow_height = 18;
|
||||
const int arrow_width = 18;
|
||||
|
|
|
@ -197,7 +197,7 @@ void WiimoteControllersWidget::ConnectWidgets()
|
|||
|
||||
for (size_t i = 0; i < m_wiimote_groups.size(); i++)
|
||||
{
|
||||
connect(m_wiimote_boxes[i], qOverload<int>(&QComboBox::currentIndexChanged), this, [this] {
|
||||
connect(m_wiimote_boxes[i], &QComboBox::currentIndexChanged, this, [this] {
|
||||
SaveSettings();
|
||||
LoadSettings(Core::GetState());
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue