[Bf-blender-cvs] [8f10f9d5dc7] master: Refactor: Move WindowManager and Screen foreach_id to new IDTypeInfo structure.

Bastien Montagne noreply at git.blender.org
Mon May 18 19:01:42 CEST 2020


Commit: 8f10f9d5dc7657b6e35d7cb108660db19034c049
Author: Bastien Montagne
Date:   Mon May 18 18:51:06 2020 +0200
Branches: master
https://developer.blender.org/rB8f10f9d5dc7657b6e35d7cb108660db19034c049

Refactor: Move WindowManager and Screen foreach_id to new IDTypeInfo structure.

That one was a bit more complicated, and is still only partial refactor
(ultimately we want to have a foreach_id callback in SpaceType itself I
think...).

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

M	source/blender/blenkernel/BKE_lib_query.h
M	source/blender/blenkernel/BKE_screen.h
M	source/blender/blenkernel/intern/lib_query.c
M	source/blender/blenkernel/intern/screen.c
M	source/blender/windowmanager/intern/wm.c

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

diff --git a/source/blender/blenkernel/BKE_lib_query.h b/source/blender/blenkernel/BKE_lib_query.h
index 353ee3bbf5a..7e6ce956179 100644
--- a/source/blender/blenkernel/BKE_lib_query.h
+++ b/source/blender/blenkernel/BKE_lib_query.h
@@ -132,6 +132,7 @@ typedef struct LibraryForeachIDData LibraryForeachIDData;
 bool BKE_lib_query_foreachid_process(struct LibraryForeachIDData *data,
                                      struct ID **id_pp,
                                      int cb_flag);
+int BKE_lib_query_foreachid_process_flags_get(struct LibraryForeachIDData *data);
 
 #define BKE_LIB_FOREACHID_PROCESS_ID(_data, _id, _cb_flag) \
   { \
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index c49b6e27bba..0d8f5ed550c 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -48,6 +48,7 @@ struct WorkSpace;
 struct bContext;
 struct bContextDataResult;
 struct bScreen;
+struct LibraryForeachIDData;
 struct uiLayout;
 struct uiList;
 struct wmGizmoMap;
@@ -389,6 +390,8 @@ float BKE_screen_view3d_zoom_from_fac(float zoomfac);
 void BKE_screen_view3d_shading_init(struct View3DShading *shading);
 
 /* screen */
+void BKE_screen_foreach_id_screen_area(struct LibraryForeachIDData *data, struct ScrArea *area);
+
 void BKE_screen_free(struct bScreen *screen);
 void BKE_screen_area_map_free(struct ScrAreaMap *area_map) ATTR_NONNULL();
 
diff --git a/source/blender/blenkernel/intern/lib_query.c b/source/blender/blenkernel/intern/lib_query.c
index ec9225258a0..4f6d5eba689 100644
--- a/source/blender/blenkernel/intern/lib_query.c
+++ b/source/blender/blenkernel/intern/lib_query.c
@@ -79,6 +79,7 @@
 #include "BKE_node.h"
 #include "BKE_particle.h"
 #include "BKE_rigidbody.h"
+#include "BKE_screen.h"
 #include "BKE_sequencer.h"
 #include "BKE_shader_fx.h"
 #include "BKE_texture.h"
@@ -199,6 +200,11 @@ bool BKE_lib_query_foreachid_process(LibraryForeachIDData *data, ID **id_pp, int
   }
 }
 
