[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51417] trunk/blender/source/blender/ editors/animation/fmodifier_ui.c: Fix: Text fields for Generator FModifier were too small

Joshua Leung aligorith at gmail.com
Fri Oct 19 10:49:51 CEST 2012


Revision: 51417
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51417
Author:   aligorith
Date:     2012-10-19 08:49:49 +0000 (Fri, 19 Oct 2012)
Log Message:
-----------
Fix: Text fields for Generator FModifier were too small

This was caused by the x^n labels being far too large. Also, replaced old string
functions with "safer" versions

Modified Paths:
--------------
    trunk/blender/source/blender/editors/animation/fmodifier_ui.c

Modified: trunk/blender/source/blender/editors/animation/fmodifier_ui.c
===================================================================
--- trunk/blender/source/blender/editors/animation/fmodifier_ui.c	2012-10-19 07:31:51 UTC (rev 51416)
+++ trunk/blender/source/blender/editors/animation/fmodifier_ui.c	2012-10-19 08:49:49 UTC (rev 51417)
@@ -111,6 +111,7 @@
 	uiBlock *block;
 	uiBut *but;
 	PointerRNA ptr;
+	short bwidth = width - 30; /* max button width */
 	
 	/* init the RNA-pointer */
 	RNA_pointer_create(id, &RNA_FModifierFunctionGenerator, fcm, &ptr);
@@ -119,10 +120,10 @@
 	/* col = uiLayoutColumn(layout, TRUE); */ /* UNUSED */
 	block = uiLayoutGetBlock(layout);
 	uiBlockBeginAlign(block);
-	but = uiDefButR(block, MENU, B_FMODIFIER_REDRAW, NULL, 0, 0, width - 30, UI_UNIT_Y, &ptr, "mode", -1, 0, 0, -1, -1, NULL);
+	but = uiDefButR(block, MENU, B_FMODIFIER_REDRAW, NULL, 0, 0, bwidth, UI_UNIT_Y, &ptr, "mode", -1, 0, 0, -1, -1, NULL);
 	uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL);
-		
-	uiDefButR(block, TOG, B_FMODIFIER_REDRAW, NULL, 0, 0, width - 30, UI_UNIT_Y, &ptr, "use_additive", -1, 0, 0, -1, -1, NULL);
+	
+	uiDefButR(block, TOG, B_FMODIFIER_REDRAW, NULL, 0, 0, bwidth, UI_UNIT_Y, &ptr, "use_additive", -1, 0, 0, -1, -1, NULL);
 	uiBlockEndAlign(block);
 	
 	/* now add settings for individual modes */
@@ -132,50 +133,62 @@
 			float *cp = NULL;
 			char xval[32];
 			unsigned int i;
+			int maxXWidth;
 			
 			/* draw polynomial order selector */
 			row = uiLayoutRow(layout, FALSE);
 			block = uiLayoutGetBlock(row);
-			but = uiDefButI(block, NUM, B_FMODIFIER_REDRAW, IFACE_("Poly Order:"), 10, 0, width - 30, 19,
+			but = uiDefButI(block, NUM, B_FMODIFIER_REDRAW, IFACE_("Poly Order:"), 10, 0, bwidth, 20,
 			                &data->poly_order, 1, 100, 0, 0,
 			                TIP_("'Order' of the Polynomial (for a polynomial with n terms, 'order' is n-1)"));
 			uiButSetFunc(but, validate_fmodifier_cb, fcm, NULL);
 			
 			
+			/* calculate maximum width of label for "x^n" labels */
+			if (data->arraysize > 2) {
+				BLI_snprintf(xval, sizeof(xval), "x^%u", data->arraysize);
+				maxXWidth = UI_GetStringWidth(xval) + 10; /* XXX: UI_GetStringWidth is not accurate */
+			}
+			else {
+				/* basic size (just "x") */
+				maxXWidth = 15; 
+			}
+			
 			/* draw controls for each coefficient and a + sign at end of row */
 			row = uiLayoutRow(layout, TRUE);
 			block = uiLayoutGetBlock(row);
 			
 			cp = data->coefficients;
 			for (i = 0; (i < data->arraysize) && (cp); i++, cp++) {
-				/* To align with first line */
+				/* To align with first line... */
 				if (i)
-					uiDefBut(block, LABEL, 1, "   ", 0, 0, 50, 20, NULL, 0.0, 0.0, 0, 0, "");
+					uiDefBut(block, LABEL, 1, "   ", 0, 0, 40, 20, NULL, 0.0, 0.0, 0, 0, "");
 				else
-					uiDefBut(block, LABEL, 1, "y =", 0, 0, 50, 20, NULL, 0.0, 0.0, 0, 0, "");
+					uiDefBut(block, LABEL, 1, "y =", 0, 0, 40, 20, NULL, 0.0, 0.0, 0, 0, "");
+				
 				/* coefficient */
-				uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 0, 0, 150, 20, cp, -UI_FLT_MAX, UI_FLT_MAX,
+				uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "", 0, 0, bwidth/2, 20, cp, -UI_FLT_MAX, UI_FLT_MAX,
 				          10, 3, TIP_("Coefficient for polynomial"));
 				
 				/* 'x' param (and '+' if necessary) */
 				if (i == 0)
-					strcpy(xval, "");
+					BLI_strncpy(xval, "", sizeof(xval));
 				else if (i == 1)
-					strcpy(xval, "x");
+					BLI_strncpy(xval, "x", sizeof(xval));
 				else
-					sprintf(xval, "x^%u", i);
-				uiDefBut(block, LABEL, 1, xval, 0, 0, 50, 20, NULL, 0.0, 0.0, 0, 0, TIP_("Power of x"));
+					BLI_snprintf(xval, sizeof(xval), "x^%u", i);
+				uiDefBut(block, LABEL, 1, xval, 0, 0, maxXWidth, 20, NULL, 0.0, 0.0, 0, 0, TIP_("Power of x"));
 				
 				if ( (i != (data->arraysize - 1)) || ((i == 0) && data->arraysize == 2) ) {
-					uiDefBut(block, LABEL, 1, "+", 0, 0, 30, 20, NULL, 0.0, 0.0, 0, 0, "");
+					uiDefBut(block, LABEL, 1, "+", 0, 0, 20, 20, NULL, 0.0, 0.0, 0, 0, "");
 					
 					/* next coefficient on a new row */
 					row = uiLayoutRow(layout, TRUE);
 					block = uiLayoutGetBlock(row);
 				}
 				else {
-					/* For alignement in UI! */
-					uiDefBut(block, LABEL, 1, " ", 0, 0, 30, 20, NULL, 0.0, 0.0, 0, 0, "");
+					/* For alignment in UI! */
+					uiDefBut(block, LABEL, 1, " ", 0, 0, 20, 20, NULL, 0.0, 0.0, 0, 0, "");
 				}
 			}
 			break;




More information about the Bf-blender-cvs mailing list