Merge pull request #13736 from jordan-woyak/main-config-gfx

DolphinQt: Move graphics config to main Settings window.
This commit is contained in:
Jordan Woyak
2025-07-03 01:31:01 -05:00
committed by GitHub
18 changed files with 78 additions and 161 deletions

View File

@ -93,8 +93,8 @@ add_executable(dolphin-emu
Config/Graphics/EnhancementsWidget.h Config/Graphics/EnhancementsWidget.h
Config/Graphics/GeneralWidget.cpp Config/Graphics/GeneralWidget.cpp
Config/Graphics/GeneralWidget.h Config/Graphics/GeneralWidget.h
Config/Graphics/GraphicsWindow.cpp Config/Graphics/GraphicsPane.cpp
Config/Graphics/GraphicsWindow.h Config/Graphics/GraphicsPane.h
Config/Graphics/HacksWidget.cpp Config/Graphics/HacksWidget.cpp
Config/Graphics/HacksWidget.h Config/Graphics/HacksWidget.h
Config/Graphics/ColorCorrectionConfigWindow.cpp Config/Graphics/ColorCorrectionConfigWindow.cpp

View File

@ -32,4 +32,5 @@ void ControllersPane::CreateMainLayout()
layout->addWidget(gamecube_controllers); layout->addWidget(gamecube_controllers);
layout->addWidget(m_wiimote_controllers); layout->addWidget(m_wiimote_controllers);
layout->addWidget(common); layout->addWidget(common);
layout->addStretch(1);
} }

View File