+int BKE_lib_query_foreachid_process_flags_get(LibraryForeachIDData *data)
+{
+  return data->flag;
+}
+
 static void library_foreach_ID_link(Main *bmain,
                                     ID *id_owner,
                                     ID *id,
@@ -370,148 +376,6 @@ static void library_foreach_collection(LibraryForeachIDData *data, Collection *c
   FOREACH_FINALIZE_VOID;
 }
 
-static void library_foreach_dopesheet(LibraryForeachIDData *data, bDopeSheet *ads)
-{
-  if (ads != NULL) {
-    FOREACH_CALLBACK_INVOKE_ID(data, ads->source, IDWALK_CB_NOP);
-    FOREACH_CALLBACK_INVOKE(data, ads->filter_grp, IDWALK_CB_NOP);
-  }
-
-  FOREACH_FINALIZE_VOID;
-}
-
-static void library_foreach_screen_area(LibraryForeachIDData *data, ScrArea *area)
-{
-  FOREACH_CALLBACK_INVOKE(data, area->full, IDWALK_CB_NOP);
-
-  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
-    switch (sl->spacetype) {
-      case SPACE_VIEW3D: {
-        View3D *v3d = (View3D *)sl;
-
-        FOREACH_CALLBACK_INVOKE(data, v3d->camera, IDWALK_CB_NOP);
-        FOREACH_CALLBACK_INVOKE(data, v3d->ob_center, IDWALK_CB_NOP);
-
-        if (v3d->localvd) {
-          FOREACH_CALLBACK_INVOKE(data, v3d->localvd->camera, IDWALK_CB_NOP);
-        }
-        break;
-      }
-      case SPACE_GRAPH: {
-        SpaceGraph *sipo = (SpaceGraph *)sl;
-
-        library_foreach_dopesheet(data, sipo->ads);
-        break;
-      }
-      case SPACE_PROPERTIES: {
-        SpaceProperties *sbuts = (SpaceProperties *)sl;
-
-        FOREACH_CALLBACK_INVOKE_ID(data, sbuts->pinid, IDWALK_CB_NOP);
-        break;
-      }
-      case SPACE_FILE:
-        break;
-      case SPACE_ACTION: {
-        SpaceAction *saction = (SpaceAction *)sl;
-
-        library_foreach_dopesheet(data, &saction->ads);
-        FOREACH_CALLBACK_INVOKE(data, saction->action, IDWALK_CB_NOP);
-        break;
-      }
-      case SPACE_IMAGE: {
-        SpaceImage *sima = (SpaceImage *)sl;
-
-        FOREACH_CALLBACK_INVOKE(data, sima->image, IDWALK_CB_USER_ONE);
-        FOREACH_CALLBACK_INVOKE(data, sima->mask_info.mask, IDWALK_CB_USER_ONE);
-        FOREACH_CALLBACK_INVOKE(data, sima->gpd, IDWALK_CB_USER);
-        break;
-      }
-      case SPACE_SEQ: {
-        SpaceSeq *sseq = (SpaceSeq *)sl;
-
-        FOREACH_CALLBACK_INVOKE(data, sseq->gpd, IDWALK_CB_USER);
-        break;
-      }
-      case SPACE_NLA: {
-        SpaceNla *snla = (SpaceNla *)sl;
-
-        library_foreach_dopesheet(data, snla->ads);
-        break;
-      }
-      case SPACE_TEXT: {
-        SpaceText *st = (SpaceText *)sl;
-
-        FOREACH_CALLBACK_INVOKE(data, st->text, IDWALK_CB_NOP);
-        break;
-      }
-      case SPACE_SCRIPT: {
-        SpaceScript *scpt = (SpaceScript *)sl;
-
-        FOREACH_CALLBACK_INVOKE(data, scpt->script, IDWALK_CB_NOP);
-        break;
-      }
-      case SPACE_OUTLINER: {
-        SpaceOutliner *so = (SpaceOutliner *)sl;
-
-        FOREACH_CALLBACK_INVOKE_ID(data, so->search_tse.id, IDWALK_CB_NOP);
-
-        if (so->treestore != NULL) {
-          TreeStoreElem *tselem;
-          BLI_mempool_iter iter;
-
-          BLI_mempool_iternew(so->treestore, &iter);
-          while ((tselem = BLI_mempool_iterstep(&iter))) {
-            FOREACH_CALLBACK_INVOKE_ID(data, tselem->id, IDWALK_CB_NOP);
-          }
-        }
-        break;
-      }
-      case SPACE_NODE: {
-        SpaceNode *snode = (SpaceNode *)sl;
-
-        const bool is_private_nodetree = snode->id != NULL &&
-                                         ntreeFromID(snode->id) == snode->nodetree;
-
-        FOREACH_CALLBACK_INVOKE_ID(data, snode->id, IDWALK_CB_NOP);
-        FOREACH_CALLBACK_INVOKE_ID(data, snode->from, IDWALK_CB_NOP);
-
-        FOREACH_CALLBACK_INVOKE(
-            data, snode->nodetree, is_private_nodetree ? IDWALK_CB_EMBEDDED : IDWALK_CB_USER_ONE);
-
-        LISTBASE_FOREACH (bNodeTreePath *, path, &snode->treepath) {
-          if (path == snode->treepath.first) {
-            /* first nodetree in path is same as snode->nodetree */
-            FOREACH_CALLBACK_INVOKE(data,
-                                    path->nodetree,
-                                    is_private_nodetree ? IDWALK_CB_EMBEDDED : IDWALK_CB_USER_ONE);
-          }
-          else {
-            FOREACH_CALLBACK_INVOKE(data, path->nodetree, IDWALK_CB_USER_ONE);
-          }
-
-          if (path->nodetree == NULL) {
-            break;
-          }
-        }
-
-        FOREACH_CALLBACK_INVOKE(data, snode->edittree, IDWALK_CB_NOP);
-        break;
-      }
-      case SPACE_CLIP: {
-        SpaceClip *sclip = (SpaceClip *)sl;
-
-        FOREACH_CALLBACK_INVOKE(data, sclip->clip, IDWALK_CB_USER_ONE);
-        FOREACH_CALLBACK_INVOKE(data, sclip->mask_info.mask, IDWALK_CB_USER_ONE);
-        break;
-      }
-      default:
-        break;
-    }
-  }
-
-  FOREACH_FINALIZE_VOID;
-}
-
 bool BKE_library_foreach_ID_embedded(LibraryForeachIDData *data, ID **id_pp)
 {
   /* Needed e.g. for callbacks handling relationships... This call shall be absolutely readonly. */
@@ -987,24 +851,7 @@ static void library_foreach_ID_link(Main *bmain,
       }
 
       case ID_WM: {
-        wmWindowManager *wm = (wmWindowManager *)id;
-
-        LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
-          CALLBACK_INVOKE(win->scene, IDWALK_CB_USER_ONE);
-
-          /* This pointer can be NULL during old files reading, better be safe than sorry. */
-          if (win->workspace_hook != NULL) {
-            ID *workspace = (ID *)BKE_workspace_active_get(win->workspace_hook);
-            CALLBACK_INVOKE_ID(workspace, IDWALK_CB_NOP);
-            /* allow callback to set a different workspace */
-            BKE_workspace_active_set(win->workspace_hook, (WorkSpace *)workspace);
-          }
-          if (data.flag & IDWALK_INCLUDE_UI) {
-            LISTBASE_FOREACH (ScrArea *, area, &win->global_areas.areabase) {
-              library_foreach_screen_area(&data, area);
-            }
-          }
-        }
+        BLI_assert(0);
         break;
       }
 
