frontend: Replace transition duration spinbox direct access

This commit is contained in:
tytan652
2025-02-18 17:25:00 +01:00
committed by Ryan Foster
parent d22ddfd395
commit ffcc3acd9d
5 changed files with 36 additions and 15 deletions

View File

@@ -95,12 +95,12 @@ void OBSStudioAPI::obs_frontend_set_current_transition(obs_source_t *transition)
int OBSStudioAPI::obs_frontend_get_transition_duration()
{
return main->ui->transitionDuration->value();
return main->GetTransitionDuration();
}
void OBSStudioAPI::obs_frontend_set_transition_duration(int duration)
{
QMetaObject::invokeMethod(main->ui->transitionDuration, "setValue", Q_ARG(int, duration));
QMetaObject::invokeMethod(main, "SetTransitionDuration", Q_ARG(int, duration));
}
void OBSStudioAPI::obs_frontend_release_tbar()

View File

@@ -313,6 +313,14 @@ OBSBasic::OBSBasic(QWidget *parent) : OBSMainWindow(parent), undo_s(ui), ui(new
connect(ui->transitions, &QComboBox::currentIndexChanged, this,
[this]() { SetCurrentTransition(ui->transitions->currentData().toString()); });
connect(this, &OBSBasic::TransitionDurationChanged, this, [this](int duration) {
QSignalBlocker sb(ui->transitionDuration);
ui->transitionDuration->setValue(duration);
});
connect(ui->transitionDuration, &QSpinBox::valueChanged, this,
[this](int value) { SetTransitionDuration(value); });
startingDockLayout = saveState();
statsDock = new OBSDock();

View File

@@ -1482,6 +1482,7 @@ private:
std::vector<std::string> transitionUuids;
// FIXME: Replace usages of a name to identify a transition
std::unordered_map<std::string, std::string> transitionNameToUuids;
int transitionDuration;
std::string currentTransitionUuid;
obs_source_t *fadeTransition;
obs_source_t *cutTransition;
@@ -1549,6 +1550,8 @@ public slots:
void SetCurrentTransition(const QString &uuid);
void SetTransitionDuration(int duration);
private slots:
void AddTransition(const char *id);
void RenameTransition(OBSSource transition);
@@ -1564,7 +1567,6 @@ private slots:
void on_transitionAdd_clicked();
void on_transitionRemove_clicked();
void on_transitionProps_clicked();
void on_transitionDuration_valueChanged();
void ShowTransitionProperties();
void HideTransitionProperties();
@@ -1577,6 +1579,8 @@ signals:
void CurrentTransitionChanged(const QString &uuid);
void TransitionDurationChanged(const int &duration);
public:
int GetTransitionDuration();
int GetTbarPosition();

View File

@@ -886,9 +886,8 @@ void OBSBasic::Save(SceneCollection &collection)
OBSDataArrayAutoRelease quickTrData = SaveQuickTransitions();
OBSDataArrayAutoRelease savedProjectorList = SaveProjectors();
OBSDataArrayAutoRelease savedCanvases = OBS::Canvas::SaveCanvases(canvases);
OBSDataAutoRelease saveData = GenerateSaveData(sceneOrder, quickTrData, ui->transitionDuration->value(),
transitionsData, scene, curProgramScene, savedProjectorList,
savedCanvases);
OBSDataAutoRelease saveData = GenerateSaveData(sceneOrder, quickTrData, transitionDuration, transitionsData,
scene, curProgramScene, savedProjectorList, savedCanvases);
obs_data_set_bool(saveData, "preview_locked", ui->preview->Locked());
obs_data_set_bool(saveData, "scaling_enabled", ui->preview->IsFixedScaling());
@@ -1004,7 +1003,7 @@ void OBSBasic::CreateDefaultScene(bool firstStart)
ClearSceneData();
InitDefaultTransitions();
CreateDefaultQuickTransitions();
ui->transitionDuration->setValue(300);
transitionDuration = 300;
SetTransition(fadeTransition);
updateRemigrationMenuItem(SceneCoordinateMode::Relative, ui->actionRemigrateSceneCollection);
@@ -1304,7 +1303,7 @@ void OBSBasic::LoadData(obs_data_t *data, SceneCollection &collection)
if (!curTransition)
curTransition = fadeTransition;
ui->transitionDuration->setValue(newDuration);
transitionDuration = newDuration;
SetTransition(curTransition);
retryScene:

View File

@@ -333,7 +333,7 @@ void OBSBasic::TransitionToScene(OBSSource source, bool force, bool quickTransit
obs_transition_set(transition, source);
OnEvent(OBS_FRONTEND_EVENT_SCENE_CHANGED);
} else {
int duration = ui->transitionDuration->value();
int duration = GetTransitionDuration();
/* check for scene override */
OBSSource trOverride = GetOverrideTransition(source);
@@ -603,11 +603,6 @@ void OBSBasic::on_transitionProps_clicked()
menu.exec(QCursor::pos());
}
void OBSBasic::on_transitionDuration_valueChanged()
{
OnEvent(OBS_FRONTEND_EVENT_TRANSITION_DURATION_CHANGED);
}
QuickTransition *OBSBasic::GetQuickTransition(int id)
{
for (QuickTransition &qt : quickTransitions) {
@@ -1420,7 +1415,7 @@ int OBSBasic::GetOverrideTransitionDuration(OBSSource source)
int OBSBasic::GetTransitionDuration()
{
return ui->transitionDuration->value();
return transitionDuration;
}
void OBSBasic::UpdateCurrentTransition(const std::string &uuid, bool setTransition)
@@ -1450,3 +1445,18 @@ void OBSBasic::SetCurrentTransition(const QString &uuid)
emit CurrentTransitionChanged(uuid);
}
void OBSBasic::SetTransitionDuration(int duration)
{
duration = std::max(duration, 50);
duration = std::min(duration, 20000);
if (duration == transitionDuration)
return;
transitionDuration = duration;
emit TransitionDurationChanged(transitionDuration);
OnEvent(OBS_FRONTEND_EVENT_TRANSITION_DURATION_CHANGED);
}