[Bf-blender-cvs] [a634ee7] id_override_static: ID override static: Various minor fixes and tweaks.

Bastien Montagne noreply at git.blender.org
Mon Jan 2 22:13:27 CET 2017


Commit: a634ee733fa441fc9084cc19d93f857b427123f9
Author: Bastien Montagne
Date:   Mon Jan 2 14:45:17 2017 +0100
Branches: id_override_static
https://developer.blender.org/rBa634ee733fa441fc9084cc19d93f857b427123f9

ID override static: Various minor fixes and tweaks.

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

M	source/blender/blenkernel/BKE_library_override.h
M	source/blender/blenkernel/intern/library_override.c
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 03b8d55..ae68a9e 100644
--- a/source/blender/blenkernel/BKE_library_override.h
+++ b/source/blender/blenkernel/BKE_library_override.h
@@ -41,6 +41,8 @@ struct IDOverride *BKE_override_init(struct ID *local_id, struct ID *reference_i
 void BKE_override_clear(struct IDOverride *override);
 void BKE_override_free(struct IDOverride **override);
 
+struct IDOverrideProperty *BKE_override_property_find(struct IDOverride *override, const char *rna_path);
+
 bool BKE_override_status_check_local(struct ID *local);
 bool BKE_override_status_check_reference(struct ID *local);
 
diff --git a/source/blender/blenkernel/intern/library_override.c b/source/blender/blenkernel/intern/library_override.c
index ee2a122..fed8b3f 100644
--- a/source/blender/blenkernel/intern/library_override.c
+++ b/source/blender/blenkernel/intern/library_override.c
@@ -91,6 +91,14 @@ void BKE_override_free(struct IDOverride **override)
 	*override = NULL;
 }
 
+/**
+ * Find override property from given RNA path, if it exists.
+ */
+IDOverrideProperty *BKE_override_property_find(IDOverride *override, const char *rna_path)
+{
+	/* XXX TODO we'll most likely want a runtime ghash to store taht mapping at some point. */
+	return BLI_findstring_ptr(&override->properties, rna_path, offsetof(IDOverrideProperty, rna_path));
+}
 
 /**
  * Check that status of local data-block is still valid against current reference one.
@@ -218,7 +226,7 @@ void BKE_override_update(ID *local)
 	/* 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;
+	local->tag |= LIB_TAG_OVERRIDE_OK;
 }
 
 /** Update all overrides from given \a bmain. */
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index cde407d..5c6882c 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -50,6 +50,7 @@
 #include "BKE_idcode.h"
 #include "BKE_idprop.h"
 #include "BKE_fcurve.h"
+#include "BKE_library_override.h"
 #include "BKE_main.h"
 #include "BKE_report.h"
 
@@ -7110,7 +7111,7 @@ bool RNA_struct_override_matches(
 		if (ignore_overridden) {
 			/* XXX TODO this will have to be refined to handle collections insertions, and array items */
 			char *rna_path = RNA_path_from_ID_to_property(local, prop);
-			if (BLI_findstring_ptr(&override->properties, rna_path, offsetof(IDOverrideProperty, rna_path)) != NULL) {
+			if (BKE_override_property_find(override, rna_path) != NULL) {
 				MEM_SAFE_FREE(rna_path);
 				continue;
 			}
@@ -7131,9 +7132,13 @@ bool RNA_struct_override_matches(
 void RNA_property_override_apply(PointerRNA *dst, PointerRNA *src, PropertyRNA *prop, IDOverrideProperty *op)
 {
 	for (IDOverridePropertyOperation *opop = op->operations.first; opop; opop = opop->next) {
+		const int sub_index = opop->subitem_local_index;
 		switch (opop->operation) {
+			case IDOVERRIDE_NOOP:
+				/* Dummy place-holder, nothing to do. */
+				break;
 			case IDOVERRIDE_REPLACE:
-				RNA_property_copy(dst, src, prop, -1);
+				RNA_property_copy(dst, src, prop, sub_index);
 				break;
 			/* TODO other cases! */
 		}




More information about the Bf-blender-cvs mailing list