diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2016-12-12 17:23:55 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2016-12-12 17:46:06 +0300 |
commit | 440d1042798113a0e8115ea1f1d016a44712e7a0 (patch) | |
tree | 147ca3dfc851aa635538a988005afa5ed89ac65a /source/blender/makesrna/intern/makesrna.c | |
parent | 62703850ad560b5832c4e42143f563d11ba21cf4 (diff) |
Refactor RNA property: split flags in property flags, parameter flags, and internal flags.
This gives us 9 flags available again for properties (we had none anymore),
and also makes things slightly cleaner.
To simplify (and make more clear the differences between mere properties
and function parameters), also added RNA_def_parameter_flags function (and
its clear counterpart), to be used instead of RNA_def_property_flag for
function parameters.
This patch is also a big cleanup (some RNA function definitions were
still using 'prop' PropertyRNA pointer, etc.).
And yes, am aware this will be annoying for all branches, but we really need
to get new flags available for properties (will need at least one for override, etc.).
Reviewers: sergey, Severin
Subscribers: dfelinto, brecht
Differential Revision: https://developer.blender.org/D2400
Diffstat (limited to 'source/blender/makesrna/intern/makesrna.c')
-rw-r--r-- | source/blender/makesrna/intern/makesrna.c | 74 |
1 files changed, 42 insertions, 32 deletions
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 309d39a379f..d5576978e23 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -463,7 +463,7 @@ static const char *rna_parameter_type_name(PropertyRNA *parm) { PointerPropertyRNA *pparm = (PointerPropertyRNA *)parm; - if (parm->flag & PROP_RNAPTR) + if (parm->flag_parameter & PARM_RNAPTR) return "PointerRNA"; else return rna_find_dna_type((const char *)pparm->type); @@ -1409,23 +1409,23 @@ static void rna_set_raw_property(PropertyDefRNA *dp, PropertyRNA *prop) if (STREQ(dp->dnatype, "char")) { prop->rawtype = PROP_RAW_CHAR; - prop->flag |= PROP_RAW_ACCESS; + prop->flag_internal |= PROP_INTERN_RAW_ACCESS; } else if (STREQ(dp->dnatype, "short")) { prop->rawtype = PROP_RAW_SHORT; - prop->flag |= PROP_RAW_ACCESS; + prop->flag_internal |= PROP_INTERN_RAW_ACCESS; } else if (STREQ(dp->dnatype, "int")) { prop->rawtype = PROP_RAW_INT; - prop->flag |= PROP_RAW_ACCESS; + prop->flag_internal |= PROP_INTERN_RAW_ACCESS; } else if (STREQ(dp->dnatype, "float")) { prop->rawtype = PROP_RAW_FLOAT; - prop->flag |= PROP_RAW_ACCESS; + prop->flag_internal |= PROP_INTERN_RAW_ACCESS; } else if (STREQ(dp->dnatype, "double")) { prop->rawtype = PROP_RAW_DOUBLE; - prop->flag |= PROP_RAW_ACCESS; + prop->flag_internal |= PROP_INTERN_RAW_ACCESS; } } @@ -1553,7 +1553,7 @@ static void rna_def_property_funcs(FILE *f, StructRNA *srna, PropertyDefRNA *dp) if (STREQ((const char *)cprop->next, "rna_iterator_array_next") && STREQ((const char *)cprop->get, "rna_iterator_array_get")) { - prop->flag |= PROP_RAW_ARRAY; + prop->flag_internal |= PROP_INTERN_RAW_ARRAY; } cprop->get = (void *)rna_def_property_get_func(f, srna, prop, dp, (const char *)cprop->get); @@ -1599,8 +1599,9 @@ static void rna_def_property_funcs_header(FILE *f, StructRNA *srna, PropertyDefR prop = dp->prop; - if (prop->flag & (PROP_IDPROPERTY | PROP_BUILTIN)) + if (prop->flag & PROP_IDPROPERTY || prop->flag_internal & PROP_INTERN_BUILTIN) { return; + } func = rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), ""); @@ -1719,8 +1720,9 @@ static void rna_def_property_funcs_header_cpp(FILE *f, StructRNA *srna, Property prop = dp->prop; - if (prop->flag & (PROP_IDPROPERTY | PROP_BUILTIN)) + if (prop->flag & PROP_IDPROPERTY || prop->flag_internal & PROP_INTERN_BUILTIN) { return; + } /* disabled for now to avoid msvc compiler error due to large file size */ #if 0 @@ -1822,8 +1824,9 @@ static void rna_def_property_funcs_header_cpp(FILE *f, StructRNA *srna, Property CollectionPropertyRNA *cprop = (CollectionPropertyRNA *)dp->prop; const char *collection_funcs = "DefaultCollectionFunctions"; - if (!(dp->prop->flag & (PROP_IDPROPERTY | PROP_BUILTIN)) && cprop->property.srna) + if (!(dp->prop->flag & PROP_IDPROPERTY || dp->prop->flag_internal & PROP_INTERN_BUILTIN) && cprop->property.srna) { collection_funcs = (char *)cprop->property.srna; + } if (cprop->item_type) fprintf(f, "\tCOLLECTION_PROPERTY(%s, %s, %s, %s, %s, %s, %s)", collection_funcs, (const char *)cprop->item_type, srna->identifier, @@ -1879,7 +1882,7 @@ static void rna_def_struct_function_prototype_cpp(FILE *f, StructRNA *UNUSED(srn WRITE_PARAM("Context C"); for (dp = dfunc->cont.properties.first; dp; dp = dp->next) { - int type, flag, pout; + int type, flag, flag_parameter, pout; const char *ptrstr; if (dp->prop == func->c_ret) @@ -1887,7 +1890,8 @@ static void rna_def_struct_function_prototype_cpp(FILE *f, StructRNA *UNUSED(srn type = dp->prop->type; flag = dp->prop->flag; - pout = (flag & PROP_OUTPUT); + flag_parameter = dp->prop->flag_parameter; + pout = (flag_parameter & PARM_OUTPUT); if (flag & PROP_DYNAMIC) ptrstr = pout ? "**" : "*"; @@ -1903,7 +1907,7 @@ static void rna_def_struct_function_prototype_cpp(FILE *f, StructRNA *UNUSED(srn WRITE_COMMA; if (flag & PROP_DYNAMIC) - fprintf(f, "int %s%s_len, ", (flag & PROP_OUTPUT) ? "*" : "", dp->prop->identifier); + fprintf(f, "int %s%s_len, ", (flag_parameter & PARM_OUTPUT) ? "*" : "", dp->prop->identifier); if (!(flag & PROP_DYNAMIC) && dp->prop->arraydimension) fprintf(f, "%s %s[%u]", rna_parameter_type_cpp_name(dp->prop), @@ -1941,8 +1945,9 @@ static void rna_def_property_funcs_impl_cpp(FILE *f, StructRNA *srna, PropertyDe prop = dp->prop; - if (prop->flag & (PROP_IDPROPERTY | PROP_BUILTIN)) + if (prop->flag & PROP_IDPROPERTY || prop->flag_internal & PROP_INTERN_BUILTIN) { return; + } switch (prop->type) { case PROP_BOOLEAN: @@ -2075,9 +2080,9 @@ static void rna_def_struct_function_call_impl_cpp(FILE *f, StructRNA *srna, Func fprintf(f, "%s_len, ", dp->prop->identifier); if (dp->prop->type == PROP_POINTER) - if ((dp->prop->flag & PROP_RNAPTR) && !(dp->prop->flag & PROP_THICK_WRAP)) + if ((dp->prop->flag_parameter & PARM_RNAPTR) && !(dp->prop->flag & PROP_THICK_WRAP)) fprintf(f, "(::%s *) &%s.ptr", rna_parameter_type_name(dp->prop), rna_safe_id(dp->prop->identifier)); - else if (dp->prop->flag & PROP_OUTPUT) + else if (dp->prop->flag_parameter & PARM_OUTPUT) fprintf(f, "(::%s **) &%s->ptr.data", rna_parameter_type_name(dp->prop), rna_safe_id(dp->prop->identifier)); else fprintf(f, "(::%s *) %s.ptr.data", rna_parameter_type_name(dp->prop), rna_safe_id(dp->prop->identifier)); @@ -2110,7 +2115,7 @@ static void rna_def_struct_function_impl_cpp(FILE *f, StructRNA *srna, FunctionD fprintf(f, "\t\tPointerRNA result;\n"); - if ((dp->prop->flag & PROP_RNAPTR) == 0) { + if ((dp->prop->flag_parameter & PARM_RNAPTR) == 0) { StructRNA *ret_srna = rna_find_struct((const char *) pprop->type); fprintf(f, "\t\t::%s *retdata = ", rna_parameter_type_name(dp->prop)); rna_def_struct_function_call_impl_cpp(f, srna, dfunc); @@ -2221,7 +2226,7 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA const char *funcname, *valstr; const char *ptrstr; const bool has_data = (dfunc->cont.properties.first != NULL); - int flag, pout, cptr, first; + int flag, flag_parameter, pout, cptr, first; srna = dsrna->srna; func = dfunc->func; @@ -2254,8 +2259,9 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA for (; dparm; dparm = dparm->next) { type = dparm->prop->type; flag = dparm->prop->flag; - pout = (flag & PROP_OUTPUT); - cptr = ((type == PROP_POINTER) && !(flag & PROP_RNAPTR)); + flag_parameter = dparm->prop->flag_parameter; + pout = (flag_parameter & PARM_OUTPUT); + cptr = ((type == PROP_POINTER) && !(flag_parameter & PARM_RNAPTR)); if (dparm->prop == func->c_ret) ptrstr = cptr || dparm->prop->arraydimension ? "*" : ""; @@ -2265,7 +2271,7 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA /* fixed size arrays and RNA pointers are pre-allocated on the ParameterList stack, pass a pointer to it */ else if (type == PROP_POINTER || dparm->prop->arraydimension) ptrstr = "*"; - else if ((type == PROP_POINTER) && (flag & PROP_RNAPTR) && !(flag & PROP_THICK_WRAP)) + else if ((type == PROP_POINTER) && (flag_parameter & PARM_RNAPTR) && !(flag & PROP_THICK_WRAP)) ptrstr = "*"; /* PROP_THICK_WRAP strings are pre-allocated on the ParameterList stack, * but type name for string props is already (char *), so leave empty */ @@ -2311,8 +2317,9 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA for (; dparm; dparm = dparm->next) { type = dparm->prop->type; flag = dparm->prop->flag; - pout = (flag & PROP_OUTPUT); - cptr = ((type == PROP_POINTER) && !(flag & PROP_RNAPTR)); + flag_parameter = dparm->prop->flag_parameter; + pout = (flag_parameter & PARM_OUTPUT); + cptr = ((type == PROP_POINTER) && !(flag_parameter & PARM_RNAPTR)); if (dparm->prop == func->c_ret) fprintf(f, "\t_retdata = _data;\n"); @@ -2422,7 +2429,7 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA if (func->c_ret) { dparm = rna_find_parameter_def(func->c_ret); - ptrstr = (((dparm->prop->type == PROP_POINTER) && !(dparm->prop->flag & PROP_RNAPTR)) || + ptrstr = (((dparm->prop->type == PROP_POINTER) && !(dparm->prop->flag_parameter & PARM_RNAPTR)) || (dparm->prop->arraydimension)) ? "*" : ""; fprintf(f, "\t*((%s%s %s*)_retdata) = %s;\n", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), ptrstr, func->c_ret->identifier); @@ -2657,7 +2664,7 @@ static void rna_generate_static_parameter_prototypes(FILE *f, StructRNA *srna, F PropertyDefRNA *dparm; StructDefRNA *dsrna; PropertyType type; - int flag, pout, cptr, first; + int flag, flag_parameter, pout, cptr, first; const char *ptrstr; dsrna = rna_find_struct_def(srna); @@ -2668,7 +2675,7 @@ static void rna_generate_static_parameter_prototypes(FILE *f, StructRNA *srna, F if (dparm->prop == func->c_ret) { if (dparm->prop->arraydimension) fprintf(f, "XXX no array return types yet"); /* XXX not supported */ - else if (dparm->prop->type == PROP_POINTER && !(dparm->prop->flag & PROP_RNAPTR)) + else if (dparm->prop->type == PROP_POINTER && !(dparm->prop->flag_parameter & PARM_RNAPTR)) fprintf(f, "%s%s *", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop)); else fprintf(f, "%s%s ", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop)); @@ -2730,8 +2737,9 @@ static void rna_generate_static_parameter_prototypes(FILE *f, StructRNA *srna, F for (dparm = dfunc->cont.properties.first; dparm; dparm = dparm->next) { type = dparm->prop->type; flag = dparm->prop->flag; - pout = (flag & PROP_OUTPUT); - cptr = ((type == PROP_POINTER) && !(flag & PROP_RNAPTR)); + flag_parameter = dparm->prop->flag_parameter; + pout = (flag_parameter & PARM_OUTPUT); + cptr = ((type == PROP_POINTER) && !(flag_parameter & PARM_RNAPTR)); if (dparm->prop == func->c_ret) continue; @@ -2986,7 +2994,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr else fprintf(f, "NULL,\n"); fprintf(f, "\t%d, ", prop->magic); rna_print_c_string(f, prop->identifier); - fprintf(f, ", %d, ", prop->flag); + fprintf(f, ", %d, %d, %d, ", prop->flag, prop->flag_parameter, prop->flag_internal); rna_print_c_string(f, prop->name); fprintf(f, ",\n\t"); rna_print_c_string(f, prop->description); fprintf(f, ",\n\t"); fprintf(f, "%d, ", prop->icon); @@ -3008,7 +3016,7 @@ static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, Pr rna_function_string(prop->editable), rna_function_string(prop->itemeditable)); - if (prop->flag & PROP_RAW_ACCESS) rna_set_raw_offset(f, srna, prop); + if (prop->flag_internal & PROP_INTERN_RAW_ACCESS) rna_set_raw_offset(f, srna, prop); else fprintf(f, "\t0, -1"); /* our own type - collections/arrays only */ @@ -3796,9 +3804,11 @@ static const char *cpp_classes = "" static int rna_is_collection_prop(PropertyRNA *prop) { - if (!(prop->flag & (PROP_IDPROPERTY | PROP_BUILTIN))) - if (prop->type == PROP_COLLECTION) + if (!(prop->flag & PROP_IDPROPERTY || prop->flag_internal & PROP_INTERN_BUILTIN)) { + if (prop->type == PROP_COLLECTION) { return 1; + } + } return 0; } |