Skip to content

Commit 206dca9

Browse files
committed
frontend: Reduce reliance on transition indexes
1 parent efe2237 commit 206dca9

2 files changed

Lines changed: 29 additions & 40 deletions

File tree

frontend/widgets/OBSBasic.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1458,7 +1458,7 @@ private slots:
14581458
QPointer<QMenu> perSceneTransitionMenu;
14591459

14601460
std::unordered_map<std::string, OBSSource> transitions;
1461-
/* TODO: Reduce usages of an index to identify a transition */
1461+
/* NOTE: There is a reliance on the order of insertion */
14621462
std::vector<std::string> transitionUuids;
14631463
/* FIXME: Replace usages of a name to identify a transition */
14641464
std::unordered_map<std::string, std::string> transitionNameToUuids;

frontend/widgets/OBSBasic_Transitions.cpp

Lines changed: 28 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,6 @@ QMenu *OBSBasic::CreatePerSceneTransitionMenu()
779779
{
780780
OBSSource scene = GetCurrentSceneSource();
781781
QMenu *menu = new QMenu(QTStr("TransitionOverride"));
782-
QAction *action;
783782

784783
OBSDataAutoRelease data = obs_source_get_private_settings(scene);
785784

@@ -796,23 +795,24 @@ QMenu *OBSBasic::CreatePerSceneTransitionMenu()
796795
duration->setValue(curDuration);
797796

798797
auto setTransition = [this](QAction *action) {
799-
int idx = action->property("transition_index").toInt();
798+
std::string uuid = action->property("transition_uuid").toString().toStdString();
800799
OBSSource scene = GetCurrentSceneSource();
801800
OBSDataAutoRelease data = obs_source_get_private_settings(scene);
802-
auto transitionIter = transitions.find(transitionUuids[idx]);
801+
auto transitionIter = transitions.find(uuid);
802+
OBSSource transition;
803803

804-
if (idx == -1) {
804+
if (uuid.empty()) {
805805
obs_data_set_string(data, "transition", "");
806806
return;
807807
}
808808

809809
if (transitionIter == transitions.end())
810810
return;
811811

812-
OBSSource tr = transitionIter->second;
812+
transition = transitionIter->second;
813813

814-
if (tr) {
815-
const char *name = obs_source_get_name(tr);
814+
if (transition) {
815+
const char *name = obs_source_get_name(transition);
816816
obs_data_set_string(data, "transition", name);
817817
}
818818
};
@@ -826,20 +826,15 @@ QMenu *OBSBasic::CreatePerSceneTransitionMenu()
826826

827827
connect(duration, (void(QSpinBox::*)(int)) & QSpinBox::valueChanged, setDuration);
828828

829-
for (int i = -1; i < (int)transitionUuids.size(); i++) {
829+
auto addAction = [&](const std::string &uuid = "") {
830830
const char *name = "";
831+
QAction *action;
831832

832-
if (i >= 0) {
833-
auto transitionIter = transitions.find(transitionUuids[i]);
834-
OBSSource tr;
835-
836-
if (transitionIter == transitions.end())
837-
continue;
838-
839-
tr = transitionIter->second;
840-
if (!tr)
841-
continue;
842-
name = obs_source_get_name(tr);
833+
if (!uuid.empty()) {
834+
auto transition = transitions.find(uuid);
835+
if (transition == transitions.end())
836+
return;
837+
name = obs_source_get_name(transition->second);
843838
}
844839

845840
bool match = (name && strcmp(name, curTransition) == 0);
@@ -848,12 +843,16 @@ QMenu *OBSBasic::CreatePerSceneTransitionMenu()
848843
name = Str("None");
849844

850845
action = menu->addAction(QT_UTF8(name));
851-
action->setProperty("transition_index", i);
846+
action->setProperty("transition_uuid", QString::fromStdString(uuid));
852847
action->setCheckable(true);
853848
action->setChecked(match);
854849

855850
connect(action, &QAction::triggered, std::bind(setTransition, action));
856-
}
851+
};
852+
853+
addAction();
854+
for (const auto &[uuid, transition] : transitions)
855+
addAction(uuid);
857856

858857
QWidgetAction *durationAction = new QWidgetAction(menu);
859858
durationAction->setDefaultWidget(duration);
@@ -1059,7 +1058,6 @@ QMenu *OBSBasic::CreateTransitionMenu(QWidget *parent, QuickTransition *qt)
10591058
{
10601059
QMenu *menu = new QMenu(parent);
10611060
QAction *action;
1062-
OBSSource tr;
10631061

10641062
if (qt) {
10651063
action = menu->addAction(QTStr("Remove"));
@@ -1083,8 +1081,6 @@ QMenu *OBSBasic::CreateTransitionMenu(QWidget *parent, QuickTransition *qt)
10831081
&OBSBasic::QuickTransitionChangeDuration);
10841082
}
10851083

1086-
tr = fadeTransition;
1087-
10881084
action = menu->addAction(QTStr("FadeToBlack"));
10891085
action->setProperty("fadeToBlack", true);
10901086

@@ -1096,19 +1092,12 @@ QMenu *OBSBasic::CreateTransitionMenu(QWidget *parent, QuickTransition *qt)
10961092
connect(action, &QAction::triggered, this, &OBSBasic::AddQuickTransition);
10971093
}
10981094

1099-
for (int i = 0; i < (int)transitionUuids.size(); i++) {
1100-
auto transitionIter = transitions.find(transitionUuids[i]);
1101-
1102-
if (transitionIter == transitions.end())
1103-
continue;
1104-
1105-
tr = transitionIter->second;
1106-
1107-
if (!tr)
1095+
for (const auto &[uuid, transition] : transitions) {
1096+
if (!transition)
11081097
continue;
11091098

1110-
action = menu->addAction(obs_source_get_name(tr));
1111-
action->setProperty("transition_index", i);
1099+
action = menu->addAction(obs_source_get_name(transition));
1100+
action->setProperty("transition_uuid", QString::fromStdString(uuid));
11121101

11131102
if (qt) {
11141103
action->setProperty("id", qt->id);
@@ -1168,10 +1157,10 @@ void OBSBasic::AddQuickTransitionId(int id)
11681157

11691158
void OBSBasic::AddQuickTransition()
11701159
{
1171-
int trIdx = sender()->property("transition_index").toInt();
1160+
std::string transitionUuid = sender()->property("transition_uuid").toString().toStdString();
11721161
QSpinBox *duration = sender()->property("duration").value<QSpinBox *>();
11731162
bool fadeToBlack = sender()->property("fadeToBlack").value<bool>();
1174-
auto transitionIter = transitions.find(transitionUuids[trIdx]);
1163+
auto transitionIter = transitions.find(transitionUuid);
11751164
OBSSource transition;
11761165

11771166
if (!fadeToBlack && (transitionIter == transitions.end()))
@@ -1228,12 +1217,12 @@ void OBSBasic::QuickTransitionClicked()
12281217
void OBSBasic::QuickTransitionChange()
12291218
{
12301219
int id = sender()->property("id").toInt();
1231-
int trIdx = sender()->property("transition_index").toInt();
1220+
std::string transitionUuid = sender()->property("transition_uuid").toString().toStdString();
12321221
bool fadeToBlack = sender()->property("fadeToBlack").value<bool>();
12331222
QuickTransition *qt = GetQuickTransition(id);
12341223

12351224
if (qt) {
1236-
auto transitionIter = transitions.find(transitionUuids[trIdx]);
1225+
auto transitionIter = transitions.find(transitionUuid);
12371226
OBSSource tr;
12381227

12391228
if (!fadeToBlack && (transitionIter == transitions.end()))

0 commit comments

Comments
 (0)