diff options
author | Sergey Sharybin <sergey@blender.org> | 2020-09-18 17:57:33 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey@blender.org> | 2020-09-21 13:25:45 +0300 |
commit | 216a2218768d005c18032df370c19c1c0f571797 (patch) | |
tree | 20ec81038b82e567fc67f225bc1f7057dcaccb1f /source/blender/blenkernel | |
parent | 3791dbea1e796f96440437333e4318066f26bde2 (diff) |
Implement ID properties support for TimeMarker
Allows scripters to store additional information in the marker itself instead
of using work-around approach based on marker names and such.
Differential Revision: https://developer.blender.org/D8944
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 34af226ef72..2a3ac89a8a7 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -223,6 +223,16 @@ static void scene_init_data(ID *id) BKE_view_layer_add(scene, "View Layer", NULL, VIEWLAYER_ADD_NEW); } +static void scene_copy_markers(Scene *scene_dst, const Scene *scene_src, const int flag) +{ + BLI_duplicatelist(&scene_dst->markers, &scene_src->markers); + LISTBASE_FOREACH (TimeMarker *, marker, &scene_dst->markers) { + if (marker->prop != NULL) { + marker->prop = IDP_CopyProperty_ex(marker->prop, flag); + } + } +} + static void scene_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int flag) { Scene *scene_dst = (Scene *)id_dst; @@ -253,7 +263,8 @@ static void scene_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int BKE_view_layer_copy_data(scene_dst, scene_src, view_layer_dst, view_layer_src, flag_subdata); } - BLI_duplicatelist(&(scene_dst->markers), &(scene_src->markers)); + scene_copy_markers(scene_dst, scene_src, flag); + BLI_duplicatelist(&(scene_dst->transform_spaces), &(scene_src->transform_spaces)); BLI_duplicatelist(&(scene_dst->r.views), &(scene_src->r.views)); BKE_keyingsets_copy(&(scene_dst->keyingsets), &(scene_src->keyingsets)); @@ -336,6 +347,17 @@ static void scene_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int BKE_scene_copy_data_eevee(scene_dst, scene_src); } +static void scene_free_markers(Scene *scene, bool do_id_user) +{ + LISTBASE_FOREACH_MUTABLE (TimeMarker *, marker, &scene->markers) { + if (marker->prop != NULL) { + IDP_FreePropertyContent_ex(marker->prop, do_id_user); + MEM_freeN(marker->prop); + } + MEM_freeN(marker); + } +} + static void scene_free_data(ID *id) { @@ -372,7 +394,7 @@ static void scene_free_data(ID *id) scene->r.ffcodecdata.properties = NULL; } - BLI_freelistN(&scene->markers); + scene_free_markers(scene, do_id_user); BLI_freelistN(&scene->transform_spaces); BLI_freelistN(&scene->r.views); @@ -524,6 +546,8 @@ static void scene_foreach_id(ID *id, LibraryForeachIDData *data) LISTBASE_FOREACH (TimeMarker *, marker, &scene->markers) { BKE_LIB_FOREACHID_PROCESS(data, marker->camera, IDWALK_CB_NOP); + IDP_foreach_property( + marker->prop, IDP_TYPE_FILTER_ID, BKE_lib_query_idpropertiesForeachIDLink_callback, data); } ToolSettings *toolsett = scene->toolsettings; |