@ -28,10 +28,7 @@
#include "DolphinQt/Config/ConfigControls/ConfigRadio.h" #include "DolphinQt/Config/ConfigControls/ConfigRadio.h"
#include "DolphinQt/Config/ConfigControls/ConfigSlider.h" #include "DolphinQt/Config/ConfigControls/ConfigSlider.h"
#include "DolphinQt/Config/GameConfigEdit.h" #include "DolphinQt/Config/GameConfigEdit.h"
#include "DolphinQt/Config/Graphics/AdvancedWidget.h" #include "DolphinQt/Config/Graphics/GraphicsPane.h"
#include "DolphinQt/Config/Graphics/EnhancementsWidget.h"
#include "DolphinQt/Config/Graphics/GeneralWidget.h"
#include "DolphinQt/Config/Graphics/HacksWidget.h"
#include "DolphinQt/QtUtils/QtUtils.h" #include "DolphinQt/QtUtils/QtUtils.h"
#include "DolphinQt/QtUtils/WrapInScrollArea.h" #include "DolphinQt/QtUtils/WrapInScrollArea.h"
@ -197,21 +194,10 @@ void GameConfigWidget::CreateWidgets()
auto* tab_widget = new QTabWidget; auto* tab_widget = new QTabWidget;
tab_widget->addTab(general_widget, tr("General")); tab_widget->addTab(general_widget, tr("General"));
// GFX settings tabs. Placed in a QWidget for consistent margins. auto* const gfx_widget = new GraphicsPane{nullptr, m_layer.get()};
auto* gfx_tab_holder = new QWidget; tab_widget->addTab(gfx_widget, tr("Graphics"));
auto* gfx_layout = new QVBoxLayout;
gfx_tab_holder->setLayout(gfx_layout);
tab_widget->addTab(gfx_tab_holder, tr("Graphics"));
auto* gfx_tabs = new QTabWidget;
gfx_tabs->addTab(GetWrappedWidget(new GeneralWidget(this, m_layer.get())), tr("General"));
gfx_tabs->addTab(GetWrappedWidget(new EnhancementsWidget(this, m_layer.get())),
tr("Enhancements"));
gfx_tabs->addTab(GetWrappedWidget(new HacksWidget(this, m_layer.get())), tr("Hacks"));
gfx_tabs->addTab(GetWrappedWidget(new AdvancedWidget(this, m_layer.get())), tr("Advanced"));
const int editor_index = tab_widget->addTab(advanced_widget, tr("Editor")); const int editor_index = tab_widget->addTab(advanced_widget, tr("Editor"));
gfx_layout->addWidget(gfx_tabs);
connect(tab_widget, &QTabWidget::currentChanged, this, [this, editor_index](int index) { connect(tab_widget, &QTabWidget::currentChanged, this, [this, editor_index](int index) {
// Update the ini editor after editing other tabs. // Update the ini editor after editing other tabs.

View File

@ -18,43 +18,28 @@
#include "DolphinQt/Config/ConfigControls/ConfigChoice.h" #include "DolphinQt/Config/ConfigControls/ConfigChoice.h"
#include "DolphinQt/Config/ConfigControls/ConfigInteger.h" #include "DolphinQt/Config/ConfigControls/ConfigInteger.h"
#include "DolphinQt/Config/GameConfigWidget.h" #include "DolphinQt/Config/GameConfigWidget.h"
#include "DolphinQt/Config/Graphics/GraphicsWindow.h" #include "DolphinQt/Config/Graphics/GraphicsPane.h"
#include "DolphinQt/Config/ToolTipControls/ToolTipCheckBox.h"
#include "DolphinQt/QtUtils/SignalBlocking.h"
#include "DolphinQt/Settings.h" #include "DolphinQt/Settings.h"
#include "VideoCommon/VideoConfig.h" #include "VideoCommon/VideoConfig.h"
AdvancedWidget::AdvancedWidget(GraphicsWindow* parent) AdvancedWidget::AdvancedWidget(GraphicsPane* gfx_pane) : m_game_layer{gfx_pane->GetConfigLayer()}
{ {
CreateWidgets(); CreateWidgets();
ConnectWidgets(); ConnectWidgets();
AddDescriptions(); AddDescriptions();
connect(parent, &GraphicsWindow::BackendChanged, this, &AdvancedWidget::OnBackendChanged); connect(gfx_pane, &GraphicsPane::BackendChanged, this, &AdvancedWidget::OnBackendChanged);
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this](Core::State state) { connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this](Core::State state) {
OnEmulationStateChanged(state != Core::State::Uninitialized); OnEmulationStateChanged(state != Core::State::Uninitialized);
}); });
connect(m_manual_texture_sampling, &QCheckBox::toggled, connect(m_manual_texture_sampling, &QCheckBox::toggled,
[parent] { emit parent->UseFastTextureSamplingChanged(); }); [gfx_pane] { emit gfx_pane->UseFastTextureSamplingChanged(); });
OnBackendChanged(); OnBackendChanged();
OnEmulationStateChanged(!Core::IsUninitialized(Core::System::GetInstance())); OnEmulationStateChanged(!Core::IsUninitialized(Core::System::GetInstance()));
} }
AdvancedWidget::AdvancedWidget(GameConfigWidget* parent, Config::Layer* layer) : m_game_layer(layer)
{
CreateWidgets();
ConnectWidgets();
AddDescriptions();
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this](Core::State state) {
OnEmulationStateChanged(state != Core::State::Uninitialized);
});
OnEmulationStateChanged(Core::GetState(Core::System::GetInstance()) !=
Core::State::Uninitialized);
}
void AdvancedWidget::CreateWidgets() void AdvancedWidget::CreateWidgets()
{ {
const bool local_edit = m_game_layer != nullptr; const bool local_edit = m_game_layer != nullptr;

View File

@ -8,8 +8,7 @@
class ConfigBool; class ConfigBool;
class ConfigChoice; class ConfigChoice;
class ConfigInteger; class ConfigInteger;
class GameConfigWidget; class GraphicsPane;
class GraphicsWindow;
namespace Config namespace Config
{ {
@ -20,8 +19,7 @@ class AdvancedWidget final : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit AdvancedWidget(GraphicsWindow* parent); explicit AdvancedWidget(GraphicsPane* gfx_pane);
AdvancedWidget(GameConfigWidget* parent, Config::Layer* layer);
private: private:
void CreateWidgets(); void CreateWidgets();

View File

@ -3,8 +3,6 @@
#include "DolphinQt/Config/Graphics/EnhancementsWidget.h" #include "DolphinQt/Config/Graphics/EnhancementsWidget.h"
#include <cmath>
#include <QGridLayout> #include <QGridLayout>
#include <QGroupBox> #include <QGroupBox>
#include <QLabel> #include <QLabel>
@ -21,18 +19,18 @@
#include "DolphinQt/Config/ConfigControls/ConfigSlider.h" #include "DolphinQt/Config/ConfigControls/ConfigSlider.h"
#include "DolphinQt/Config/GameConfigWidget.h" #include "DolphinQt/Config/GameConfigWidget.h"
#include "DolphinQt/Config/Graphics/ColorCorrectionConfigWindow.h" #include "DolphinQt/Config/Graphics/ColorCorrectionConfigWindow.h"
#include "DolphinQt/Config/Graphics/GraphicsWindow.h" #include "DolphinQt/Config/Graphics/GraphicsPane.h"
#include "DolphinQt/Config/Graphics/PostProcessingConfigWindow.h" #include "DolphinQt/Config/Graphics/PostProcessingConfigWindow.h"
#include "DolphinQt/Config/ToolTipControls/ToolTipPushButton.h" #include "DolphinQt/Config/ToolTipControls/ToolTipPushButton.h"
#include "DolphinQt/QtUtils/NonDefaultQPushButton.h" #include "DolphinQt/QtUtils/NonDefaultQPushButton.h"
#include "DolphinQt/Settings.h"
#include "VideoCommon/PostProcessing.h" #include "VideoCommon/PostProcessing.h"
#include "VideoCommon/VideoBackendBase.h" #include "VideoCommon/VideoBackendBase.h"
#include "VideoCommon/VideoCommon.h" #include "VideoCommon/VideoCommon.h"
#include "VideoCommon/VideoConfig.h" #include "VideoCommon/VideoConfig.h"
EnhancementsWidget::EnhancementsWidget(GraphicsWindow* parent) EnhancementsWidget::EnhancementsWidget(GraphicsPane* gfx_pane)
: m_game_layer{gfx_pane->GetConfigLayer()}
{ {
CreateWidgets(); CreateWidgets();
LoadPPShaders(); LoadPPShaders();
@ -40,27 +38,15 @@ EnhancementsWidget::EnhancementsWidget(GraphicsWindow* parent)
AddDescriptions(); AddDescriptions();
// BackendChanged is called by parent on window creation. // BackendChanged is called by parent on window creation.
connect(parent, &GraphicsWindow::BackendChanged, this, &EnhancementsWidget::OnBackendChanged); connect(gfx_pane, &GraphicsPane::BackendChanged, this, &EnhancementsWidget::OnBackendChanged);
connect(parent, &GraphicsWindow::UseFastTextureSamplingChanged, this, [this] { connect(gfx_pane, &GraphicsPane::UseFastTextureSamplingChanged, this, [this] {
m_texture_filtering_combo->setEnabled(ReadSetting(Config::GFX_HACK_FAST_TEXTURE_SAMPLING)); m_texture_filtering_combo->setEnabled(ReadSetting(Config::GFX_HACK_FAST_TEXTURE_SAMPLING));
}); });
connect(parent, &GraphicsWindow::UseGPUTextureDecodingChanged, this, [this] { connect(gfx_pane, &GraphicsPane::UseGPUTextureDecodingChanged, this, [this] {
m_arbitrary_mipmap_detection->setEnabled(!ReadSetting(Config::GFX_ENABLE_GPU_TEXTURE_DECODING)); m_arbitrary_mipmap_detection->setEnabled(!ReadSetting(Config::GFX_ENABLE_GPU_TEXTURE_DECODING));
}); });
} }
EnhancementsWidget::EnhancementsWidget(GameConfigWidget* parent, Config::Layer* layer)
: m_game_layer(layer)
{
CreateWidgets();
LoadPPShaders();
ConnectWidgets();
AddDescriptions();
connect(&Settings::Instance(), &Settings::ConfigChanged, this,
&EnhancementsWidget::OnConfigChanged);
}
constexpr int ANISO_1x = Common::ToUnderlying(AnisotropicFilteringMode::Force1x); constexpr int ANISO_1x = Common::ToUnderlying(AnisotropicFilteringMode::Force1x);
constexpr int ANISO_2X = Common::ToUnderlying(AnisotropicFilteringMode::Force2x); constexpr int ANISO_2X = Common::ToUnderlying(AnisotropicFilteringMode::Force2x);
constexpr int ANISO_4X = Common::ToUnderlying(AnisotropicFilteringMode::Force4x); constexpr int ANISO_4X = Common::ToUnderlying(AnisotropicFilteringMode::Force4x);

View File

@ -3,8 +3,6 @@
#pragma once #pragma once
#include <array>
#include <QWidget> #include <QWidget>
class ConfigBool; class ConfigBool;
@ -12,11 +10,9 @@ class ConfigChoice;
class ConfigComplexChoice; class ConfigComplexChoice;
class ConfigStringChoice; class ConfigStringChoice;
class ConfigSlider; class ConfigSlider;
class GameConfigWidget; class GraphicsPane;
class GraphicsWindow;
class QPushButton; class QPushButton;
class ToolTipPushButton; class ToolTipPushButton;
enum class StereoMode : int;
namespace Config namespace Config
{ {
@ -29,8 +25,7 @@ class EnhancementsWidget final : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit EnhancementsWidget(GraphicsWindow* parent); explicit EnhancementsWidget(GraphicsPane* gfx_pane);
EnhancementsWidget(GameConfigWidget* parent, Config::Layer* layer);
private: private:
template <typename T> template <typename T>

View File

@ -24,7 +24,7 @@
#include "DolphinQt/Config/ConfigControls/ConfigInteger.h" #include "DolphinQt/Config/ConfigControls/ConfigInteger.h"
#include "DolphinQt/Config/ConfigControls/ConfigRadio.h" #include "DolphinQt/Config/ConfigControls/ConfigRadio.h"
#include "DolphinQt/Config/GameConfigWidget.h" #include "DolphinQt/Config/GameConfigWidget.h"
#include "DolphinQt/Config/Graphics/GraphicsWindow.h" #include "DolphinQt/Config/Graphics/GraphicsPane.h"
#include "DolphinQt/Config/ToolTipControls/ToolTipComboBox.h" #include "DolphinQt/Config/ToolTipControls/ToolTipComboBox.h"
#include "DolphinQt/QtUtils/ModalMessageBox.h" #include "DolphinQt/QtUtils/ModalMessageBox.h"
#include "DolphinQt/Settings.h" #include "DolphinQt/Settings.h"
@ -32,26 +32,19 @@
#include "VideoCommon/VideoBackendBase.h" #include "VideoCommon/VideoBackendBase.h"
#include "VideoCommon/VideoConfig.h" #include "VideoCommon/VideoConfig.h"
GeneralWidget::GeneralWidget(GraphicsWindow* parent) GeneralWidget::GeneralWidget(GraphicsPane* gfx_pane) : m_game_layer{gfx_pane->GetConfigLayer()}
{ {
CreateWidgets(); CreateWidgets();
ConnectWidgets(); ConnectWidgets();
AddDescriptions(); AddDescriptions();
connect(parent, &GraphicsWindow::BackendChanged, this, &GeneralWidget::OnBackendChanged); connect(gfx_pane, &GraphicsPane::BackendChanged, this, &GeneralWidget::OnBackendChanged);
connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this](Core::State state) { connect(&Settings::Instance(), &Settings::EmulationStateChanged, this, [this](Core::State state) {
OnEmulationStateChanged(state != Core::State::Uninitialized); OnEmulationStateChanged(state != Core::State::Uninitialized);
}); });
OnEmulationStateChanged(!Core::IsUninitialized(Core::System::GetInstance())); OnEmulationStateChanged(!Core::IsUninitialized(Core::System::GetInstance()));
} }
GeneralWidget::GeneralWidget(GameConfigWidget* parent, Config::Layer* layer) : m_game_layer(layer)
{
CreateWidgets();
ConnectWidgets();
AddDescriptions();
}
void GeneralWidget::CreateWidgets() void GeneralWidget::CreateWidgets()
{ {
auto* main_layout = new QVBoxLayout; auto* main_layout = new QVBoxLayout;

View File

@ -12,13 +12,8 @@ class ConfigChoice;
class ConfigInteger; class ConfigInteger;
class ConfigRadioInt; class ConfigRadioInt;
class ConfigStringChoice; class ConfigStringChoice;
class GameConfigWidget; class GraphicsPane;
class GraphicsWindow;
class QCheckBox;
class QComboBox;
class QLabel; class QLabel;
class QRadioButton;
class QGridLayout;
class ToolTipComboBox; class ToolTipComboBox;
namespace Config namespace Config
@ -30,8 +25,7 @@ class GeneralWidget final : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit GeneralWidget(GraphicsWindow* parent); explicit GeneralWidget(GraphicsPane* gfx_pane);
GeneralWidget(GameConfigWidget* parent, Config::Layer* layer);
signals: signals:
void BackendChanged(const QString& backend); void BackendChanged(const QString& backend);

View File

@ -1,7 +1,7 @@
// Copyright 2017 Dolphin Emulator Project // Copyright 2017 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#include "DolphinQt/Config/Graphics/GraphicsWindow.h" #include "DolphinQt/Config/Graphics/GraphicsPane.h"
#include <QDialogButtonBox> #include <QDialogButtonBox>
#include <QEvent> #include <QEvent>
@ -23,34 +23,32 @@
#include "VideoCommon/VideoBackendBase.h" #include "VideoCommon/VideoBackendBase.h"
GraphicsWindow::GraphicsWindow(MainWindow* parent) : QDialog(parent), m_main_window(parent) GraphicsPane::GraphicsPane(MainWindow* main_window, Config::Layer* config_layer)
: m_main_window(main_window), m_config_layer{config_layer}
{ {
CreateMainLayout(); CreateMainLayout();
setWindowTitle(tr("Graphics"));
OnBackendChanged(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND))); OnBackendChanged(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND)));
QtUtils::AdjustSizeWithinScreen(this);
} }
void GraphicsWindow::CreateMainLayout() Config::Layer* GraphicsPane::GetConfigLayer()
{ {
auto* const main_layout = new QVBoxLayout(); return m_config_layer;
auto* const tab_widget = new QTabWidget(); }
auto* const button_box = new QDialogButtonBox(QDialogButtonBox::Close);
connect(button_box, &QDialogButtonBox::rejected, this, &QDialog::reject); void GraphicsPane::CreateMainLayout()
{
auto* const main_layout = new QVBoxLayout{this};
auto* const tab_widget = new QTabWidget;
main_layout->addWidget(tab_widget); main_layout->addWidget(tab_widget);
main_layout->addWidget(button_box);
auto* const general_widget = new GeneralWidget(this); auto* const general_widget = new GeneralWidget(this);
auto* const enhancements_widget = new EnhancementsWidget(this); auto* const enhancements_widget = new EnhancementsWidget(this);
auto* const hacks_widget = new HacksWidget(this); auto* const hacks_widget = new HacksWidget(this);
auto* const advanced_widget = new AdvancedWidget(this); auto* const advanced_widget = new AdvancedWidget(this);
connect(general_widget, &GeneralWidget::BackendChanged, this, &GraphicsWindow::OnBackendChanged); connect(general_widget, &GeneralWidget::BackendChanged, this, &GraphicsPane::OnBackendChanged);
QWidget* const wrapped_general = GetWrappedWidget(general_widget); QWidget* const wrapped_general = GetWrappedWidget(general_widget);
QWidget* const wrapped_enhancements = GetWrappedWidget(enhancements_widget); QWidget* const wrapped_enhancements = GetWrappedWidget(enhancements_widget);
@ -61,16 +59,13 @@ void GraphicsWindow::CreateMainLayout()
tab_widget->addTab(wrapped_enhancements, tr("Enhancements")); tab_widget->addTab(wrapped_enhancements, tr("Enhancements"));
tab_widget->addTab(wrapped_hacks, tr("Hacks")); tab_widget->addTab(wrapped_hacks, tr("Hacks"));
tab_widget->addTab(wrapped_advanced, tr("Advanced")); tab_widget->addTab(wrapped_advanced, tr("Advanced"));
setLayout(main_layout);
} }
void GraphicsWindow::OnBackendChanged(const QString& backend_name) void GraphicsPane::OnBackendChanged(const QString& backend_name)
{ {
VideoBackendBase::PopulateBackendInfo(m_main_window->GetWindowSystemInfo()); // TODO: Game properties graphics config does not properly handle backend info.
if (m_main_window != nullptr)
setWindowTitle( VideoBackendBase::PopulateBackendInfo(m_main_window->GetWindowSystemInfo());
tr("%1 Graphics Configuration").arg(tr(g_video_backend->GetDisplayName().c_str())));
emit BackendChanged(backend_name); emit BackendChanged(backend_name);
} }

View File

@ -3,24 +3,22 @@
#pragma once #pragma once
#include <QDialog> #include <QWidget>
#include <QHash>
class AdvancedWidget;
class EnhancementsWidget;
class HacksWidget;
class GeneralWidget;
class MainWindow; class MainWindow;
class QLabel;
class QTabWidget;
class QDialogButtonBox;
class SoftwareRendererWidget;
class GraphicsWindow final : public QDialog namespace Config
{
class Layer;
} // namespace Config
class GraphicsPane final : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit GraphicsWindow(MainWindow* parent); explicit GraphicsPane(MainWindow* main_window, Config::Layer* config_layer);
Config::Layer* GetConfigLayer();
signals: signals:
void BackendChanged(const QString& backend); void BackendChanged(const QString& backend);
@ -32,4 +30,5 @@ private:
void OnBackendChanged(const QString& backend); void OnBackendChanged(const QString& backend);
MainWindow* const m_main_window; MainWindow* const m_main_window;
Config::Layer* const m_config_layer;
}; };

