Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions data/locale/en-US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2546,6 +2546,7 @@ AdvSceneSwitcher.selectCurrentScene="Current Scene"
AdvSceneSwitcher.selectPreviewScene="Preview Scene"
AdvSceneSwitcher.selectAnyScene="Any Scene"
AdvSceneSwitcher.currentTransition="Current Transition"
AdvSceneSwitcher.noneTransition="None"
AdvSceneSwitcher.anyTransition="Any Transition"
AdvSceneSwitcher.selectTransition="--select transition--"
AdvSceneSwitcher.selectWindow="--select window--"
Expand Down
7 changes: 6 additions & 1 deletion lib/utils/selection-helpers.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ QStringList GetSourceNames()
}

void PopulateTransitionSelection(QComboBox *sel, bool addCurrent, bool addAny,
bool addSelect)
bool addSelect, bool addNone)
{

obs_frontend_source_list *transitions = new obs_frontend_source_list();
Expand Down Expand Up @@ -168,6 +168,11 @@ void PopulateTransitionSelection(QComboBox *sel, bool addCurrent, bool addAny,
addSelect ? 1 : 0,
obs_module_text("AdvSceneSwitcher.anyTransition"));
}
if (addNone) {
sel->insertItem(
addSelect ? 1 : 0,
obs_module_text("AdvSceneSwitcher.noneTransition"));
}
}

void PopulateWindowSelection(QComboBox *sel, bool addSelect)
Expand Down
3 changes: 2 additions & 1 deletion lib/utils/selection-helpers.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ EXPORT QStringList GetSourceNames();

