add RNA_def_struct_ptr(...) to use for runtime struct registration, saves over 2000...
authorCampbell Barton <ideasman42@gmail.com>
Wed, 9 Jan 2013 05:32:15 +0000 (05:32 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 9 Jan 2013 05:32:15 +0000 (05:32 +0000)
source/blender/makesrna/RNA_define.h
source/blender/makesrna/intern/rna_ID.c
source/blender/makesrna/intern/rna_animation.c
source/blender/makesrna/intern/rna_define.c
source/blender/makesrna/intern/rna_render.c
source/blender/makesrna/intern/rna_ui.c
source/blender/makesrna/intern/rna_userdef.c
source/blender/makesrna/intern/rna_wm.c
source/blender/windowmanager/intern/wm_operators.c

index a435f9b0206a8f274ceeec14cb1785de342c5406..463e0e046795e01f6eb733ea89d9ea3f58828612 100644 (file)
@@ -49,6 +49,7 @@ void RNA_exit(void);
 
 /* Struct */
 
+StructRNA *RNA_def_struct_ptr(BlenderRNA *brna, const char *identifier, StructRNA *srnafrom);
 StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from);
 void RNA_def_struct_sdna(StructRNA *srna, const char *structname);
 void RNA_def_struct_sdna_from(StructRNA *srna, const char *structname, const char *propname);
index 11ce7345e41656c4e38f1c3e18783cf80a1b1ee5..184ee23b4885dcd1fbb6a2fe10211f7e685ecc63 100644 (file)
@@ -248,7 +248,7 @@ StructRNA *rna_PropertyGroup_register(Main *UNUSED(bmain), ReportList *reports,
                return NULL;
        }
 
-       return RNA_def_struct(&BLENDER_RNA, identifier, "PropertyGroup");  /* XXX */
+       return RNA_def_struct_ptr(&BLENDER_RNA, identifier, &RNA_PropertyGroup);  /* XXX */
 }
 
 StructRNA *rna_PropertyGroup_refine(PointerRNA *ptr)
index cedb741b9948f5996347338a9dd537bc840e5e93..020ad2c147a8f4b21148cdb67c6bb16f26d429fa 100644 (file)
@@ -234,7 +234,7 @@ static StructRNA *rna_KeyingSetInfo_register(Main *bmain, ReportList *reports, v
        memcpy(ksi, &dummyksi, sizeof(KeyingSetInfo));
        
        /* set RNA-extensions info */
-       ksi->ext.srna = RNA_def_struct(&BLENDER_RNA, ksi->idname, "KeyingSetInfo");
+       ksi->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, ksi->idname, &RNA_KeyingSetInfo);
        ksi->ext.data = data;
        ksi->ext.call = call;
        ksi->ext.free = free;
index 0a8254cb9c115ec6a0b767a377d1ab24fc872cfe..b94d7eb691f20e390ebd5814be46acc1aee23f7c 100644 (file)
@@ -623,13 +623,12 @@ static StructDefRNA *rna_find_def_struct(StructRNA *srna)
 }
 
 /* Struct Definition */
-
-StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
+StructRNA *RNA_def_struct_ptr(BlenderRNA *brna, const char *identifier, StructRNA *srnafrom)
 {
-       StructRNA *srna, *srnafrom = NULL;
+       StructRNA *srna;
        StructDefRNA *ds = NULL, *dsfrom = NULL;
        PropertyRNA *prop;
-       
+
        if (DefRNA.preprocess) {
                char error[512];
 
@@ -638,18 +637,6 @@ StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *
                        DefRNA.error = 1;
                }
        }
-       
-       if (from) {
-               /* find struct to derive from */
-               for (srnafrom = brna->structs.first; srnafrom; srnafrom = srnafrom->cont.next)
-                       if (strcmp(srnafrom->identifier, from) == 0)
-                               break;
-
-               if (!srnafrom) {
-                       fprintf(stderr, "%s: struct %s not found to define %s.\n", __func__, from, identifier);
-                       DefRNA.error = 1;
-               }
-       }
 
        srna = MEM_callocN(sizeof(StructRNA), "StructRNA");
        DefRNA.laststruct = srna;
