Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <bastien@blender.org>2020-06-10 17:43:25 +0300
committerBastien Montagne <bastien@blender.org>2020-06-10 17:48:49 +0300
commit74ec37b70cbc8dc228f11d0796dbe68c24526b16 (patch)
tree5691206349ce3365d554ec64e136fc534908af76 /source/blender/blenkernel/intern/lib_override.c
parent1d0017089c6ad4bd9b87af1bb30024a86e7b2771 (diff)
Enable (deep) copy of overrides.
This commit enables basic copy of overrides on generic ID level, as well as from (deep) copy operators for objects and collections. So e.g. if your linked overridden caracter is in a collection, you can now (from the outliner) Duplicate that override collection to get a new overriding copy of the character. We still need operators (new or modifying existing ones) to handle that from 3DView e.g. Note that deep copy code for objects/collections (and incidently animdata) had to be modified to avoid duplicating/making local IDs that remain linked ones being used by overrides ones.
Diffstat (limited to 'source/blender/blenkernel/intern/lib_override.c')
-rw-r--r--source/blender/blenkernel/intern/lib_override.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/source/blender/blenkernel/intern/lib_override.c b/source/blender/blenkernel/intern/lib_override.c
index 8d1a4e3594c..d16428ccd60 100644
--- a/source/blender/blenkernel/intern/lib_override.c
+++ b/source/blender/blenkernel/intern/lib_override.c
@@ -92,7 +92,7 @@ IDOverrideLibrary *BKE_lib_override_library_init(ID *local_id, ID *reference_id)
if (ancestor_id != NULL && ancestor_id->override_library != NULL) {
/* Original ID has a template, use it! */
- BKE_lib_override_library_copy(local_id, ancestor_id);
+ BKE_lib_override_library_copy(local_id, ancestor_id, true);
if (local_id->override_library->reference != reference_id) {
id_us_min(local_id->override_library->reference);
local_id->override_library->reference = reference_id;
@@ -110,8 +110,8 @@ IDOverrideLibrary *BKE_lib_override_library_init(ID *local_id, ID *reference_id)
return local_id->override_library;
}
-/** Deep copy of a whole override from \a src_id to \a dst_id. */
-void BKE_lib_override_library_copy(ID *dst_id, const ID *src_id)
+/** Shalow or deep copy of a whole override from \a src_id to \a dst_id. */
+void BKE_lib_override_library_copy(ID *dst_id, const ID *src_id, const bool do_full_copy)
{
BLI_assert(src_id->override_library != NULL);
@@ -138,12 +138,15 @@ void BKE_lib_override_library_copy(ID *dst_id, const ID *src_id)
(ID *)src_id;
id_us_plus(dst_id->override_library->reference);
- BLI_duplicatelist(&dst_id->override_library->properties, &src_id->override_library->properties);
- for (IDOverrideLibraryProperty *op_dst = dst_id->override_library->properties.first,
- *op_src = src_id->override_library->properties.first;
- op_dst;
- op_dst = op_dst->next, op_src = op_src->next) {
- lib_override_library_property_copy(op_dst, op_src);
+ if (do_full_copy) {
+ BLI_duplicatelist(&dst_id->override_library->properties,
+ &src_id->override_library->properties);
+ for (IDOverrideLibraryProperty *op_dst = dst_id->override_library->properties.first,
+ *op_src = src_id->override_library->properties.first;
+ op_dst;
+ op_dst = op_dst->next, op_src = op_src->next) {
+ lib_override_library_property_copy(op_dst, op_src);
+ }
}
dst_id->tag &= ~LIB_TAG_OVERRIDE_LIBRARY_REFOK;