mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-03-31 06:15:32 -05:00
Split into multiple files since it was impossible to maintain the code with a file for 3000+ lines. Fixed bug with scene round trip freeze (missing condition variable wait) Added option to sort switch functions by prioroty Renamed Scene Round Trip to Scene Sequence to cause less confusion
141 lines
4.1 KiB
C++
141 lines
4.1 KiB
C++
#pragma once
|
|
#include <obs.hpp>
|
|
#include <qstring>
|
|
#include <obs-frontend-api.h>
|
|
#include "switcher-data-structs.hpp"
|
|
using namespace std;
|
|
|
|
static inline bool WeakSourceValid(obs_weak_source_t* ws)
|
|
{
|
|
obs_source_t* source = obs_weak_source_get_source(ws);
|
|
if (source)
|
|
obs_source_release(source);
|
|
return !!source;
|
|
}
|
|
|
|
static inline QString MakeSwitchName(
|
|
const QString& scene, const QString& value, const QString& transition, bool fullscreen)
|
|
{
|
|
if (!fullscreen)
|
|
return QStringLiteral("[") + scene + QStringLiteral(", ") + transition
|
|
+ QStringLiteral("]: ") + value;
|
|
return QStringLiteral("[") + scene + QStringLiteral(", ") + transition + QStringLiteral("]: ")
|
|
+ value + QStringLiteral(" (only if window is fullscreen)");
|
|
}
|
|
|
|
static inline QString MakeSwitchNameExecutable(
|
|
const QString& scene, const QString& value, const QString& transition, bool inFocus)
|
|
{
|
|
if (!inFocus)
|
|
return QStringLiteral("[") + scene + QStringLiteral(", ") + transition
|
|
+ QStringLiteral("]: ") + value;
|
|
return QStringLiteral("[") + scene + QStringLiteral(", ") + transition + QStringLiteral("]: ")
|
|
+ value + QStringLiteral(" (only if window is focused)");
|
|
}
|
|
|
|
static inline QString MakeScreenRegionSwitchName(
|
|
const QString& scene, const QString& transition, int minX, int minY, int maxX, int maxY)
|
|
{
|
|
return QStringLiteral("[") + scene + QStringLiteral(", ") + transition + QStringLiteral("]: ")
|
|
+ QString::number(minX) + QStringLiteral(", ") + QString::number(minY)
|
|
+ QStringLiteral(" x ") + QString::number(maxX) + QStringLiteral(", ")
|
|
+ QString::number(maxY);
|
|
}
|
|
|
|
static inline QString MakeSceneRoundTripSwitchName(
|
|
const QString& scene1, const QString& scene2, const QString& transition, int delay)
|
|
{
|
|
return scene1 + QStringLiteral(" -> wait for ") + QString::number(delay)
|
|
+ QStringLiteral(" seconds -> ") + scene2 + QStringLiteral(" (using ") + transition
|
|
+ QStringLiteral(" transition)");
|
|
}
|
|
|
|
static inline QString MakeSceneTransitionName(
|
|
const QString& scene1, const QString& scene2, const QString& transition)
|
|
{
|
|
return scene1 + QStringLiteral(" --- ") + transition + QStringLiteral(" --> ") + scene2;
|
|
}
|
|
|
|
static inline QString MakeDefaultSceneTransitionName(
|
|
const QString& scene, const QString& transition)
|
|
{
|
|
return scene + QStringLiteral(" --> ") + transition;
|
|
}
|
|
|
|
static inline string GetWeakSourceName(obs_weak_source_t* weak_source)
|
|
{
|
|
string name;
|
|
|
|
obs_source_t* source = obs_weak_source_get_source(weak_source);
|
|
if (source)
|
|
{
|
|
name = obs_source_get_name(source);
|
|
obs_source_release(source);
|
|
}
|
|
|
|
return name;
|
|
}
|
|
|
|
static inline OBSWeakSource GetWeakSourceByName(const char* name)
|
|
{
|
|
OBSWeakSource weak;
|
|
obs_source_t* source = obs_get_source_by_name(name);
|
|
if (source)
|
|
{
|
|
weak = obs_source_get_weak_source(source);
|
|
obs_weak_source_release(weak);
|
|
obs_source_release(source);
|
|
}
|
|
|
|
return weak;
|
|
}
|
|
|
|
static inline OBSWeakSource GetWeakSourceByQString(const QString& name)
|
|
{
|
|
return GetWeakSourceByName(name.toUtf8().constData());
|
|
}
|
|
|
|
static inline OBSWeakSource GetWeakTransitionByName(const char* transitionName)
|
|
{
|
|
OBSWeakSource weak;
|
|
obs_source_t* source = nullptr;
|
|
|
|
if (strcmp(transitionName, "Default") == 0)
|
|
{
|
|
source = obs_frontend_get_current_transition();
|
|
weak = obs_source_get_weak_source(source);
|
|
obs_source_release(source);
|
|
obs_weak_source_release(weak);
|
|
return weak;
|
|
}
|
|
|
|
obs_frontend_source_list* transitions = new obs_frontend_source_list();
|
|
obs_frontend_get_transitions(transitions);
|
|
bool match = false;
|
|
|
|
for (size_t i = 0; i < transitions->sources.num; i++)
|
|
{
|
|
const char* name = obs_source_get_name(transitions->sources.array[i]);
|
|
if (strcmp(transitionName, name) == 0)
|
|
{
|
|
match = true;
|
|
source = transitions->sources.array[i];
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (match){
|
|
weak = obs_source_get_weak_source(source);
|
|
obs_weak_source_release(weak);
|
|
}
|
|
obs_frontend_source_list_free(transitions);
|
|
|
|
return weak;
|
|
}
|
|
|
|
static inline OBSWeakSource GetWeakTransitionByQString(const QString& name)
|
|
{
|
|
return GetWeakTransitionByName(name.toUtf8().constData());
|
|
}
|
|
|