|
@@ -260,6 +260,7 @@ AudioMixer::AudioMixer(QWidget *parent) : QFrame(parent)
|
|
|
|
|
|
|
|
updateShowToolbar();
|
|
updateShowToolbar();
|
|
|
updatePreviewSources();
|
|
updatePreviewSources();
|
|
|
|
|
+ updatePreviewHandlers();
|
|
|
updateGlobalSources();
|
|
updateGlobalSources();
|
|
|
|
|
|
|
|
reloadVolumeControls();
|
|
reloadVolumeControls();
|
|
@@ -413,6 +414,10 @@ void AudioMixer::updatePreviewSources()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
auto getPreviewSources = [this](obs_scene_t *, obs_sceneitem_t *item) {
|
|
auto getPreviewSources = [this](obs_scene_t *, obs_sceneitem_t *item) {
|
|
|
|
|
+ if (!obs_sceneitem_visible(item)) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
obs_source_t *source = obs_sceneitem_get_source(item);
|
|
obs_source_t *source = obs_sceneitem_get_source(item);
|
|
|
if (!source) {
|
|
if (!source) {
|
|
|
return true;
|
|
return true;
|
|
@@ -882,6 +887,7 @@ void AudioMixer::handleFrontendEvent(obs_frontend_event event)
|
|
|
case OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED:
|
|
case OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED:
|
|
|
case OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED:
|
|
case OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED:
|
|
|
updatePreviewSources();
|
|
updatePreviewSources();
|
|
|
|
|
+ updatePreviewHandlers();
|
|
|
queueLayoutUpdate();
|
|
queueLayoutUpdate();
|
|
|
break;
|
|
break;
|
|
|
case OBS_FRONTEND_EVENT_EXIT:
|
|
case OBS_FRONTEND_EVENT_EXIT:
|
|
@@ -892,6 +898,24 @@ void AudioMixer::handleFrontendEvent(obs_frontend_event event)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void AudioMixer::updatePreviewHandlers()
|
|
|
|
|
+{
|
|
|
|
|
+ previewSignals.clear();
|
|
|
|
|
+
|
|
|
|
|
+ bool isStudioMode = obs_frontend_preview_program_mode_active();
|
|
|
|
|
+ if (isStudioMode) {
|
|
|
|
|
+ OBSSourceAutoRelease previewSource = obs_frontend_get_current_preview_scene();
|
|
|
|
|
+ if (!previewSource) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ previewSignals.reserve(1);
|
|
|
|
|
+
|
|
|
|
|
+ previewSignals.emplace_back(obs_source_get_signal_handler(previewSource), "item_visible",
|
|
|
|
|
+ AudioMixer::obsSceneItemVisibleChange, this);
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
void AudioMixer::updateShowInactive()
|
|
void AudioMixer::updateShowInactive()
|
|
|
{
|
|
{
|
|
|
bool settingShowInactive = config_get_bool(App()->GetUserConfig(), "BasicWindow", "MixerShowInactive");
|
|
bool settingShowInactive = config_get_bool(App()->GetUserConfig(), "BasicWindow", "MixerShowInactive");
|
|
@@ -1029,3 +1053,27 @@ void AudioMixer::obsSourceRename(void *data, calldata_t *)
|
|
|
{
|
|
{
|
|
|
QMetaObject::invokeMethod(static_cast<AudioMixer *>(data), "queueLayoutUpdate", Qt::QueuedConnection);
|
|
QMetaObject::invokeMethod(static_cast<AudioMixer *>(data), "queueLayoutUpdate", Qt::QueuedConnection);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+void AudioMixer::obsSceneItemVisibleChange(void *data, calldata_t *params)
|
|
|
|
|
+{
|
|
|
|
|
+ obs_sceneitem_t *sceneItem = static_cast<obs_sceneitem_t *>(calldata_ptr(params, "item"));
|
|
|
|
|
+ if (!sceneItem) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ obs_source_t *source = obs_sceneitem_get_source(sceneItem);
|
|
|
|
|
+ if (!source) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ uint32_t flags = obs_source_get_output_flags(source);
|
|
|
|
|
+
|
|
|
|
|
+ if (flags & OBS_SOURCE_AUDIO) {
|
|
|
|
|
+ QMetaObject::invokeMethod(static_cast<AudioMixer *>(data), "updatePreviewSources",
|
|
|
|
|
+ Qt::QueuedConnection);
|
|
|
|
|
+
|
|
|
|
|
+ auto uuidPointer = obs_source_get_uuid(source);
|
|
|
|
|
+ QMetaObject::invokeMethod(static_cast<AudioMixer *>(data), "updateControlVisibility",
|
|
|
|
|
+ Qt::QueuedConnection, Q_ARG(QString, QString::fromUtf8(uuidPointer)));
|
|
|
|
|
+ }
|
|
|
|
|
+}
|