Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2007-04-22 20:27:45 +0400
committerCampbell Barton <ideasman42@gmail.com>2007-04-22 20:27:45 +0400
commitd2f81fe5e98d3cb98bbf4e4caf97bf4738561a87 (patch)
treea3b68b0325c32bcff4e1de83a6a0db9db217826c /source
parentdf33b2855cbfd2914dc41a0a3d45d725ff91ab66 (diff)
Commit [ #6576 ] Hide "Join Areas" when areas cannot be joined,
modified the way string/menu, but othern then that patch's functionality is good. Seems to loop a fair but on screen edge data, but I tried to make it run slow and couldnt..
Diffstat (limited to 'source')
-rw-r--r--source/blender/src/editscreen.c57
1 files changed, 41 insertions, 16 deletions
diff --git a/source/blender/src/editscreen.c b/source/blender/src/editscreen.c
index 3a88e568546..4cd2ca7086b 100644
--- a/source/blender/src/editscreen.c
+++ b/source/blender/src/editscreen.c
@@ -745,33 +745,58 @@ void splash(void *data, int datasize, char *string)
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)
{
if (val) {
// don't allow users to edit full screens
- if (actarea && actarea->full) {
+ if (actarea && actarea->full)
return;
- }
if (evt==LEFTMOUSE) {
moveareas(actedge);
} else if (evt==MIDDLEMOUSE || evt==RIGHTMOUSE) {
int edgeop;
-
- if (!actarea->headertype) {
- edgeop= pupmenu("Split Area|Join Areas|Add Header");
- } else {
- edgeop= pupmenu("Split Area|Join Areas|No Header");
- }
-
- if (edgeop==1) {
- splitarea_interactive(actarea, actedge);
- } else if (edgeop==2) {
- joinarea_interactive(actarea, actedge);
- } else if (edgeop==3) {
- scrarea_change_headertype(actarea, actarea->headertype?0:HEADERDOWN);
- }
+ char str[64] = "Split Area%x1|";
+
+ if(isjoinable(actarea, actedge)) strcat(str, "Join Areas%x2|");
+ if (actarea->headertype) strcat(str, "No Header%x3");
+ else strcat(str, "Add Header%x3");
+
+ edgeop= pupmenu(str);
+ if (edgeop==1) splitarea_interactive(actarea, actedge);
+ else if (edgeop==2) joinarea_interactive(actarea, actedge);
+ else if (edgeop==3) scrarea_change_headertype(actarea,
+ actarea->headertype?0:HEADERDOWN);
}
else blenderqread(evt, val); // global hotkeys
}