[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13242] branches/blender2.5/blender/source /blender/editors/screen/screen_edit.c: * area split:
Nathan Letwory
jesterking at letwory.net
Tue Jan 15 15:40:43 CET 2008
Revision: 13242
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13242
Author: jesterking
Date: 2008-01-15 15:40:43 +0100 (Tue, 15 Jan 2008)
Log Message:
-----------
* area split:
- prevent a few more cases of Potential Crash.
- tweak moving stuff.
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-15 13:00:29 UTC (rev 13241)
+++ branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c 2008-01-15 14:40:43 UTC (rev 13242)
@@ -1060,12 +1060,11 @@
/* the moving of the new egde */
static int split_area_exec(bContext *C, wmOperator *op)
{
- ScrVert *v1;
sAreaSplitData *sd= (sAreaSplitData *)op->customdata;
int newval= sd->origval + op->delta;
printf("split_area_exec %d %c, %d %d, %d", op->delta, sd->dir, -sd->min, sd->max, sd->origval);
- op->delta= CLAMPIS(op->delta, -sd->min, sd->max);
+ newval= CLAMPIS(newval, -sd->min, sd->max);
printf(".");
@@ -1073,20 +1072,10 @@
if((sd->dir=='v') && (newval > sd->min && newval < sd->max-1)) {
sd->nedge->v1->vec.x= newval;
sd->nedge->v2->vec.x= newval;
- //if(op->delta != sd->max && op->delta != -sd->min) v1->vec.x-= (v1->vec.x % AREAGRID);
}
if((sd->dir=='h') && (newval > sd->min+HEADERY && newval < sd->max-HEADERY)) {
- sd->nedge->v1->vec.y= sd->origval + op->delta;
- sd->nedge->v1->vec.y+= AREAGRID-1;
- sd->nedge->v1->vec.y-= (sd->nedge->v1->vec.y % AREAGRID);
- if(sd->nedge->v1->vec.y > C->window->sizey-HEADERY)
- sd->nedge->v1->vec.y= C->window->sizey-HEADERY;
-
- sd->nedge->v2->vec.y= sd->origval + op->delta;
- sd->nedge->v2->vec.y+= AREAGRID-1;
- sd->nedge->v2->vec.y-= (sd->nedge->v2->vec.y % AREAGRID);
- if(sd->nedge->v2->vec.y > C->window->sizey-HEADERY)
- sd->nedge->v2->vec.y= C->window->sizey-HEADERY;
+ sd->nedge->v1->vec.y= newval;
+ sd->nedge->v2->vec.y= newval;
}
printf("\n");
return 1;
@@ -1109,7 +1098,7 @@
return 1;
}
-static void split_initintern(bContext *C, wmOperator *op, sAreaSplitData *sd)
+static int split_initintern(bContext *C, wmOperator *op, sAreaSplitData *sd)
{
float fac= 0.0;
if(sd->dir=='h') {
@@ -1125,13 +1114,19 @@
sd->max= sd->aedge->v2->vec.x;
}
- sd->narea= splitarea(C->window, C->screen, sd->sarea, sd->dir, fac);
+ sd->narea= splitarea(C->window, C->screen, sd->sarea, sd->dir, fac);
+
+ if(sd->narea==NULL) return 0;
+
sd->nedge= area_findsharededge(C->screen, sd->sarea, sd->narea);
printf("split_area_init\n");
/* get newly created edge and select it */
- select_connected_scredge(C->screen, sd->nedge);
-
+ select_connected_scredge(C->screen, sd->nedge);
+
+ WM_event_add_notifier(C->wm, C->window, 0, WM_NOTE_SCREEN_CHANGED, 0);
+
+ return 1;
}
static int split_area_init (bContext *C, wmOperator *op)
@@ -1149,12 +1144,7 @@
sd->sarea= screen_test_edge_area(C->screen, C->curarea, actedge);
sd->aedge= actedge;
- split_initintern(C, op, sd);
- if(sd->narea == NULL) return 0;
-
- WM_event_add_notifier(C->wm, C->window, 0, WM_NOTE_SCREEN_CHANGED, 0);
-
- return 1;
+ return split_initintern(C, op, sd);
}
static int split_area_invoke(bContext *C, wmOperator *op, wmEvent *event)
@@ -1230,10 +1220,15 @@
sold= sd->sarea;
printf("In other area now\n");
split_joincurrent(C, sd);
- //sd->aedge= area_findsharededge(C->screen, sold, sa);
/* now find aedge with same orientation as sd->dir (inverted) */
- if(sd->dir=='v') sd->aedge= screen_findedge(C->screen, sa->v1, sa->v4);
- else sd->aedge= screen_findedge(C->screen, sa->v1, sa->v2);
+ if(sd->dir=='v') {
+ sd->aedge= screen_findedge(C->screen, sa->v1, sa->v4);
+ if(sd->aedge==NULL) sd->aedge= screen_findedge(C->screen, sa->v2, sa->v3);
+ }
+ else {
+ sd->aedge= screen_findedge(C->screen, sa->v1, sa->v2);
+ if(sd->aedge==NULL) sd->aedge= screen_findedge(C->screen, sa->v3, sa->v4);
+ }
sd->sarea= sa;
op->delta= 0;
op->veci.x= event->x;
More information about the Bf-blender-cvs
mailing list