View File

@ -15,27 +15,20 @@
#include "DolphinQt/Config/ConfigControls/ConfigBool.h" #include "DolphinQt/Config/ConfigControls/ConfigBool.h"
#include "DolphinQt/Config/ConfigControls/ConfigSlider.h" #include "DolphinQt/Config/ConfigControls/ConfigSlider.h"
#include "DolphinQt/Config/GameConfigWidget.h" #include "DolphinQt/Config/GameConfigWidget.h"
#include "DolphinQt/Config/Graphics/GraphicsWindow.h" #include "DolphinQt/Config/Graphics/GraphicsPane.h"
#include "VideoCommon/VideoConfig.h" #include "VideoCommon/VideoConfig.h"
HacksWidget::HacksWidget(GraphicsWindow* parent) HacksWidget::HacksWidget(GraphicsPane* gfx_pane) : m_game_layer{gfx_pane->GetConfigLayer()}
{ {
CreateWidgets(); CreateWidgets();
ConnectWidgets(); ConnectWidgets();
AddDescriptions(); AddDescriptions();
connect(parent, &GraphicsWindow::BackendChanged, this, &HacksWidget::OnBackendChanged); connect(gfx_pane, &GraphicsPane::BackendChanged, this, &HacksWidget::OnBackendChanged);
OnBackendChanged(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND))); OnBackendChanged(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND)));
connect(m_gpu_texture_decoding, &QCheckBox::toggled, connect(m_gpu_texture_decoding, &QCheckBox::toggled,
[parent] { emit parent->UseGPUTextureDecodingChanged(); }); [gfx_pane] { emit gfx_pane->UseGPUTextureDecodingChanged(); });
}
HacksWidget::HacksWidget(GameConfigWidget* parent, Config::Layer* layer) : m_game_layer(layer)
{
CreateWidgets();
ConnectWidgets();
AddDescriptions();
} }
void HacksWidget::CreateWidgets() void HacksWidget::CreateWidgets()

