[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25878] trunk/blender/source/blender/ windowmanager: [#20581] Lasso tool ends unexpectedly

Martin Poirier theeth at yahoo.com
Sun Jan 10 21:16:58 CET 2010


Revision: 25878
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25878
Author:   theeth
Date:     2010-01-10 21:16:56 +0100 (Sun, 10 Jan 2010)

Log Message:
-----------
[#20581] Lasso tool ends unexpectedly 

Don't limit lasso to 1024 points, just realloc array with increased size when current limit is reached.

Also silence two stupid warnings.

Modified Paths:
--------------
    trunk/blender/source/blender/windowmanager/WM_types.h
    trunk/blender/source/blender/windowmanager/intern/wm_gesture.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c
    trunk/blender/source/blender/windowmanager/wm.h

Modified: trunk/blender/source/blender/windowmanager/WM_types.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_types.h	2010-01-10 20:01:13 UTC (rev 25877)
+++ trunk/blender/source/blender/windowmanager/WM_types.h	2010-01-10 20:16:56 UTC (rev 25878)
@@ -286,6 +286,7 @@
 	int type;		/* gesture type define */
 	int swinid;		/* initial subwindow id where it started */
 	int points;		/* optional, amount of points stored */
+	int size;		/* optional, maximum amount of points stored */
 	
 	void *customdata;
 	/* customdata for border is a recti */

Modified: trunk/blender/source/blender/windowmanager/intern/wm_gesture.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_gesture.c	2010-01-10 20:01:13 UTC (rev 25877)
+++ trunk/blender/source/blender/windowmanager/intern/wm_gesture.c	2010-01-10 20:16:56 UTC (rev 25878)
@@ -91,10 +91,11 @@
 	}
 	else if (ELEM(type, WM_GESTURE_LINES, WM_GESTURE_LASSO)) {
 		short *lasso;
-		gesture->customdata= lasso= MEM_callocN(2*sizeof(short)*WM_LASSO_MAX_POINTS, "lasso points");
+		gesture->customdata= lasso= MEM_callocN(2*sizeof(short)*WM_LASSO_MIN_POINTS, "lasso points");
 		lasso[0] = event->x - sx;
 		lasso[1] = event->y - sy;
 		gesture->points= 1;
+		gesture->size = WM_LASSO_MIN_POINTS;
 	}
 	
 	return gesture;

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2010-01-10 20:01:13 UTC (rev 25877)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2010-01-10 20:16:56 UTC (rev 25878)
@@ -962,7 +962,7 @@
 	
 	ver_width = BLF_width(version_str);
 	rev_width = BLF_width(revision_str);
-#endif NAN_BUILDINFO
+#endif //NAN_BUILDINFO
 
 	block= uiBeginBlock(C, ar, "_popup", UI_EMBOSS);
 	uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN|UI_BLOCK_RET_1);
@@ -973,7 +973,7 @@
 #ifdef NAN_BUILDINFO	
 	uiDefBut(block, LABEL, 0, version_str, 500-ver_width, 282-24, ver_width, 20, NULL, 0, 0, 0, 0, NULL);
 	uiDefBut(block, LABEL, 0, revision_str, 500-rev_width, 282-36, rev_width, 20, NULL, 0, 0, 0, 0, NULL);
-#endif NAN_BUILDINFO
+#endif //NAN_BUILDINFO
 	
 	
 	uiBlockSetEmboss(block, UI_EMBOSSP);
@@ -2152,17 +2152,23 @@
 			wm_gesture_tag_redraw(C);
 			
 			wm_subwindow_getorigin(CTX_wm_window(C), gesture->swinid, &sx, &sy);
-			if(gesture->points < WM_LASSO_MAX_POINTS) {
+
+			if(gesture->points == gesture->size) {
+				short *old_lasso = gesture->customdata;
+				gesture->customdata= MEM_callocN(2*sizeof(short)*(gesture->size + WM_LASSO_MIN_POINTS), "lasso points");
+				memcpy(gesture->customdata, old_lasso, 2*sizeof(short)*gesture->size);
+				gesture->size = gesture->size + WM_LASSO_MIN_POINTS;
+				MEM_freeN(old_lasso);
+				printf("realloc\n");
+			}
+
+			{
 				short *lasso= gesture->customdata;
 				lasso += 2 * gesture->points;
 				lasso[0] = event->x - sx;
 				lasso[1] = event->y - sy;
 				gesture->points++;
 			}
-			else {
-				gesture_lasso_apply(C, op, event->type);
-				return OPERATOR_FINISHED;
-			}
 			break;
 			
 		case LEFTMOUSE:

Modified: trunk/blender/source/blender/windowmanager/wm.h
===================================================================
--- trunk/blender/source/blender/windowmanager/wm.h	2010-01-10 20:01:13 UTC (rev 25877)
+++ trunk/blender/source/blender/windowmanager/wm.h	2010-01-10 20:16:56 UTC (rev 25878)
@@ -59,7 +59,7 @@
 void wm_tweakevent_test(bContext *C, wmEvent *event, int action);
 
 /* wm_gesture.c */
-#define WM_LASSO_MAX_POINTS		1024
+#define WM_LASSO_MIN_POINTS		1024
 void wm_gesture_draw(struct wmWindow *win);
 int wm_gesture_evaluate(bContext *C, wmGesture *gesture);
 void wm_gesture_tag_redraw(bContext *C);





More information about the Bf-blender-cvs mailing list