mirror of
https://github.com/Palakis/obs-websocket.git
synced 2024-08-30 18:12:16 +00:00
WSEvents(OnTransitionBegin): refactor event code
This commit is contained in:
parent
3142e097a5
commit
5d74d5d03e
@ -362,6 +362,26 @@ QSpinBox* Utils::GetTransitionDurationControl() {
|
||||
return window->findChild<QSpinBox*>("transitionDuration");
|
||||
}
|
||||
|
||||
int Utils::GetTransitionDuration(obs_source_t* transition) {
|
||||
if (!transition || obs_source_get_type(transition) != OBS_SOURCE_TYPE_TRANSITION) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
OBSSourceAutoRelease destinationScene = obs_transition_get_active_source(transition);
|
||||
OBSDataAutoRelease destinationSettings = obs_source_get_private_settings(destinationScene);
|
||||
|
||||
// Detect if transition is the global transition or a transition override.
|
||||
// Fetching the duration is different depending on the case.
|
||||
obs_data_item_t* transitionDurationItem = obs_data_item_byname(destinationSettings, "transition_duration");
|
||||
int duration = (
|
||||
transitionDurationItem
|
||||
? obs_data_item_get_int(transitionDurationItem)
|
||||
: obs_frontend_get_transition_duration()
|
||||
);
|
||||
|
||||
return duration;
|
||||
}
|
||||
|
||||
bool Utils::SetTransitionByName(QString transitionName) {
|
||||
OBSSourceAutoRelease transition = GetTransitionFromName(transitionName);
|
||||
|
||||
|
@ -54,6 +54,8 @@ class Utils {
|
||||
// TODO contribute a proper frontend API method for this to OBS and remove this hack
|
||||
static QSpinBox* GetTransitionDurationControl();
|
||||
|
||||
static int GetTransitionDuration(obs_source_t* transition);
|
||||
|
||||
static bool SetTransitionByName(QString transitionName);
|
||||
|
||||
static QString OBSVersionString();
|
||||
|
@ -847,33 +847,25 @@ void WSEvents::OnTransitionBegin(void* param, calldata_t* data) {
|
||||
auto instance = reinterpret_cast<WSEvents*>(param);
|
||||
|
||||
OBSSource transition = calldata_get_pointer<obs_source_t>(data, "source");
|
||||
if (!transition) return;
|
||||
if (!transition) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Detect if transition is the global transition or a transition override.
|
||||
// Fetching the duration is different depending on the case.
|
||||
OBSSourceAutoRelease sourceScene = obs_transition_get_source(transition, OBS_TRANSITION_SOURCE_A);
|
||||
OBSSourceAutoRelease destinationScene = obs_transition_get_active_source(transition);
|
||||
OBSDataAutoRelease destinationSettings = obs_source_get_private_settings(destinationScene);
|
||||
int duration = -1;
|
||||
if (obs_data_has_default_value(destinationSettings, "transition_duration") ||
|
||||
obs_data_has_user_value(destinationSettings, "transition_duration"))
|
||||
{
|
||||
duration = obs_data_get_int(destinationSettings, "transition_duration");
|
||||
} else {
|
||||
duration = obs_frontend_get_transition_duration();
|
||||
int duration = Utils::GetTransitionDuration(transition);
|
||||
if (duration < 0) {
|
||||
blog(LOG_WARNING, "OnTransitionBegin: duration is negative !");
|
||||
}
|
||||
|
||||
OBSDataAutoRelease fields = obs_data_create();
|
||||
obs_data_set_string(fields, "name", obs_source_get_name(transition));
|
||||
if (duration >= 0) {
|
||||
obs_data_set_int(fields, "duration", duration);
|
||||
} else {
|
||||
blog(LOG_WARNING, "OnTransitionBegin: duration is negative !");
|
||||
}
|
||||
obs_data_set_int(fields, "duration", duration);
|
||||
|
||||
OBSSourceAutoRelease sourceScene = obs_transition_get_source(transition, OBS_TRANSITION_SOURCE_A);
|
||||
if (sourceScene) {
|
||||
obs_data_set_string(fields, "from-scene", obs_source_get_name(sourceScene));
|
||||
}
|
||||
|
||||
OBSSourceAutoRelease destinationScene = obs_transition_get_active_source(transition);
|
||||
if (destinationScene) {
|
||||
obs_data_set_string(fields, "to-scene", obs_source_get_name(destinationScene));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user