From af3f29169c597ccf6244684c4447d04ff3cb092b Mon Sep 17 00:00:00 2001 From: tt2468 Date: Wed, 8 Jun 2022 01:04:43 -0700 Subject: [PATCH] utils: Clean up a few iteration functions --- src/utils/Obs_ActionHelper.cpp | 2 +- src/utils/Obs_ArrayHelper.cpp | 35 +++++++++++++++++++++------------- src/utils/Obs_SearchHelper.cpp | 8 ++++---- 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/src/utils/Obs_ActionHelper.cpp b/src/utils/Obs_ActionHelper.cpp index bc60dc45..4cdfb71f 100644 --- a/src/utils/Obs_ActionHelper.cpp +++ b/src/utils/Obs_ActionHelper.cpp @@ -27,7 +27,7 @@ struct CreateSceneItemData { OBSSceneItem sceneItem; // Out }; -void CreateSceneItemHelper(void *_data, obs_scene_t *scene) +static void CreateSceneItemHelper(void *_data, obs_scene_t *scene) { auto *data = static_cast(_data); data->sceneItem = obs_scene_add(scene, data->source); diff --git a/src/utils/Obs_ArrayHelper.cpp b/src/utils/Obs_ArrayHelper.cpp index 43c0ba52..032d7d32 100644 --- a/src/utils/Obs_ArrayHelper.cpp +++ b/src/utils/Obs_ArrayHelper.cpp @@ -60,15 +60,16 @@ std::vector Utils::Obs::ArrayHelper::GetHotkeyList() { std::vector ret; - obs_enum_hotkeys( + auto cb = [](void *data, obs_hotkey_id, obs_hotkey_t *hotkey) { auto ret = static_cast *>(data); ret->push_back(hotkey); return true; - }, - &ret); + }; + + obs_enum_hotkeys(cb, &ret); return ret; } @@ -134,16 +135,21 @@ std::vector Utils::Obs::ArrayHelper::GetSceneItemList(obs_scene_t *scene, std::pair, bool> enumData; enumData.second = basic; - obs_scene_enum_items( - scene, + auto cb = [](obs_scene_t *, obs_sceneitem_t *sceneItem, void *param) { auto enumData = static_cast, bool> *>(param); + // TODO: Make ObjectHelper util for scene items + json item; item["sceneItemId"] = obs_sceneitem_get_id(sceneItem); - // Should be slightly faster than calling obs_sceneitem_get_order_position() - item["sceneItemIndex"] = enumData->first.size(); + item["sceneItemIndex"] = + enumData->first.size(); // Should be slightly faster than calling obs_sceneitem_get_order_position() if (!enumData->second) { + item["sceneItemEnabled"] = obs_sceneitem_visible(sceneItem); + item["sceneItemLocked"] = obs_sceneitem_locked(sceneItem); + item["sceneItemTransform"] = ObjectHelper::GetSceneItemTransform(sceneItem); + item["sceneItemBlendMode"] = obs_sceneitem_get_blending_mode(sceneItem); OBSSource itemSource = obs_sceneitem_get_source(sceneItem); item["sourceName"] = obs_source_get_name(itemSource); item["sourceType"] = obs_source_get_type(itemSource); @@ -160,8 +166,9 @@ std::vector Utils::Obs::ArrayHelper::GetSceneItemList(obs_scene_t *scene, enumData->first.push_back(item); return true; - }, - &enumData); + }; + + obs_scene_enum_items(scene, cb, &enumData); return enumData.first; } @@ -176,7 +183,7 @@ std::vector Utils::Obs::ArrayHelper::GetInputList(std::string inputKind) EnumInputInfo inputInfo; inputInfo.inputKind = inputKind; - auto inputEnumProc = [](void *param, obs_source_t *input) { + auto cb = [](void *param, obs_source_t *input) { // Sanity check in case the API changes if (obs_source_get_type(input) != OBS_SOURCE_TYPE_INPUT) return true; @@ -196,8 +203,9 @@ std::vector Utils::Obs::ArrayHelper::GetInputList(std::string inputKind) inputInfo->inputs.push_back(inputJson); return true; }; + // Actually enumerates only public inputs, despite the name - obs_enum_sources(inputEnumProc, &inputInfo); + obs_enum_sources(cb, &inputInfo); return inputInfo.inputs; } @@ -302,7 +310,7 @@ std::vector Utils::Obs::ArrayHelper::GetSourceFilterList(obs_source_t *sou { std::vector filters; - auto enumFilters = [](obs_source_t *, obs_source_t *filter, void *param) { + auto cb = [](obs_source_t *, obs_source_t *filter, void *param) { auto filters = reinterpret_cast *>(param); json filterJson; @@ -316,7 +324,8 @@ std::vector Utils::Obs::ArrayHelper::GetSourceFilterList(obs_source_t *sou filters->push_back(filterJson); }; - obs_source_enum_filters(source, enumFilters, &filters); + + obs_source_enum_filters(source, cb, &filters); return filters; } diff --git a/src/utils/Obs_SearchHelper.cpp b/src/utils/Obs_SearchHelper.cpp index 713b4f7d..a8c43f27 100644 --- a/src/utils/Obs_SearchHelper.cpp +++ b/src/utils/Obs_SearchHelper.cpp @@ -70,8 +70,7 @@ obs_sceneitem_t *Utils::Obs::SearchHelper::GetSceneItemByName(obs_scene_t *scene enumData.name = name; enumData.offset = offset; - obs_scene_enum_items( - scene, + auto cb = [](obs_scene_t *, obs_sceneitem_t *sceneItem, void *param) { auto enumData = static_cast(param); @@ -91,8 +90,9 @@ obs_sceneitem_t *Utils::Obs::SearchHelper::GetSceneItemByName(obs_scene_t *scene } return true; - }, - &enumData); + }; + + obs_scene_enum_items(scene, cb, &enumData); return enumData.ret; }