[Bf-blender-cvs] [5610ccdc080] master: Add a callback to `IDTypeInfo` to allow preservation of some data accross memfile undos

Bastien Montagne noreply at git.blender.org
Tue Nov 3 11:48:12 CET 2020


Commit: 5610ccdc080497042a24592432ade575e2fab489
Author: Bastien Montagne
Date:   Tue Nov 3 11:39:36 2020 +0100
Branches: master
https://developer.blender.org/rB5610ccdc080497042a24592432ade575e2fab489

Add a callback to `IDTypeInfo` to allow preservation of some data accross memfile undos

This is essentially adding that new callback, and using it only for already
existing Scene's 3DCursor.

Note that the place where this is called has been moved again, after all
have been lib-linked, such that those callbacks may also work on ID pointers.

Maniphest Tasks: T71759

Differential Revision: https://developer.blender.org/D9237

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

M	source/blender/blenkernel/BKE_idtype.h
M	source/blender/blenkernel/intern/action.c
M	source/blender/blenkernel/intern/armature.c
M	source/blender/blenkernel/intern/brush.c
M	source/blender/blenkernel/intern/cachefile.c
M	source/blender/blenkernel/intern/camera.c
M	source/blender/blenkernel/intern/collection.c
M	source/blender/blenkernel/intern/curve.c
M	source/blender/blenkernel/intern/font.c
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/blenkernel/intern/hair.c
M	source/blender/blenkernel/intern/image.c
M	source/blender/blenkernel/intern/ipo.c
M	source/blender/blenkernel/intern/key.c
M	source/blender/blenkernel/intern/lattice.c
M	source/blender/blenkernel/intern/lib_id.c
M	source/blender/blenkernel/intern/library.c
M	source/blender/blenkernel/intern/light.c
M	source/blender/blenkernel/intern/lightprobe.c
M	source/blender/blenkernel/intern/linestyle.c
M	source/blender/blenkernel/intern/mask.c
M	source/blender/blenkernel/intern/material.c
M	source/blender/blenkernel/intern/mball.c
M	source/blender/blenkernel/intern/mesh.c
M	source/blender/blenkernel/intern/movieclip.c
M	source/blender/blenkernel/intern/node.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/paint.c
M	source/blender/blenkernel/intern/particle.c
M	source/blender/blenkernel/intern/pointcloud.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/screen.c
M	source/blender/blenkernel/intern/simulation.cc
M	source/blender/blenkernel/intern/sound.c
M	source/blender/blenkernel/intern/speaker.c
M	source/blender/blenkernel/intern/text.c
M	source/blender/blenkernel/intern/texture.c
M	source/blender/blenkernel/intern/volume.cc
M	source/blender/blenkernel/intern/workspace.c
M	source/blender/blenkernel/intern/world.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/makesdna/DNA_ID.h
M	source/blender/windowmanager/intern/wm.c

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

