فهرست منبع

frontend: Replace transition duration spinbox direct access

tytan652 8 ماه پیش
والد
کامیت
ffcc3acd9d

+ 2 - 2
frontend/OBSStudioAPI.cpp

@@ -95,12 +95,12 @@ void OBSStudioAPI::obs_frontend_set_current_transition(obs_source_t *transition)
 
 
 int OBSStudioAPI::obs_frontend_get_transition_duration()
 int OBSStudioAPI::obs_frontend_get_transition_duration()
 {
 {
-	return main->ui->transitionDuration->value();
+	return main->GetTransitionDuration();
 }
 }
 
 
 void OBSStudioAPI::obs_frontend_set_transition_duration(int duration)
 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()
 void OBSStudioAPI::obs_frontend_release_tbar()

+ 8 - 0
frontend/widgets/OBSBasic.cpp

@@ -313,6 +313,14 @@ OBSBasic::OBSBasic(QWidget *parent) : OBSMainWindow(parent), undo_s(ui), ui(new
 	connect(ui->transitions, &QComboBox::currentIndexChanged, this,
 	connect(ui->transitions, &QComboBox::currentIndexChanged, this,
 		[this]() { SetCurrentTransition(ui->transitions->currentData().toString()); });
 		[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();
 	startingDockLayout = saveState();
 
 
 	statsDock = new OBSDock();
 	statsDock = new OBSDock();

+ 5 - 1
frontend/widgets/OBSBasic.hpp

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

+ 4 - 5
frontend/widgets/OBSBasic_SceneCollections.cpp

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

+ 17 - 7
frontend/widgets/OBSBasic_Transitions.cpp

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