[Bf-blender-cvs] [8843705f651] master: Fix (unreported) missing rna path for some background image properties.

Bastien Montagne noreply at git.blender.org
Wed Jun 8 18:00:53 CEST 2022


Commit: 8843705f651f0150d22b9f99e4cac9b7a641adbf
Author: Bastien Montagne
Date:   Wed Jun 8 17:49:40 2022 +0200
Branches: master
https://developer.blender.org/rB8843705f651f0150d22b9f99e4cac9b7a641adbf

Fix (unreported) missing rna path for some background image properties.

RNA camera code did not handle path for its image/movieclip users
sub-data, and moviclip RNA struct definition did not have a rna path
function at all.

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

M	source/blender/makesrna/intern/rna_camera.c
M	source/blender/makesrna/intern/rna_image.c
M	source/blender/makesrna/intern/rna_internal.h
M	source/blender/makesrna/intern/rna_movieclip.c

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

diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c
index dcf0647392e..9628c6b2d65 100644
--- a/source/blender/makesrna/intern/rna_camera.c
+++ b/source/blender/makesrna/intern/rna_camera.c
@@ -125,6 +125,24 @@ static char *rna_Camera_background_image_path(const PointerRNA *ptr)
   return NULL;
 }
 
+char *rna_CameraBackgroundImage_image_or_movieclip_user_path(const PointerRNA *ptr)
+{
+  const char *user = ptr->data;
+  Camera *camera = (Camera *)ptr->owner_id;
+
+  int bgpic_index = BLI_findindex(&camera->bg_images, user - offsetof(CameraBGImage, iuser));
+  if (bgpic_index >= 0) {
+    return BLI_sprintfN("background_images[%d].image_user", bgpic_index);
+  }
+
+  bgpic_index = BLI_findindex(&camera->bg_images, user - offsetof(CameraBGImage, cuser));
+  if (bgpic_index >= 0) {
+    return BLI_sprintfN("background_images[%d].clip_user", bgpic_index);
+  }
+
+  return NULL;
+}
+
 static bool rna_Camera_background_images_override_apply(Main *bmain,
                                                         PointerRNA *ptr_dst,
                                                         PointerRNA *ptr_src,
@@ -272,6 +290,7 @@ static void rna_def_camera_background_image(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "image_user", PROP_POINTER, PROP_NONE);
   RNA_def_property_flag(prop, PROP_NEVER_NULL);
+  RNA_def_property_struct_type(prop, "ImageUser");
   RNA_def_property_pointer_sdna(prop, NULL, "iuser");
   RNA_def_property_ui_text(
       prop,
diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c
index c7b713d80f5..b7725415d88 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -182,12 +182,12 @@ static char *rna_ImageUser_path(const PointerRNA *ptr)
 
     switch (GS(ptr->owner_id->name)) {
       case ID_OB:
-      case ID_TE: {
+      case ID_TE:
         return BLI_strdup("image_user");
-      }
-      case ID_NT: {
+      case ID_NT:
         return rna_Node_ImageUser_path(ptr);
-      }
+      case ID_CA:
+        return rna_CameraBackgroundImage_image_or_movieclip_user_path(ptr);
       default:
         break;
     }
diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h
index 058c63f640a..9e743a4f205 100644
--- a/source/blender/makesrna/intern/rna_internal.h
+++ b/source/blender/makesrna/intern/rna_internal.h
@@ -404,6 +404,7 @@ bool rna_GPencil_datablocks_obdata_poll(struct PointerRNA *ptr, const struct Poi
 
 char *rna_TextureSlot_path(const struct PointerRNA *ptr);
 char *rna_Node_ImageUser_path(const struct PointerRNA *ptr);
+char *rna_CameraBackgroundImage_image_or_movieclip_user_path(const struct PointerRNA *ptr);
 
 /* Set U.is_dirty and redraw. */
 
diff --git a/source/blender/makesrna/intern/rna_movieclip.c b/source/blender/makesrna/intern/rna_movieclip.c
index e9b49dbe7d1..6aae0d72b14 100644
--- a/source/blender/makesrna/intern/rna_movieclip.c
+++ b/source/blender/makesrna/intern/rna_movieclip.c
@@ -118,6 +118,22 @@ static PointerRNA rna_MovieClip_metadata_get(MovieClip *clip)
   return ptr;
 }
 
+static char *rna_MovieClipUser_path(const PointerRNA *ptr)
+{
+  if (ptr->owner_id) {
+    /* MovieClipUser *mc_user = ptr->data; */
+
+    switch (GS(ptr->owner_id->name)) {
+      case ID_CA:
+        return rna_CameraBackgroundImage_image_or_movieclip_user_path(ptr);
+      default:
+        break;
+    }
+  }
+
+  return BLI_strdup("");
+}
+
 #else
 
 static void rna_def_movieclip_proxy(BlenderRNA *brna)
@@ -244,7 +260,7 @@ static void rna_def_movieclip_proxy(BlenderRNA *brna)
   RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_MovieClip_reload_update");
 }
 
-static void rna_def_moviecliUser(BlenderRNA *brna)
+static void rna_def_movieclipUser(BlenderRNA *brna)
 {
   StructRNA *srna;
   PropertyRNA *prop;
@@ -263,6 +279,7 @@ static void rna_def_moviecliUser(BlenderRNA *brna)
       srna,
       "Movie Clip User",
       "Parameters defining how a MovieClip data-block is used by another data-block");
+  RNA_def_struct_path_func(srna, "rna_MovieClipUser_path");
 
   prop = RNA_def_property(srna, "frame_current", PROP_INT, PROP_TIME);
   RNA_def_property_int_sdna(prop, NULL, "framenr");
@@ -435,7 +452,7 @@ void RNA_def_movieclip(BlenderRNA *brna)
 {
   rna_def_movieclip(brna);
   rna_def_movieclip_proxy(brna);
-  rna_def_moviecliUser(brna);
+  rna_def_movieclipUser(brna);
   rna_def_movieClipScopes(brna);
 }



More information about the Bf-blender-cvs mailing list