diff --git a/source/blender/blenkernel/BKE_idtype.h b/source/blender/blenkernel/BKE_idtype.h
index 3caf15d1b50..88b78a1c6cc 100644
--- a/source/blender/blenkernel/BKE_idtype.h
+++ b/source/blender/blenkernel/BKE_idtype.h
@@ -102,6 +102,10 @@ typedef void (*IDTypeBlendReadDataFunction)(struct BlendDataReader *reader, stru
 typedef void (*IDTypeBlendReadLibFunction)(struct BlendLibReader *reader, struct ID *id);
 typedef void (*IDTypeBlendReadExpandFunction)(struct BlendExpander *expander, struct ID *id);
 
+typedef void (*IDTypeBlendReadUndoPreserve)(struct BlendLibReader *reader,
+                                            struct ID *id_new,
+                                            struct ID *id_old);
+
 typedef struct IDTypeInfo {
   /* ********** General IDType data. ********** */
 
@@ -196,6 +200,13 @@ typedef struct IDTypeInfo {
    * Specify which other id data blocks should be loaded when the current one is loaded.
    */
   IDTypeBlendReadExpandFunction blend_read_expand;
+
+  /**
+   * Allow an ID type to preserve some of its data accross (memfile) undo steps.
+   *
+   * \note Called from #setup_app_data when undoing or redoing a memfile step.
+   */
+  IDTypeBlendReadUndoPreserve blend_read_undo_preserve;
 } IDTypeInfo;
 
 /* ********** Declaration of each IDTypeInfo. ********** */
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index cbecc91b4ec..c77153960ea 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -295,6 +295,8 @@ IDTypeInfo IDType_ID_AC = {
     .blend_read_data = action_blend_read_data,
     .blend_read_lib = action_blend_read_lib,
     .blend_read_expand = action_blend_read_expand,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 /* ***************** Library data level operations on action ************** */
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index bad2ed53436..2afa90c8088 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -329,6 +329,8 @@ IDTypeInfo IDType_ID_AR = {
     .blend_read_data = armature_blend_read_data,
     .blend_read_lib = armature_blend_read_lib,
     .blend_read_expand = armature_blend_read_expand,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 /** \} */
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 17243b328e8..d62ccf794f3 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -376,6 +376,8 @@ IDTypeInfo IDType_ID_BR = {
     .blend_read_data = brush_blend_read_data,
     .blend_read_lib = brush_blend_read_lib,
     .blend_read_expand = brush_blend_read_expand,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 static RNG *brush_rng;
diff --git a/source/blender/blenkernel/intern/cachefile.c b/source/blender/blenkernel/intern/cachefile.c
index 0ee0242866f..d6c31809a2e 100644
--- a/source/blender/blenkernel/intern/cachefile.c
+++ b/source/blender/blenkernel/intern/cachefile.c
@@ -140,6 +140,8 @@ IDTypeInfo IDType_ID_CF = {
     .blend_read_data = cache_file_blend_read_data,
     .blend_read_lib = NULL,
     .blend_read_expand = NULL,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 /* TODO: make this per cache file to avoid global locks. */
diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c
index 3980a552855..0ca22e34973 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -201,6 +201,8 @@ IDTypeInfo IDType_ID_CA = {
     .blend_read_data = camera_blend_read_data,
     .blend_read_lib = camera_blend_read_lib,
     .blend_read_expand = camera_blend_read_expand,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 /** \} */
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index 870a137ede9..b1222e9527c 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -359,6 +359,8 @@ IDTypeInfo IDType_ID_GR = {
     .blend_read_data = collection_blend_read_data,
     .blend_read_lib = collection_blend_read_lib,
     .blend_read_expand = collection_blend_read_expand,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 /** \} */
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index fa45a4ba836..f275299d8f1 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -325,6 +325,8 @@ IDTypeInfo IDType_ID_CU = {
     .blend_read_data = curve_blend_read_data,
     .blend_read_lib = curve_blend_read_lib,
     .blend_read_expand = curve_blend_read_expand,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 static int cu_isectLL(const float v1[3],
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index e0bbdfaeed6..70f8483efd3 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -168,6 +168,8 @@ IDTypeInfo IDType_ID_VF = {
     .blend_read_data = vfont_blend_read_data,
     .blend_read_lib = NULL,
     .blend_read_expand = NULL,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 /***************************** VFont *******************************/
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 6c6ca996caa..a4e07a76602 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -288,6 +288,8 @@ IDTypeInfo IDType_ID_GD = {
     .blend_read_data = greasepencil_blend_read_data,
     .blend_read_lib = greasepencil_blend_read_lib,
     .blend_read_expand = greasepencil_blend_read_expand,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 /* ************************************************** */
diff --git a/source/blender/blenkernel/intern/hair.c b/source/blender/blenkernel/intern/hair.c
index 313b0d192dc..554919ad1a0 100644
--- a/source/blender/blenkernel/intern/hair.c
+++ b/source/blender/blenkernel/intern/hair.c
@@ -195,6 +195,8 @@ IDTypeInfo IDType_ID_HA = {
     .blend_read_data = hair_blend_read_data,
     .blend_read_lib = hair_blend_read_lib,
     .blend_read_expand = hair_blend_read_expand,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 static void hair_random(Hair *hair)
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index cadd442ad9e..5fb5e13d876 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -325,6 +325,8 @@ IDTypeInfo IDType_ID_IM = {
     .blend_read_data = image_blend_read_data,
     .blend_read_lib = image_blend_read_lib,
     .blend_read_expand = NULL,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 /* prototypes */
diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c
index c09c5bf5cda..5d2defa3030 100644
--- a/source/blender/blenkernel/intern/ipo.c
+++ b/source/blender/blenkernel/intern/ipo.c
@@ -132,6 +132,8 @@ IDTypeInfo IDType_ID_IP = {
     .blend_read_data = NULL,
     .blend_read_lib = NULL,
     .blend_read_expand = NULL,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 /* *************************************************** */
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index 95a8419b95d..587b9eb1436 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -214,6 +214,8 @@ IDTypeInfo IDType_ID_KE = {
     .blend_read_data = shapekey_blend_read_data,
     .blend_read_lib = shapekey_blend_read_lib,
     .blend_read_expand = shapekey_blend_read_expand,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 #define KEY_MODE_DUMMY 0 /* use where mode isn't checked for */
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index c0eb6b4b134..74f78106be5 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -203,6 +203,8 @@ IDTypeInfo IDType_ID_LT = {
     .blend_read_data = lattice_blend_read_data,
     .blend_read_lib = lattice_blend_read_lib,
     .blend_read_expand = lattice_blend_read_expand,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 int BKE_lattice_index_from_uvw(Lattice *lt, const int u, const int v, const int w)
diff --git a/source/blender/blenkernel/intern/lib_id.c b/source/blender/blenkernel/intern/lib_id.c
index ae6ee71da82..a7094a33752 100644
--- a/source/blender/blenkernel/intern/lib_id.c
+++ b/source/blender/blenkernel/intern/lib_id.c
@@ -101,6 +101,15 @@ IDTypeInfo IDType_ID_LINK_PLACEHOLDER = {
     .copy_data = NULL,
     .free_data = NULL,
     .make_local = NULL,
+    .foreach_id = NULL,
+    .foreach_cache = NULL,
+
+    .blend_write = NULL,
+    .blend_read_data = NULL,
+    .blend_read_lib = NULL,
+    .blend_read_expand = NULL,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 /* GS reads the memory pointed at in a specific ordering.
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 949e10d4721..6a560d51362 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -82,6 +82,8 @@ IDTypeInfo IDType_ID_LI = {
     .blend_read_data = NULL,
     .blend_read_lib = NULL,
     .blend_read_expand = NULL,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 void BKE_library_filepath_set(Main *bmain, Library *lib, const char *filepath)
diff --git a/source/blender/blenkernel/intern/light.c b/source/blender/blenkernel/intern/light.c
index 4780f0cf208..a47a0c043ff 100644
--- a/source/blender/blenkernel/intern/light.c
+++ b/source/blender/blenkernel/intern/light.c
@@ -207,6 +207,8 @@ IDTypeInfo IDType_ID_LA = {
     .blend_read_data = light_blend_read_data,
     .blend_read_lib = light_blend_read_lib,
     .blend_read_expand = light_blend_read_expand,
+
+    .blend_read_undo_preserve = NULL,
 };
 
 Light *BKE_light_add(Main *bmain, const char *name)
diff --git a/source/blender/blenkernel/intern/lightprobe.c b/source/blender/blenkernel/intern/lightprobe.c
in

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list