|
|
@ -806,21 +806,8 @@ void GMainWindow::InitializeWidgets() { |
|
|
filter_status_button = new QPushButton(); |
|
|
filter_status_button = new QPushButton(); |
|
|
filter_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton")); |
|
|
filter_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton")); |
|
|
filter_status_button->setFocusPolicy(Qt::NoFocus); |
|
|
filter_status_button->setFocusPolicy(Qt::NoFocus); |
|
|
connect(filter_status_button, &QPushButton::clicked, [&] { |
|
|
|
|
|
auto filter = Settings::values.scaling_filter.GetValue(); |
|
|
|
|
|
if (filter == Settings::ScalingFilter::LastFilter) { |
|
|
|
|
|
filter = Settings::ScalingFilter::NearestNeighbor; |
|
|
|
|
|
} else { |
|
|
|
|
|
filter = static_cast<Settings::ScalingFilter>(static_cast<u32>(filter) + 1); |
|
|
|
|
|
} |
|
|
|
|
|
if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL && |
|
|
|
|
|
filter == Settings::ScalingFilter::Fsr) { |
|
|
|
|
|
filter = Settings::ScalingFilter::NearestNeighbor; |
|
|
|
|
|
} |
|
|
|
|
|
Settings::values.scaling_filter.SetValue(filter); |
|
|
|
|
|
filter_status_button->setChecked(true); |
|
|
|
|
|
UpdateFilterText(); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
connect(filter_status_button, &QPushButton::clicked, this, |
|
|
|
|
|
&GMainWindow::OnToggleAdaptingFilter); |
|
|
auto filter = Settings::values.scaling_filter.GetValue(); |
|
|
auto filter = Settings::values.scaling_filter.GetValue(); |
|
|
if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL && |
|
|
if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL && |
|
|
filter == Settings::ScalingFilter::Fsr) { |
|
|
filter == Settings::ScalingFilter::Fsr) { |
|
|
@ -835,25 +822,7 @@ void GMainWindow::InitializeWidgets() { |
|
|
dock_status_button = new QPushButton(); |
|
|
dock_status_button = new QPushButton(); |
|
|
dock_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton")); |
|
|
dock_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton")); |
|
|
dock_status_button->setFocusPolicy(Qt::NoFocus); |
|
|
dock_status_button->setFocusPolicy(Qt::NoFocus); |
|
|
connect(dock_status_button, &QPushButton::clicked, [&] { |
|
|
|
|
|
const bool is_docked = Settings::values.use_docked_mode.GetValue(); |
|
|
|
|
|
auto* player_1 = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Player1); |
|
|
|
|
|
auto* handheld = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Handheld); |
|
|
|
|
|
|
|
|
|
|
|
if (!is_docked && handheld->IsConnected()) { |
|
|
|
|
|
QMessageBox::warning(this, tr("Invalid config detected"), |
|
|
|
|
|
tr("Handheld controller can't be used on docked mode. Pro " |
|
|
|
|
|
"controller will be selected.")); |
|
|
|
|
|
handheld->Disconnect(); |
|
|
|
|
|
player_1->SetNpadStyleIndex(Core::HID::NpadStyleIndex::ProController); |
|
|
|
|
|
player_1->Connect(); |
|
|
|
|
|
controller_dialog->refreshConfiguration(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Settings::values.use_docked_mode.SetValue(!is_docked); |
|
|
|
|
|
dock_status_button->setChecked(!is_docked); |
|
|
|
|
|
OnDockedModeChanged(is_docked, !is_docked, *system); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
connect(dock_status_button, &QPushButton::clicked, this, &GMainWindow::OnToggleDockedMode); |
|
|
dock_status_button->setText(tr("DOCK")); |
|
|
dock_status_button->setText(tr("DOCK")); |
|
|
dock_status_button->setCheckable(true); |
|
|
dock_status_button->setCheckable(true); |
|
|
dock_status_button->setChecked(Settings::values.use_docked_mode.GetValue()); |
|
|
dock_status_button->setChecked(Settings::values.use_docked_mode.GetValue()); |
|
|
@ -863,22 +832,7 @@ void GMainWindow::InitializeWidgets() { |
|
|
gpu_accuracy_button->setObjectName(QStringLiteral("GPUStatusBarButton")); |
|
|
gpu_accuracy_button->setObjectName(QStringLiteral("GPUStatusBarButton")); |
|
|
gpu_accuracy_button->setCheckable(true); |
|
|
gpu_accuracy_button->setCheckable(true); |
|
|
gpu_accuracy_button->setFocusPolicy(Qt::NoFocus); |
|
|
gpu_accuracy_button->setFocusPolicy(Qt::NoFocus); |
|
|
connect(gpu_accuracy_button, &QPushButton::clicked, [this] { |
|
|
|
|
|
switch (Settings::values.gpu_accuracy.GetValue()) { |
|
|
|
|
|
case Settings::GPUAccuracy::High: { |
|
|
|
|
|
Settings::values.gpu_accuracy.SetValue(Settings::GPUAccuracy::Normal); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
case Settings::GPUAccuracy::Normal: |
|
|
|
|
|
case Settings::GPUAccuracy::Extreme: |
|
|
|
|
|
default: { |
|
|
|
|
|
Settings::values.gpu_accuracy.SetValue(Settings::GPUAccuracy::High); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
system->ApplySettings(); |
|
|
|
|
|
UpdateGPUAccuracyButton(); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
connect(gpu_accuracy_button, &QPushButton::clicked, this, &GMainWindow::OnToggleGpuAccuracy); |
|
|
UpdateGPUAccuracyButton(); |
|
|
UpdateGPUAccuracyButton(); |
|
|
statusBar()->insertPermanentWidget(0, gpu_accuracy_button); |
|
|
statusBar()->insertPermanentWidget(0, gpu_accuracy_button); |
|
|
|
|
|
|
|
|
@ -1009,12 +963,10 @@ void GMainWindow::InitializeHotkeys() { |
|
|
ToggleFullscreen(); |
|
|
ToggleFullscreen(); |
|
|
} |
|
|
} |
|
|
}); |
|
|
}); |
|
|
connect_shortcut(QStringLiteral("Change Docked Mode"), [&] { |
|
|
|
|
|
Settings::values.use_docked_mode.SetValue(!Settings::values.use_docked_mode.GetValue()); |
|
|
|
|
|
OnDockedModeChanged(!Settings::values.use_docked_mode.GetValue(), |
|
|
|
|
|
Settings::values.use_docked_mode.GetValue(), *system); |
|
|
|
|
|
dock_status_button->setChecked(Settings::values.use_docked_mode.GetValue()); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
connect_shortcut(QStringLiteral("Change Adapting Filter"), |
|
|
|
|
|
&GMainWindow::OnToggleAdaptingFilter); |
|
|
|
|
|
connect_shortcut(QStringLiteral("Change Docked Mode"), &GMainWindow::OnToggleDockedMode); |
|
|
|
|
|
connect_shortcut(QStringLiteral("Change GPU Accuracy"), &GMainWindow::OnToggleGpuAccuracy); |
|
|
connect_shortcut(QStringLiteral("Audio Mute/Unmute"), |
|
|
connect_shortcut(QStringLiteral("Audio Mute/Unmute"), |
|
|
[] { Settings::values.audio_muted = !Settings::values.audio_muted; }); |
|
|
[] { Settings::values.audio_muted = !Settings::values.audio_muted; }); |
|
|
connect_shortcut(QStringLiteral("Audio Volume Down"), [] { |
|
|
connect_shortcut(QStringLiteral("Audio Volume Down"), [] { |
|
|
@ -2868,6 +2820,59 @@ void GMainWindow::OnTasReset() { |
|
|
input_subsystem->GetTas()->Reset(); |
|
|
input_subsystem->GetTas()->Reset(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void GMainWindow::OnToggleDockedMode() { |
|
|
|
|
|
const bool is_docked = Settings::values.use_docked_mode.GetValue(); |
|
|
|
|
|
auto* player_1 = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Player1); |
|
|
|
|
|
auto* handheld = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Handheld); |
|
|
|
|
|
|
|
|
|
|
|
if (!is_docked && handheld->IsConnected()) { |
|
|
|
|
|
QMessageBox::warning(this, tr("Invalid config detected"), |
|
|
|
|
|
tr("Handheld controller can't be used on docked mode. Pro " |
|
|
|
|
|
"controller will be selected.")); |
|
|
|
|
|
handheld->Disconnect(); |
|
|
|
|
|
player_1->SetNpadStyleIndex(Core::HID::NpadStyleIndex::ProController); |
|
|
|
|
|
player_1->Connect(); |
|
|
|
|
|
controller_dialog->refreshConfiguration(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Settings::values.use_docked_mode.SetValue(!is_docked); |
|
|
|
|
|
dock_status_button->setChecked(!is_docked); |
|
|
|
|
|
OnDockedModeChanged(is_docked, !is_docked, *system); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void GMainWindow::OnToggleGpuAccuracy() { |
|
|
|
|
|
switch (Settings::values.gpu_accuracy.GetValue()) { |
|
|
|
|
|
case Settings::GPUAccuracy::High: { |
|
|
|
|
|
Settings::values.gpu_accuracy.SetValue(Settings::GPUAccuracy::Normal); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
case Settings::GPUAccuracy::Normal: |
|
|
|
|
|
case Settings::GPUAccuracy::Extreme: |
|
|
|
|
|
default: { |
|
|
|
|
|
Settings::values.gpu_accuracy.SetValue(Settings::GPUAccuracy::High); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
system->ApplySettings(); |
|
|
|
|
|
UpdateGPUAccuracyButton(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void GMainWindow::OnToggleAdaptingFilter() { |
|
|
|
|
|
auto filter = Settings::values.scaling_filter.GetValue(); |
|
|
|
|
|
if (filter == Settings::ScalingFilter::LastFilter) { |
|
|
|
|
|
filter = Settings::ScalingFilter::NearestNeighbor; |
|
|
|
|
|
} else { |
|
|
|
|
|
filter = static_cast<Settings::ScalingFilter>(static_cast<u32>(filter) + 1); |
|
|
|
|
|
} |
|
|
|
|
|
if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL && |
|
|
|
|
|
filter == Settings::ScalingFilter::Fsr) { |
|
|
|
|
|
filter = Settings::ScalingFilter::NearestNeighbor; |
|
|
|
|
|
} |
|
|
|
|
|
Settings::values.scaling_filter.SetValue(filter); |
|
|
|
|
|
filter_status_button->setChecked(true); |
|
|
|
|
|
UpdateFilterText(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void GMainWindow::OnConfigurePerGame() { |
|
|
void GMainWindow::OnConfigurePerGame() { |
|
|
const u64 title_id = system->GetCurrentProcessProgramID(); |
|
|
const u64 title_id = system->GetCurrentProcessProgramID(); |
|
|
OpenPerGameConfiguration(title_id, game_path.toStdString()); |
|
|
OpenPerGameConfiguration(title_id, game_path.toStdString()); |
|
|
|