Revision: 17494
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17494
Author:   blendix
Date:     2008-11-18 11:57:06 +0100 (Tue, 18 Nov 2008)

Log Message:
-----------

RNA minor changes
* Added start of lamp wrapping (code by Michael Fox).
* Add back Object.data, was crashing with unknown data type.
* Added support for using consecutive variables like float r, g, b;
  as an array without writing a manual get/set function.
* Also note the RNA documentation is updated now to be more
  about how to define RNA and use it, including some diagrams.

http://wiki.blender.org/index.php/BlenderDev/Blender2.5/RNA

Modified Paths:
--------------
    
branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c
    branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_main.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_object.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_rna.c

Added Paths:
-----------
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c

Modified: 
branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c
  2008-11-18 07:53:36 UTC (rev 17493)
+++ 
branches/blender2.5/blender/source/blender/editors/space_outliner/space_outliner.c
  2008-11-18 10:57:06 UTC (rev 17494)
@@ -186,6 +186,7 @@
        PropertyType type;
        PropertyRNA *prop;
        char *vectoritem[4]= {"x", "y", "z", "w"};
+       char *quatitem[4]= {"w", "x", "y", "z"};
        char *coloritem[4]= {"r", "g", "b", "a"};
        char item[32];
        int arraylength;
