Commit: 83e068f5df3eb1e0b95fbab188ab355023252780
Author: Dalai Felinto
Date:   Mon May 28 00:42:17 2018 +0200
Branches: temp-dynamic-overrides
https://developer.blender.org/rB83e068f5df3eb1e0b95fbab188ab355023252780

New Affected Collection struct

No point in using anonymous LinkData structs.

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

M       source/blender/blenkernel/intern/layer.c
M       source/blender/blenloader/intern/readfile.c
M       source/blender/blenloader/intern/writefile.c
M       source/blender/editors/scene/scene_edit.c
M       source/blender/makesdna/DNA_layer_types.h

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

diff --git a/source/blender/blenkernel/intern/layer.c 
b/source/blender/blenkernel/intern/layer.c
index 586a8767b21..3e4e7af82ba 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -1060,11 +1060,13 @@ bool BKE_view_layer_override_set_remove(struct 
ViewLayer *view_layer, struct Ove
 bool BKE_view_layer_override_set_collection_link(OverrideSet *override_set, 
Collection *collection)
 {
        /* We don't support duplicated collections in the override set. */
-       if (BLI_findptr(&override_set->affected_collections, collection, 
offsetof(LinkData, data)) != NULL) {
+       if (BLI_findptr(&override_set->affected_collections, collection, 
offsetof(AffectedCollection, collection)) != NULL) {
                return false;
        };
 
-       BLI_addtail(&override_set->affected_collections, 
BLI_genericNodeN(collection));
+       AffectedCollection *affected = MEM_callocN(sizeof(AffectedCollection), 
__func__);
+       affected->collection = collection;
+       BLI_addtail(&override_set->affected_collections, affected);
        return true;
 }
 
@@ -1074,15 +1076,15 @@ bool 
BKE_view_layer_override_set_collection_link(OverrideSet *override_set, Coll
  */
 bool BKE_view_layer_override_set_collection_unlink(struct OverrideSet 
*override_set, struct Collection *collection)
 {
-       LinkData *link = BLI_findptr(&override_set->affected_collections, 
collection, offsetof(LinkData, data));
-       if (link == NULL) {
+       AffectedCollection *affected = 
BLI_findptr(&override_set->affected_collections, collection, 
offsetof(AffectedCollection, collection));
+       if (affected == NULL) {
                return false;
        }
 
-       const int collection_index = 
BLI_findindex(&override_set->affected_collections, link);
+       const int collection_index = 
BLI_findindex(&override_set->affected_collections, affected);
 
-       BLI_remlink(&override_set->affected_collections, link);
-       MEM_freeN(link);
+       BLI_remlink(&override_set->affected_collections, affected);
+       MEM_freeN(affected);
 
        if (override_set->active_affected_collection > collection_index) {
                override_set->active_affected_collection -= 1;
diff --git a/source/blender/blenloader/intern/readfile.c 
b/source/blender/blenloader/intern/readfile.c
index bf9d7a131c5..7763234b850 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -5609,8 +5609,11 @@ static void direct_link_view_layer(FileData *fd, 
ViewLayer *view_layer)
        link_list(fd, &(view_layer->override_sets));
        for (OverrideSet *override_set = view_layer->override_sets.first; 
override_set; override_set = override_set->next) {
                link_list(fd, &override_set->affected_collections);
-               for (LinkData *link = override_set->affected_collections.first; 
link; link = link->next) {
-                       link->data = newdataadr(fd, link->data);
+               for (AffectedCollection *affected = 
override_set->affected_collections.first;
+                    affected != NULL;
+                    affected = affected->next)
+               {
+                       affected->collection = newdataadr(fd, 
affected->collection);
                }
                link_list(fd, &override_set->scene_properties);
                direct_link_dynamic_properties(fd, 
&override_set->scene_properties);
@@ -9688,6 +9691,18 @@ static void expand_scene(FileData *fd, Main *mainvar, 
Scene *sce)
                        }
                        expand_doit(fd, mainvar, lineset->linestyle);
                }
+
+               for (OverrideSet *override_set = 
view_layer->override_sets.first;
+                    override_set != NULL;
+                    override_set = override_set->next)
+               {
+                       for (AffectedCollection *affected = 
override_set->affected_collections.first;
+                            affected != NULL;
+                            affected = affected->next)
+                       {
+                               expand_doit(fd, mainvar, affected->collection);
+                       }
+               }
        }
 
        if (sce->gpd)
diff --git a/source/blender/blenloader/intern/writefile.c 
b/source/blender/blenloader/intern/writefile.c
index d827ad336dc..92dbdda20ef 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -2461,7 +2461,7 @@ static void write_view_layer(WriteData *wd, ViewLayer 
*view_layer)
 
        writelist(wd, DATA, OverrideSet, &view_layer->override_sets);
        for (OverrideSet *override_set = view_layer->override_sets.first; 
override_set; override_set = override_set->next) {
-               writelist(wd, DATA, LinkData, 
&override_set->affected_collections);
+               writelist(wd, DATA, AffectedCollection, 
&override_set->affected_collections);
                writelist(wd, DATA, DynamicOverrideProperty, 
&override_set->scene_properties);
                write_dynamic_properties(wd, &override_set->scene_properties);
                writelist(wd, DATA, DynamicOverrideProperty, 
&override_set->collection_properties);
diff --git a/source/blender/editors/scene/scene_edit.c 
b/source/blender/editors/scene/scene_edit.c
index afc04b45cb7..07fd18313b3 100644
--- a/source/blender/editors/scene/scene_edit.c
+++ b/source/blender/editors/scene/scene_edit.c
@@ -565,8 +565,8 @@ static int 
view_layer_override_set_collection_unlink_exec(bContext *C, wmOperato
        Scene *scene = CTX_data_scene(C);
        ViewLayer *view_layer = CTX_data_view_layer(C);
        OverrideSet *override_set = BLI_findlink(&view_layer->override_sets, 
view_layer->active_override_set);
-       LinkData *link = BLI_findlink(&override_set->affected_collections, 
override_set->active_affected_collection);
-       Collection *collection = link->data;
+       AffectedCollection *affected_collection = 
BLI_findlink(&override_set->affected_collections, 
override_set->active_affected_collection);
+       Collection *collection = affected_collection->collection;
 
        BKE_view_layer_override_set_collection_unlink(override_set, collection);
 
diff --git a/source/blender/makesdna/DNA_layer_types.h 
b/source/blender/makesdna/DNA_layer_types.h
index ee6549f3f53..dda6eee04d8 100644
--- a/source/blender/makesdna/DNA_layer_types.h
+++ b/source/blender/makesdna/DNA_layer_types.h
@@ -60,6 +60,11 @@ typedef struct LayerCollection {
        ListBase layer_collections; /* synced with collection->children */
 } LayerCollection;
 
+typedef struct AffectedCollection {
+       struct AffectedCollection *next, *prev;
+       struct Collection *collection;
+} AffectedCollection;
+
 typedef struct DynamicOverridePropertyData {
        int i[4];
        float f[4];  /*TODO 16 to support 4x4 matrices? Not sure we actually 
need that though... */
@@ -87,7 +92,7 @@ typedef struct OverrideSet {
        short flag;
        short pad[2];
        short active_affected_collection;
-       ListBase affected_collections; /* (Collection *)LinkData->data */
+       ListBase affected_collections; /* AffectedCollection */
        ListBase scene_properties;
        ListBase collection_properties;
 } OverrideSet;

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

Reply via email to