Merge branch 'master' into blender2.8
[blender.git] / source / blender / makesrna / intern / rna_animation.c
index 3f8a7bc96e8b8f6f62c8a2bc28f188aa4996e712..d2c719ac5d10e51777d1b0079859a3a6bc52907d 100644 (file)
@@ -73,10 +73,11 @@ const EnumPropertyItem rna_enum_keying_flag_items[] = {
 #include "BLI_math_base.h"
 
 #include "BKE_animsys.h"
-#include "BKE_depsgraph.h"
 #include "BKE_fcurve.h"
 #include "BKE_nla.h"
 
+#include "DEG_depsgraph.h"
+
 #include "DNA_object_types.h"
 
 #include "WM_api.h"
@@ -88,7 +89,7 @@ static void rna_AnimData_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Point
        /* tag for refresh so that scheduled updates (e.g. action changed) will 
         * get computed and reflected in the scene [#34869] 
         */
-       DAG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA);
+       DEG_id_tag_update(id, OB_RECALC_OB | OB_RECALC_DATA);
 }
 
 static int rna_AnimData_action_editable(PointerRNA *ptr, const char **UNUSED(r_info))
@@ -114,7 +115,7 @@ static void rna_AnimData_action_set(PointerRNA *ptr, PointerRNA value)
        adt = BKE_animdata_from_id(ownerId);
        if (adt) {
                adt->recalc |= ADT_RECALC_ANIM;
-               DAG_id_tag_update(ownerId, OB_RECALC_TIME);
+               DEG_id_tag_update(ownerId, OB_RECALC_TIME);
        }
 }
 
@@ -584,6 +585,34 @@ static FCurve *rna_Driver_find(AnimData *adt, ReportList *reports, const char *d
        return list_find_fcurve(&adt->drivers, data_path, index);
 }
 
+bool rna_AnimaData_override_apply(
+        PointerRNA *ptr_dst, PointerRNA *ptr_src, PointerRNA *ptr_storage,
+        PropertyRNA *prop_dst, PropertyRNA *prop_src, PropertyRNA *UNUSED(prop_storage),
+        const int len_dst, const int len_src, const int len_storage,
+        IDOverrideStaticPropertyOperation *opop)
+{
+       BLI_assert(len_dst == len_src && (!ptr_storage || len_dst == len_storage) && len_dst == 0);
+       BLI_assert(opop->operation == IDOVERRIDESTATIC_OP_REPLACE && "Unsupported RNA override operation on animdata pointer");
+       UNUSED_VARS_NDEBUG(ptr_storage, len_dst, len_src, len_storage, opop);
+
+       /* AnimData is a special case, since you cannot edit/replace it, it's either existent or not. */
+       AnimData *adt_dst = RNA_property_pointer_get(ptr_dst, prop_dst).data;
+       AnimData *adt_src = RNA_property_pointer_get(ptr_src, prop_src).data;
+
+       if (adt_dst == NULL && adt_src != NULL) {
+               /* Copy anim data from reference into final local ID. */
+               BKE_animdata_copy_id(NULL, ptr_dst->id.data, ptr_src->id.data, false, true);
+               return true;
+       }
+       else if (adt_dst != NULL && adt_src == NULL) {
+               /* Override has cleared/removed anim data from its reference. */
+               BKE_animdata_free(ptr_dst->id.data, true);
+               return true;
+       }
+
+       return false;
+}
+
 #else
 
 /* helper function for Keying Set -> keying settings */
@@ -998,6 +1027,8 @@ void rna_def_animdata_common(StructRNA *srna)
        prop = RNA_def_property(srna, "animation_data", PROP_POINTER, PROP_NONE);
        RNA_def_property_pointer_sdna(prop, NULL, "adt");
        RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
+       RNA_def_property_override_funcs(prop, NULL, NULL, "rna_AnimaData_override_apply");
        RNA_def_property_ui_text(prop, "Animation Data", "Animation data for this data-block");
 }
 
@@ -1022,6 +1053,7 @@ static void rna_def_animdata(BlenderRNA *brna)
        prop = RNA_def_property(srna, "action", PROP_POINTER, PROP_NONE);
        /* this flag as well as the dynamic test must be defined for this to be editable... */
        RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
        RNA_def_property_pointer_funcs(prop, NULL, "rna_AnimData_action_set", NULL, "rna_Action_id_poll");
        RNA_def_property_editable_func(prop, "rna_AnimData_action_editable");
        RNA_def_property_ui_text(prop, "Action", "Active Action for this data-block");
@@ -1054,6 +1086,7 @@ static void rna_def_animdata(BlenderRNA *brna)
        prop = RNA_def_property(srna, "drivers", PROP_COLLECTION, PROP_NONE);
        RNA_def_property_collection_sdna(prop, NULL, "drivers", NULL);
        RNA_def_property_struct_type(prop, "FCurve");
+       RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
        RNA_def_property_ui_text(prop, "Drivers", "The Drivers/Expressions for this data-block");
        
        rna_api_animdata_drivers(brna, prop);