@@ -199,7 +200,9 @@
                uiDefBut(block, LABEL, 0, (char*)RNA_property_ui_name(prop, 
&cell->ptr), rct->xmin, rct->ymin, rct->xmax-rct->xmin, rct->ymax-rct->ymin, 0, 
0, 0, 0, 0, (char*)RNA_property_ui_description(prop, &cell->ptr));
        }
        else if (type != PROP_COLLECTION) {
-               if(arraylength <= 4 && (subtype == PROP_VECTOR || subtype == 
PROP_ROTATION))
+               if(arraylength == 4 && subtype == PROP_ROTATION)
+                       sprintf(item, "    %s", quatitem[cell->index]);
+               else if(arraylength <= 4 && (subtype == PROP_VECTOR || subtype 
== PROP_ROTATION))
                        sprintf(item, "    %s", vectoritem[cell->index]);
                else if(arraylength <= 4 && subtype == PROP_COLOR)
                        sprintf(item, "    %s", coloritem[cell->index]);

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c       
2008-11-18 07:53:36 UTC (rev 17493)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c       
2008-11-18 10:57:06 UTC (rev 17494)
@@ -129,12 +129,18 @@
                                fprintf(f, "static %s %s(PointerRNA *ptr, int 
index)\n", rna_type_type(prop), func);
                                fprintf(f, "{\n");
                                fprintf(f, "    %s *data= (%s*)ptr->data;\n", 
dp->dnastructname, dp->dnastructname);
-                               if(prop->type == PROP_BOOLEAN && dp->booleanbit 
&& dp->dnaarraylength==1)
-                                       fprintf(f, "    return ((data->%s & 
(%d<<index)) != 0);\n", dp->dnaname, dp->booleanbit);
-                               else if(prop->type == PROP_BOOLEAN && 
dp->booleanbit)
-                                       fprintf(f, "    return 
((data->%s[index] & %d) != 0);\n", dp->dnaname, dp->booleanbit);
-                               else
-                                       fprintf(f, "    return 
(%s)(data->%s[index]);\n", rna_type_type(prop), dp->dnaname);
+                               if(dp->dnaarraylength == 1) {
+                                       if(prop->type == PROP_BOOLEAN && 
dp->booleanbit)
+                                               fprintf(f, "    return 
((data->%s & (%d<<index)) != 0);\n", dp->dnaname, dp->booleanbit);
+                                       else
+                                               fprintf(f, "    return 
(%s)((&data->%s)[index]);\n", rna_type_type(prop), dp->dnaname);
+                               }
+                               else {
+                                       if(prop->type == PROP_BOOLEAN && 
dp->booleanbit)
+                                               fprintf(f, "    return 
((data->%s[index] & %d) != 0);\n", dp->dnaname, dp->booleanbit);
+                                       else
+                                               fprintf(f, "    return 
(%s)(data->%s[index]);\n", rna_type_type(prop), dp->dnaname);
+                               }
                                fprintf(f, "}\n\n");
                        }
                        else {
@@ -214,17 +220,25 @@
                                fprintf(f, "static void %s(PointerRNA *ptr, int 
index, %s value)\n", func, rna_type_type(prop));
                                fprintf(f, "{\n");
                                fprintf(f, "    %s *data= (%s*)ptr->data;\n", 
dp->dnastructname, dp->dnastructname);
-                               if(prop->type == PROP_BOOLEAN && dp->booleanbit 
&& dp->dnaarraylength==1) {
-                                       fprintf(f, "    if(value) data->%s |= 
(%d<<index);\n", dp->dnaname, dp->booleanbit);
-                                       fprintf(f, "    else data->%s &= 
~(%d<<index);\n", dp->dnaname, dp->booleanbit);
+                               if(dp->dnaarraylength == 1) {
+                                       if(prop->type == PROP_BOOLEAN && 
dp->booleanbit) {
+                                               fprintf(f, "    if(value) 
data->%s |= (%d<<index);\n", dp->dnaname, dp->booleanbit);
+                                               fprintf(f, "    else data->%s 
&= ~(%d<<index);\n", dp->dnaname, dp->booleanbit);
+                                       }
+                                       else {
+                                               rna_clamp_value(f, prop);
+                                               fprintf(f, "    
(&data->%s)[index]= value;\n", dp->dnaname);
+                                       }
                                }
-                               else if(prop->type == PROP_BOOLEAN && 
dp->booleanbit) {
-                                       fprintf(f, "    if(value) 
data->%s[index] |= %d;\n", dp->dnaname, dp->booleanbit);
-                                       fprintf(f, "    else data->%s[index] &= 
~%d;\n", dp->dnaname, dp->booleanbit);
-                               }
                                else {
-                                       rna_clamp_value(f, prop);
-                                       fprintf(f, "    data->%s[index]= 
value;\n", dp->dnaname);
+                                       if(prop->type == PROP_BOOLEAN && 
dp->booleanbit) {
+                                               fprintf(f, "    if(value) 
data->%s[index] |= %d;\n", dp->dnaname, dp->booleanbit);
+                                               fprintf(f, "    else 
data->%s[index] &= ~%d;\n", dp->dnaname, dp->booleanbit);
+                                       }
+                                       else {
+                                               rna_clamp_value(f, prop);
+                                               fprintf(f, "    
data->%s[index]= value;\n", dp->dnaname);
+                                       }
                                }
                                fprintf(f, "}\n\n");
                        }
@@ -577,11 +591,14 @@
                                BooleanPropertyRNA *bprop= 
(BooleanPropertyRNA*)prop;
                                unsigned int i;
 
-                               if(bprop->defaultarray) {
+                               if(prop->arraylength) {
                                        fprintf(f, "static int 
rna_%s_%s_default[%d] = {", srna->identifier, prop->identifier, 
prop->arraylength);
 
                                        for(i=0; i<prop->arraylength; i++) {
-                                               fprintf(f, "%d", 
bprop->defaultarray[i]);
+                                               if(bprop->defaultarray)
+                                                       fprintf(f, "%d", 
bprop->defaultarray[i]);
+                                               else
+                                                       fprintf(f, "%d", 
bprop->defaultvalue);
                                                if(i != prop->arraylength-1)
                                                        fprintf(f, ", ");
                                        }
@@ -594,11 +611,14 @@
                                IntPropertyRNA *iprop= (IntPropertyRNA*)prop;
                                unsigned int i;
 
-                               if(iprop->defaultarray) {
+                               if(prop->arraylength) {
                                        fprintf(f, "static int 
rna_%s_%s_default[%d] = {", srna->identifier, prop->identifier, 
prop->arraylength);
 
                                        for(i=0; i<prop->arraylength; i++) {
-                                               fprintf(f, "%d", 
iprop->defaultarray[i]);
+                                               if(iprop->defaultarray)
+                                                       fprintf(f, "%d", 
iprop->defaultarray[i]);
+                                               else
+                                                       fprintf(f, "%d", 
iprop->defaultvalue);
                                                if(i != prop->arraylength-1)
                                                        fprintf(f, ", ");
                                        }
@@ -611,11 +631,14 @@
                                FloatPropertyRNA *fprop= 
(FloatPropertyRNA*)prop;
                                unsigned int i;
 
-                               if(fprop->defaultarray) {
+                               if(prop->arraylength) {
                                        fprintf(f, "static float 
rna_%s_%s_default[%d] = {", srna->identifier, prop->identifier, 
prop->arraylength);
 
                                        for(i=0; i<prop->arraylength; i++) {
-                                               rna_float_print(f, 
fprop->defaultarray[i]);
+                                               if(fprop->defaultarray)
+                                                       rna_float_print(f, 
fprop->defaultarray[i]);
+                                               else
+                                                       rna_float_print(f, 
fprop->defaultvalue);
                                                if(i != prop->arraylength-1)
                                                        fprintf(f, ", ");
                                        }
@@ -646,14 +669,14 @@
                        case PROP_BOOLEAN: {
                                BooleanPropertyRNA *bprop= 
(BooleanPropertyRNA*)prop;
                                fprintf(f, "\t%s, %s, %s, %s, %d, ", 
rna_function_string(bprop->get), rna_function_string(bprop->set), 
rna_function_string(bprop->getarray), rna_function_string(bprop->setarray), 
bprop->defaultvalue);
-                               if(bprop->defaultarray) fprintf(f, 
"rna_%s_%s_default\n", srna->name, prop->identifier);
+                               if(prop->arraylength) fprintf(f, 
"rna_%s_%s_default\n", srna->identifier, prop->identifier);
                                else fprintf(f, "NULL\n");
                                break;
                        }
                        case PROP_INT: {
                                IntPropertyRNA *iprop= (IntPropertyRNA*)prop;
-                               fprintf(f, "\t%s, %s, %s, %s, %d, %d, %d, %d, 
%d,\n\t%d, \n", rna_function_string(iprop->get), 
rna_function_string(iprop->set), rna_function_string(iprop->getarray), 
rna_function_string(iprop->setarray), iprop->softmin, iprop->softmax, 
iprop->hardmin, iprop->hardmax, iprop->step, iprop->defaultvalue);
-                               if(iprop->defaultarray) fprintf(f, 
"rna_%s_%s_default\n", srna->name, prop->identifier);
+                               fprintf(f, "\t%s, %s, %s, %s, %d, %d, %d, %d, 
%d,\n\t%d, ", rna_function_string(iprop->get), rna_function_string(iprop->set), 
rna_function_string(iprop->getarray), rna_function_string(iprop->setarray), 
iprop->softmin, iprop->softmax, iprop->hardmin, iprop->hardmax, iprop->step, 
iprop->defaultvalue);
+                               if(prop->arraylength) fprintf(f, 
"rna_%s_%s_default\n", srna->identifier, prop->identifier);
                                else fprintf(f, "NULL\n");
                                break;
                        }
@@ -667,7 +690,7 @@
                                rna_float_print(f, fprop->step); fprintf(f, ", 
");
                                rna_float_print(f, fprop->precision); 
fprintf(f, ", ");
                                rna_float_print(f, fprop->defaultvalue); 
fprintf(f, ", ");
-                               if(fprop->defaultarray) fprintf(f, 
"rna_%s_%s_default\n", srna->name, prop->identifier);
+                               if(prop->arraylength) fprintf(f, 
"rna_%s_%s_default\n", srna->identifier, prop->identifier);
                                else fprintf(f, "NULL\n");
                                break;
                        }
@@ -745,6 +768,7 @@
        {"rna_object.c", RNA_def_object},
        {"rna_rna.c", RNA_def_rna},
        {"rna_scene.c", RNA_def_scene},
+       {"rna_lamp.c", RNA_def_lamp},
        {NULL, NULL}};
 
 static int rna_preprocess(char *basedirectory, FILE *f)

Modified: 
branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c     
2008-11-18 07:53:36 UTC (rev 17493)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_access.c     
2008-11-18 10:57:06 UTC (rev 17494)
@@ -478,10 +478,8 @@
 
        r_ptr->data= pprop->get(ptr);
 
-       if(r_ptr->data) {
-               r_ptr->type= RNA_property_pointer_type(prop, ptr);
+       if(r_ptr->data && (r_ptr->type= RNA_property_pointer_type(prop, ptr)))
                rna_pointer_inherit_id(ptr, r_ptr);
-       }
        else
                memset(r_ptr, 0, sizeof(*r_ptr));
 }
@@ -532,10 +530,8 @@
 
        r_ptr->data= cprop->get(iter);
 
-       if(r_ptr->data) {
-               r_ptr->type= rna_property_collection_type(prop, iter);
+       if(r_ptr->data && (r_ptr->type= rna_property_collection_type(prop, 
iter)))
                rna_pointer_inherit_id(&iter->parent, r_ptr);
-       }
        else
                memset(r_ptr, 0, sizeof(*r_ptr));
 }

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-18 07:53:36 UTC (rev 17493)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h   
2008-11-18 10:57:06 UTC (rev 17494)
@@ -88,6 +88,7 @@
 extern StructRNA RNA_Mesh;
 extern StructRNA RNA_Object;
 extern StructRNA RNA_Scene;
+extern StructRNA RNA_Lamp;
 extern StructRNA RNA_Struct;
 
 void RNA_def_ID(struct StructRNA *srna);
@@ -98,6 +99,7 @@
 void RNA_def_object(struct BlenderRNA *brna);
 void RNA_def_rna(struct BlenderRNA *brna);
 void RNA_def_scene(struct BlenderRNA *brna);
+void RNA_def_lamp(struct BlenderRNA *brna);
 
 /* Internal Functions */
 

Added: branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c
===================================================================

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to