EXPORT void PopulateTransitionSelection(QComboBox *sel, bool addCurrent = true,
bool addAny = false,
bool addSelect = true);
bool addSelect = true,
bool addNone = false);
EXPORT void PopulateWindowSelection(QComboBox *sel, bool addSelect = true);
void PopulateAudioSelection(QComboBox *sel, bool addSelect = true);
void PopulateVideoSelection(QComboBox *sel, bool addMainOutput = false,
Expand Down
21 changes: 16 additions & 5 deletions plugins/base/macro-action-scene-visibility.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -160,12 +160,11 @@ static void attachRestoreContext(obs_sceneitem_t *item,

static void setSceneItemVisibility(obs_sceneitem_t *item,
const bool setTransition,
const OBSWeakSource &transitionWeak,
const TransitionSelection &transitionSel,
const bool setDuration,
const Duration &duration,
MacroActionSceneVisibility::Action action)
{
const OBSSourceAutoRelease transition = OBSGetStrongRef(transitionWeak);
const bool itemIsVisible = obs_sceneitem_visible(item);

const OBSSource currentTransition =
Expand All @@ -175,6 +174,16 @@ static void setSceneItemVisibility(obs_sceneitem_t *item,

OBSSource privateTransitionSource = nullptr;
if (setTransition) {
OBSSourceAutoRelease transition;
if (transitionSel.GetType() ==
TransitionSelection::Type::CURRENT) {
transition = obs_source_get_ref(
obs_sceneitem_get_transition(item,
!itemIsVisible));
} else {
transition =
OBSGetStrongRef(transitionSel.GetTransition());
}
privateTransitionSource = SetSceneItemTransition(
item, transition, !itemIsVisible);
} else {
Expand Down Expand Up @@ -229,8 +238,7 @@ bool MacroActionSceneVisibility::PerformAction()
{
auto items = _source.GetSceneItems(_scene);
for (const auto &item : items) {
setSceneItemVisibility(item, _updateTransition,
_transition.GetTransition(),
setSceneItemVisibility(item, _updateTransition, _transition,
_updateDuration, _duration, _action);
}
return true;
Expand Down Expand Up @@ -340,7 +348,7 @@ MacroActionSceneVisibilityEdit::MacroActionSceneVisibilityEdit(
},
SceneItemSelectionWidget::NameClashMode::ALL)),
_updateTransition(new QCheckBox(this)),
_transitions(new TransitionSelectionWidget(this, false, false)),
_transitions(new TransitionSelectionWidget(this, true, false, true)),
_updateDuration(new QCheckBox(this)),
_duration(new DurationSelection(this, false)),
_durationLayout(new QHBoxLayout),
Expand Down Expand Up @@ -474,8 +482,11 @@ void MacroActionSceneVisibilityEdit::ActionChanged(int value)

void MacroActionSceneVisibilityEdit::SetWidgetVisibility()
{
const auto transitionType = _entryData->_transition.GetType();
const bool hideDurationSelection =
_entryData->_updateTransition &&
transitionType != TransitionSelection::Type::CURRENT &&
transitionType != TransitionSelection::Type::NONE &&
IsFixedLengthTransition(
_entryData->_transition.GetTransition());

Expand Down
8 changes: 5 additions & 3 deletions plugins/base/macro-action-transition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -406,15 +406,17 @@ void MacroActionTransitionEdit::SetWidgetVisibility()
MacroActionTransition::Type::TBAR;
const bool isReleaseTbar = _entryData->_type ==
MacroActionTransition::Type::RELEASE_TBAR;
_sources->setVisible(
_entryData->_type == MacroActionTransition::Type::SOURCE_HIDE ||
_entryData->_type == MacroActionTransition::Type::SOURCE_SHOW);
const bool isSourceTransition =
_entryData->_type == MacroActionTransition::Type::SOURCE_SHOW ||
_entryData->_type == MacroActionTransition::Type::SOURCE_HIDE;
_sources->setVisible(isSourceTransition);
_scenes->setVisible(_entryData->_type !=
MacroActionTransition::Type::SCENE &&
!isTbar && !isReleaseTbar);
SetLayoutVisible(_transitionLayout, !isTbar && !isReleaseTbar);
SetLayoutVisible(_durationLayout, !isTbar && !isReleaseTbar);
SetLayoutVisible(_tbarLayout, isTbar);
_transitions->EnableNoneEntry(isSourceTransition);
adjustSize();
}

Expand Down
47 changes: 41 additions & 6 deletions plugins/base/utils/transition-selection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ OBSWeakSource TransitionSelection::GetTransition() const
obs_source_release(source);
return weakSource;
}
case Type::NONE:
return nullptr;
default:
break;
}
Expand All @@ -63,21 +65,25 @@ std::string TransitionSelection::ToString() const
return obs_module_text("AdvSceneSwitcher.currentTransition");
case Type::ANY:
return obs_module_text("AdvSceneSwitcher.anyTransition");
case Type::NONE:
return obs_module_text("AdvSceneSwitcher.noneTransition");
default:
break;
}
return "";
}

TransitionSelectionWidget::TransitionSelectionWidget(QWidget *parent,
bool current, bool any)
bool current, bool any,
bool none)
: FilterComboBox(parent,
obs_module_text("AdvSceneSwitcher.selectTransition")),
_addCurrent(current),
_addAny(any)
_addAny(any),
_addNone(none)
{
setDuplicatesEnabled(true);
PopulateTransitionSelection(this, current, any, false);
PopulateTransitionSelection(this, current, any, false, none);

QWidget::connect(this, SIGNAL(currentTextChanged(const QString &)),
this, SLOT(SelectionChanged(const QString &)));
Expand All @@ -86,8 +92,9 @@ TransitionSelectionWidget::TransitionSelectionWidget(QWidget *parent,
void TransitionSelectionWidget::SetTransition(const TransitionSelection &t)
{
// Order of entries
// 1. Any transition
// 2. Current transition
// 1. None transition
// 2. Any transition
// 3. Current transition
// 4. Transitions

switch (t.GetType()) {
Expand All @@ -102,6 +109,10 @@ void TransitionSelectionWidget::SetTransition(const TransitionSelection &t)
setCurrentIndex(findText(QString::fromStdString(
obs_module_text("AdvSceneSwitcher.anyTransition"))));
break;
case TransitionSelection::Type::NONE:
setCurrentIndex(findText(QString::fromStdString(
obs_module_text("AdvSceneSwitcher.noneTransition"))));
break;
default:
setCurrentIndex(-1);
break;
Expand All @@ -120,6 +131,17 @@ void TransitionSelectionWidget::EnableAnyEntry(bool enable)
Populate();
}

void TransitionSelectionWidget::EnableNoneEntry(bool enable)
{
if (_addNone == enable) {
return;
}
const auto selection = GetCurrentSelection();
_addNone = enable;
Populate();
SetTransition(selection);
}

void TransitionSelectionWidget::showEvent(QShowEvent *event)
{
FilterComboBox::showEvent(event);
Expand All @@ -133,7 +155,7 @@ void TransitionSelectionWidget::Populate()
{
const QSignalBlocker blocker(this);
clear();
PopulateTransitionSelection(this, _addCurrent, _addAny);
PopulateTransitionSelection(this, _addCurrent, _addAny, true, _addNone);
}

static bool isFirstEntry(const QComboBox *l, QString name, int idx)
Expand Down Expand Up @@ -163,6 +185,9 @@ TransitionSelection TransitionSelectionWidget::GetCurrentSelection() const
if (IsAnyTransitionSelected(text)) {
result._type = TransitionSelection::Type::ANY;
}
if (IsNoneTransitionSelected(text)) {
result._type = TransitionSelection::Type::NONE;
}
}
return result;
}
Expand All @@ -187,6 +212,16 @@ bool TransitionSelectionWidget::IsAnyTransitionSelected(
return false;
}

bool TransitionSelectionWidget::IsNoneTransitionSelected(
const QString &name) const
{
if (name == QString::fromStdString((obs_module_text(
"AdvSceneSwitcher.noneTransition")))) {
return isFirstEntry(this, name, currentIndex());
}
return false;
}

void TransitionSelectionWidget::SelectionChanged(const QString &)
{
emit TransitionChanged(GetCurrentSelection());
Expand Down
6 changes: 5 additions & 1 deletion plugins/base/utils/transition-selection.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class TransitionSelection {
TRANSITION,
CURRENT,
ANY,
NONE,
};

Type GetType() const { return _type; }
Expand All @@ -33,10 +34,11 @@ class TransitionSelectionWidget : public FilterComboBox {

public:
TransitionSelectionWidget(QWidget *parent, bool current = true,
bool any = false);
bool any = false, bool none = false);
void SetTransition(const TransitionSelection &);
void EnableCurrentEntry(bool enable);
void EnableAnyEntry(bool enable);
void EnableNoneEntry(bool enable);

protected:
void showEvent(QShowEvent *event) override;
Expand All @@ -52,9 +54,11 @@ private slots:
TransitionSelection GetCurrentSelection() const;
bool IsCurrentTransitionSelected(const QString &name) const;
bool IsAnyTransitionSelected(const QString &name) const;
bool IsNoneTransitionSelected(const QString &name) const;

bool _addCurrent;
bool _addAny;
bool _addNone;
};

} // namespace advss
Loading