[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22395] branches/blender2.5/blender/source /blender: Set the clickstep for unit buttons to each click moves 1 unit.

Campbell Barton ideasman42 at gmail.com
Wed Aug 12 10:16:10 CEST 2009


Revision: 22395
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22395
Author:   campbellbarton
Date:     2009-08-12 10:16:10 +0200 (Wed, 12 Aug 2009)

Log Message:
-----------
Set the clickstep for unit buttons to each click moves 1 unit.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_unit.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/unit.c
    branches/blender2.5/blender/source/blender/editors/interface/interface.c
    branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_unit.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_unit.h	2009-08-12 07:23:10 UTC (rev 22394)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_unit.h	2009-08-12 08:16:10 UTC (rev 22395)
@@ -36,6 +36,9 @@
 /* replace units with values, used before python button evaluation */
 int		bUnit_ReplaceString(char *str, char *str_orig, char *str_prev, double scale_pref, int system, int type);
 
+/* the size of the unit used for this value (used for calculating the ckickstep) */
+double bUnit_Size(double value, int system, int type);
+
 #ifdef __cplusplus
 }
 #endif

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/unit.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/unit.c	2009-08-12 07:23:10 UTC (rev 22394)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/unit.c	2009-08-12 08:16:10 UTC (rev 22395)
@@ -347,3 +347,19 @@
 	// printf("replace %s\n", str);
 	return change;
 }
+
+
+double bUnit_Size(double value, int system, int type)
+{
+	bUnitCollection *usys = unit_get_system(system, type);
+	bUnitDef *unit;
+
+	if(usys==NULL)
+		return -1;
+
+	unit= unit_best_fit(value, usys, NULL);
+	if(unit==NULL)
+		return -1;
+
+	return unit->mul;
+}

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-08-12 07:23:10 UTC (rev 22394)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c	2009-08-12 08:16:10 UTC (rev 22395)
@@ -1142,6 +1142,20 @@
 	return 0;
 }
 
+int ui_is_but_unit(uiBut *but)
+{
+	if(U.unit_system == USER_UNIT_NONE)
+		return 0;
+
+	if(but->rnaprop==NULL)
+		return 0;
+
+	if(RNA_SUBTYPE_UNIT_VALUE(RNA_property_subtype(but->rnaprop))==0)
+		return 0;
+
+	return 1;
+}
+
 double ui_get_but_val(uiBut *but)
 {
 	PropertyRNA *prop;
@@ -1337,7 +1351,22 @@
 	bUnit_AsString(str, ui_get_but_scale_unit(but, value), precission, U.unit_system, unit_type, do_split, pad);
 }
 
+static float ui_get_but_step_unit(uiBut *but, double value, float step_default)
+{
+	int unit_type=  RNA_SUBTYPE_UNIT_VALUE(RNA_property_subtype(but->rnaprop));
+	float step;
 
+	step = bUnit_Size(ui_get_but_scale_unit(but, value), U.unit_system, unit_type);
+
+	if(step > 0.0) { /* -1 is an error value */
+		return (step/ui_get_but_scale_unit(but, 1.0))*100;
+	}
+	else {
+		return step_default;
+	}
+}
+
+
 void ui_get_but_string(uiBut *but, char *str, int maxlen)
 {
 	if(but->rnaprop && ELEM3(but->type, TEX, IDPOIN, SEARCH_MENU)) {
@@ -1393,8 +1422,7 @@
 		value= ui_get_but_val(but);
 
 		if(ui_is_but_float(but)) {
-
-			if(U.unit_system != USER_UNIT_NONE && but->rnaprop && RNA_SUBTYPE_UNIT_VALUE(RNA_property_subtype(but->rnaprop))) {
+			if(ui_is_but_unit(but)) {
 				ui_get_but_string_unit(but, str, value, 0);
 			}
 			else if(but->a2) { /* amount of digits defined */
@@ -1835,7 +1863,7 @@
 			if(value == FLT_MAX) sprintf(but->drawstr, "%sinf", but->str);
 			else if(value == -FLT_MAX) sprintf(but->drawstr, "%s-inf", but->str);
 			/* support length type buttons */
-			else if(U.unit_system != USER_UNIT_NONE && but->rnaprop && RNA_SUBTYPE_UNIT_VALUE(RNA_property_subtype(but->rnaprop))) {
+			else if(ui_is_but_unit(but)) {
 				char new_str[256];
 
 				if(U.unit_scale_length<0.0001) U.unit_scale_length= 1.0; // XXX do_versions
@@ -2382,6 +2410,10 @@
 		but->lockstr = "";
 	}
 
+	/* If this button uses units, calculate the step from this */
+	if(ui_is_but_unit(but))
+		but->a1= ui_get_but_step_unit(but, ui_get_but_val(but), but->a1);
+
 	if(freestr)
 		MEM_freeN(str);
 	

Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h	2009-08-12 07:23:10 UTC (rev 22394)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_intern.h	2009-08-12 08:16:10 UTC (rev 22395)
@@ -337,6 +337,7 @@
 
 extern void ui_check_but(uiBut *but);
 extern int  ui_is_but_float(uiBut *but);
+extern int  ui_is_but_unit(uiBut *but);
 extern void ui_update_block_buts_hsv(uiBlock *block, float *hsv);
 
 extern void ui_bounds_block(uiBlock *block);





More information about the Bf-blender-cvs mailing list