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

Reply via email to