Skip to content

Commit 75b8d8a

Browse files
committed
frontend: Replace transition duration spinbox direct access
1 parent 206dca9 commit 75b8d8a

5 files changed

Lines changed: 36 additions & 14 deletions

File tree

frontend/OBSStudioAPI.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,12 @@ void OBSStudioAPI::obs_frontend_set_current_transition(obs_source_t *transition)
9494

9595
int OBSStudioAPI::obs_frontend_get_transition_duration()
9696
{
97-
return main->ui->transitionDuration->value();
97+
return main->GetTransitionDuration();
9898
}
9999

100100
void OBSStudioAPI::obs_frontend_set_transition_duration(int duration)
101101
{
102-
QMetaObject::invokeMethod(main->ui->transitionDuration, "setValue", Q_ARG(int, duration));
102+
QMetaObject::invokeMethod(main, "SetTransitionDuration", Q_ARG(int, duration));
103103
}
104104

105105
void OBSStudioAPI::obs_frontend_release_tbar()

frontend/widgets/OBSBasic.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,14 @@ OBSBasic::OBSBasic(QWidget *parent) : OBSMainWindow(parent), undo_s(ui), ui(new
311311
connect(ui->transitions, &QComboBox::currentIndexChanged, this,
312312
[this]() { SetCurrentTransition(ui->transitions->currentData().toString()); });
313313

314+
connect(this, &OBSBasic::TransitionDurationChanged, this, [this](int duration) {
315+
QSignalBlocker sb(ui->transitionDuration);
316+
ui->transitionDuration->setValue(duration);
317+
});
318+
319+
connect(ui->transitionDuration, &QSpinBox::valueChanged, this,
320+
[this](int value) { SetTransitionDuration(value); });
321+
314322
startingDockLayout = saveState();
315323

316324
statsDock = new OBSDock();

frontend/widgets/OBSBasic.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1462,6 +1462,7 @@ private slots:
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;
1465+
int transitionDuration;
14651466
std::string currentTransitionUuid;
14661467
obs_source_t *fadeTransition;
14671468
obs_source_t *cutTransition;
@@ -1529,6 +1530,8 @@ public slots:
15291530

15301531
void SetCurrentTransition(const QString &uuid);
15311532

1533+
void SetTransitionDuration(int duration);
1534+
15321535
private slots:
15331536
void AddTransition(const char *id);
15341537
void RenameTransition(OBSSource transition);
@@ -1544,7 +1547,6 @@ private slots:
15441547
void on_transitionAdd_clicked();
15451548
void on_transitionRemove_clicked();
15461549
void on_transitionProps_clicked();
1547-
void on_transitionDuration_valueChanged();
15481550

15491551
void ShowTransitionProperties();
15501552
void HideTransitionProperties();
@@ -1557,6 +1559,8 @@ private slots:
15571559

15581560
void CurrentTranstionChanged(const QString &uuid);
15591561

1562+
void TransitionDurationChanged(const int &duration);
1563+
15601564
public:
15611565
int GetTransitionDuration();
15621566
int GetTbarPosition();

frontend/widgets/OBSBasic_SceneCollections.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -825,8 +825,8 @@ void OBSBasic::Save(const char *file)
825825
OBSDataArrayAutoRelease transitionsData = SaveTransitions();
826826
OBSDataArrayAutoRelease quickTrData = SaveQuickTransitions();
827827
OBSDataArrayAutoRelease savedProjectorList = SaveProjectors();
828-
OBSDataAutoRelease saveData = GenerateSaveData(sceneOrder, quickTrData, ui->transitionDuration->value(),
829-
transitionsData, scene, curProgramScene, savedProjectorList);
828+
OBSDataAutoRelease saveData = GenerateSaveData(sceneOrder, quickTrData, transitionDuration, transitionsData,
829+
scene, curProgramScene, savedProjectorList);
830830

831831
obs_data_set_bool(saveData, "preview_locked", ui->preview->Locked());
832832
obs_data_set_bool(saveData, "scaling_enabled", ui->preview->IsFixedScaling());
@@ -941,7 +941,7 @@ void OBSBasic::CreateDefaultScene(bool firstStart)
941941
ClearSceneData();
942942
InitDefaultTransitions();
943943
CreateDefaultQuickTransitions();
944-
ui->transitionDuration->setValue(300);
944+
transitionDuration = 300;
945945
SetTransition(fadeTransition);
946946

947947
DisableRelativeCoordinates(false);
@@ -1239,7 +1239,7 @@ void OBSBasic::LoadData(obs_data_t *data, const char *file, bool remigrate)
12391239
if (!curTransition)
12401240
curTransition = fadeTransition;
12411241

1242-
ui->transitionDuration->setValue(newDuration);
1242+
transitionDuration = newDuration;
12431243
SetTransition(curTransition);
12441244

12451245
retryScene:

frontend/widgets/OBSBasic_Transitions.cpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ void OBSBasic::TransitionToScene(OBSSource source, bool force, bool quickTransit
334334
obs_transition_set(transition, source);
335335
OnEvent(OBS_FRONTEND_EVENT_SCENE_CHANGED);
336336
} else {
337-
int duration = ui->transitionDuration->value();
337+
int duration = GetTransitionDuration();
338338

339339
/* check for scene override */
340340
OBSSource trOverride = GetOverrideTransition(source);
@@ -601,11 +601,6 @@ void OBSBasic::on_transitionProps_clicked()
601601
menu.exec(QCursor::pos());
602602
}
603603

604-
void OBSBasic::on_transitionDuration_valueChanged()
605-
{
606-
OnEvent(OBS_FRONTEND_EVENT_TRANSITION_DURATION_CHANGED);
607-
}
608-
609604
QuickTransition *OBSBasic::GetQuickTransition(int id)
610605
{
611606
for (QuickTransition &qt : quickTransitions) {
@@ -1417,7 +1412,7 @@ int OBSBasic::GetOverrideTransitionDuration(OBSSource source)
14171412

14181413
int OBSBasic::GetTransitionDuration()
14191414
{
1420-
return ui->transitionDuration->value();
1415+
return transitionDuration;
14211416
}
14221417

14231418
void OBSBasic::SetCurrentTransition(const std::string &uuid)
@@ -1437,3 +1432,18 @@ void OBSBasic::SetCurrentTransition(const QString &uuid)
14371432
currentTransitionUuid = uuid.toStdString();
14381433
emit CurrentTranstionChanged(uuid);
14391434
}
1435+
1436+
void OBSBasic::SetTransitionDuration(int duration)
1437+
{
1438+
duration = std::max(duration, 50);
1439+
duration = std::min(duration, 20000);
1440+
1441+
if (duration == transitionDuration)
1442+
return;
1443+
1444+
transitionDuration = duration;
1445+
1446+
emit TransitionDurationChanged(transitionDuration);
1447+
1448+
OnEvent(OBS_FRONTEND_EVENT_TRANSITION_DURATION_CHANGED);
1449+
}

0 commit comments

Comments
 (0)