Commit: b76f2c0b6c99ef3e6825a23119a3729ecde3bb57
Author: Bastien Montagne
Date:   Wed Dec 14 10:07:13 2016 +0100
Branches: id_override_static
https://developer.blender.org/rBb76f2c0b6c99ef3e6825a23119a3729ecde3bb57

Some cleanup and refactoring.

===================================================================

M       source/blender/blenkernel/BKE_library_override.h
M       source/blender/blenkernel/intern/library_override.c
M       source/blender/makesrna/RNA_access.h
M       source/blender/makesrna/intern/rna_access.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_library_override.h 
b/source/blender/blenkernel/BKE_library_override.h
index 1fb4b92..03b8d55 100644
--- a/source/blender/blenkernel/BKE_library_override.h
+++ b/source/blender/blenkernel/BKE_library_override.h
@@ -44,7 +44,7 @@ void BKE_override_free(struct IDOverride **override);
 bool BKE_override_status_check_local(struct ID *local);
 bool BKE_override_status_check_reference(struct ID *local);
 
-bool BKE_override_operations_update(struct ID *local);
+bool BKE_override_operations_create(struct ID *local);
 
 void BKE_override_update(struct ID *local);
 void BKE_main_override_update(struct Main *bmain);
diff --git a/source/blender/blenkernel/intern/library_override.c 
b/source/blender/blenkernel/intern/library_override.c
index 14528d3..f15bcf6 100644
--- a/source/blender/blenkernel/intern/library_override.c
+++ b/source/blender/blenkernel/intern/library_override.c
@@ -44,6 +44,7 @@
 #include "RNA_access.h"
 #include "RNA_types.h"
 
+
 /** Initialize empty overriding of \a reference_id by \a local_id. */
 IDOverride *BKE_override_init(struct ID *local_id, struct ID *reference_id)
 {
@@ -165,13 +166,13 @@ bool BKE_override_status_check_reference(ID *local)
 /** Compares local and reference data-blocks and create new override 
operations as needed,
  * or reset to reference values if overriding is not allowed.
  * \return true is new overriding op was created, or some local data was 
reset. */
-bool BKE_override_operations_update(ID *local)
+bool BKE_override_operations_create(ID *local)
 {
        BLI_assert(local->override != NULL);
        return false;
 }
-#include "DNA_object_types.h"
-/** Update given override from its reference (not touching to overriden 
properties). */
+
+/** Update given override from its reference (re-applying overriden 
properties). */
 void BKE_override_update(ID *local)
 {
        if (local->override == NULL) {
@@ -179,7 +180,7 @@ void BKE_override_update(ID *local)
        }
 
        /* Recursively do 'ancestors' overrides first, if any. */
-       if (local->override->reference->override) {
+       if (local->override->reference->override && 
(local->override->reference->tag & LIB_TAG_OVERRIDE_OK) == 0) {
                BKE_override_update(local->override->reference);
        }
 
@@ -201,19 +202,20 @@ void BKE_override_update(ID *local)
                return;
        }
 
-       PointerRNA rnaptr_local, rnaptr_data;
+       PointerRNA rnaptr_local, rnaptr_final;
        RNA_id_pointer_create(local, &rnaptr_local);
-       RNA_id_pointer_create(tmp_id, &rnaptr_data);
+       RNA_id_pointer_create(tmp_id, &rnaptr_final);
 
-       RNA_struct_override_update(&rnaptr_local, &rnaptr_data, 
local->override);
+       RNA_struct_override_apply(&rnaptr_final, &rnaptr_local, 
local->override);
 
        /* This also transfers all pointers (memory) owned by local to tmp_id, 
and vice-versa. So when we'll free tmp_id,
         * we'll actually free old, outdated data from local. */
        BKE_id_swap(local, tmp_id);
 
-       /* Again, horribly innefficient in our case, we need something off-Main 
and off-usercounting
-        * (aka moar generic nolib copy/free stuff)! */
+       /* Again, horribly innefficient in our case, we need something off-Main 
(aka moar generic nolib copy/free stuff)! */
        BKE_libblock_free_ex(G.main, tmp_id, true, false);
+
+       local->flag |= LIB_TAG_OVERRIDE_OK;
 }
 
 /** Update all overrides from given \a bmain. */
diff --git a/source/blender/makesrna/RNA_access.h 
b/source/blender/makesrna/RNA_access.h
index 0d64a8d..8d0b667 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -40,6 +40,7 @@ extern "C" {
 struct bContext;
 struct ID;
 struct IDOverride;
+struct IDOverrideProperty;
 struct ListBase;
 struct Main;
 struct ReportList;
@@ -1214,10 +1215,15 @@ typedef enum eRNAEqualsMode {
 bool RNA_property_equals(struct PointerRNA *a, struct PointerRNA *b, struct 
PropertyRNA *prop, eRNAEqualsMode mode);
 bool RNA_struct_equals(struct PointerRNA *a, struct PointerRNA *b, 
eRNAEqualsMode mode);
 
+
+/* Override. */
+
 bool RNA_struct_override_matches(struct PointerRNA *local, struct PointerRNA 
*reference,
         struct IDOverride *override, const bool ignore_non_overridable, const 
bool ignore_overridden);
 
-void RNA_struct_override_update(struct PointerRNA *src, struct PointerRNA 
*dst, struct IDOverride *override);
+void RNA_property_override_apply(struct PointerRNA *dst,
+        struct PointerRNA *src, struct PropertyRNA *prop, struct 
IDOverrideProperty *op);
+void RNA_struct_override_apply(struct PointerRNA *dst, struct PointerRNA *src, 
struct IDOverride *override);
 
 #ifdef __cplusplus
 }
diff --git a/source/blender/makesrna/intern/rna_access.c 
b/source/blender/makesrna/intern/rna_access.c
index b37dbb5..cde407d 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -7127,7 +7127,21 @@ bool RNA_struct_override_matches(
        return equals;
 }
 
-void RNA_struct_override_update(PointerRNA *src, PointerRNA *dst, IDOverride 
*override)
+/** Apply given \a op override property operations on \a dst, using \a src as 
source. */
+void RNA_property_override_apply(PointerRNA *dst, PointerRNA *src, PropertyRNA 
*prop, IDOverrideProperty *op)
+{
+       for (IDOverridePropertyOperation *opop = op->operations.first; opop; 
opop = opop->next) {
+               switch (opop->operation) {
+                       case IDOVERRIDE_REPLACE:
+                               RNA_property_copy(dst, src, prop, -1);
+                               break;
+                       /* TODO other cases! */
+               }
+       }
+}
+
+/** Apply given \a override operations on \a dst, using \a src as source. */
+void RNA_struct_override_apply(PointerRNA *dst, PointerRNA *src, IDOverride 
*override)
 {
        for (IDOverrideProperty *op = override->properties.first; op; op = 
op->next) {
                /* Simplified for now! */
@@ -7139,14 +7153,7 @@ void RNA_struct_override_update(PointerRNA *src, 
PointerRNA *dst, IDOverride *ov
                {
                        BLI_assert(src_prop == dst_prop);
 
-                       for (IDOverridePropertyOperation *opop = 
op->operations.first; opop; opop = opop->next) {
-                               switch (opop->operation) {
-                                       case IDOVERRIDE_REPLACE:
-                                               RNA_property_copy(&dst_data, 
&src_data, src_prop, -1);
-                                               break;
-                                       /* TODO other cases! */
-                               }
-                       }
+                       RNA_property_override_apply(&src_data, &dst_data, 
src_prop, op);
                }
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to