[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17587] branches/blender2.5/blender/source /blender/makesrna:
Brecht Van Lommel
brecht at blender.org
Wed Nov 26 23:52:02 CET 2008
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.");
}
More information about the Bf-blender-cvs
mailing list