From 55865239a236e5567b78bf95001b0de3ab049717 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Mon, 31 Jan 2011 17:28:03 +0000 Subject: Bugfix #25874 Area split error: if the first split position was exactly aligned with another 'edge' it merged the edges, causing the subdivision layout to go haywire. Only happens in rare occasions, good find this report :) --- source/blender/editors/screen/screen_edit.c | 7 ++++--- source/blender/editors/screen/screen_intern.h | 2 +- source/blender/editors/screen/screen_ops.c | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) (limited to 'source/blender/editors/screen') diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 376e70f6ea2..9a11dfaa342 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -346,7 +346,7 @@ static short testsplitpoint(ScrArea *sa, char dir, float fac) } } -ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac) +ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac, int merge) { ScrArea *newa=NULL; ScrVert *sv1, *sv2; @@ -400,7 +400,8 @@ ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac) } /* remove double vertices en edges */ - removedouble_scrverts(sc); + if(merge) + removedouble_scrverts(sc); removedouble_scredges(sc); removenotused_scredges(sc); @@ -1611,7 +1612,7 @@ ScrArea *ED_screen_full_toggle(bContext *C, wmWindow *win, ScrArea *sa) oldscreen->animtimer= NULL; /* returns the top small area */ - newa= area_split(sc, (ScrArea *)sc->areabase.first, 'h', 0.99f); + newa= area_split(sc, (ScrArea *)sc->areabase.first, 'h', 0.99f, 1); ED_area_newspace(C, newa, SPACE_INFO); /* use random area when we have no active one, e.g. when the diff --git a/source/blender/editors/screen/screen_intern.h b/source/blender/editors/screen/screen_intern.h index b20daf9a0c8..87b397382a3 100644 --- a/source/blender/editors/screen/screen_intern.h +++ b/source/blender/editors/screen/screen_intern.h @@ -37,7 +37,7 @@ void area_copy_data (ScrArea *sa1, ScrArea *sa2, int swap_space); /* screen_edit.c */ ScrEdge *screen_findedge(bScreen *sc, ScrVert *v1, ScrVert *v2); -ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac); +ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac, int merge); int screen_area_join(bContext *C, bScreen* scr, ScrArea *sa1, ScrArea *sa2); int area_getorientation(ScrArea *sa, ScrArea *sb); void select_connected_scredge(bScreen *sc, ScrEdge *edge); diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index d891b025241..1c203b2dd1f 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -1169,7 +1169,7 @@ static int area_split_apply(bContext *C, wmOperator *op) fac= RNA_float_get(op->ptr, "factor"); dir= RNA_enum_get(op->ptr, "direction"); - sd->narea= area_split(sc, sd->sarea, dir, fac); + sd->narea= area_split(sc, sd->sarea, dir, fac, 0); /* 0 = no merge */ if(sd->narea) { ScrVert *sv; -- cgit v1.2.3