From 9ac7c5890e3349a74634ad7437f27973c0b298a6 Mon Sep 17 00:00:00 2001 From: tt2468 Date: Tue, 1 Mar 2022 14:19:35 -0800 Subject: [PATCH] eventhandler: Add SceneTransitionEnded --- src/eventhandler/EventHandler.cpp | 2 ++ src/eventhandler/EventHandler.h | 1 + src/eventhandler/EventHandler_Transitions.cpp | 28 +++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/src/eventhandler/EventHandler.cpp b/src/eventhandler/EventHandler.cpp index a4359568..73630dff 100644 --- a/src/eventhandler/EventHandler.cpp +++ b/src/eventhandler/EventHandler.cpp @@ -176,6 +176,7 @@ void EventHandler::ConnectSourceSignals(obs_source_t *source) // Applies to inpu // Transitions if (sourceType == OBS_SOURCE_TYPE_TRANSITION) { signal_handler_connect(sh, "transition_start", HandleSceneTransitionStarted, this); + signal_handler_connect(sh, "transition_stop", HandleSceneTransitionEnded, this); } // Filters @@ -243,6 +244,7 @@ void EventHandler::DisconnectSourceSignals(obs_source_t *source) // Transitions if (sourceType == OBS_SOURCE_TYPE_TRANSITION) { signal_handler_disconnect(sh, "transition_start", HandleSceneTransitionStarted, this); + signal_handler_disconnect(sh, "transition_stop", HandleSceneTransitionEnded, this); } // Filters diff --git a/src/eventhandler/EventHandler.h b/src/eventhandler/EventHandler.h index 305e525e..7452b29a 100644 --- a/src/eventhandler/EventHandler.h +++ b/src/eventhandler/EventHandler.h @@ -116,6 +116,7 @@ class EventHandler void HandleCurrentSceneTransitionChanged(); void HandleCurrentSceneTransitionDurationChanged(); static void HandleSceneTransitionStarted(void *param, calldata_t *data); // Direct callback + static void HandleSceneTransitionEnded(void *param, calldata_t *data); // Direct callback // Filters static void FilterAddMultiHandler(void *param, calldata_t *data); // Direct callback diff --git a/src/eventhandler/EventHandler_Transitions.cpp b/src/eventhandler/EventHandler_Transitions.cpp index 66f89342..35f0b67b 100644 --- a/src/eventhandler/EventHandler_Transitions.cpp +++ b/src/eventhandler/EventHandler_Transitions.cpp @@ -86,3 +86,31 @@ void EventHandler::HandleSceneTransitionStarted(void *param, calldata_t *data) eventData["transitionName"] = obs_source_get_name(source); eventHandler->BroadcastEvent(EventSubscription::Transitions, "SceneTransitionStarted", eventData); } + +/** + * A scene transition has completed fully. + * + * Note: Does not appear to trigger when the transition is interrupted by the user. + * + * @dataField transitionName | String | Scene transition name + * + * @eventType SceneTransitionEnded + * @eventSubscription Transitions + * @complexity 2 + * @rpcVersion -1 + * @initialVersion 5.0.0 + * @api events + * @category transitions + */ +void EventHandler::HandleSceneTransitionEnded(void *param, calldata_t *data) +{ + auto eventHandler = static_cast(param); + + obs_source_t *source = GetCalldataPointer(data, "source"); + if (!source) + return; + + json eventData; + eventData["transitionName"] = obs_source_get_name(source); + eventHandler->BroadcastEvent(EventSubscription::Transitions, "SceneTransitionEnded", eventData); +}