Revision: 37744
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37744
Author:   campbellbarton
Date:     2011-06-23 05:58:44 +0000 (Thu, 23 Jun 2011)
Log Message:
-----------
fix [#27726] Driven properties not checked for legal UI bounds

The rna set function clamps to the property range however properties with range 
functions were ignored when set by python or the animation system.

Now call the range function for ints and floats when setting.

Modified Paths:
--------------
    trunk/blender/source/blender/makesrna/intern/makesrna.c

Modified: trunk/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/makesrna.c     2011-06-23 
04:17:25 UTC (rev 37743)
+++ trunk/blender/source/blender/makesrna/intern/makesrna.c     2011-06-23 
05:58:44 UTC (rev 37744)
@@ -644,6 +644,25 @@
        return func;
 }
 
+/* defined min/max variables to be used by rna_clamp_value() */
+static void rna_clamp_value_range(FILE *f, PropertyRNA *prop)
+{
+       if(prop->type == PROP_FLOAT) {
+               FloatPropertyRNA *fprop= (FloatPropertyRNA*)prop;
+               if(fprop->range) {
+                       fprintf(f, "    float prop_clamp_min, 
prop_clamp_max;\n");
+                       fprintf(f, "    %s(ptr, &prop_clamp_min, 
&prop_clamp_max);\n", rna_function_string(fprop->range));
+               }
+       }
+       else if(prop->type == PROP_INT) {
+               IntPropertyRNA *iprop= (IntPropertyRNA*)prop;
+               if(iprop->range) {
+                       fprintf(f, "    int prop_clamp_min, prop_clamp_max;\n");
+                       fprintf(f, "    %s(ptr, &prop_clamp_min, 
&prop_clamp_max);\n", rna_function_string(iprop->range));
+               }
+       }
+}
+
 static void rna_clamp_value(FILE *f, PropertyRNA *prop, int array)
 {
        if(prop->type == PROP_INT) {
@@ -652,8 +671,13 @@
                if(iprop->hardmin != INT_MIN || iprop->hardmax != INT_MAX) {
                        if(array) fprintf(f, "CLAMPIS(values[i], ");
                        else fprintf(f, "CLAMPIS(value, ");
-                       rna_int_print(f, iprop->hardmin); fprintf(f, ", ");
-                       rna_int_print(f, iprop->hardmax); fprintf(f, ");\n");
+                       if(iprop->range) {
+                               fprintf(f, "prop_clamp_min, prop_clamp_max);");
+                       }
+                       else {
+                               rna_int_print(f, iprop->hardmin); fprintf(f, ", 
");
+                               rna_int_print(f, iprop->hardmax); fprintf(f, 
");\n");
+                       }
                        return;
                }
        }
@@ -663,8 +687,13 @@
                if(fprop->hardmin != -FLT_MAX || fprop->hardmax != FLT_MAX) {
                        if(array) fprintf(f, "CLAMPIS(values[i], ");
                        else fprintf(f, "CLAMPIS(value, ");
-                       rna_float_print(f, fprop->hardmin); fprintf(f, ", ");
-                       rna_float_print(f, fprop->hardmax); fprintf(f, ");\n");
+                       if(fprop->range) {
+                               fprintf(f, "prop_clamp_min, prop_clamp_max);");
+                       }
+                       else {
+                               rna_float_print(f, fprop->hardmin); fprintf(f, 
", ");
+                               rna_float_print(f, fprop->hardmax); fprintf(f, 
");\n");
+                       }
                        return;
                }
        }
@@ -762,6 +791,7 @@
                                }
                                else {
                                        rna_print_data_get(f, dp);
+                                       rna_clamp_value_range(f, prop);
 
                                        if(prop->flag & PROP_DYNAMIC) {
                                                char *lenfunc= 
rna_alloc_function_name(srna->identifier, rna_safe_id(prop->identifier), 
"set_length");
@@ -833,6 +863,7 @@
                                                fprintf(f, "    data->%s |= 
value;\n", dp->dnaname);
                                        }
                                        else {
+                                               rna_clamp_value_range(f, prop);
                                                fprintf(f, "    data->%s= %s", 
dp->dnaname, (dp->booleannegative)? "!": "");
                                                rna_clamp_value(f, prop, 0);
                                        }

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

Reply via email to