From e270192a6109d5f83d84b1e430c1b50e5200f55d Mon Sep 17 00:00:00 2001 From: Socapex Date: Fri, 13 Feb 2015 11:29:48 -0500 Subject: [PATCH] libobs: Add function to set scene item position Allows setting a specific position for scene items rather than just up/down/top/bottom --- libobs/obs-scene.c | 32 ++++++++++++++++++++++++++++++++ libobs/obs.h | 3 ++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index 3f5887240..c08eedea5 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -781,6 +781,38 @@ void obs_sceneitem_set_order(obs_sceneitem_t *item, obs_scene_release(scene); } +void obs_sceneitem_set_order_position(obs_sceneitem_t *item, + int position) +{ + if (!item) return; + + struct obs_scene *scene = item->parent; + struct obs_scene_item *next; + + obs_scene_addref(scene); + pthread_mutex_lock(&scene->mutex); + + detach_sceneitem(item); + next = scene->first_item; + + if (position == 0) { + attach_sceneitem(scene, item, NULL); + } else { + for (int i = position; i > 1; --i) { + if (next->next == NULL) + break; + next = next->next; + } + + attach_sceneitem(scene, item, next); + } + + signal_reorder(item); + + pthread_mutex_unlock(&scene->mutex); + obs_scene_release(scene); +} + void obs_sceneitem_set_bounds_type(obs_sceneitem_t *item, enum obs_bounds_type type) { diff --git a/libobs/obs.h b/libobs/obs.h index b6fc50a75..debfc8518 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -948,7 +948,8 @@ EXPORT void obs_sceneitem_set_alignment(obs_sceneitem_t *item, uint32_t alignment); EXPORT void obs_sceneitem_set_order(obs_sceneitem_t *item, enum obs_order_movement movement); - +EXPORT void obs_sceneitem_set_order_position(obs_sceneitem_t *item, + int position); EXPORT void obs_sceneitem_set_bounds_type(obs_sceneitem_t *item, enum obs_bounds_type type); EXPORT void obs_sceneitem_set_bounds_alignment(obs_sceneitem_t *item,