[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55370] trunk/blender/source/blender/ editors/interface/interface_handlers.c: Bug fix, irc:

Ton Roosendaal ton at blender.org
Mon Mar 18 14:57:47 CET 2013


Revision: 55370
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55370
Author:   ton
Date:     2013-03-18 13:57:47 +0000 (Mon, 18 Mar 2013)
Log Message:
-----------
Bug fix, irc:

Curves widget error: after deleting a point, and click to add a new point, on dragging
it the point flipped up 20 pixels. Was caused by changed layout and region view matrix.

Solved by storing actual mousecoords instead of mapped ones.

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	2013-03-18 12:16:19 UTC (rev 55369)
+++ trunk/blender/source/blender/editors/interface/interface_handlers.c	2013-03-18 13:57:47 UTC (rev 55370)
@@ -4158,20 +4158,27 @@
 	return WM_UI_HANDLER_CONTINUE;
 }
 
-static int ui_numedit_but_CURVE(uiBut *but, uiHandleButtonData *data, int snap,
-                                float mx, float my, const short shift)
+static int ui_numedit_but_CURVE(uiBlock *block, uiBut *but, uiHandleButtonData *data, int snap,
+                                int evtx, int evty, const short shift)
 {
 	CurveMapping *cumap = (CurveMapping *)but->poin;
 	CurveMap *cuma = cumap->cm + cumap->cur;
 	CurveMapPoint *cmp = cuma->curve;
-	float fx, fy, zoomx, zoomy /*, offsx, offsy */ /* UNUSED */;
+	float fx, fy, zoomx, zoomy;
+	int mx, my, dragx, dragy;
 	int a, changed = 0;
 
+	/* evtx evty and drag coords are absolute mousecoords, prevents errors when editing when layout changes */
+	mx = evtx;
+	my = evty;
+	ui_window_to_block(data->region, block, &mx, &my);
+	dragx = data->draglastx;
+	dragy = data->draglasty;
+	ui_window_to_block(data->region, block, &dragx, &dragy);
+	
 	zoomx = BLI_rctf_size_x(&but->rect) / BLI_rctf_size_x(&cumap->curr);
 	zoomy = BLI_rctf_size_y(&but->rect) / BLI_rctf_size_y(&cumap->curr);
-	/* offsx = cumap->curr.xmin; */
-	/* offsy = cumap->curr.ymin; */
-
+	
 	if (snap) {
 		float d[2];
 
@@ -4187,8 +4194,8 @@
 		const float mval_factor = ui_mouse_scale_warp_factor(shift);
 		int moved_point = 0;     /* for ctrl grid, can't use orig coords because of sorting */
 
-		fx = (mx - data->draglastx) / zoomx;
-		fy = (my - data->draglasty) / zoomy;
+		fx = (mx - dragx) / zoomx;
+		fy = (my - dragy) / zoomy;
 
 		fx *= mval_factor;
 		fy *= mval_factor;
@@ -4212,8 +4219,8 @@
 		curvemapping_changed(cumap, FALSE);
 		
 		if (moved_point) {
-			data->draglastx = mx;
-			data->draglasty = my;
+			data->draglastx = evtx;
+			data->draglasty = evty;
 			changed = 1;
 
 #ifdef USE_CONT_MOUSE_CORRECT
@@ -4232,8 +4239,8 @@
 		data->dragchange = 1; /* mark for selection */
 	}
 	else {
-		fx = (mx - data->draglastx) / zoomx;
-		fy = (my - data->draglasty) / zoomy;
+		fx = (mx - dragx) / zoomx;
+		fy = (my - dragy) / zoomy;
 		
 		/* clamp for clip */
 		if (cumap->flag & CUMA_DO_CLIP) {
@@ -4252,8 +4259,8 @@
 		cumap->curr.xmax -= fx;
 		cumap->curr.ymax -= fy;
 		
-		data->draglastx = mx;
-		data->draglasty = my;
+		data->draglastx = evtx;
+		data->draglasty = evty;
 
 		changed = 1;
 	}
@@ -4268,7 +4275,7 @@
 	mx = event->x;
 	my = event->y;
 	ui_window_to_block(data->region, block, &mx, &my);
-
+	
 	if (data->state == BUTTON_STATE_HIGHLIGHT) {
 		if (event->type == LEFTMOUSE && event->val == KM_PRESS) {
 			CurveMapping *cumap = (CurveMapping *)but->poin;
@@ -4358,20 +4365,21 @@
 			}
 
 			data->dragsel = sel;
+			
+			data->dragstartx = event->x;
+			data->dragstarty = event->y;
+			data->draglastx = event->x;
+			data->draglasty = event->y;
 
-			data->dragstartx = mx;
-			data->dragstarty = my;
-			data->draglastx = mx;
-			data->draglasty = my;
-
 			button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
 			return WM_UI_HANDLER_BREAK;
 		}
 	}
 	else if (data->state == BUTTON_STATE_NUM_EDITING) {
 		if (event->type == MOUSEMOVE) {
-			if (mx != data->draglastx || my != data->draglasty) {
-				if (ui_numedit_but_CURVE(but, data, event->ctrl, mx, my, event->shift))
+			if (event->x != data->draglastx || event->y != data->draglasty) {
+				
+				if (ui_numedit_but_CURVE(block, but, data, event->ctrl, event->x, event->y, event->shift))
 					ui_numedit_apply(C, block, but, data);
 			}
 		}




More information about the Bf-blender-cvs mailing list