From 7901a988af847d2bcdb7edc1c3f9883cbcdff19b Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Wed, 3 Sep 2025 19:31:03 +0200 Subject: [PATCH] Add option to enable or disable OBS preview --- data/locale/en-US.ini | 3 + plugins/base/macro-action-obs-settings.cpp | 71 +++++++++++++++++----- plugins/base/macro-action-obs-settings.hpp | 3 + 3 files changed, 62 insertions(+), 15 deletions(-) diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini index 3fd1c5ba..7d21a33c 100644 --- a/data/locale/en-US.ini +++ b/data/locale/en-US.ini @@ -1326,6 +1326,9 @@ AdvSceneSwitcher.action.obsSetting.action.setBaseCanvasX="Set base resolution X AdvSceneSwitcher.action.obsSetting.action.setBaseCanvasY="Set base resolution Y value" AdvSceneSwitcher.action.obsSetting.action.setOutputCanvasX="Set output resolution X value" AdvSceneSwitcher.action.obsSetting.action.setOutputCanvasY="Set output resolution Y value" +AdvSceneSwitcher.action.obsSetting.action.enablePreview="Enable preview" +AdvSceneSwitcher.action.obsSetting.action.disablePreview="Disable preview" +AdvSceneSwitcher.action.obsSetting.action.togglePreview="Toggle preview enable" AdvSceneSwitcher.action.obsSetting.getCurrentValue="Get current value" AdvSceneSwitcher.action.obsSettings.layout="{{actions}}{{fpsType}}{{fpsIntValue}}{{fpsStringValue}}{{canvasSizeValue}}{{getCurrentValue}}" AdvSceneSwitcher.action.script="Script" diff --git a/plugins/base/macro-action-obs-settings.cpp b/plugins/base/macro-action-obs-settings.cpp index 52636234..293e0eb7 100644 --- a/plugins/base/macro-action-obs-settings.cpp +++ b/plugins/base/macro-action-obs-settings.cpp @@ -34,6 +34,12 @@ const static std::map actionTypes = "AdvSceneSwitcher.action.obsSetting.action.setOutputCanvasX"}, {MacroActionOBSSettings::Action::OUTPUT_Y_VALUE, "AdvSceneSwitcher.action.obsSetting.action.setOutputCanvasY"}, + {MacroActionOBSSettings::Action::ENABLE_PREVIEW, + "AdvSceneSwitcher.action.obsSetting.action.enablePreview"}, + {MacroActionOBSSettings::Action::DISABLE_PREVIEW, + "AdvSceneSwitcher.action.obsSetting.action.disablePreview"}, + {MacroActionOBSSettings::Action::TOGGLE_PREVIEW, + "AdvSceneSwitcher.action.obsSetting.action.togglePreview"}, }; template @@ -62,6 +68,17 @@ static auto getConfigValueHelper(Func func, Func defaultFunc, Args... args) return std::optional{}; } +static void setPreviewEnabled(bool enabled) +{ + static const auto enable = [](void *) { + obs_frontend_set_preview_enabled(true); + }; + static const auto disable = [](void *) { + obs_frontend_set_preview_enabled(false); + }; + obs_queue_task(OBS_TASK_UI, enabled ? enable : disable, nullptr, false); +} + bool MacroActionOBSSettings::PerformAction() { switch (_action) { @@ -110,6 +127,15 @@ bool MacroActionOBSSettings::PerformAction() static_cast(_canvasSizeValue)); obs_frontend_reset_video(); break; + case Action::ENABLE_PREVIEW: + setPreviewEnabled(true); + break; + case Action::DISABLE_PREVIEW: + setPreviewEnabled(false); + break; + case Action::TOGGLE_PREVIEW: + setPreviewEnabled(!obs_frontend_preview_enabled()); + break; default: break; } @@ -347,18 +373,6 @@ void MacroActionOBSSettingsEdit::SetWidgetVisibility() return; } - const bool isFPSSelection = - _entryData->_action == - MacroActionOBSSettings::Action::FPS_TYPE || - _entryData->_action == - MacroActionOBSSettings::Action::FPS_COMMON_VALUE || - _entryData->_action == - MacroActionOBSSettings::Action::FPS_INT_VALUE || - _entryData->_action == - MacroActionOBSSettings::Action::FPS_DEN_VALUE || - _entryData->_action == - MacroActionOBSSettings::Action::FPS_NUM_VALUE; - _fpsType->setVisible(_entryData->_action == MacroActionOBSSettings::Action::FPS_TYPE); _fpsIntValue->setVisible( @@ -371,9 +385,36 @@ void MacroActionOBSSettingsEdit::SetWidgetVisibility() _fpsStringValue->setVisible( _entryData->_action == MacroActionOBSSettings::Action::FPS_COMMON_VALUE); - _canvasSizeValue->setVisible(!isFPSSelection); - _getCurrentValue->setVisible(_entryData->_action != - MacroActionOBSSettings::Action::FPS_TYPE); + + const bool needsSizeSelection = + _entryData->_action == + MacroActionOBSSettings::Action::BASE_CANVAS_X_VALUE || + _entryData->_action == + MacroActionOBSSettings::Action::BASE_CANVAS_Y_VALUE || + _entryData->_action == + MacroActionOBSSettings::Action::OUTPUT_X_VALUE || + _entryData->_action == + MacroActionOBSSettings::Action::OUTPUT_Y_VALUE; + _canvasSizeValue->setVisible(needsSizeSelection); + + const bool canGetSettingsValue = + _entryData->_action == + MacroActionOBSSettings::Action::FPS_COMMON_VALUE || + _entryData->_action == + MacroActionOBSSettings::Action::FPS_INT_VALUE || + _entryData->_action == + MacroActionOBSSettings::Action::FPS_NUM_VALUE || + _entryData->_action == + MacroActionOBSSettings::Action::FPS_DEN_VALUE || + _entryData->_action == + MacroActionOBSSettings::Action::BASE_CANVAS_X_VALUE || + _entryData->_action == + MacroActionOBSSettings::Action::BASE_CANVAS_Y_VALUE || + _entryData->_action == + MacroActionOBSSettings::Action::OUTPUT_X_VALUE || + _entryData->_action == + MacroActionOBSSettings::Action::OUTPUT_Y_VALUE; + _getCurrentValue->setVisible(canGetSettingsValue); } void MacroActionOBSSettingsEdit::ActionChanged(int idx) diff --git a/plugins/base/macro-action-obs-settings.hpp b/plugins/base/macro-action-obs-settings.hpp index 81f3da0e..0aa2aaa7 100644 --- a/plugins/base/macro-action-obs-settings.hpp +++ b/plugins/base/macro-action-obs-settings.hpp @@ -31,6 +31,9 @@ public: BASE_CANVAS_Y_VALUE, OUTPUT_X_VALUE, OUTPUT_Y_VALUE, + ENABLE_PREVIEW, + DISABLE_PREVIEW, + TOGGLE_PREVIEW, }; Action _action = Action::FPS_COMMON_VALUE; enum class FPSType {