events: scene item select and deselect events

This commit is contained in:
Stéphane L 2019-04-22 18:47:46 +02:00
parent 8eeea50ede
commit ad97d04e37
2 changed files with 74 additions and 0 deletions

View File

@ -815,6 +815,8 @@ void WSEvents::OnSourceCreate(void* param, calldata_t* data) {
signal_handler_connect(sh,
"item_visible", OnSceneItemVisibilityChanged, self);
signal_handler_connect(sh, "item_transform", OnSceneItemTransform, self);
signal_handler_connect(sh, "item_select", OnSceneItemSelected, self);
signal_handler_connect(sh, "item_deselect", OnSceneItemDeselected, self);
}
if (sourceType == OBS_SOURCE_TYPE_TRANSITION) {
signal_handler_connect(sh, "transition_start", OnTransitionBegin, self);
@ -1299,6 +1301,76 @@ void WSEvents::OnSceneItemTransform(void* param, calldata_t* data) {
instance->broadcastUpdate("SceneItemTransformChanged", fields);
}
/**
* A scene item is selected.
*
* @return {String} `sceneName` Name of the scene.
* @return {String} `itemName` Name of the item in the scene.
* @return {int} `itemId` Name of the item in the scene.
*
* @api events
* @name SceneItemSelected
* @category sources
* @since 4.6.0
*/
void WSEvents::OnSceneItemSelected(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSScene scene = calldata_get_pointer<obs_scene_t>(data, "scene");
if (!scene) {
return;
}
OBSSceneItem item = calldata_get_pointer<obs_sceneitem_t>(data, "item");
if (!item) {
return;
}
OBSSource sceneSource = obs_scene_get_source(scene);
OBSSource itemSource = obs_sceneitem_get_source(item);
OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sceneName", obs_source_get_name(sceneSource));
obs_data_set_string(fields, "itemName", obs_source_get_name(itemSource));
obs_data_set_int(fields, "itemId", obs_sceneitem_get_id(item));
self->broadcastUpdate("SceneItemSelected", fields);
}
/**
* A scene item is deselected.
*
* @return {String} `sceneName` Name of the scene.
* @return {String} `itemName` Name of the item in the scene.
* @return {int} `itemId` Name of the item in the scene.
*
* @api events
* @name SceneItemDeselected
* @category sources
* @since 4.6.0
*/
void WSEvents::OnSceneItemDeselected(void* param, calldata_t* data) {
auto self = reinterpret_cast<WSEvents*>(param);
OBSScene scene = calldata_get_pointer<obs_scene_t>(data, "scene");
if (!scene) {
return;
}
OBSSceneItem item = calldata_get_pointer<obs_sceneitem_t>(data, "item");
if (!item) {
return;
}
OBSSource sceneSource = obs_scene_get_source(scene);
OBSSource itemSource = obs_sceneitem_get_source(item);
OBSDataAutoRelease fields = obs_data_create();
obs_data_set_string(fields, "sceneName", obs_source_get_name(sceneSource));
obs_data_set_string(fields, "itemName", obs_source_get_name(itemSource));
obs_data_set_int(fields, "itemId", obs_sceneitem_get_id(item));
self->broadcastUpdate("SceneItemDeselected", fields);
}
/**
* The selected preview scene has changed (only available in Studio Mode).
*

View File

@ -129,4 +129,6 @@ private:
static void OnSceneItemDelete(void* param, calldata_t* data);
static void OnSceneItemVisibilityChanged(void* param, calldata_t* data);
static void OnSceneItemTransform(void* param, calldata_t* data);
static void OnSceneItemSelected(void* param, calldata_t* data);
static void OnSceneItemDeselected(void* param, calldata_t* data);
};