[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37744] trunk/blender/source/blender/ makesrna/intern/makesrna.c: fix [#27726] Driven properties not checked for legal UI bounds

Campbell Barton ideasman42 at gmail.com
Thu Jun 23 07:58:45 CEST 2011


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);
 					}




More information about the Bf-blender-cvs mailing list