[Bf-blender-cvs] [63074fc8895] soc-2019-outliner: Outliner: Refactor synced selection to use wm flags

Nathan Craddock noreply at git.blender.org
Tue Aug 6 05:01:16 CEST 2019


Commit: 63074fc8895bb95a580bafa1d5bcafc2bddba792
Author: Nathan Craddock
Date:   Mon Aug 5 20:49:44 2019 -0600
Branches: soc-2019-outliner
https://developer.blender.org/rB63074fc8895bb95a580bafa1d5bcafc2bddba792

Outliner: Refactor synced selection to use wm flags

Starting point to sync based on type to optimize syncing for
larger scenes. Also cleanup from review.

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

M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/editors/armature/armature_select.c
M	source/blender/editors/armature/pose_select.c
M	source/blender/editors/include/ED_outliner.h
M	source/blender/editors/object/object_add.c
M	source/blender/editors/object/object_select.c
M	source/blender/editors/space_outliner/outliner_draw.c
M	source/blender/editors/space_outliner/outliner_select.c
M	source/blender/editors/space_outliner/outliner_sync.c
M	source/blender/editors/space_outliner/space_outliner.c
M	source/blender/editors/space_sequencer/sequencer_select.c
M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/makesdna/DNA_windowmanager_types.h

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

diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index f9820a663a4..f1f478df3ce 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -3538,7 +3538,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
         for (SpaceLink *space = sa->spacedata.first; space; space = space->next) {
           if (space->spacetype == SPACE_OUTLINER) {
             SpaceOutliner *soutliner = (SpaceOutliner *)space;
-            soutliner->sync_flag |= SO_SYNC_ALL;
+            soutliner->sync_flag |= SO_SYNC_TO_OUTLINER_ANY;
             soutliner->flag |= SO_SYNC_SELECT;
           }
         }
diff --git a/source/blender/editors/armature/armature_select.c b/source/blender/editors/armature/armature_select.c
index 9b901ae50a9..eff621d7b71 100644
--- a/source/blender/editors/armature/armature_select.c
+++ b/source/blender/editors/armature/armature_select.c
@@ -357,7 +357,7 @@ static int armature_select_linked_invoke(bContext *C, wmOperator *op, const wmEv
     }
   }
 
-  sync_select_dirty_flag = SYNC_SELECT_REPLACE;
+  ED_outliner_select_sync_from_edit_bone_tag(C);
 
   ED_armature_edit_sync_selection(arm->edbo);
 
@@ -1030,7 +1030,7 @@ static int armature_de_select_all_exec(bContext *C, wmOperator *op)
   }
   CTX_DATA_END;
 
-  sync_select_dirty_flag = SYNC_SELECT_REPLACE;
+  ED_outliner_select_sync_from_edit_bone_tag(C);
 
   WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, NULL);
 
@@ -1154,7 +1154,7 @@ static int armature_de_select_more_exec(bContext *C, wmOperator *UNUSED(op))
   }
   MEM_freeN(objects);
 
-  sync_select_dirty_flag = SYNC_SELECT_REPLACE;
+  ED_outliner_select_sync_from_edit_bone_tag(C);
   return OPERATOR_FINISHED;
 }
 
@@ -1186,7 +1186,7 @@ static int armature_de_select_less_exec(bContext *C, wmOperator *UNUSED(op))
   }
   MEM_freeN(objects);
 
-  sync_select_dirty_flag = SYNC_SELECT_REPLACE;
+  ED_outliner_select_sync_from_edit_bone_tag(C);
   return OPERATOR_FINISHED;
 }
 
@@ -1578,7 +1578,7 @@ static int armature_select_similar_exec(bContext *C, wmOperator *op)
 
 #undef STRUCT_SIZE_AND_OFFSET
 
-  sync_select_dirty_flag = SYNC_SELECT_REPLACE;
+  ED_outliner_select_sync_from_edit_bone_tag(C);
 
   return OPERATOR_FINISHED;
 }
@@ -1674,7 +1674,7 @@ static int armature_select_hierarchy_exec(bContext *C, wmOperator *op)
     return OPERATOR_CANCELLED;
   }
 