@@ -670,7 +657,7 @@ StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *
                else
                        srna->base = srnafrom;
        }
-       
+
        srna->identifier = identifier;
        srna->name = identifier; /* may be overwritten later RNA_def_struct_ui_text */
        srna->description = "";
@@ -741,6 +728,28 @@ StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *
        return srna;
 }
 
+StructRNA *RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
+{
+       StructRNA *srnafrom = NULL;
+
+       /* only use RNA_def_struct() while pre-processing, otherwise use RNA_def_struct_ptr() */
+       BLI_assert(DefRNA.preprocess);
+
+       if (from) {
+               /* find struct to derive from */
+               for (srnafrom = brna->structs.first; srnafrom; srnafrom = srnafrom->cont.next)
+                       if (strcmp(srnafrom->identifier, from) == 0)
+                               break;
+
+               if (!srnafrom) {
+                       fprintf(stderr, "%s: struct %s not found to define %s.\n", __func__, from, identifier);
+                       DefRNA.error = 1;
+               }
+       }
+
+       return RNA_def_struct_ptr(brna, identifier, srnafrom);
+}
+
 void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
 {
        StructDefRNA *ds;
index 91b25bbc40ac80ae1000293ef61ec874a7737ba1..5931440b4221ca9048741f6746012d1567c21271 100644 (file)
@@ -196,7 +196,7 @@ static StructRNA *rna_RenderEngine_register(Main *bmain, ReportList *reports, vo
        et = MEM_callocN(sizeof(RenderEngineType), "python render engine");
        memcpy(et, &dummyet, sizeof(dummyet));
 
-       et->ext.srna = RNA_def_struct(&BLENDER_RNA, et->idname, "RenderEngine");
+       et->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, et->idname, &RNA_RenderEngine);
        et->ext.data = data;
        et->ext.call = call;
        et->ext.free = free;
index 0d8acb207a89aaca6047be1607970a99a0e11fc0..137ffecac9a07de4790b35012b761296c39e0729 100644 (file)
@@ -225,7 +225,7 @@ static StructRNA *rna_Panel_register(Main *bmain, ReportList *reports, void *dat
        pt = MEM_callocN(sizeof(PanelType), "python buttons panel");
        memcpy(pt, &dummypt, sizeof(dummypt));
 
-       pt->ext.srna = RNA_def_struct(&BLENDER_RNA, pt->idname, "Panel");
+       pt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, pt->idname, &RNA_Panel);
        pt->ext.data = data;
        pt->ext.call = call;
        pt->ext.free = free;
@@ -338,7 +338,7 @@ static StructRNA *rna_UIList_register(Main *bmain, ReportList *reports, void *da
        ult = MEM_callocN(sizeof(uiListType) + over_alloc, "python uilist");
        memcpy(ult, &dummyult, sizeof(dummyult));
 
-       ult->ext.srna = RNA_def_struct(&BLENDER_RNA, ult->idname, "UIList");
+       ult->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, ult->idname, &RNA_UIList);
        ult->ext.data = data;
        ult->ext.call = call;
        ult->ext.free = free;
@@ -439,7 +439,7 @@ static StructRNA *rna_Header_register(Main *bmain, ReportList *reports, void *da
        ht = MEM_callocN(sizeof(HeaderType), "python buttons header");
        memcpy(ht, &dummyht, sizeof(dummyht));
 
-       ht->ext.srna = RNA_def_struct(&BLENDER_RNA, ht->idname, "Header");
+       ht->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, ht->idname, &RNA_Header);
        ht->ext.data = data;
        ht->ext.call = call;
        ht->ext.free = free;
@@ -572,7 +572,7 @@ static StructRNA *rna_Menu_register(Main *bmain, ReportList *reports, void *data
                mt->description = buf;
        }
 
-       mt->ext.srna = RNA_def_struct(&BLENDER_RNA, mt->idname, "Menu");
+       mt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, mt->idname, &RNA_Menu);
        mt->ext.data = data;
        mt->ext.call = call;
        mt->ext.free = free;