@@ -1061,13 +908,7 @@ static void library_foreach_ID_link(Main *bmain,
       }
 
       case ID_SCR: {
-        if (data.flag & IDWALK_INCLUDE_UI) {
-          bScreen *screen = (bScreen *)id;
-
-          LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
-            library_foreach_screen_area(&data, area);
-          }
-        }
+        BLI_assert(0);
         break;
       }
       case ID_SIM: {
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index 997e807a253..bfc0d437994 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -32,14 +32,18 @@
 #include "MEM_guardedalloc.h"
 
 #include "DNA_defaults.h"
+#include "DNA_gpencil_types.h"
+#include "DNA_mask_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_screen_types.h"
 #include "DNA_space_types.h"
+#include "DNA_text_types.h"
 #include "DNA_view3d_types.h"
 #include "DNA_workspace_types.h"
 
 #include "BLI_listbase.h"
 #include "BLI_math_vector.h"
+#include "BLI_mempool.h"
 #include "BLI_rect.h"
 #include "BLI_utildefines.h"
 
@@ -48,6 +52,8 @@
 #include "BKE_icons.h"
 #include "BKE_idprop.h"
 #include "BKE_idtype.h"
+#include "BKE_lib_query.h"
+#include "BKE_node.h"
 #include "BKE_screen.h"
 #include "BKE_workspace.h"
 
@@ -72,6 +78,158 @@ static void screen_free_data(ID *id)
   MEM_SAFE_FREE(screen->tool_tip);
 }
 
+static void screen_foreach_id_dopesheet(LibraryForeachIDData *data, bDopeSheet *ads)
+{
+  if (ads != NULL) {
+    BKE_LIB_FOREACHID_PROCESS_ID(data, ads->source, IDWALK_CB_NOP);
+    BKE_LIB_FOREACHID_PROCESS(data, ads->filter_grp, IDWALK_CB_NOP);
+  }
+}
+
+void BKE_screen_foreach_id_screen_area(LibraryForeachIDData *data, ScrArea *area)
+{
+  BKE_LIB_FOREACHID_PROCESS(data, area->full, IDWALK_CB_NOP);
+
+  /* TODO this should be moved to a callback in `SpaceType`, defined in each editor's own code.
+   * Will be for a later round of cleanup though... */
+  LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
+    switch (sl->spacetype) {
+      case SPACE_VIEW3D: {
+        View3D *v3d = (View3D *)sl;
+
+        BKE_LIB_FOREACHID_PROCESS(data, v3d->camera, IDWALK_CB_NOP);
+  

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list