From 0d8ae565f257609b9cf60cb8566ac6f465a10130 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Sun, 22 Mar 2015 20:28:27 -0700 Subject: [PATCH] libobs: Add API to hide/show scene items --- libobs/obs-scene.c | 38 ++++++++++++++++++++++++++++++++++---- libobs/obs.h | 3 +++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/libobs/obs-scene.c b/libobs/obs-scene.c index b418ff580..2281d0ff8 100644 --- a/libobs/obs-scene.c +++ b/libobs/obs-scene.c @@ -24,6 +24,7 @@ static const char *obs_scene_signals[] = { "void item_add(ptr scene, ptr item)", "void item_remove(ptr scene, ptr item)", "void reorder(ptr scene)", + "void item_visible(ptr scene, ptr item, bool visible)", "void item_select(ptr scene, ptr item)", "void item_deselect(ptr scene, ptr item)", "void item_transform(ptr scene, ptr item)", @@ -321,10 +322,12 @@ static void scene_video_render(void *data, gs_effect_t *effect) if (source_size_changed(item)) update_item_transform(item); - gs_matrix_push(); - gs_matrix_mul(&item->draw_transform); - obs_source_video_render(item->source); - gs_matrix_pop(); + if (item->visible) { + gs_matrix_push(); + gs_matrix_mul(&item->draw_transform); + obs_source_video_render(item->source); + gs_matrix_pop(); + } item = item->next; } @@ -924,3 +927,30 @@ void obs_sceneitem_get_box_transform(const obs_sceneitem_t *item, if (item) matrix4_copy(transform, &item->box_transform); } + +bool obs_sceneitem_visible(const obs_sceneitem_t *item) +{ + return item ? item->visible : false; +} + +void obs_sceneitem_set_visible(obs_sceneitem_t *item, bool visible) +{ + struct calldata cd = {0}; + + if (!item) + return; + + item->visible = visible; + + if (!item->parent) + return; + + calldata_set_ptr(&cd, "scene", item->parent); + calldata_set_ptr(&cd, "item", item); + calldata_set_bool(&cd, "visible", visible); + + signal_handler_signal(item->parent->source->context.signals, + "item_visible", &cd); + + calldata_free(&cd); +} diff --git a/libobs/obs.h b/libobs/obs.h index d8793d49f..4dd99337c 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -1043,6 +1043,9 @@ EXPORT void obs_sceneitem_get_draw_transform(const obs_sceneitem_t *item, EXPORT void obs_sceneitem_get_box_transform(const obs_sceneitem_t *item, struct matrix4 *transform); +EXPORT bool obs_sceneitem_visible(const obs_sceneitem_t *item); +EXPORT void obs_sceneitem_set_visible(obs_sceneitem_t *item, bool visible); + /* ------------------------------------------------------------------------- */ /* Outputs */