Revision: 17587 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17587 Author: blendix Date: 2008-11-26 23:52:01 +0100 (Wed, 26 Nov 2008)
Log Message: ----------- RNA * Added support for auto generating enum properties that are defined as bitflags mixed with other flags (use for shadow type in la->mode now). Modified Paths: -------------- branches/blender2.5/blender/source/blender/makesrna/RNA_define.h branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c Modified: branches/blender2.5/blender/source/blender/makesrna/RNA_define.h =================================================================== --- branches/blender2.5/blender/source/blender/makesrna/RNA_define.h 2008-11-26 22:24:26 UTC (rev 17586) +++ branches/blender2.5/blender/source/blender/makesrna/RNA_define.h 2008-11-26 22:52:01 UTC (rev 17587) @@ -54,7 +54,7 @@ void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname); void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname); void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname); -void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname); +void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname, int bitflags); void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname); void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname); Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c =================================================================== --- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2008-11-26 22:24:26 UTC (rev 17586) +++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2008-11-26 22:52:01 UTC (rev 17587) @@ -44,6 +44,8 @@ #endif #endif +/* Sorting */ + int cmp_struct(const void *a, const void *b) { const StructRNA *structa= *(const StructRNA**)a; @@ -146,6 +148,17 @@ } } +static int rna_enum_bitmask(PropertyRNA *prop) +{ + EnumPropertyRNA *eprop= (EnumPropertyRNA*)prop; + int a, mask= 0; + + for(a=0; a<eprop->totitem; a++) + mask |= eprop->item[a].value; + + return mask; +} + static char *rna_def_property_get_func(FILE *f, StructRNA *srna, PropertyRNA *prop, PropertyDefRNA *dp) { char *func; @@ -202,6 +215,8 @@ fprintf(f, " %s *data= (%s*)ptr->data;\n", dp->dnastructname, dp->dnastructname); if(prop->type == PROP_BOOLEAN && dp->booleanbit) fprintf(f, " return (((data->%s) & %d) != 0);\n", dp->dnaname, dp->booleanbit); + else if(prop->type == PROP_ENUM && dp->enumbitflags) + fprintf(f, " return ((data->%s) & %d);\n", dp->dnaname, rna_enum_bitmask(prop)); else fprintf(f, " return (%s)(data->%s);\n", rna_type_type(prop), dp->dnaname); fprintf(f, "}\n\n"); @@ -306,6 +321,10 @@ fprintf(f, " if(value) data->%s |= %d;\n", dp->dnaname, dp->booleanbit); fprintf(f, " else data->%s &= ~%d;\n", dp->dnaname, dp->booleanbit); } + else if(prop->type == PROP_ENUM && dp->enumbitflags) { + fprintf(f, " data->%s &= ~%d;\n", dp->dnaname, rna_enum_bitmask(prop)); + fprintf(f, " data->%s |= value;\n", dp->dnaname, rna_enum_bitmask(prop)); + } else { rna_clamp_value(f, prop); fprintf(f, " data->%s= value;\n", dp->dnaname); Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c =================================================================== --- branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c 2008-11-26 22:24:26 UTC (rev 17586) +++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_define.c 2008-11-26 22:52:01 UTC (rev 17587) @@ -519,7 +519,7 @@ } case PROP_ENUM: DefRNA.silent= 1; - RNA_def_property_enum_sdna(prop, NULL, identifier); + RNA_def_property_enum_sdna(prop, NULL, identifier, 0); DefRNA.silent= 0; break; case PROP_POINTER: @@ -953,7 +953,7 @@ rna_def_property_sdna(prop, structname, propname); } -void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname) +void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname, int bitflags) { PropertyDefRNA *dp; StructRNA *srna= DefRNA.laststruct; @@ -970,6 +970,8 @@ } if((dp=rna_def_property_sdna(prop, structname, propname))) { + dp->enumbitflags= bitflags; + if(prop->arraylength) { prop->arraylength= 0; if(!DefRNA.silent) { Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h =================================================================== --- branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h 2008-11-26 22:24:26 UTC (rev 17586) +++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h 2008-11-26 22:52:01 UTC (rev 17587) @@ -49,6 +49,7 @@ int dnapointerlevel; int booleanbit; + int enumbitflags; } PropertyDefRNA; typedef struct StructDefRNA { Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c =================================================================== --- branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c 2008-11-26 22:24:26 UTC (rev 17586) +++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c 2008-11-26 22:52:01 UTC (rev 17587) @@ -46,6 +46,11 @@ {LA_HEMI, "HEMI", "Hemi", ""}, {LA_AREA, "AREA", "Area", ""}, {0, NULL, NULL, NULL}}; + static EnumPropertyItem prop_shadow_items[] = { + {0, "NOSHADOW", "No Shadow", ""}, + {LA_SHAD_BUF, "BUFSHADOW", "Buffer Shadow", "Lets spotlight produce shadows using shadow buffer."}, + {LA_SHAD_RAY, "RAYSHADOW", "Ray Shadow", "Use ray tracing for shadow."}, + {0, NULL, NULL, NULL}}; srna= RNA_def_struct(brna, "Lamp", "ID", "Lamp"); @@ -66,6 +71,11 @@ RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Color", "Lamp color."); RNA_def_property_ui_range(prop, 0.0f , 1.0f, 10.0f, 3.0f); + + prop= RNA_def_property(srna, "shadow", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "mode", 1); /* use bitflags */ + RNA_def_property_enum_items(prop, prop_shadow_items); + RNA_def_property_ui_text(prop, "Shadow", "Method to compute lamp shadow."); } #endif Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c =================================================================== --- branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c 2008-11-26 22:24:26 UTC (rev 17586) +++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_scene.c 2008-11-26 22:52:01 UTC (rev 17587) @@ -111,7 +111,7 @@ RNA_def_property_ui_text(prop, "Stamp Note", "User define note for the render stamping."); prop= RNA_def_property(srna, "unwrapper", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "toolsettings->unwrapper"); + RNA_def_property_enum_sdna(prop, NULL, "toolsettings->unwrapper", 0); RNA_def_property_enum_items(prop, unwrapper_items); RNA_def_property_ui_text(prop, "Unwrapper", "Unwrap algorithm used by the Unwrap tool."); } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs