[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25264] trunk/blender/source/blender/ editors/interface/interface_handlers.c: textedit string needs to be one byte longer than maxlen, for terminator.

Martin Poirier theeth at yahoo.com
Thu Dec 10 01:28:18 CET 2009


Revision: 25264
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25264
Author:   theeth
Date:     2009-12-10 01:28:18 +0100 (Thu, 10 Dec 2009)

Log Message:
-----------
textedit string needs to be one byte longer than maxlen, for terminator.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_handlers.c

Modified: trunk/blender/source/blender/editors/interface/interface_handlers.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_handlers.c	2009-12-10 00:20:19 UTC (rev 25263)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2009-12-10 00:28:18 UTC (rev 25264)
@@ -71,78 +71,6 @@
 #define BUTTON_AUTO_OPEN_THRESH		0.3
 #define BUTTON_MOUSE_TOWARDS_THRESH	1.0
 
-typedef enum uiButtonActivateType {
-	BUTTON_ACTIVATE_OVER,
-	BUTTON_ACTIVATE,
-	BUTTON_ACTIVATE_APPLY,
-	BUTTON_ACTIVATE_TEXT_EDITING,
-	BUTTON_ACTIVATE_OPEN
-} uiButtonActivateType;
-
-typedef enum uiHandleButtonState {
-	BUTTON_STATE_INIT,
-	BUTTON_STATE_HIGHLIGHT,
-	BUTTON_STATE_WAIT_FLASH,
-	BUTTON_STATE_WAIT_RELEASE,
-	BUTTON_STATE_WAIT_KEY_EVENT,
-	BUTTON_STATE_NUM_EDITING,
-	BUTTON_STATE_TEXT_EDITING,
-	BUTTON_STATE_TEXT_SELECTING,
-	BUTTON_STATE_MENU_OPEN,
-	BUTTON_STATE_EXIT
-} uiHandleButtonState;
-
-typedef struct uiHandleButtonData {
-	wmWindowManager *wm;
-	wmWindow *window;
-	ARegion *region;
-
-	int interactive;
-
-	/* overall state */
-	uiHandleButtonState state;
-	int cancel, escapecancel, retval;
-	int applied, appliedinteractive;
-	wmTimer *flashtimer;
-
-	/* edited value */
-	char *str, *origstr;
-	double value, origvalue, startvalue;
-	float vec[3], origvec[3];
-	int togdual, togonly;
-	ColorBand *coba;
-	CurveMapping *cumap;
-
-	/* tooltip */
-	ARegion *tooltip;
-	wmTimer *tooltiptimer;
-	
-	/* auto open */
-	int used_mouse;
-	wmTimer *autoopentimer;
-
-	/* text selection/editing */
-	int maxlen, selextend, selstartx;
-
-	/* number editing / dragging */
-	int draglastx, draglasty;
-	int dragstartx, dragstarty;
-	int dragchange, draglock, dragsel;
-	float dragf, dragfstart;
-	CBData *dragcbd;
-
-	/* menu open */
-	uiPopupBlockHandle *menu;
-	int menuretval;
-	
-	/* search box */
-	ARegion *searchbox;
-
-	/* post activate */
-	uiButtonActivateType posttype;
-	uiBut *postbut;
-} uiHandleButtonData;
-
 typedef struct uiAfterFunc {
 	struct uiAfterFunc *next, *prev;
 
@@ -1411,7 +1339,7 @@
 
 	/* retrieve string */
 	data->maxlen= ui_get_but_string_max_length(but);
-	data->str= MEM_callocN(sizeof(char)*data->maxlen, "textedit str");
+	data->str= MEM_callocN(sizeof(char)*data->maxlen + 1, "textedit str"); /* +1 for terminator */
 	ui_get_but_string(but, data->str, data->maxlen);
 
 	data->origstr= BLI_strdup(data->str);
@@ -1689,7 +1617,7 @@
 
 static void ui_numedit_begin(uiBut *but, uiHandleButtonData *data)
 {
-	float softrange, softmin, softmax;
+	float softmin, softmax;
 
 	if(but->type == BUT_CURVE) {
 		data->cumap= (CurveMapping*)but->poin;
@@ -1712,9 +1640,9 @@
 
 		softmin= but->softmin;
 		softmax= but->softmax;
-		softrange= softmax - softmin;
+		data->softrange = (float)pow(10, floorf(log10(softmax - softmin) + 0.5));
 
-		data->dragfstart= (softrange == 0.0)? 0.0: (data->value - softmin)/softrange;
+		data->dragfstart= (data->softrange == 0.0)? 0.0: (data->value - softmin)/data->softrange;
 		data->dragf= data->dragfstart;
 	}
 
@@ -2036,12 +1964,16 @@
 	return temp;
 }
 
-static int ui_numedit_but_NUM(uiBut *but, uiHandleButtonData *data, float fac, int snap, int mx)
+static int ui_numedit_but_NUM(uiBut *but, uiHandleButtonData *data, float fac, int snap, int mx, int my)
 {
-	float deler, tempf, softmin, softmax, softrange;
+	float deler, tempf, softmin, softmax;
+	//float ladder = powf(10.0, floorf((my - data->dragstarty + 25) / 50.0f));
+	float ladder = 1.0f;
 	int lvalue, temp, changed= 0;
 	
-	if(mx == data->draglastx)
+	printf("(%i, %i)\n", mx, my);
+
+	if(mx == data->draglastx && my == data->draglasty)
 		return changed;
 	
 	/* drag-lock - prevent unwanted scroll adjustments */
@@ -2056,16 +1988,14 @@
 
 	softmin= but->softmin;
 	softmax= but->softmax;
-	softrange= softmax - softmin;
 
-
 	if(ui_is_a_warp_but(but)) {
 		/* Mouse location isn't screen clamped to the screen so use a linear mapping
 		 * 2px == 1-int, or 1px == 1-ClickStep */
 		if(ui_is_but_float(but)) {
 			fac *= 0.01*but->a1;
-			tempf = data->startvalue + ((mx - data->dragstartx) * fac);
-			tempf= ui_numedit_apply_snapf(tempf, softmin, softmax, softrange, snap);
+			tempf = data->startvalue + ((mx - data->dragstartx) * fac) * ladder;
+			tempf= ui_numedit_apply_snapf(tempf, softmin, softmax, data->softrange, snap);
 
 #if 1		/* fake moving the click start, nicer for dragging back after passing the limit */
 			if(tempf < softmin) {
@@ -2088,8 +2018,12 @@
 		else {
 			fac = 0.5; /* simple 2px == 1 */
 
-			temp= data->startvalue + ((mx - data->dragstartx) * fac);
+			temp= data->startvalue + floorf((mx - data->dragstartx) * fac) * ladder;
 			temp= ui_numedit_apply_snap(temp, softmin, softmax, snap);
+			
+//			printf("x %i y %i\n", mx, my);
+//			printf("temp %i, dragstartx %i ladder %f\n", temp, data->dragstartx, ladder);
+			
 
 #if 1		/* fake moving the click start, nicer for dragging back after passing the limit */
 			if(temp < softmin) {
@@ -2109,33 +2043,31 @@
 				changed= 1;
 			}
 		}
-
-		data->draglastx= mx;
 	}
 	else {
 		/* Use a non-linear mapping of the mouse drag especially for large floats (normal behavior) */
-		deler= 500;
+		deler= 1000;
 		if(!ui_is_but_float(but)) {
-			if((softrange)<100) deler= 200.0;
-			if((softrange)<25) deler= 50.0;
+			if((data->softrange)<100) deler= 200.0;
+			if((data->softrange)<25) deler= 50.0;
 		}
 		deler /= fac;
 
-		if(ui_is_but_float(but) && softrange > 11) {
+		if(ui_is_but_float(but) && data->softrange > 11) {
 			/* non linear change in mouse input- good for high precicsion */
-			data->dragf+= (((float)(mx-data->draglastx))/deler) * (fabs(data->dragstartx-mx)*0.002);
-		} else if (!ui_is_but_float(but) && softrange > 129) { /* only scale large int buttons */
+			data->dragf+= (((float)(mx-data->draglastx))/deler) * (fabs(data->dragstartx-mx)*0.002)*ladder;
+		} else if (!ui_is_but_float(but) && data->softrange > 129) { /* only scale large int buttons */
 			/* non linear change in mouse input- good for high precicsionm ints need less fine tuning */
-			data->dragf+= (((float)(mx-data->draglastx))/deler) * (fabs(data->dragstartx-mx)*0.004);
+			data->dragf+= (((float)(mx-data->draglastx))/deler) * (fabs(data->dragstartx-mx)*0.004)*ladder;
 		} else {
 			/*no scaling */
-			data->dragf+= ((float)(mx-data->draglastx))/deler ;
+			data->dragf+= ((float)(mx-data->draglastx))/deler*ladder ;
 		}
 	
-		if(data->dragf>1.0) data->dragf= 1.0;
-		if(data->dragf<0.0) data->dragf= 0.0;
-		data->draglastx= mx;
-		tempf= (softmin + data->dragf*softrange);
+		tempf= (softmin + data->dragf*data->softrange);
+		
+		if (tempf > softmax) data->dragf = (softmax - softmin) / data->softrange;
+		if (tempf < softmin) data->dragf = softmin / data->softrange;
 
 
 		if(!ui_is_but_float(but)) {
@@ -2154,7 +2086,7 @@
 		}
 		else {
 			temp= 0;
-			tempf= ui_numedit_apply_snapf(tempf, softmin, softmax, softrange, snap);
+			tempf= ui_numedit_apply_snapf(tempf, softmin, softmax, data->softrange, snap);
 
 			CLAMP(tempf, softmin, softmax);
 
@@ -2166,6 +2098,8 @@
 		}
 	}
 
+	data->draglastx= mx;
+	data->draglasty= my;
 
 	return changed;
 }
@@ -2199,6 +2133,7 @@
 			}
 			else if(event->type == LEFTMOUSE) {
 				data->dragstartx= data->draglastx= ui_is_a_warp_but(but) ? screen_mx:mx;
+				data->dragstarty= data->draglasty= ui_is_a_warp_but(but) ? screen_my:my;
 				button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
 				retval= WM_UI_HANDLER_BREAK;
 			}
@@ -2229,7 +2164,7 @@
 			
 			snap= (event->ctrl)? (event->shift)? 2: 1: 0;
 
-			if(ui_numedit_but_NUM(but, data, fac, snap, (ui_is_a_warp_but(but) ? screen_mx:mx)))
+			if(ui_numedit_but_NUM(but, data, fac, snap, (ui_is_a_warp_but(but) ? screen_mx:mx), (ui_is_a_warp_but(but) ? screen_my:my)))
 				ui_numedit_apply(C, block, but, data);
 		}
 		retval= WM_UI_HANDLER_BREAK;
@@ -2309,12 +2244,11 @@
 
 static int ui_numedit_but_SLI(uiBut *but, uiHandleButtonData *data, int shift, int ctrl, int mx)
 {
-	float deler, f, tempf, softmin, softmax, softrange;
+	float deler, f, tempf, softmin, softmax;
 	int temp, lvalue, changed= 0;
 
 	softmin= but->softmin;
 	softmax= but->softmax;
-	softrange= softmax - softmin;
 
 	if(but->type==NUMSLI) deler= ((but->x2-but->x1) - 5.0*but->aspect);
 	else if(but->type==HSVSLI) deler= ((but->x2-but->x1)/2 - 5.0*but->aspect);
@@ -2330,8 +2264,8 @@
 	if(shift)
 		f= (f-data->dragfstart)/10.0 + data->dragfstart;
 
-	CLAMP(f, 0.0, 1.0);
-	tempf= softmin + f*softrange;
+	//CLAMP(f, 0.0, 1.0);
+	tempf= softmin + f * data->softrange;
 	temp= floor(tempf+.5);
 
 	if(ctrl) {
@@ -2415,7 +2349,9 @@
 			}
 			else if(event->type == LEFTMOUSE) {
 				data->dragstartx= mx;
+				data->dragstarty= my;
 				data->draglastx= mx;
+				data->draglasty= my;
 				button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
 				retval= WM_UI_HANDLER_BREAK;
 			}
@@ -2453,14 +2389,13 @@
 	if(click) {
 		if (click==2) {
 			/* nudge slider to the left or right */
-			float f, tempf, softmin, softmax, softrange;
+			float f, tempf, softmin, softmax;
 			int temp;
 			
 			button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
 			
 			softmin= but->softmin;
 			softmax= but->softmax;
-			softrange= softmax - softmin;
 			
 			tempf= data->value;
 			temp= (int)data->value;
@@ -2469,7 +2404,7 @@
 			if(but->type==SLI) f= (float)(mx-but->x1)/(but->x2-but->x1);
 			else f= (float)(mx- but->x1)/(but->x2-but->x1);
 			
-			f= softmin + f*softrange;
+			f= softmin + f * data->softrange;
 			
 			if(!ui_is_but_float(but)) {
 				if(f<temp) temp--;
@@ -2516,14 +2451,10 @@
 	if(data->state == BUTTON_STATE_HIGHLIGHT) {
 		if(event->val==KM_PRESS) {
 			if(event->type == LEFTMOUSE) {
-				if(horizontal) {
-					data->dragstartx= mx;
-					data->draglastx= mx;
-				}
-				else {
-					data->dragstartx= my;
-					data->draglastx= my;
-				}
+				data->dragstartx= mx;
+				data->draglastx= mx;
+				data->dragstartx= my;
+				data->draglastx= my;
 				button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
 				retval= WM_UI_HANDLER_BREAK;
 			}





More information about the Bf-blender-cvs mailing list