-
-
Notifications
You must be signed in to change notification settings - Fork 21
/
downstream-keyer.hpp
99 lines (84 loc) · 3.22 KB
/
downstream-keyer.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#pragma once
#include <QCheckBox>
#include <QComboBox>
#include <QLabel>
#include <QListWidget>
#include <QSpinBox>
#include <QTimer>
#include <QToolBar>
#include <QWidget>
#include <set>
#include "obs.h"
#include "obs-websocket-api.h"
typedef void (*get_transitions_callback_t)(void *data, struct obs_frontend_source_list *sources);
class LockedCheckBox : public QCheckBox {
Q_OBJECT
public:
LockedCheckBox();
explicit LockedCheckBox(QWidget *parent);
};
enum transitionType { match, show, hide, override };
class DownstreamKeyer : public QWidget {
Q_OBJECT
private:
QTimer hideTimer;
int outputChannel;
obs_source_t *transition;
obs_source_t *showTransition;
obs_source_t *hideTransition;
obs_source_t *overrideTransition;
QListWidget *scenesList;
QToolBar *scenesToolbar;
uint32_t transitionDuration;
uint32_t showTransitionDuration;
uint32_t hideTransitionDuration;
uint32_t overrideTransitionDuration;
uint32_t hideAfter;
LockedCheckBox *tie;
obs_hotkey_id null_hotkey_id;
obs_hotkey_pair_id tie_hotkey_id;
std::set<std::string> exclude_scenes;
obs_view_t *view = nullptr;
get_transitions_callback_t get_transitions = nullptr;
void *get_transitions_data = nullptr;
static void source_rename(void *data, calldata_t *calldata);
static void source_remove(void *data, calldata_t *calldata);
static bool enable_DSK_hotkey(void *data, obs_hotkey_pair_id id, obs_hotkey_t *hotkey, bool pressed);
static bool disable_DSK_hotkey(void *data, obs_hotkey_pair_id id, obs_hotkey_t *hotkey, bool pressed);
static void null_hotkey(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey, bool pressed);
static bool enable_tie_hotkey(void *data, obs_hotkey_pair_id id, obs_hotkey_t *hotkey, bool pressed);
static bool disable_tie_hotkey(void *data, obs_hotkey_pair_id id, obs_hotkey_t *hotkey, bool pressed);
void ChangeSceneIndex(bool relative, int idx, int invalidIdx);
private slots:
void on_actionAddScene_triggered();
void on_actionRemoveScene_triggered();
void on_actionSceneUp_triggered();
void on_actionSceneDown_triggered();
void on_actionSceneNull_triggered();
void apply_source(obs_source_t *newSource);
void apply_selected_source();
void on_scenesList_itemSelectionChanged();
signals:
public:
DownstreamKeyer(int channel, QString name, obs_view_t *view = nullptr, get_transitions_callback_t get_transitions = nullptr,
void *get_transitions_data = nullptr);
~DownstreamKeyer();
void Save(obs_data_t *data);
void Load(obs_data_t *data);
void SetTransition(const char *transition_name, enum transitionType transition_type = match);
std::string GetTransition(enum transitionType transition_type = match);
void SetTransitionDuration(int duration, enum transitionType transition_type = match);
int GetTransitionDuration(enum transitionType transition_type = match);
void SetHideAfter(int duration);
int GetHideAfter();
void SceneChanged(std::string scene);
void AddExcludeScene(const char *scene_name);
void RemoveExcludeScene(const char *scene_name);
bool IsSceneExcluded(const char *scene_name);
bool SwitchToScene(QString scene_name);
void add_scene(QString scene_name, obs_source_t *s);
bool AddScene(QString scene_name);
bool RemoveScene(QString scene_name);
void SetTie(bool tie);
void SetOutputChannel(int outputChannel);
};