[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13305] branches/blender2.5/blender/source /blender/editors/screen/screen_edit.c: Changes to the "join area" operator.

Diego Borghetti (Plumiferos) bdiego at gmail.com
Sun Jan 20 05:39:51 CET 2008


Revision: 13305
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13305
Author:   bdiego
Date:     2008-01-20 05:39:50 +0100 (Sun, 20 Jan 2008)

Log Message:
-----------
Changes to the "join area" operator.

This is a patch by Michael Fox (mfoxdogg) that make more
easy join two are, just RMB+Alt in the "origin" area,
drag the mouse to the "target" area and release the mouse.

Note that this is not a "final mouse-bind" for the join
operator, just an easy and simple option for test in 
this early stage of 2.5.

Other note: maybe it's a good idea add azones here ?

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c

Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c	2008-01-20 04:27:54 UTC (rev 13304)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c	2008-01-20 04:39:50 UTC (rev 13305)
@@ -1420,10 +1420,6 @@
 typedef struct sAreaJoinData
 {
 	int dir;
-	ScrArea *up;
-	ScrArea *down;
-	ScrArea *left;
-	ScrArea *right;
 	ScrArea *sa1; /* first area to be considered */
 	ScrArea *sa2; /* second area to be considered */
 	ScrArea *scr; /* designed for removal */
@@ -1435,71 +1431,21 @@
 /* return 0: init failed */
 static int join_areas_init (bContext *C, wmOperator *op)
 {
-	ScrEdge *actedge= screen_find_active_scredge(C->screen, op->veci.x, op->veci.y);
-	ScrArea *sa = C->curarea;
-	ScrEdge *se;
+	ScrArea *actarea = C->curarea;
 	sAreaJoinData* jd= NULL;
-	short val = 0;
-
-	if(actedge==NULL) return 0;
 	
-	jd = (sAreaJoinData*)MEM_callocN(sizeof (sAreaJoinData), "op_join_areas");
-	jd->dir= scredge_is_horizontal(actedge) ? 'h':'v';
-	op->customdata = jd;
-	
-	select_connected_scredge(C->screen, actedge);
-
-	jd->sa1 = screen_test_edge_area(C->screen, sa, actedge);
-	if(jd->sa1==0) return 0;
-
-	/* find directions with same edge */
-	jd->sa2= C->screen->areabase.first;
-	while(jd->sa2) {
-		if(jd->sa2 != jd->sa1) {
-			se= screen_findedge(C->screen, jd->sa2->v1, jd->sa2->v2);
-			if(actedge==se) jd->right= jd->sa2;
-			se= screen_findedge(C->screen, jd->sa2->v2, jd->sa2->v3);
-			if(actedge==se) jd->down= jd->sa2;
-			se= screen_findedge(C->screen, jd->sa2->v3, jd->sa2->v4);
-			if(actedge==se) jd->left= jd->sa2;
-			se= screen_findedge(C->screen, jd->sa2->v4, jd->sa2->v1);
-			if(actedge==se) jd->up= jd->sa2;
-		}
-		jd->sa2= jd->sa2->next;
+	if (actarea==NULL)
+	{
+		return 0;
 	}
-
-	if(jd->left) val++;
-	if(jd->up) val++;
-	if(jd->right) val++;
-	if(jd->down) val++;
 	
-	if(val==0) return 0;
-	else if(val==1) {
-		if(jd->left) {
-			jd->right = jd->sa1;
-			jd->sa2 = jd->left;
-			jd->dir = 'h';
-		}
-		else if(jd->right) {
-			jd->left = jd->sa1;
-			jd->sa2 = jd->right;
-			jd->dir = 'h';
-		}
-		else if(jd->up) {
-			jd->down = jd->sa1;
-			jd->sa2= jd->up;
-			jd->dir = 'v';
-		}
-		else if(jd->down) {
-			jd->up = jd->sa1;
-			jd->sa2 = jd->down;
-			jd->dir = 'v';
-		}
-	}
-
+	jd = (sAreaJoinData*)MEM_callocN(sizeof (sAreaJoinData), "op_join_areas");
+		
+	jd->sa1 = actarea;
 	/* initial set up screen area asigned for destroying */
-	jd->scr = jd->sa2;
-
+	jd->scr = jd->sa2;	
+	op->customdata= jd;
+	
 	return 1;
 }
 
@@ -1508,31 +1454,34 @@
 {
 	sAreaJoinData *jd = (sAreaJoinData *)op->customdata;
 	if (!jd) return 0;
-
-	if(jd->sa2!=jd->scr) {
-		jd->sa1 = jd->sa2;
-		jd->sa2 = jd->scr;
+	
+	jd->dir = area_getorientation(C->screen, jd->sa1, jd->sa2);
+	
+	printf("dir is : %i \n", jd->dir);
+	if (jd->dir < 0)
+	{
+		return 0;
 	}
-
-	if(jd->sa2==jd->left) {
+	
+	if(jd->dir == 0) {
 		jd->sa1->v1= jd->sa2->v1;
 		jd->sa1->v2= jd->sa2->v2;
 		screen_addedge(C->screen, jd->sa1->v2, jd->sa1->v3);
 		screen_addedge(C->screen, jd->sa1->v1, jd->sa1->v4);
 	}
-	else if(jd->sa2==jd->up) {
+	else if(jd->dir == 1) {
 		jd->sa1->v2= jd->sa2->v2;
 		jd->sa1->v3= jd->sa2->v3;
 		screen_addedge(C->screen, jd->sa1->v1, jd->sa1->v2);
 		screen_addedge(C->screen, jd->sa1->v3, jd->sa1->v4);
 	}
-	else if(jd->sa2==jd->right) {
+	else if(jd->dir == 2) {
 		jd->sa1->v3= jd->sa2->v3;
 		jd->sa1->v4= jd->sa2->v4;
 		screen_addedge(C->screen, jd->sa1->v2,jd-> sa1->v3);
 		screen_addedge(C->screen, jd->sa1->v1, jd->sa1->v4);
 	}
-	else if(jd->sa2==jd->down) {
+	else if(jd->dir == 3) {
 		jd->sa1->v1= jd->sa2->v1;
 		jd->sa1->v4= jd->sa2->v4;
 		screen_addedge(C->screen, jd->sa1->v1, jd->sa1->v2);
@@ -1546,7 +1495,6 @@
 	jd->sa2 = NULL;
 	return 1;
 }
-
 /* interaction callback */
 /* return 0 = stop evaluating for next handlers */
 static int join_areas_invoke (bContext *C, wmOperator *op, wmEvent *event)
@@ -1556,7 +1504,7 @@
 	op->veci.x= event->x;
 	op->veci.y= event->y;
 	op->customdata = NULL;
-
+	printf("invoke \n");
 	if(0==join_areas_init(C, op)) 
 		return 1;
 	
@@ -1590,7 +1538,7 @@
 	removedouble_scredges(C->screen);
 	removenotused_scredges(C->screen);
 	removenotused_scrverts(C->screen);
-
+	printf("exit \n");
 	return 1;
 }
 
@@ -1605,16 +1553,14 @@
 			{
 				sAreaJoinData *jd = (sAreaJoinData *)op->customdata;
 				ScrArea *sa = screen_areahascursor(C->screen, event->x, event->y);
-				if (sa && sa != jd->sa2) {
-					if (sa == jd->sa1) {
-						jd->scr = jd->sa1;
-						jd->sa1 = jd->sa2;
-						jd->sa2 = jd->scr;
-					} 
+				if((jd->sa1 != sa) && (jd->sa2 != sa))
+				{
+					printf("New Area \n");
+					jd->sa2 = sa;
 				}
 				break;
 			}
-		case LEFTMOUSE:
+		case RIGHTMOUSE:
 			if(event->val==0) {
 				join_areas_exec(C, op);
 				WM_event_add_notifier(C->wm, C->window, 0, WM_NOTE_SCREEN_CHANGED, 0, NULL);
@@ -1635,10 +1581,11 @@
 /* Operator for joining two areas (space types) */
 void ED_SCR_OT_join_areas(wmOperatorType *ot)
 {
+	
 	/* identifiers */
 	ot->name= "Join area";
 	ot->idname= "ED_SCR_OT_join_areas";
-
+	
 	/* api callbacks */
 	ot->init= join_areas_init;
 	ot->invoke= join_areas_invoke;
@@ -1646,5 +1593,5 @@
 	ot->exec= join_areas_exec;
 	ot->exit= join_areas_exit;
 
-	ot->poll= ED_operator_screen_mainwinactive;
+	ot->poll= ED_operator_screenactive;
 }





More information about the Bf-blender-cvs mailing list