View File

@ -8,10 +8,7 @@
class ConfigBool; class ConfigBool;
class ConfigSlider; class ConfigSlider;
class ConfigSliderLabel; class ConfigSliderLabel;
class GameConfigWidget; class GraphicsPane;
class GraphicsWindow;
class QLabel;
class ToolTipSlider;
namespace Config namespace Config
{ {
@ -22,8 +19,7 @@ class HacksWidget final : public QWidget
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit HacksWidget(GraphicsWindow* parent); explicit HacksWidget(GraphicsPane* gfx_pane);
HacksWidget(GameConfigWidget* parent, Config::Layer* layer);
private: private:
void OnBackendChanged(const QString& backend_name); void OnBackendChanged(const QString& backend_name);

View File

@ -7,11 +7,14 @@
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QListWidget> #include <QListWidget>
#include <QStackedWidget> #include <QStackedWidget>
#include <QTabWidget>
#include <QVBoxLayout> #include <QVBoxLayout>
#include "Common/EnumUtils.h" #include "Common/EnumUtils.h"
#include "DolphinQt/Config/ControllersPane.h" #include "DolphinQt/Config/ControllersPane.h"
#include "DolphinQt/Config/Graphics/GraphicsPane.h"
#include "DolphinQt/MainWindow.h"
#include "DolphinQt/QtUtils/QtUtils.h" #include "DolphinQt/QtUtils/QtUtils.h"
#include "DolphinQt/QtUtils/WrapInScrollArea.h" #include "DolphinQt/QtUtils/WrapInScrollArea.h"
#include "DolphinQt/Settings/AdvancedPane.h" #include "DolphinQt/Settings/AdvancedPane.h"
@ -130,12 +133,13 @@ void StackedSettingsWindow::ActivatePane(int index)
m_navigation_list->setCurrentRow(index); m_navigation_list->setCurrentRow(index);
} }
SettingsWindow::SettingsWindow(QWidget* parent) : StackedSettingsWindow{parent} SettingsWindow::SettingsWindow(MainWindow* parent) : StackedSettingsWindow{parent}
{ {
setWindowTitle(tr("Settings")); setWindowTitle(tr("Settings"));
// If you change the order, don't forget to update the SettingsWindowPaneIndex enum. // If you change the order, don't forget to update the SettingsWindowPaneIndex enum.
AddWrappedPane(new GeneralPane, tr("General")); AddWrappedPane(new GeneralPane, tr("General"));
AddPane(new GraphicsPane{parent, nullptr}, tr("Graphics"));
AddWrappedPane(new ControllersPane, tr("Controllers")); AddWrappedPane(new ControllersPane, tr("Controllers"));
AddWrappedPane(new InterfacePane, tr("Interface")); AddWrappedPane(new InterfacePane, tr("Interface"));
AddWrappedPane(new AudioPane, tr("Audio")); AddWrappedPane(new AudioPane, tr("Audio"));

View File

@ -7,6 +7,7 @@
class QStackedWidget; class QStackedWidget;
class QListWidget; class QListWidget;
class MainWindow;
// A settings window with a QListWidget to switch between panes of a QStackedWidget. // A settings window with a QListWidget to switch between panes of a QStackedWidget.
class StackedSettingsWindow : public QDialog class StackedSettingsWindow : public QDialog
@ -34,6 +35,7 @@ private:
enum class SettingsWindowPaneIndex : int enum class SettingsWindowPaneIndex : int
{ {
General = 0, General = 0,
Graphics,
Controllers, Controllers,
Interface, Interface,
Audio, Audio,
@ -47,7 +49,7 @@ class SettingsWindow final : public StackedSettingsWindow
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit SettingsWindow(QWidget* parent = nullptr); explicit SettingsWindow(MainWindow* parent);
void SelectPane(SettingsWindowPaneIndex); void SelectPane(SettingsWindowPaneIndex);
}; };

View File

@ -80,7 +80,7 @@
<ClCompile Include="Config\Graphics\AdvancedWidget.cpp" /> <ClCompile Include="Config\Graphics\AdvancedWidget.cpp" />
<ClCompile Include="Config\Graphics\EnhancementsWidget.cpp" /> <ClCompile Include="Config\Graphics\EnhancementsWidget.cpp" />
<ClCompile Include="Config\Graphics\GeneralWidget.cpp" /> <ClCompile Include="Config\Graphics\GeneralWidget.cpp" />
<ClCompile Include="Config\Graphics\GraphicsWindow.cpp" /> <ClCompile Include="Config\Graphics\GraphicsPane.cpp" />
<ClCompile Include="Config\Graphics\HacksWidget.cpp" /> <ClCompile Include="Config\Graphics\HacksWidget.cpp" />
<ClCompile Include="Config\Graphics\ColorCorrectionConfigWindow.cpp" /> <ClCompile Include="Config\Graphics\ColorCorrectionConfigWindow.cpp" />
<ClCompile Include="Config\Graphics\PostProcessingConfigWindow.cpp" /> <ClCompile Include="Config\Graphics\PostProcessingConfigWindow.cpp" />
@ -306,7 +306,7 @@
<QtMoc Include="Config\Graphics\AdvancedWidget.h" /> <QtMoc Include="Config\Graphics\AdvancedWidget.h" />
<QtMoc Include="Config\Graphics\EnhancementsWidget.h" /> <QtMoc Include="Config\Graphics\EnhancementsWidget.h" />
<QtMoc Include="Config\Graphics\GeneralWidget.h" /> <QtMoc Include="Config\Graphics\GeneralWidget.h" />
<QtMoc Include="Config\Graphics\GraphicsWindow.h" /> <QtMoc Include="Config\Graphics\GraphicsPane.h" />
<QtMoc Include="Config\Graphics\HacksWidget.h" /> <QtMoc Include="Config\Graphics\HacksWidget.h" />
<QtMoc Include="Config\Graphics\ColorCorrectionConfigWindow.h" /> <QtMoc Include="Config\Graphics\ColorCorrectionConfigWindow.h" />
<QtMoc Include="Config\Graphics\PostProcessingConfigWindow.h" /> <QtMoc Include="Config\Graphics\PostProcessingConfigWindow.h" />

View File

@ -78,7 +78,6 @@
#include "DolphinQt/Achievements/AchievementsWindow.h" #include "DolphinQt/Achievements/AchievementsWindow.h"
#include "DolphinQt/CheatsManager.h" #include "DolphinQt/CheatsManager.h"
#include "DolphinQt/Config/FreeLookWindow.h" #include "DolphinQt/Config/FreeLookWindow.h"
#include "DolphinQt/Config/Graphics/GraphicsWindow.h"
#include "DolphinQt/Config/LogConfigWidget.h" #include "DolphinQt/Config/LogConfigWidget.h"
#include "DolphinQt/Config/LogWidget.h" #include "DolphinQt/Config/LogWidget.h"
#include "DolphinQt/Config/Mapping/MappingWindow.h" #include "DolphinQt/Config/Mapping/MappingWindow.h"
@ -1306,6 +1305,15 @@ void MainWindow::ShowSettingsWindow()
{ {
if (!m_settings_window) if (!m_settings_window)
{ {
#ifdef HAVE_XRANDR
if (GetWindowSystemType() == WindowSystemType::X11)
{
m_xrr_config = std::make_unique<X11Utils::XRRConfiguration>(
static_cast<Display*>(QGuiApplication::platformNativeInterface()->nativeResourceForWindow(
"display", windowHandle())),
winId());
}
#endif
m_settings_window = new SettingsWindow(this); m_settings_window = new SettingsWindow(this);
InstallHotkeyFilter(m_settings_window); InstallHotkeyFilter(m_settings_window);
} }
@ -1348,24 +1356,8 @@ void MainWindow::ShowHotkeyDialog()
void MainWindow::ShowGraphicsWindow() void MainWindow::ShowGraphicsWindow()
{ {
if (!m_graphics_window) ShowSettingsWindow();
{ m_settings_window->SelectPane(SettingsWindowPaneIndex::Graphics);
#ifdef HAVE_XRANDR
if (GetWindowSystemType() == WindowSystemType::X11)
{
m_xrr_config = std::make_unique<X11Utils::XRRConfiguration>(
static_cast<Display*>(QGuiApplication::platformNativeInterface()->nativeResourceForWindow(
"display", windowHandle())),
winId());
}
#endif
m_graphics_window = new GraphicsWindow(this);
InstallHotkeyFilter(m_graphics_window);
}
m_graphics_window->show();
m_graphics_window->raise();
m_graphics_window->activateWindow();
} }
void MainWindow::ShowNetPlaySetupDialog() void MainWindow::ShowNetPlaySetupDialog()

View File

@ -34,7 +34,6 @@ class FreeLookWindow;
class GameList; class GameList;
class GBATASInputWindow; class GBATASInputWindow;
class GCTASInputWindow; class GCTASInputWindow;
class GraphicsWindow;
class HotkeyScheduler; class HotkeyScheduler;
class InfinityBaseWindow; class InfinityBaseWindow;
class JITWidget; class JITWidget;
@ -246,7 +245,6 @@ private:
std::unique_ptr<BootParameters> m_pending_boot; std::unique_ptr<BootParameters> m_pending_boot;
SettingsWindow* m_settings_window = nullptr; SettingsWindow* m_settings_window = nullptr;
GraphicsWindow* m_graphics_window = nullptr;
FIFOPlayerWindow* m_fifo_window = nullptr; FIFOPlayerWindow* m_fifo_window = nullptr;
SkylanderPortalWindow* m_skylander_window = nullptr; SkylanderPortalWindow* m_skylander_window = nullptr;
InfinityBaseWindow* m_infinity_window = nullptr; InfinityBaseWindow* m_infinity_window = nullptr;