diff --git a/data/locale/de-DE.ini b/data/locale/de-DE.ini
index 3dc9ac45..83a9d0f9 100644
--- a/data/locale/de-DE.ini
+++ b/data/locale/de-DE.ini
@@ -54,7 +54,10 @@ AdvSceneSwitcher.generalTab.priority.video="Video"
; Transition Tab
AdvSceneSwitcher.transitionTab.title="Szenenübergänge"
-AdvSceneSwitcher.transitionTab.transitionOverride="Szenenübergänge, die im Szenenwechsler konfiguriert werden, haben Vorrang vor Übergangsüberschreibung"
+AdvSceneSwitcher.transitionTab.setTransitionBy="Beim Ändern des Szenenübergangs:"
+AdvSceneSwitcher.transitionTab.transitionOverride="Verwende Übergangsüberschreibungen"
+AdvSceneSwitcher.transitionTab.adjustActiveTransitionType="Wechsle den aktiven Szenenübergangtyp"
+AdvSceneSwitcher.transitionTab.transitionBehaviorSelectionError="Mindestens eine Option muss aktiv sein:\n\n - Verwende Übergangsüberschreibungen\n\n - Wechsle den aktiven Szenenübergangtyp"
AdvSceneSwitcher.transitionTab.transitionForAToB="Szenenübergänge für automatisierte Szenenwechsel von Szene A zu Szene B"
AdvSceneSwitcher.transitionTab.transitionsHelp="
Diese Einstellungen beeinflussen nur vom Szenenwechsler ausgelöste Szenenübergänge - Siehe Transition Table um auch manuelle Szenenübergänge zu konfigurieren.
Einstellungen auf diesem Tab haben Vorrang, vor denen welche auf den übrigen Tabs konfiguriert wurden.
Klicke auf das Plus Symbol, um einen neuen Eintrag hinzuzufügen.
"
AdvSceneSwitcher.transitionTab.defaultTransition="Ändere den Szenenübergang wenn eine Szene aktiv ist"
diff --git a/data/locale/en-US.ini b/data/locale/en-US.ini
index 345e5061..3d065f7f 100644
--- a/data/locale/en-US.ini
+++ b/data/locale/en-US.ini
@@ -54,7 +54,10 @@ AdvSceneSwitcher.generalTab.priority.video="Video"
; Transition Tab
AdvSceneSwitcher.transitionTab.title="Transition"
-AdvSceneSwitcher.transitionTab.transitionOverride="Scene transitions defined in the scene switcher take priority over Transition Overrides defined per scene"
+AdvSceneSwitcher.transitionTab.setTransitionBy="When changing transitions:"
+AdvSceneSwitcher.transitionTab.transitionOverride="Set transition overrides"
+AdvSceneSwitcher.transitionTab.adjustActiveTransitionType="Change active transition type"
+AdvSceneSwitcher.transitionTab.transitionBehaviorSelectionError="At least one option must be enabled:\n\n - Use transition overrides\n\n - Change active transition type"
AdvSceneSwitcher.transitionTab.transitionForAToB="Use transition for automated scene switch from scene A to scene B"
AdvSceneSwitcher.transitionTab.transitionsHelp="These settings only affect transitions caused by the scene switcher - Check out Transition Table if you want to configure this for manual scene changes.
Settings defined here take priority over transition settings configured elsewhere in the scene switcher.
Click the plus symbol below to add a new entry.
"
AdvSceneSwitcher.transitionTab.defaultTransition="Change transition if scene is active"
diff --git a/forms/advanced-scene-switcher.ui b/forms/advanced-scene-switcher.ui
index 18d0223a..ba2f0f1f 100644
--- a/forms/advanced-scene-switcher.ui
+++ b/forms/advanced-scene-switcher.ui
@@ -566,18 +566,42 @@
-
-
-
- AdvSceneSwitcher.transitionTab.transitionOverride
-
-
-
- -
-
-
- Qt::Horizontal
-
-
+
+
-
+
+
+ AdvSceneSwitcher.transitionTab.adjustActiveTransitionType
+
+
+
+ -
+
+
+ AdvSceneSwitcher.transitionTab.setTransitionBy
+
+
+
+ -
+
+
+ AdvSceneSwitcher.transitionTab.transitionOverride
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+
-
diff --git a/src/advanced-scene-switcher.cpp b/src/advanced-scene-switcher.cpp
index 0e7c7cdd..45a64a4d 100644
--- a/src/advanced-scene-switcher.cpp
+++ b/src/advanced-scene-switcher.cpp
@@ -552,7 +552,8 @@ void SwitcherData::Thread()
server.sendMessage(scene, transition);
}
switchScene(scene, transition,
- tansitionOverrideOverride);
+ tansitionOverrideOverride,
+ adjustActiveTransitionType, verbose);
}
writeSceneInfoToFile();
@@ -619,9 +620,10 @@ bool SwitcherData::checkForMatch(OBSWeakSource &scene,
}
void switchScene(OBSWeakSource &scene, OBSWeakSource &transition,
- bool &transitionOverrideOverride)
+ bool transitionOverrideOverride,
+ bool adjustActiveTransitionType, bool verbose)
{
- if (!scene && switcher->verbose) {
+ if (!scene && verbose) {
blog(LOG_INFO, "nothing to switch to");
return;
}
@@ -632,13 +634,14 @@ void switchScene(OBSWeakSource &scene, OBSWeakSource &transition,
if (source && source != currentSource) {
transitionData td;
setNextTransition(scene, currentSource, transition,
- transitionOverrideOverride, td);
+ transitionOverrideOverride,
+ adjustActiveTransitionType, td);
obs_frontend_set_current_scene(source);
if (transitionOverrideOverride) {
restoreTransitionOverride(source, td);
}
- if (switcher->verbose) {
+ if (verbose) {
blog(LOG_INFO, "switched scene");
}
}
diff --git a/src/headers/advanced-scene-switcher.hpp b/src/headers/advanced-scene-switcher.hpp
index 4d14440f..80e8eb18 100644
--- a/src/headers/advanced-scene-switcher.hpp
+++ b/src/headers/advanced-scene-switcher.hpp
@@ -166,6 +166,7 @@ public slots:
void on_defaultTransitionsUp_clicked();
void on_defaultTransitionsDown_clicked();
void on_transitionOverridecheckBox_stateChanged(int state);
+ void on_adjustActiveTransitionType_stateChanged(int state);
void defTransitionDelayValueChanged(int value);
void on_browseButton_clicked();
@@ -287,12 +288,14 @@ bool isInFocus(const QString &executable);
void setNextTransition(OBSWeakSource &targetScene, obs_source_t *currentSource,
OBSWeakSource &transition,
- bool &transitionOverrideOverride, transitionData &td);
+ bool transitionOverrideOverride,
+ bool adjustActiveTransitionType, transitionData &td);
void overwriteTransitionOverride(obs_weak_source_t *sceneWs,
obs_source_t *transition, transitionData &td);
void restoreTransitionOverride(obs_source_t *scene, transitionData td);
void switchScene(OBSWeakSource &scene, OBSWeakSource &transition,
- bool &transitionOverrideOverride);
+ bool transitionOverrideOverride,
+ bool adjustActiveTransitionType, bool verbose);
/******************************************************************************
* Main SwitcherData
diff --git a/src/headers/switcher-data-structs.hpp b/src/headers/switcher-data-structs.hpp
index a90714ff..8ca97e63 100644
--- a/src/headers/switcher-data-structs.hpp
+++ b/src/headers/switcher-data-structs.hpp
@@ -62,6 +62,7 @@ struct SwitcherData {
bool disableHints = false;
bool showFrame = false;
bool tansitionOverrideOverride = false;
+ bool adjustActiveTransitionType = true;
int interval = default_interval;
diff --git a/src/switch-network.cpp b/src/switch-network.cpp
index 16fd9393..77302e87 100644
--- a/src/switch-network.cpp
+++ b/src/switch-network.cpp
@@ -268,7 +268,8 @@ std::string processMessage(std::string payload)
"'";
}
- switchScene(scene, transition, switcher->tansitionOverrideOverride);
+ switchScene(scene, transition, switcher->tansitionOverrideOverride,
+ switcher->adjustActiveTransitionType, switcher->verbose);
return ret;
}
diff --git a/src/switch-transitions.cpp b/src/switch-transitions.cpp
index 5f743590..7355dabd 100644
--- a/src/switch-transitions.cpp
+++ b/src/switch-transitions.cpp
@@ -182,12 +182,31 @@ void AdvSceneSwitcher::on_transitionOverridecheckBox_stateChanged(int state)
return;
}
- std::lock_guard lock(switcher->m);
- if (!state) {
- switcher->tansitionOverrideOverride = false;
- } else {
- switcher->tansitionOverrideOverride = true;
+ if (!state && !switcher->adjustActiveTransitionType) {
+ DisplayMessage(obs_module_text(
+ "AdvSceneSwitcher.transitionTab.transitionBehaviorSelectionError"));
+ ui->adjustActiveTransitionType->setChecked(true);
}
+
+ std::lock_guard lock(switcher->m);
+ switcher->tansitionOverrideOverride = state;
+}
+
+void AdvSceneSwitcher::on_adjustActiveTransitionType_stateChanged(int state)
+{
+ if (loading) {
+ return;
+ }
+
+ // This option only makes sense if we are allowed to use transition overrides
+ if (!state && !switcher->tansitionOverrideOverride) {
+ DisplayMessage(obs_module_text(
+ "AdvSceneSwitcher.transitionTab.transitionBehaviorSelectionError"));
+ ui->transitionOverridecheckBox->setChecked(true);
+ }
+
+ std::lock_guard lock(switcher->m);
+ switcher->adjustActiveTransitionType = state;
}
void AdvSceneSwitcher::defTransitionDelayValueChanged(int value)
@@ -251,7 +270,8 @@ void restoreTransitionOverride(obs_source_t *scene, transitionData td)
void setNextTransition(OBSWeakSource &targetScene, obs_source_t *currentSource,
OBSWeakSource &transition,
- bool &transitionOverrideOverride, transitionData &td)
+ bool transitionOverrideOverride,
+ bool adjustActiveTransitionType, transitionData &td)
{
obs_weak_source_t *currentScene =
obs_source_get_weak_source(currentSource);
@@ -266,7 +286,7 @@ void setNextTransition(OBSWeakSource &targetScene, obs_source_t *currentSource,
nextTransition = obs_weak_source_get_source(transition);
}
- if (nextTransition) {
+ if (nextTransition && adjustActiveTransitionType) {
obs_frontend_set_current_transition(nextTransition);
}
@@ -334,6 +354,8 @@ void SwitcherData::saveSceneTransitions(obs_data_t *obj)
obs_data_set_bool(obj, "tansitionOverrideOverride",
switcher->tansitionOverrideOverride);
+ obs_data_set_bool(obj, "adjustActiveTransitionType",
+ switcher->adjustActiveTransitionType);
obs_data_set_default_int(obj, "defTransitionDelay",
default_def_transition_dealy);
obs_data_set_int(obj, "defTransitionDelay",
@@ -390,6 +412,8 @@ void SwitcherData::loadSceneTransitions(obs_data_t *obj)
switcher->tansitionOverrideOverride =
obs_data_get_bool(obj, "tansitionOverrideOverride");
+ switcher->adjustActiveTransitionType =
+ obs_data_get_bool(obj, "adjustActiveTransitionType");
DefaultSceneTransition::delay =
obs_data_get_int(obj, "defTransitionDelay");
}
@@ -430,6 +454,8 @@ void AdvSceneSwitcher::setupTransitionsTab()
ui->transitionOverridecheckBox->setChecked(
switcher->tansitionOverrideOverride);
+ ui->adjustActiveTransitionType->setChecked(
+ switcher->adjustActiveTransitionType);
QSpinBox *defTransitionDelay = new QSpinBox();
defTransitionDelay->setSuffix("ms");