diff --git a/src/utils/scene-item-selection.cpp b/src/utils/scene-item-selection.cpp index 60cea9c4..01b215ef 100644 --- a/src/utils/scene-item-selection.cpp +++ b/src/utils/scene-item-selection.cpp @@ -162,29 +162,6 @@ static bool getSceneItemAtIdx(obs_scene_t *, obs_sceneitem_t *item, void *ptr) return true; } -static bool getTotalSceneItemCountHelper(obs_scene_t *, obs_sceneitem_t *item, - void *ptr) -{ - auto count = reinterpret_cast(ptr); - - if (obs_sceneitem_is_group(item)) { - obs_scene_t *scene = obs_sceneitem_group_get_scene(item); - obs_scene_enum_items(scene, getTotalSceneItemCountHelper, ptr); - } - *count = *count + 1; - return true; -} - -static int getTotalSceneItemCountOnScene(const OBSWeakSource &sceneWeakSource) -{ - auto s = obs_weak_source_get_source(sceneWeakSource); - auto scene = obs_scene_from_source(s); - int count = 0; - obs_scene_enum_items(scene, getTotalSceneItemCountHelper, &count); - obs_source_release(s); - return count; -} - struct GroupData { std::string type; std::vector items = {}; @@ -408,7 +385,7 @@ std::vector SceneItemSelection::GetSceneItemsByIdx( } auto sceneWeakSource = sceneSelection.GetScene(false); - int count = getTotalSceneItemCountOnScene(sceneWeakSource); + int count = GetSceneItemCount(sceneWeakSource); if (count == 0) { return {}; } @@ -750,8 +727,7 @@ void SceneItemSelectionWidget::SetNameConflictVisibility() case SceneItemSelection::Type::SOURCE_NAME_PATTERN: case SceneItemSelection::Type::SOURCE_GROUP: - sceneItemCount = - getTotalSceneItemCountOnScene(_scene.GetScene(false)); + sceneItemCount = GetSceneItemCount(_scene.GetScene(false)); break; case SceneItemSelection::Type::INDEX: case SceneItemSelection::Type::INDEX_RANGE: @@ -761,8 +737,7 @@ void SceneItemSelectionWidget::SetNameConflictVisibility() if (_currentSelection._type == SceneItemSelection::Type::SOURCE_NAME_PATTERN) { - int sceneItemCount = - getTotalSceneItemCountOnScene(_scene.GetScene(false)); + int sceneItemCount = GetSceneItemCount(_scene.GetScene(false)); if (sceneItemCount == 0) { _nameConflictIndex->hide(); return; diff --git a/src/utils/utility.cpp b/src/utils/utility.cpp index fbecc8fe..934e583e 100644 --- a/src/utils/utility.cpp +++ b/src/utils/utility.cpp @@ -502,6 +502,29 @@ bool SaveTransformState(obs_data_t *obj, const struct obs_transform_info &info, return true; } +static bool getTotalSceneItemCountHelper(obs_scene_t *, obs_sceneitem_t *item, + void *ptr) +{ + auto count = reinterpret_cast(ptr); + + if (obs_sceneitem_is_group(item)) { + obs_scene_t *scene = obs_sceneitem_group_get_scene(item); + obs_scene_enum_items(scene, getTotalSceneItemCountHelper, ptr); + } + *count = *count + 1; + return true; +} + +int GetSceneItemCount(const OBSWeakSource &sceneWeakSource) +{ + auto s = obs_weak_source_get_source(sceneWeakSource); + auto scene = obs_scene_from_source(s); + int count = 0; + obs_scene_enum_items(scene, getTotalSceneItemCountHelper, &count); + obs_source_release(s); + return count; +} + bool DisplayMessage(const QString &msg, bool question, bool modal) { if (!modal) { diff --git a/src/utils/utility.hpp b/src/utils/utility.hpp index 682edb2f..1ac319a3 100644 --- a/src/utils/utility.hpp +++ b/src/utils/utility.hpp @@ -38,6 +38,7 @@ void LoadTransformState(obs_data_t *obj, struct obs_transform_info &info, struct obs_sceneitem_crop &crop); bool SaveTransformState(obs_data_t *obj, const struct obs_transform_info &info, const struct obs_sceneitem_crop &crop); +int GetSceneItemCount(const OBSWeakSource &); /* Scene item helpers */