index 07390958bd98d7f65dffcc981c45585b9885bfe3..74fcd44fb3852ce743b9b5a2191ca85df10b1e72 100644 (file)
@@ -514,7 +514,7 @@ static StructRNA *rna_AddonPref_register(Main *bmain, ReportList *reports, void
        memcpy(apt, &dummyapt, sizeof(dummyapt));
        BKE_addon_pref_type_add(apt);
 
-       apt->ext.srna = RNA_def_struct(&BLENDER_RNA, identifier, "AddonPreferences");
+       apt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, identifier, &RNA_AddonPreferences);
        apt->ext.data = data;
        apt->ext.call = call;
        apt->ext.free = free;
index f46d24bc01cfaedeef6a4e6b3035b30d6040270f..f416d3403add77efa2d702f1172f1b07f290eb9e 100644 (file)
@@ -1138,7 +1138,7 @@ static StructRNA *rna_Operator_register(Main *bmain, ReportList *reports, void *
         * for now just remove from dir(bpy.types) */
 
        /* create a new operator type */
-       dummyot.ext.srna = RNA_def_struct(&BLENDER_RNA, dummyot.idname, "Operator");
+       dummyot.ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, dummyot.idname, &RNA_Operator);
        RNA_def_struct_flag(dummyot.ext.srna, STRUCT_NO_IDPROPERTIES); /* operator properties are registered separately */
        dummyot.ext.data = data;
        dummyot.ext.call = call;
@@ -1219,7 +1219,7 @@ static StructRNA *rna_MacroOperator_register(Main *bmain, ReportList *reports, v
         * for now just remove from dir(bpy.types) */
 
        /* create a new operator type */
-       dummyot.ext.srna = RNA_def_struct(&BLENDER_RNA, dummyot.idname, "Operator");
+       dummyot.ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, dummyot.idname, &RNA_Operator);
        dummyot.ext.data = data;
        dummyot.ext.call = call;
        dummyot.ext.free = free;
index 81e469f8c5aa4329cb85d64cebf8c4d7aa61727f..b2c3c9355531af248afceffd010132e9148daf37 100644 (file)
@@ -151,7 +151,7 @@ void WM_operatortype_append(void (*opfunc)(wmOperatorType *))
        wmOperatorType *ot;
        
        ot = MEM_callocN(sizeof(wmOperatorType), "operatortype");
-       ot->srna = RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties");
+       ot->srna = RNA_def_struct_ptr(&BLENDER_RNA, "", &RNA_OperatorProperties);
        /* Set the default i18n context now, so that opfunc can redefine it if needed! */
        RNA_def_struct_translation_context(ot->srna, BLF_I18NCONTEXT_OPERATOR_DEFAULT);
        opfunc(ot);
@@ -173,7 +173,7 @@ void WM_operatortype_append_ptr(void (*opfunc)(wmOperatorType *, void *), void *
        wmOperatorType *ot;
 
        ot = MEM_callocN(sizeof(wmOperatorType), "operatortype");
-       ot->srna = RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties");
+       ot->srna = RNA_def_struct_ptr(&BLENDER_RNA, "", &RNA_OperatorProperties);
        /* Set the default i18n context now, so that opfunc can redefine it if needed! */
        RNA_def_struct_translation_context(ot->srna, BLF_I18NCONTEXT_OPERATOR_DEFAULT);
        opfunc(ot, userdata);
@@ -360,7 +360,7 @@ wmOperatorType *WM_operatortype_append_macro(const char *idname, const char *nam
        }
        
        ot = MEM_callocN(sizeof(wmOperatorType), "operatortype");
-       ot->srna = RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties");
+       ot->srna = RNA_def_struct_ptr(&BLENDER_RNA, "", &RNA_OperatorProperties);
        
        ot->idname = idname;
        ot->name = name;
@@ -390,7 +390,7 @@ void WM_operatortype_append_macro_ptr(void (*opfunc)(wmOperatorType *, void *),
        wmOperatorType *ot;
 
        ot = MEM_callocN(sizeof(wmOperatorType), "operatortype");
-       ot->srna = RNA_def_struct(&BLENDER_RNA, "", "OperatorProperties");
+       ot->srna = RNA_def_struct_ptr(&BLENDER_RNA, "", &RNA_OperatorProperties);
 
        ot->flag = OPTYPE_MACRO;
        ot->exec = wm_macro_exec;