-  sync_select_dirty_flag = SYNC_SELECT_REPLACE;
+  ED_outliner_select_sync_from_edit_bone_tag(C);
 
   ED_armature_edit_sync_selection(arm->edbo);
 
@@ -1761,7 +1761,7 @@ static int armature_select_mirror_exec(bContext *C, wmOperator *op)
       arm->act_edbone = ebone_mirror_act;
     }
 
-    sync_select_dirty_flag = SYNC_SELECT_REPLACE;
+    ED_outliner_select_sync_from_edit_bone_tag(C);
 
     ED_armature_edit_sync_selection(arm->edbo);
 
@@ -1891,7 +1891,7 @@ static int armature_shortest_path_pick_invoke(bContext *C, wmOperator *op, const
 
   if (changed) {
     arm->act_edbone = ebone_dst;
-    sync_select_dirty_flag = SYNC_SELECT_REPLACE;
+    ED_outliner_select_sync_from_edit_bone_tag(C);
     ED_armature_edit_sync_selection(arm->edbo);
     WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
 
diff --git a/source/blender/editors/armature/pose_select.c b/source/blender/editors/armature/pose_select.c
index ee7b9f17761..beec2f8358f 100644
--- a/source/blender/editors/armature/pose_select.c
+++ b/source/blender/editors/armature/pose_select.c
@@ -89,8 +89,6 @@ static void pose_do_bone_select(bPoseChannel *pchan, const int select_mode)
       }
       break;
   }
-
-  sync_select_dirty_flag = SYNC_SELECT_REPLACE;
 }
 
 void ED_pose_bone_select_tag_update(Object *ob)
@@ -452,6 +450,8 @@ static int pose_select_connected_invoke(bContext *C, wmOperator *op, const wmEve
     selectconnected_posebonechildren(base->object, curBone, extend);
   }
 
+  ED_outliner_select_sync_from_pose_bone_tag(C);
+
   ED_pose_bone_select_tag_update(base->object);
 
   return OPERATOR_FINISHED;
@@ -517,6 +517,8 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op)
   }
   CTX_DATA_END;
 
+  ED_outliner_select_sync_from_pose_bone_tag(C);
+
   WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, NULL);
 
   return OPERATOR_FINISHED;
@@ -563,6 +565,8 @@ static int pose_select_parent_exec(bContext *C, wmOperator *UNUSED(op))
     return OPERATOR_CANCELLED;
   }
 
+  ED_outliner_select_sync_from_pose_bone_tag(C);
+
   ED_pose_bone_select_tag_update(ob);
   return OPERATOR_FINISHED;
 }
@@ -627,6 +631,8 @@ static int pose_select_constraint_target_exec(bContext *C, wmOperator *UNUSED(op
     return OPERATOR_CANCELLED;
   }
 
+  ED_outliner_select_sync_from_pose_bone_tag(C);
+
   return OPERATOR_FINISHED;
 }
 
@@ -715,6 +721,8 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op)
     return OPERATOR_CANCELLED;
   }
 
+  ED_outliner_select_sync_from_pose_bone_tag(C);
+
   ED_pose_bone_select_tag_update(ob);
 
   return OPERATOR_FINISHED;
@@ -1064,6 +1072,8 @@ static int pose_select_grouped_exec(bContext *C, wmOperator *op)
 
   /* report done status */
   if (changed) {
+    ED_outliner_select_sync_from_pose_bone_tag(C);
+
     return OPERATOR_FINISHED;
   }
   else {
@@ -1175,6 +1185,8 @@ static int pose_select_mirror_exec(bContext *C, wmOperator *op)
   }
   MEM_freeN(objects);
 
+  ED_outliner_select_sync_from_pose_bone_tag(C);
+
   return OPERATOR_FINISHED;
 }
 
diff --git a/source/blender/editors/include/ED_outliner.h b/source/blender/editors/include/ED_outliner.h
index fc64785ca93..46dbe2a1337 100644
--- a/source/blender/editors/include/ED_outliner.h
+++ b/source/blender/editors/include/ED_outliner.h
@@ -26,20 +26,19 @@
 struct ListBase;
 struct bContext;
 
