mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-03-21 17:34:57 -05:00
Add support for changing T-bar value
This commit is contained in:
parent
8e2c466c2d
commit
a59a5fc3f7
|
|
@ -1091,9 +1091,11 @@ AdvSceneSwitcher.action.transition.type.scene="scene transition"
|
|||
AdvSceneSwitcher.action.transition.type.sceneOverride="scene transition override"
|
||||
AdvSceneSwitcher.action.transition.type.sourceShow="source show transition"
|
||||
AdvSceneSwitcher.action.transition.type.sourceHide="source hide transition"
|
||||
AdvSceneSwitcher.action.transition.type.tbar="T-Bar position"
|
||||
AdvSceneSwitcher.action.transition.entry.line1="Modify{{type}}{{scenes}}{{sources}}"
|
||||
AdvSceneSwitcher.action.transition.entry.line2="{{setTransition}}Set transition type to{{transitions}}"
|
||||
AdvSceneSwitcher.action.transition.entry.line3="{{setDuration}}Set transition duration to{{duration}}seconds"
|
||||
AdvSceneSwitcher.action.transition.entry.line4="Set T-Bar position to{{tbarPosition}}"
|
||||
AdvSceneSwitcher.action.timer="Timer"
|
||||
AdvSceneSwitcher.action.timer.type.pause="Pause"
|
||||
AdvSceneSwitcher.action.timer.type.continue="Continue"
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#include "transition-helpers.hpp"
|
||||
|
||||
#include <obs-frontend-api.h>
|
||||
#include <algorithm>
|
||||
|
||||
namespace advss {
|
||||
|
||||
|
|
@ -22,6 +23,8 @@ const static std::map<MacroActionTransition::Type, std::string> actionTypes = {
|
|||
"AdvSceneSwitcher.action.transition.type.sourceShow"},
|
||||
{MacroActionTransition::Type::SOURCE_HIDE,
|
||||
"AdvSceneSwitcher.action.transition.type.sourceHide"},
|
||||
{MacroActionTransition::Type::TBAR,
|
||||
"AdvSceneSwitcher.action.transition.type.tbar"},
|
||||
};
|
||||
|
||||
void MacroActionTransition::SetSceneTransition()
|
||||
|
|
@ -76,6 +79,17 @@ static void obs_sceneitem_set_transition_duration(obs_sceneitem_t *item,
|
|||
}
|
||||
#endif
|
||||
|
||||
void MacroActionTransition::SetTbarPosition()
|
||||
{
|
||||
const double percent = std::clamp(_tbarPosition.GetValue(), 0.0, 100.0);
|
||||
const int tbarValue = (int)std::round(percent / 100.0 * 1023.0);
|
||||
obs_frontend_set_tbar_position(tbarValue);
|
||||
|
||||
if (tbarValue == 0 || tbarValue == 1024) {
|
||||
obs_frontend_release_tbar();
|
||||
}
|
||||
}
|
||||
|
||||
void MacroActionTransition::SetSourceTransition(bool show)
|
||||
{
|
||||
#if LIBOBS_API_VER >= MAKE_SEMANTIC_VERSION(27, 0, 0)
|
||||
|
|
@ -110,6 +124,9 @@ bool MacroActionTransition::PerformAction()
|
|||
case Type::SOURCE_HIDE:
|
||||
SetSourceTransition(false);
|
||||
break;
|
||||
case Type::TBAR:
|
||||
SetTbarPosition();
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
@ -135,6 +152,10 @@ void MacroActionTransition::LogAction() const
|
|||
_source.ToString(true) + " on scene " +
|
||||
_scene.ToString(true);
|
||||
break;
|
||||
case Type::TBAR:
|
||||
ablog(LOG_INFO, "set T-Bar position to %.2f%%",
|
||||
_tbarPosition.GetValue());
|
||||
return;
|
||||
}
|
||||
if (_setDuration) {
|
||||
ablog(LOG_INFO, "%s duration to %s", msgBegin.c_str(),
|
||||
|
|
@ -156,6 +177,7 @@ bool MacroActionTransition::Save(obs_data_t *obj) const
|
|||
_transition.Save(obj);
|
||||
obs_data_set_bool(obj, "setDuration", _setDuration);
|
||||
obs_data_set_bool(obj, "setType", _setTransitionType);
|
||||
_tbarPosition.Save(obj, "tbarPosition");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -169,6 +191,7 @@ bool MacroActionTransition::Load(obs_data_t *obj)
|
|||
_transition.Load(obj);
|
||||
_setDuration = obs_data_get_bool(obj, "setDuration");
|
||||
_setTransitionType = obs_data_get_bool(obj, "setType");
|
||||
_tbarPosition.Load(obj, "tbarPosition");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -186,6 +209,8 @@ std::string MacroActionTransition::GetShortDesc() const
|
|||
case Type::SOURCE_HIDE:
|
||||
return _scene.ToString() + " - " + _source.ToString() + " - " +
|
||||
_transition.ToString();
|
||||
case Type::TBAR:
|
||||
return std::to_string(_tbarPosition.GetValue()) + "%";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
|
@ -205,6 +230,7 @@ void MacroActionTransition::ResolveVariablesToFixedValues()
|
|||
_source.ResolveVariables();
|
||||
_scene.ResolveVariables();
|
||||
_duration.ResolveVariables();
|
||||
_tbarPosition.ResolveVariables();
|
||||
}
|
||||
|
||||
static inline void populateActionSelection(QComboBox *list)
|
||||
|
|
@ -236,9 +262,16 @@ MacroActionTransitionEdit::MacroActionTransitionEdit(
|
|||
_setDuration(new QCheckBox),
|
||||
_transitions(new TransitionSelectionWidget(this, false)),
|
||||
_duration(new DurationSelection(this, false)),
|
||||
_tbarPosition(new VariableDoubleSpinBox),
|
||||
_transitionLayout(new QHBoxLayout),
|
||||
_durationLayout(new QHBoxLayout)
|
||||
_durationLayout(new QHBoxLayout),
|
||||
_tbarLayout(new QHBoxLayout)
|
||||
{
|
||||
_tbarPosition->setMinimum(0.0);
|
||||
_tbarPosition->setMaximum(100.0);
|
||||
_tbarPosition->setDecimals(2);
|
||||
_tbarPosition->setSuffix("%");
|
||||
|
||||
populateActionSelection(_actions);
|
||||
|
||||
QWidget::connect(_actions, SIGNAL(currentIndexChanged(int)), this,
|
||||
|
|
@ -260,6 +293,11 @@ MacroActionTransitionEdit::MacroActionTransitionEdit(
|
|||
SLOT(SetTransitionChanged(int)));
|
||||
QWidget::connect(_setDuration, SIGNAL(stateChanged(int)), this,
|
||||
SLOT(SetDurationChanged(int)));
|
||||
QWidget::connect(
|
||||
_tbarPosition,
|
||||
SIGNAL(NumberVariableChanged(const NumberVariable<double> &)),
|
||||
this,
|
||||
SLOT(TbarPositionChanged(const NumberVariable<double> &)));
|
||||
|
||||
const std::unordered_map<std::string, QWidget *> widgetPlaceholders = {
|
||||
{"{{type}}", _actions},
|
||||
|
|
@ -269,6 +307,7 @@ MacroActionTransitionEdit::MacroActionTransitionEdit(
|
|||
{"{{duration}}", _duration},
|
||||
{"{{setTransition}}", _setTransition},
|
||||
{"{{setDuration}}", _setDuration},
|
||||
{"{{tbarPosition}}", _tbarPosition},
|
||||
};
|
||||
|
||||
auto typeLayout = new QHBoxLayout;
|
||||
|
|
@ -281,10 +320,14 @@ MacroActionTransitionEdit::MacroActionTransitionEdit(
|
|||
PlaceWidgets(obs_module_text(
|
||||
"AdvSceneSwitcher.action.transition.entry.line3"),
|
||||
_durationLayout, widgetPlaceholders);
|
||||
PlaceWidgets(obs_module_text(
|
||||
"AdvSceneSwitcher.action.transition.entry.line4"),
|
||||
_tbarLayout, widgetPlaceholders);
|
||||
auto mainLayout = new QVBoxLayout;
|
||||
mainLayout->addLayout(typeLayout);
|
||||
mainLayout->addLayout(_transitionLayout);
|
||||
mainLayout->addLayout(_durationLayout);
|
||||
mainLayout->addLayout(_tbarLayout);
|
||||
setLayout(mainLayout);
|
||||
|
||||
_entryData = entryData;
|
||||
|
|
@ -307,6 +350,7 @@ void MacroActionTransitionEdit::UpdateEntryData()
|
|||
_transitions->SetTransition(_entryData->_transition);
|
||||
_transitions->setEnabled(_entryData->_setTransitionType);
|
||||
_duration->setEnabled(_entryData->_setDuration);
|
||||
_tbarPosition->SetValue(_entryData->_tbarPosition);
|
||||
SetWidgetVisibility();
|
||||
}
|
||||
|
||||
|
|
@ -353,11 +397,17 @@ void MacroActionTransitionEdit::DurationChanged(const Duration &dur)
|
|||
|
||||
void MacroActionTransitionEdit::SetWidgetVisibility()
|
||||
{
|
||||
const bool isTbar = _entryData->_type ==
|
||||
MacroActionTransition::Type::TBAR;
|
||||
_sources->setVisible(
|
||||
_entryData->_type == MacroActionTransition::Type::SOURCE_HIDE ||
|
||||
_entryData->_type == MacroActionTransition::Type::SOURCE_SHOW);
|
||||
_scenes->setVisible(_entryData->_type !=
|
||||
MacroActionTransition::Type::SCENE);
|
||||
MacroActionTransition::Type::SCENE &&
|
||||
!isTbar);
|
||||
SetLayoutVisible(_transitionLayout, !isTbar);
|
||||
SetLayoutVisible(_durationLayout, !isTbar);
|
||||
SetLayoutVisible(_tbarLayout, isTbar);
|
||||
adjustSize();
|
||||
}
|
||||
|
||||
|
|
@ -381,4 +431,13 @@ void MacroActionTransitionEdit::SetDurationChanged(int state)
|
|||
_duration->setEnabled(state);
|
||||
}
|
||||
|
||||
void MacroActionTransitionEdit::TbarPositionChanged(
|
||||
const NumberVariable<double> &value)
|
||||
{
|
||||
GUARD_LOADING_AND_LOCK();
|
||||
_entryData->_tbarPosition = value;
|
||||
emit HeaderInfoChanged(
|
||||
QString::fromStdString(_entryData->GetShortDesc()));
|
||||
}
|
||||
|
||||
} // namespace advss
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
#include "transition-selection.hpp"
|
||||
#include "scene-selection.hpp"
|
||||
#include "scene-item-selection.hpp"
|
||||
#include "variable-number.hpp"
|
||||
#include "variable-spinbox.hpp"
|
||||
|
||||
#include <QCheckBox>
|
||||
#include <QHBoxLayout>
|
||||
|
|
@ -28,6 +30,7 @@ public:
|
|||
SCENE_OVERRIDE,
|
||||
SOURCE_SHOW,
|
||||
SOURCE_HIDE,
|
||||
TBAR,
|
||||
};
|
||||
|
||||
Type _type = Type::SCENE;
|
||||
|
|
@ -37,11 +40,13 @@ public:
|
|||
bool _setTransitionType = true;
|
||||
TransitionSelection _transition;
|
||||
Duration _duration;
|
||||
DoubleVariable _tbarPosition = 0.0;
|
||||
|
||||
private:
|
||||
void SetSceneTransition();
|
||||
void SetTransitionOverride();
|
||||
void SetSourceTransition(bool);
|
||||
void SetTbarPosition();
|
||||
|
||||
static bool _registered;
|
||||
static const std::string id;
|
||||
|
|
@ -72,6 +77,7 @@ private slots:
|
|||
void SetDurationChanged(int state);
|
||||
void TransitionChanged(const TransitionSelection &);
|
||||
void DurationChanged(const Duration &seconds);
|
||||
void TbarPositionChanged(const NumberVariable<double> &);
|
||||
signals:
|
||||
void HeaderInfoChanged(const QString &);
|
||||
|
||||
|
|
@ -83,8 +89,10 @@ protected:
|
|||
QCheckBox *_setDuration;
|
||||
TransitionSelectionWidget *_transitions;
|
||||
DurationSelection *_duration;
|
||||
VariableDoubleSpinBox *_tbarPosition;
|
||||
QHBoxLayout *_transitionLayout;
|
||||
QHBoxLayout *_durationLayout;
|
||||
QHBoxLayout *_tbarLayout;
|
||||
std::shared_ptr<MacroActionTransition> _entryData;
|
||||
|
||||
private:
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user