Various fixes for the postprocessing controls in the fullscreen GUI

This commit is contained in:
RSDuck 2022-12-03 20:26:24 +01:00
parent 01fdcf2dde
commit 527a1e6d5e

View file

@ -3793,11 +3793,23 @@ void FullscreenUI::SavePostProcessingChain()
if (bsi->GetBoolValue("Display", "PostProcessing", false)) if (bsi->GetBoolValue("Display", "PostProcessing", false))
g_host_display->SetPostProcessingChain(config); g_host_display->SetPostProcessingChain(config);
if (IsEditingGameSettings(bsi)) if (IsEditingGameSettings(bsi))
{
s_game_settings_interface->Save(); s_game_settings_interface->Save();
}
else else
Host::CommitBaseSettingChanges(); {
s_settings_changed.store(true, std::memory_order_release);
}
} }
enum
{
POSTPROCESSING_ACTION_NONE = 0,
POSTPROCESSING_ACTION_REMOVE,
POSTPROCESSING_ACTION_MOVE_UP,
POSTPROCESSING_ACTION_MOVE_DOWN,
};
void FullscreenUI::DrawPostProcessingSettingsPage() void FullscreenUI::DrawPostProcessingSettingsPage()
{ {
SettingsInterface* bsi = GetEditingSettingsInterface(); SettingsInterface* bsi = GetEditingSettingsInterface();
@ -3861,36 +3873,40 @@ void FullscreenUI::DrawPostProcessingSettingsPage()
s_postprocessing_chain.ClearStages(); s_postprocessing_chain.ClearStages();
ShowToast(std::string(), "Post-processing chain cleared."); ShowToast(std::string(), "Post-processing chain cleared.");
SavePostProcessingChain();
}); });
} }
u32 postprocessing_action = POSTPROCESSING_ACTION_NONE;
u32 postprocessing_action_index;
SmallString str; SmallString str;
SmallString tstr; SmallString tstr;
for (u32 stage_index = 0; stage_index < s_postprocessing_chain.GetStageCount();) for (u32 stage_index = 0; stage_index < s_postprocessing_chain.GetStageCount(); stage_index++)
{ {
ImGui::PushID(stage_index);
FrontendCommon::PostProcessingShader& stage = s_postprocessing_chain.GetShaderStage(stage_index); FrontendCommon::PostProcessingShader& stage = s_postprocessing_chain.GetShaderStage(stage_index);
str.Fmt("Stage {}: {}", stage_index + 1, stage.GetName()); str.Fmt("Stage {}: {}", stage_index + 1, stage.GetName());
MenuHeading(str); MenuHeading(str);
if (MenuButton(ICON_FA_TIMES " Remove From Chain", "Removes this shader from the chain.")) if (MenuButton(ICON_FA_TIMES " Remove From Chain", "Removes this shader from the chain."))
{ {
ShowToast(std::string(), fmt::format("Removed stage {} ({}).", stage_index + 1, stage.GetName())); postprocessing_action = POSTPROCESSING_ACTION_REMOVE;
s_postprocessing_chain.RemoveStage(stage_index); postprocessing_action_index = stage_index;
continue;
} }
if (MenuButton(ICON_FA_ARROW_UP " Move Up", "Moves this shader higher in the chain, applying it earlier.", if (MenuButton(ICON_FA_ARROW_UP " Move Up", "Moves this shader higher in the chain, applying it earlier.",
(stage_index > 0))) (stage_index > 0)))
{ {
s_postprocessing_chain.MoveStageUp(stage_index); postprocessing_action = POSTPROCESSING_ACTION_MOVE_UP;
continue; postprocessing_action_index = stage_index;
} }
if (MenuButton(ICON_FA_ARROW_DOWN " Move Down", "Moves this shader lower in the chain, applying it later.", if (MenuButton(ICON_FA_ARROW_DOWN " Move Down", "Moves this shader lower in the chain, applying it later.",
(stage_index != (s_postprocessing_chain.GetStageCount() - 1)))) (stage_index != (s_postprocessing_chain.GetStageCount() - 1))))
{ {
s_postprocessing_chain.MoveStageDown(stage_index); postprocessing_action = POSTPROCESSING_ACTION_MOVE_DOWN;
continue; postprocessing_action_index = stage_index;
} }
for (FrontendCommon::PostProcessingShader::Option& opt : stage.GetOptions()) for (FrontendCommon::PostProcessingShader::Option& opt : stage.GetOptions())
@ -4118,7 +4134,33 @@ void FullscreenUI::DrawPostProcessingSettingsPage()
} }
} }
stage_index++; ImGui::PopID();
}
switch (postprocessing_action)
{
case POSTPROCESSING_ACTION_REMOVE:
{
FrontendCommon::PostProcessingShader& stage = s_postprocessing_chain.GetShaderStage(postprocessing_action_index);
ShowToast(std::string(), fmt::format("Removed stage {} ({}).", postprocessing_action_index + 1, stage.GetName()));
s_postprocessing_chain.RemoveStage(postprocessing_action_index);
SavePostProcessingChain();
}
break;
case POSTPROCESSING_ACTION_MOVE_UP:
{
s_postprocessing_chain.MoveStageUp(postprocessing_action_index);
SavePostProcessingChain();
}
break;
case POSTPROCESSING_ACTION_MOVE_DOWN:
{
s_postprocessing_chain.MoveStageDown(postprocessing_action_index);
SavePostProcessingChain();
}
break;
default:
break;
} }
EndMenuButtons(); EndMenuButtons();