-/* Flag to indicate if a sync is to extend or replace the outliner selection */
-extern short sync_select_dirty_flag;
-
-/* sync_select_dirty_flag types */
-enum {
-  SYNC_SELECT_NONE = 0,
-  SYNC_SELECT_REPLACE = 1,
-  SYNC_SELECT_EXTEND = 2,
-};
-
 bool ED_outliner_collections_editor_poll(struct bContext *C);
 
 void ED_outliner_selected_objects_get(const struct bContext *C, struct ListBase *objects);
 
 Base *ED_outliner_give_base_under_cursor(struct bContext *C, const int mval[2]);
 
+void ED_outliner_select_sync_from_object_tag(struct bContext *C);
+void ED_outliner_select_sync_from_edit_bone_tag(struct bContext *C);
+void ED_outliner_select_sync_from_pose_bone_tag(struct bContext *C);
+void ED_outliner_select_sync_from_sequence_tag(struct bContext *C);
+
+bool ED_outliner_select_sync_is_dirty(const struct bContext *C);
+
+void ED_outliner_select_sync_flag_outliners(const struct bContext *C);
+
 #endif /*  __ED_OUTLINER_H__ */
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 7e031866dec..80d150506ad 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -103,6 +103,7 @@
 #include "ED_mesh.h"
 #include "ED_node.h"
 #include "ED_object.h"
+#include "ED_outliner.h"
 #include "ED_physics.h"
 #include "ED_render.h"
 #include "ED_screen.h"
@@ -502,6 +503,8 @@ Object *ED_object_add_type(bContext *C,
   /* TODO(sergey): Use proper flag for tagging here. */
   DEG_id_tag_update(&scene->id, 0);
 
+  ED_outliner_select_sync_from_object_tag(C);
+
   return ob;
 }
 
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index d932953d362..28242b986f1 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -117,9 +117,6 @@ void ED_object_base_select(Base *base, eObjectSelect_Mode mode)
     }
     BKE_scene_object_base_flag_sync_from_base(base);
   }
-
-  /* Set synced selection global declared in ED_outliner.h */
-  sync_select_dirty_flag = SYNC_SELECT_REPLACE;
 }
 
 /**
@@ -440,6 +437,8 @@ static int object_select_by_type_exec(bContext *C, wmOperator *op)
   DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
   WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
 
+  ED_outliner_select_sync_from_object_tag(C);
+
   return OPERATOR_FINISHED;
 }
 
@@ -721,6 +720,7 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
   if (changed) {
     DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
     WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+    ED_outliner_select_sync_from_object_tag(C);
     return OPERATOR_FINISHED;
   }
 
@@ -1104,6 +1104,7 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op)
   if (changed) {
     DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
     WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+    ED_outliner_select_sync_from_object_tag(C);
     return OPERATOR_FINISHED;
   }
 
@@ -1154,6 +1155,8 @@ static int object_select_all_exec(bContext *C, wmOperator *op)
     DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
     WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
 
+    ED_outliner_select_sync_from_object_tag(C);
+
     return OPERATOR_FINISHED;
   }
   else if (any_visible == false) {
@@ -1222,6 +1225,8 @@ static int object_select_same_collection_exec(bContext *C, wmOperator *op)
   DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
   WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
 
+  ED_outliner_select_sync_from_object_tag(C);
+
   return OPERATOR_FINISHED;
 }
 
@@ -1281,12 +1286,12 @@ static int object_select_mirror_exec(bContext *C, wmOperator *op)
   }
   CTX_DATA_END;
 
-  sync_select_dirty_flag = SYNC_SELECT_REPLACE;
-
   /* undo? */
   DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
   WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
 
+  ED_outliner_select_sync_from_object_tag(C);
+
   return OPERATOR_FINISHED;
 }
 
@@ -1375,6 +1380,9 @@ static int object_select_more_exec(bContext *C, wmOperator *UNUSED(op))
     Scene *scene = CTX_data_scene(C);
     DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
     WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+
+    ED_outliner_select_sync_from_object_tag(C);
+
     return OPERATOR_FINISHED;
   }
   else {
@@ -1405,6 +1413,9 @@ static int object_select_less_exec(bContex

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list