Page MenuHome

aredge03.txt

aredge03.txt

Index: source/blender/src/editscreen.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/editscreen.c,v
retrieving revision 1.155
diff -u -p -u -r1.155 editscreen.c
--- source/blender/src/editscreen.c 12 Apr 2007 06:21:31 -0000 1.155
+++ source/blender/src/editscreen.c 16 Apr 2007 17:31:45 -0000
@@ -745,6 +745,35 @@ void splash(void *data, int datasize, ch
static void moveareas(ScrEdge *edge);
static void joinarea_interactive(ScrArea *area, ScrEdge *onedge);
static void splitarea_interactive(ScrArea *area, ScrEdge *onedge);
+static ScrArea *test_edge_area(ScrArea *sa, ScrEdge *se);
+static ScrEdge *screen_findedge(bScreen *sc, ScrVert *v1, ScrVert *v2);
+
+static int isjoinable(ScrArea *area, ScrEdge *onedge)
+{
+ struct ScrArea *sa1 = area, *sa2;
+ struct ScrEdge *se;
+
+ sa1 = test_edge_area(sa1, onedge);
+ if(sa1==0) return 0;
+
+ /* find directions with same edge */
+ sa2= G.curscreen->areabase.first;
+ while(sa2) {
+ if(sa2 != sa1) {
+ se= screen_findedge(G.curscreen, sa2->v1, sa2->v2);
+ if(onedge==se) return 1;
+ se= screen_findedge(G.curscreen, sa2->v2, sa2->v3);
+ if(onedge==se) return 1;
+ se= screen_findedge(G.curscreen, sa2->v3, sa2->v4);
+ if(onedge==se) return 1;
+ se= screen_findedge(G.curscreen, sa2->v4, sa2->v1);
+ if(onedge==se) return 1;
+ }
+ sa2= sa2->next;
+ }
+
+ return 0;
+}
static void screen_edge_edit_event(ScrArea *actarea, ScrEdge *actedge, short evt, short val)
{
@@ -757,21 +786,34 @@ static void screen_edge_edit_event(ScrAr
if (evt==LEFTMOUSE) {
moveareas(actedge);
} else if (evt==MIDDLEMOUSE || evt==RIGHTMOUSE) {
- int edgeop;
-
+ int edgeop, joinable= 1;
+ char *str;
+
+ str= MEM_callocN(32, "temp string");
+ strcpy(str, "Split Area|");
+
+ if(isjoinable(actarea, actedge)) {
+ strcat(str, "Join Areas|");
+ joinable= 0;
+ }
+
if (!actarea->headertype) {
- edgeop= pupmenu("Split Area|Join Areas|Add Header");
+ strcat(str, "Add Header");
+ edgeop= pupmenu(str);
} else {
- edgeop= pupmenu("Split Area|Join Areas|No Header");
+ strcat(str, "No Header");
+ edgeop= pupmenu(str);
}
if (edgeop==1) {
splitarea_interactive(actarea, actedge);
- } else if (edgeop==2) {
+ } else if (edgeop==2+joinable) {
joinarea_interactive(actarea, actedge);
- } else if (edgeop==3) {
+ } else if (edgeop==3-joinable) {
scrarea_change_headertype(actarea, actarea->headertype?0:HEADERDOWN);
}
+
+ MEM_freeN(str);
}
else blenderqread(evt, val); // global hotkeys
}

File Metadata

Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
b0/68/42cbe5705f3a711049a9ef9e456e

Event Timeline