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:
authorMatt Ebb <matt@mke3.net>2006-06-16 08:32:39 +0400
committerMatt Ebb <matt@mke3.net>2006-06-16 08:32:39 +0400
commitcf9e420ad3d2da3ff9488873243dcf6bab4984e2 (patch)
treeedb09ed89618758df24c4efe4e662ba4647397d1 /source
parent8008783e2770b60070b0f34b639d02a6a8b777e7 (diff)
* Added header pulldown menus for the Node Editor. Also tweaked colours and some
of the menu organisation, consolidating the redundant 'Generators' with 'Input'.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/node_composite.c6
-rw-r--r--source/blender/include/BSE_headerbuttons.h3
-rw-r--r--source/blender/include/BSE_node.h13
-rw-r--r--source/blender/src/editnode.c59
-rw-r--r--source/blender/src/header_node.c431
-rw-r--r--source/blender/src/resources.c6
-rw-r--r--source/blender/src/toolbox.c61
-rw-r--r--source/blender/src/usiblender.c6
8 files changed, 509 insertions, 76 deletions
diff --git a/source/blender/blenkernel/intern/node_composite.c b/source/blender/blenkernel/intern/node_composite.c
index 3ef77d2ada1..2d6ed137bf4 100644
--- a/source/blender/blenkernel/intern/node_composite.c
+++ b/source/blender/blenkernel/intern/node_composite.c
@@ -1183,7 +1183,7 @@ static bNodeType cmp_node_time= {
/* type code */ CMP_NODE_TIME,
/* name */ "Time",
/* width+range */ 140, 100, 320,
- /* class+opts */ NODE_CLASS_GENERATOR, NODE_OPTIONS,
+ /* class+opts */ NODE_CLASS_INPUT, NODE_OPTIONS,
/* input sock */ NULL,
/* output sock */ cmp_node_time_out,
/* storage */ "CurveMapping",
@@ -1313,7 +1313,7 @@ static bNodeType cmp_node_value= {
/* type code */ CMP_NODE_VALUE,
/* name */ "Value",
/* width+range */ 80, 40, 120,
- /* class+opts */ NODE_CLASS_GENERATOR, NODE_OPTIONS,
+ /* class+opts */ NODE_CLASS_INPUT, NODE_OPTIONS,
/* input sock */ NULL,
/* output sock */ cmp_node_value_out,
/* storage */ "",
@@ -1338,7 +1338,7 @@ static bNodeType cmp_node_rgb= {
/* type code */ CMP_NODE_RGB,
/* name */ "RGB",
/* width+range */ 100, 60, 140,
- /* class+opts */ NODE_CLASS_GENERATOR, NODE_OPTIONS,
+ /* class+opts */ NODE_CLASS_INPUT, NODE_OPTIONS,
/* input sock */ NULL,
/* output sock */ cmp_node_rgb_out,
/* storage */ "",
diff --git a/source/blender/include/BSE_headerbuttons.h b/source/blender/include/BSE_headerbuttons.h
index d405e2683a6..a5ded324105 100644
--- a/source/blender/include/BSE_headerbuttons.h
+++ b/source/blender/include/BSE_headerbuttons.h
@@ -131,6 +131,9 @@ void do_info_add_metamenu(void *arg, int event);
void do_info_add_lampmenu(void *arg, int event);
void do_info_addmenu(void *arg, int event);
+/* header_node.c */
+void do_node_addmenu(void *arg, int event);
+
/* header_view3d.c */
void do_view3d_select_objectmenu(void *arg, int event);
void do_view3d_select_object_groupedmenu(void *arg, int event);
diff --git a/source/blender/include/BSE_node.h b/source/blender/include/BSE_node.h
index 05593983fe9..981cec9e830 100644
--- a/source/blender/include/BSE_node.h
+++ b/source/blender/include/BSE_node.h
@@ -56,7 +56,20 @@ void snode_tag_dirty(struct SpaceNode *snode);
void snode_set_context(struct SpaceNode *snode);
+void snode_home(struct ScrArea *sa, struct SpaceNode *snode);
+void snode_zoom_in(struct ScrArea *sa);
+void snode_zoom_out(struct ScrArea *sa);
+
void node_deselectall(struct SpaceNode *snode, int swap);
+void node_border_select(struct SpaceNode *snode);
+
+void node_delete(struct SpaceNode *snode);
+void node_make_group(struct SpaceNode *snode);
+void node_ungroup(struct SpaceNode *snode);
+void snode_make_group_editable(struct SpaceNode *snode, struct bNode *gnode);
+void node_hide(struct SpaceNode *snode);
+void node_read_renderresults(struct SpaceNode *snode);
+
void node_transform_ext(int mode, int unused);
void node_shader_default(struct Material *ma);
void node_composit_default(struct Scene *scene);
diff --git a/source/blender/src/editnode.c b/source/blender/src/editnode.c
index d265fcd7e40..2cc0efd5d02 100644
--- a/source/blender/src/editnode.c
+++ b/source/blender/src/editnode.c
@@ -470,7 +470,7 @@ static void node_set_active(SpaceNode *snode, bNode *node)
}
}
-static void snode_make_group_editable(SpaceNode *snode, bNode *gnode)
+void snode_make_group_editable(SpaceNode *snode, bNode *gnode)
{
bNode *node;
@@ -515,7 +515,7 @@ static void snode_make_group_editable(SpaceNode *snode, bNode *gnode)
allqueue(REDRAWNODE, 0);
}
-static void node_ungroup(SpaceNode *snode)
+void node_ungroup(SpaceNode *snode)
{
bNode *gnode;
@@ -682,7 +682,7 @@ static bNode *visible_node(SpaceNode *snode, rctf *rct)
return tnode;
}
-static void snode_home(ScrArea *sa, SpaceNode *snode)
+void snode_home(ScrArea *sa, SpaceNode *snode)
{
bNode *node;
int first= 1;
@@ -705,6 +705,32 @@ static void snode_home(ScrArea *sa, SpaceNode *snode)
}
+void snode_zoom_out(ScrArea *sa)
+{
+ float dx;
+
+ dx= (float)(0.15*(G.v2d->cur.xmax-G.v2d->cur.xmin));
+ G.v2d->cur.xmin-= dx;
+ G.v2d->cur.xmax+= dx;
+ dx= (float)(0.15*(G.v2d->cur.ymax-G.v2d->cur.ymin));
+ G.v2d->cur.ymin-= dx;
+ G.v2d->cur.ymax+= dx;
+ test_view2d(G.v2d, sa->winx, sa->winy);
+}
+
+void snode_zoom_in(ScrArea *sa)
+{
+ float dx;
+
+ dx= (float)(0.1154*(G.v2d->cur.xmax-G.v2d->cur.xmin));
+ G.v2d->cur.xmin+= dx;
+ G.v2d->cur.xmax-= dx;
+ dx= (float)(0.1154*(G.v2d->cur.ymax-G.v2d->cur.ymin));
+ G.v2d->cur.ymin+= dx;
+ G.v2d->cur.ymax-= dx;
+ test_view2d(G.v2d, sa->winx, sa->winy);
+}
+
/* checks mouse position, and returns found node/socket */
/* type is SOCK_IN and/or SOCK_OUT */
static int find_indicated_socket(SpaceNode *snode, bNode **nodep, bNodeSocket **sockp, int in_out)
@@ -854,7 +880,7 @@ void node_transform_ext(int mode, int unused)
{
SpaceNode *snode= curarea->spacedata.first;
- transform_nodes(snode->edittree, 'g', "Translate node");
+ transform_nodes(snode->edittree, 'g', "Move Node");
}
@@ -1542,7 +1568,7 @@ static int node_add_link(SpaceNode *snode)
return 0;
}
-static void node_delete(SpaceNode *snode)
+void node_delete(SpaceNode *snode)
{
bNode *node, *next;
@@ -1558,7 +1584,7 @@ static void node_delete(SpaceNode *snode)
allqueue(REDRAWNODE, 1);
}
-static void node_hide(SpaceNode *snode)
+void node_hide(SpaceNode *snode)
{
bNode *node;
int nothidden=0, ishidden=0;
@@ -1660,7 +1686,7 @@ static void node_border_link_delete(SpaceNode *snode)
}
/* goes over all scenes, reads render results */
-static void node_read_renderresults(SpaceNode *snode)
+void node_read_renderresults(SpaceNode *snode)
{
Scene *scene;
bNode *node;
@@ -1684,6 +1710,7 @@ static void node_read_renderresults(SpaceNode *snode)
snode_handle_recalc(snode);
}
+
/* ********************** */
void node_make_group(SpaceNode *snode)
@@ -1825,23 +1852,11 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
break;
case PADPLUSKEY:
- dx= (float)(0.1154*(G.v2d->cur.xmax-G.v2d->cur.xmin));
- G.v2d->cur.xmin+= dx;
- G.v2d->cur.xmax-= dx;
- dx= (float)(0.1154*(G.v2d->cur.ymax-G.v2d->cur.ymin));
- G.v2d->cur.ymin+= dx;
- G.v2d->cur.ymax-= dx;
- test_view2d(G.v2d, sa->winx, sa->winy);
+ snode_zoom_in(sa);
doredraw= 1;
break;
case PADMINUS:
- dx= (float)(0.15*(G.v2d->cur.xmax-G.v2d->cur.xmin));
- G.v2d->cur.xmin-= dx;
- G.v2d->cur.xmax+= dx;
- dx= (float)(0.15*(G.v2d->cur.ymax-G.v2d->cur.ymin));
- G.v2d->cur.ymin-= dx;
- G.v2d->cur.ymax+= dx;
- test_view2d(G.v2d, sa->winx, sa->winy);
+ snode_zoom_out(sa);
doredraw= 1;
break;
case HOMEKEY:
@@ -1892,7 +1907,7 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
node_addgroup(snode);
}
else
- transform_nodes(snode->edittree, 'g', "Translate Node");
+ transform_nodes(snode->edittree, 'g', "Move Node");
}
break;
case HKEY:
diff --git a/source/blender/src/header_node.c b/source/blender/src/header_node.c
index 06a69d62230..bf81878cfb8 100644
--- a/source/blender/src/header_node.c
+++ b/source/blender/src/header_node.c
@@ -54,7 +54,9 @@
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_material.h"
+#include "BKE_node.h"
+#include "BSE_drawipo.h"
#include "BSE_headerbuttons.h"
#include "BSE_node.h"
@@ -93,12 +95,416 @@ void do_node_buttons(ScrArea *sa, unsigned short event)
}
}
+static void do_node_viewmenu(void *arg, int event)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+
+ switch(event) {
+ case 1: /* Zoom in */
+ snode_zoom_in(curarea);
+ break;
+ case 2: /* View all */
+ snode_zoom_out(curarea);
+ break;
+ case 3: /* View all */
+ snode_home(curarea, snode);
+ break;
+ }
+ allqueue(REDRAWNODE, 0);
+}
+
+static uiBlock *node_viewmenu(void *arg_unused)
+{
+ uiBlock *block;
+ short yco= 0, menuwidth=120;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_viewmenu",
+ UI_EMBOSSP, UI_HELV, curarea->headwin);
+ uiBlockSetButmFunc(block, do_node_viewmenu, NULL);
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom In|NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Out|NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
+
+ uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
+
+ if (!curarea->full)
+ uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Maximize Window|Ctrl UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
+ else
+ uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
+
+ if(curarea->headertype==HEADERTOP) {
+ uiBlockSetDirection(block, UI_DOWN);
+ }
+ else {
+ uiBlockSetDirection(block, UI_TOP);
+ uiBlockFlipOrder(block);
+ }
+
+ uiTextBoundsBlock(block, 50);
+
+ return block;
+}
+
+static void do_node_selectmenu(void *arg, int event)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+
+ switch(event) {
+ case 1: /* border select */
+ node_border_select(snode);
+ break;
+ case 2: /* select/deselect all */
+ node_deselectall(snode, 1);
+ break;
+ }
+ allqueue(REDRAWNODE, 0);
+}
+
+static uiBlock *node_selectmenu(void *arg_unused)
+{
+ uiBlock *block;
+ short yco= 0, menuwidth=120;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_selectmenu",
+ UI_EMBOSSP, UI_HELV, curarea->headwin);
+ uiBlockSetButmFunc(block, do_node_selectmenu, NULL);
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
+
+ uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
+
+ if(curarea->headertype==HEADERTOP) {
+ uiBlockSetDirection(block, UI_DOWN);
+ }
+ else {
+ uiBlockSetDirection(block, UI_TOP);
+ uiBlockFlipOrder(block);
+ }
+
+ uiTextBoundsBlock(block, 50);
+
+ return block;
+}
+
+void do_node_addmenu(void *arg, int event)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ float locx, locy;
+ short mval[2];
+
+ getmouseco_areawin(mval);
+ areamouseco_to_ipoco(G.v2d, mval, &locx, &locy);
+ node_add_node(snode, event, locx, locy);
+
+ addqueue(curarea->win, B_NODE_TREE_EXEC, 1);
+
+ BIF_undo_push("Add Node");
+
+}
+
+static void node_make_addmenu(SpaceNode *snode, int nodeclass, uiBlock *block)
+{
+ bNodeTree *ntree;
+ bNodeType **typedefs;
+ int tot= 0, a;
+ short yco= 0, menuwidth=120;
+
+ ntree = snode->nodetree;
+ if(ntree) {
+ /* mostly taken from toolbox.c, node_add_sublevel() */
+ if(ntree) {
+ if(nodeclass==NODE_CLASS_GROUP) {
+ bNodeTree *ngroup= G.main->nodetree.first;
+ for(; ngroup; ngroup= ngroup->id.next)
+ if(ngroup->type==ntree->type)
+ tot++;
+ }
+ else {
+ for(typedefs= ntree->alltypes; *typedefs; typedefs++)
+ if( (*typedefs)->nclass == nodeclass )
+ tot++;
+ }
+ }
+
+ if(tot==0) {
+ uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
+ return;
+ }
+
+ if(nodeclass==NODE_CLASS_GROUP) {
+ bNodeTree *ngroup= G.main->nodetree.first;
+ for(tot=0, a=0; ngroup; ngroup= ngroup->id.next, tot++) {
+ if(ngroup->type==ntree->type) {
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, (ngroup->id.name+2), 0,
+ yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, NODE_GROUP_MENU+tot, "");
+ a++;
+ }
+ }
+ }
+ else {
+ for(a=0, typedefs= ntree->alltypes; *typedefs; typedefs++) {
+ if( (*typedefs)->nclass == nodeclass ) {
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, (*typedefs)->name, 0,
+ yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, (*typedefs)->type, "");
+ a++;
+ }
+ }
+ }
+ } else {
+ uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
+ return;
+ }
+}
+
+static uiBlock *node_add_inputmenu(void *arg_unused)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ uiBlock *block;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_add_inputmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_node_addmenu, NULL);
+
+ node_make_addmenu(snode, NODE_CLASS_INPUT, block);
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
+static uiBlock *node_add_outputmenu(void *arg_unused)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ uiBlock *block;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_add_outputmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_node_addmenu, NULL);
+
+ node_make_addmenu(snode, NODE_CLASS_OUTPUT, block);
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
+static uiBlock *node_add_colormenu(void *arg_unused)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ uiBlock *block;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_add_colormenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_node_addmenu, NULL);
+
+ node_make_addmenu(snode, NODE_CLASS_OP_COLOR, block);
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
+static uiBlock *node_add_vectormenu(void *arg_unused)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ uiBlock *block;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_add_vectormenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_node_addmenu, NULL);
+
+ node_make_addmenu(snode, NODE_CLASS_OP_VECTOR, block);
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
+static uiBlock *node_add_filtermenu(void *arg_unused)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ uiBlock *block;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_add_filtermenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_node_addmenu, NULL);
+
+ node_make_addmenu(snode, NODE_CLASS_OP_FILTER, block);
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
+static uiBlock *node_add_convertermenu(void *arg_unused)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ uiBlock *block;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_add_convertermenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_node_addmenu, NULL);
+
+ node_make_addmenu(snode, NODE_CLASS_CONVERTOR, block);
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
+static uiBlock *node_add_groupmenu(void *arg_unused)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ uiBlock *block;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_add_groupmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
+ uiBlockSetButmFunc(block, do_node_addmenu, NULL);
+
+ node_make_addmenu(snode, NODE_CLASS_GROUP, block);
+
+ uiBlockSetDirection(block, UI_RIGHT);
+ uiTextBoundsBlock(block, 60);
+
+ return block;
+}
+
+static uiBlock *node_addmenu(void *arg_unused)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ uiBlock *block;
+ short yco= 0, menuwidth=120;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_addmenu",
+ UI_EMBOSSP, UI_HELV, curarea->headwin);
+ uiBlockSetButmFunc(block, do_node_addmenu, NULL);
+
+ if(snode->treetype==NTREE_SHADER) {
+ uiDefIconTextBlockBut(block, node_add_inputmenu, NULL, ICON_RIGHTARROW_THIN, "Input", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_outputmenu, NULL, ICON_RIGHTARROW_THIN, "Output", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_colormenu, NULL, ICON_RIGHTARROW_THIN, "Color", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_vectormenu, NULL, ICON_RIGHTARROW_THIN, "Vector", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_convertermenu, NULL, ICON_RIGHTARROW_THIN, "Convertor", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
+ }
+ else if(snode->treetype==NTREE_COMPOSIT) {
+ uiDefIconTextBlockBut(block, node_add_inputmenu, NULL, ICON_RIGHTARROW_THIN, "Input", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_outputmenu, NULL, ICON_RIGHTARROW_THIN, "Output", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_colormenu, NULL, ICON_RIGHTARROW_THIN, "Color", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_vectormenu, NULL, ICON_RIGHTARROW_THIN, "Vector", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_filtermenu, NULL, ICON_RIGHTARROW_THIN, "Filter", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_convertermenu, NULL, ICON_RIGHTARROW_THIN, "Convertor", 0, yco-=20, 120, 19, "");
+ uiDefIconTextBlockBut(block, node_add_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
+ } else
+ uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
+
+ if(curarea->headertype==HEADERTOP) {
+ uiBlockSetDirection(block, UI_DOWN);
+ }
+ else {
+ uiBlockSetDirection(block, UI_TOP);
+ uiBlockFlipOrder(block);
+ }
+
+ uiTextBoundsBlock(block, 50);
+
+ return block;
+}
+
+static void do_node_nodemenu(void *arg, int event)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ int fromlib=0;
+
+ if(snode->nodetree==NULL) return;
+ fromlib= (snode->id && snode->id->lib);
+
+ switch(event) {
+ case 1: /* grab/move */
+ node_transform_ext(0,0);
+ break;
+ case 2: /* duplicate */
+ if(fromlib) fromlib= -1;
+ else node_adduplicate(snode);
+ break;
+ case 3: /* delete */
+ if(fromlib) fromlib= -1;
+ else node_delete(snode);
+ break;
+ case 4: /* make group */
+ node_make_group(snode);
+ break;
+ case 5: /* ungroup */
+ node_ungroup(snode);
+ break;
+ case 6: /* edit group */
+ if(fromlib) fromlib= -1;
+ else snode_make_group_editable(snode, NULL);
+ break;
+ case 7: /* hide/unhide */
+ node_hide(snode);
+ break;
+ case 8: /* read saved render results */
+ node_read_renderresults(snode);
+ break;
+ case 9: /* show cyclic */
+ ntreeSolveOrder(snode->edittree);
+ break;
+ }
+
+ if(fromlib==-1) error("Can't edit Library Data");
+ allqueue(REDRAWNODE, 0);
+}
+
+static uiBlock *node_nodemenu(void *arg_unused)
+{
+ SpaceNode *snode= curarea->spacedata.first;
+ uiBlock *block;
+ short yco= 0, menuwidth=120;
+
+ block= uiNewBlock(&curarea->uiblocks, "node_nodemenu",
+ UI_EMBOSSP, UI_HELV, curarea->headwin);
+ uiBlockSetButmFunc(block, do_node_nodemenu, NULL);
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
+
+ uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
+
+ uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Group|Ctrl G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ungroup|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edit Group|Tab", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
+
+ uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
+
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide/Unhide|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
+
+ uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
+
+ if(snode->treetype==NTREE_COMPOSIT)
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Read Saved Render Results|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Cyclic Dependencies|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
+
+ if(curarea->headertype==HEADERTOP) {
+ uiBlockSetDirection(block, UI_DOWN);
+ }
+ else {
+ uiBlockSetDirection(block, UI_TOP);
+ uiBlockFlipOrder(block);
+ }
+
+ uiTextBoundsBlock(block, 50);
+
+ return block;
+}
void node_buttons(ScrArea *sa)
{
SpaceNode *snode= sa->spacedata.first;
uiBlock *block;
- short xco;
+ short xco, xmax;
char name[256];
sprintf(name, "header %d", sa->headwin);
@@ -135,10 +541,25 @@ void node_buttons(ScrArea *sa)
/* pull down menus */
uiBlockSetEmboss(block, UI_EMBOSSP);
-// xmax= GetButStringLength("View");
-// uiDefPulldownBut(block, time_viewmenu, NULL,
-// "View", xco, -2, xmax-3, 24, "");
-// xco+= xmax;
+ xmax= GetButStringLength("View");
+ uiDefPulldownBut(block, node_viewmenu, NULL,
+ "View", xco, -2, xmax-3, 24, "");
+ xco+= xmax;
+
+ xmax= GetButStringLength("Select");
+ uiDefPulldownBut(block, node_selectmenu, NULL,
+ "Select", xco, -2, xmax-3, 24, "");
+ xco+= xmax;
+
+ xmax= GetButStringLength("Add");
+ uiDefPulldownBut(block, node_addmenu, NULL,
+ "Add", xco, -2, xmax-3, 24, "");
+ xco+= xmax;
+
+ xmax= GetButStringLength("Node");
+ uiDefPulldownBut(block, node_nodemenu, NULL,
+ "Node", xco, -2, xmax-3, 24, "");
+ xco+= xmax;
}
uiBlockSetEmboss(block, UI_EMBOSS);
diff --git a/source/blender/src/resources.c b/source/blender/src/resources.c
index 6fc2f28f76b..ee3f36d21c3 100644
--- a/source/blender/src/resources.c
+++ b/source/blender/src/resources.c
@@ -514,9 +514,9 @@ void BIF_InitTheme(void)
btheme->tnode= btheme->tv3d;
SETCOL(btheme->tnode.edge_select, 255, 255, 255, 255);
SETCOL(btheme->tnode.syntaxl, 150, 150, 150, 255); /* TH_NODE, backdrop */
- SETCOL(btheme->tnode.syntaxn, 95, 110, 145, 255); /* in/output */
- SETCOL(btheme->tnode.syntaxb, 135, 125, 120, 255); /* operator */
- SETCOL(btheme->tnode.syntaxv, 120, 120, 120, 255); /* generator */
+ SETCOL(btheme->tnode.syntaxn, 129, 131, 144, 255); /* in/output */
+ SETCOL(btheme->tnode.syntaxb, 127,127,127, 255); /* operator */
+ SETCOL(btheme->tnode.syntaxv, 142, 138, 145, 255); /* generator */
SETCOL(btheme->tnode.syntaxc, 120, 145, 120, 255); /* group */
}
diff --git a/source/blender/src/toolbox.c b/source/blender/src/toolbox.c
index fb7b7ed030a..9a3036f866b 100644
--- a/source/blender/src/toolbox.c
+++ b/source/blender/src/toolbox.c
@@ -1466,17 +1466,15 @@ static TBitem tb_render[]= {
#define TB_SH_OP_COLOR 2
#define TB_SH_OP_VECTOR 3
#define TB_SH_CONVERTORS 4
-#define TB_SH_GENERATORS 5
-#define TB_SH_GROUPS 6
+#define TB_SH_GROUPS 5
static TBitem tb_node_addsh[]= {
- { 0, "Inputs", 1, NULL},
- { 0, "Outputs", 2, NULL},
- { 0, "Color Ops", 3, NULL},
- { 0, "Vector Ops", 4, NULL},
+ { 0, "Input", 1, NULL},
+ { 0, "Output", 2, NULL},
+ { 0, "Color", 3, NULL},
+ { 0, "Vector", 4, NULL},
{ 0, "Convertors", 5, NULL},
- { 0, "Generators", 6, NULL},
- { 0, "Groups", 7, NULL},
+ { 0, "Groups", 6, NULL},
{ -1, "", 0, NULL}};
@@ -1486,35 +1484,19 @@ static TBitem tb_node_addsh[]= {
#define TB_CMP_OP_VECTOR 3
#define TB_CMP_OP_FILTER 4
#define TB_CMP_CONVERTORS 5
-#define TB_CMP_GENERATORS 6
-#define TB_CMP_GROUPS 7
+#define TB_CMP_GROUPS 6
static TBitem tb_node_addcomp[]= {
- { 0, "Inputs", 1, NULL},
- { 0, "Outputs", 2, NULL},
- { 0, "Color Ops", 3, NULL},
- { 0, "Vector Ops", 4, NULL},
+ { 0, "Input", 1, NULL},
+ { 0, "Output", 2, NULL},
+ { 0, "Color", 3, NULL},
+ { 0, "Vector", 4, NULL},
{ 0, "Filters", 5, NULL},
{ 0, "Convertors", 6, NULL},
- { 0, "Generators", 7, NULL},
- { 0, "Groups", 8, NULL},
+ { 0, "Groups", 7, NULL},
{ -1, "", 0, NULL}};
-static void do_node_addmenu(void *arg, int event)
-{
- SpaceNode *snode= curarea->spacedata.first;
- float locx, locy;
- short mval[2];
-
- getmouseco_areawin(mval);
- areamouseco_to_ipoco(G.v2d, mval, &locx, &locy);
- node_add_node(snode, event, locx, locy);
-
- addqueue(curarea->win, B_NODE_TREE_EXEC, 1);
-
- BIF_undo_push("Add Node");
-
-}
+/* do_node_addmenu() in header_node.c, prototype in BSE_headerbuttons.h */
/* dynamic toolbox sublevel */
static TBitem *node_add_sublevel(void **poin, bNodeTree *ntree, int nodeclass)
@@ -1575,17 +1557,18 @@ static TBitem *node_add_sublevel(void **poin, bNodeTree *ntree, int nodeclass)
}
-static TBitem tb_node_edit[]= {
+static TBitem tb_node_node[]= {
{ 0, "Duplicate|Shift D", TB_SHIFT|'d', NULL},
{ 0, "Delete|X", 'x', NULL},
{ 0, "SEPR", 0, NULL},
{ 0, "Make Group|Ctrl G", TB_CTRL|'g', NULL},
{ 0, "Ungroup|Alt G", TB_ALT|'g', NULL},
- { 0, "Edit Group", TB_TAB, NULL},
+ { 0, "Edit Group|Tab", TB_TAB, NULL},
{ 0, "SEPR", 0, NULL},
{ 0, "Hide/Unhide|H", 'h', NULL},
{ 0, "SEPR", 0, NULL},
- { 0, "Show Cyclic Dependencies", 'c', NULL},
+ { 0, "Read Saved Render Results|R", 'r', NULL},
+ { 0, "Show Cyclic Dependencies|C", 'c', NULL},
{ -1, "", 0, tb_do_hotkey}};
static TBitem tb_node_select[]= {
@@ -1598,9 +1581,9 @@ static TBitem tb_node_transform[]= {
{ -1, "", 0, tb_do_hotkey}};
static TBitem tb_node_view[]= {
- { 0, "Zoom in|NumPad +", TB_PAD|'+', NULL},
- { 0, "Zoom out|NumPad -", TB_PAD|'-', NULL},
- { 0, "View all|Home", TB_PAD|'h', NULL},
+ { 0, "Zoom In|NumPad +", TB_PAD|'+', NULL},
+ { 0, "Zoom Out|NumPad -", TB_PAD|'-', NULL},
+ { 0, "View All|Home", TB_PAD|'h', NULL},
{ -1, "", 0, tb_do_hotkey}};
@@ -1872,7 +1855,7 @@ void toolbox_n(void)
else
menu1= tb_node_addsh;
str1= "Add";
- menu2= tb_node_edit; str2= "Edit";
+ menu2= tb_node_node; str2= "Node";
menu3= tb_node_select; str3= "Select";
menu4= tb_node_transform; str4= "Transform";
menu5= tb_node_view; str5= "View";
@@ -1883,7 +1866,6 @@ void toolbox_n(void)
node_add_op_col= node_add_sublevel(&menu1[TB_SH_OP_COLOR].poin, snode->nodetree, NODE_CLASS_OP_COLOR);
node_add_op_vec= node_add_sublevel(&menu1[TB_SH_OP_VECTOR].poin, snode->nodetree, NODE_CLASS_OP_VECTOR);
node_add_con= node_add_sublevel(&menu1[TB_SH_CONVERTORS].poin, snode->nodetree, NODE_CLASS_CONVERTOR);
- node_add_gen= node_add_sublevel(&menu1[TB_SH_GENERATORS].poin, snode->nodetree, NODE_CLASS_GENERATOR);
node_add_group= node_add_sublevel(&menu1[TB_SH_GROUPS].poin, snode->nodetree, NODE_CLASS_GROUP);
}
else if(snode->treetype==NTREE_COMPOSIT) {
@@ -1893,7 +1875,6 @@ void toolbox_n(void)
node_add_op_filt= node_add_sublevel(&menu1[TB_CMP_OP_FILTER].poin, snode->nodetree, NODE_CLASS_OP_FILTER);
node_add_op_vec= node_add_sublevel(&menu1[TB_CMP_OP_VECTOR].poin, snode->nodetree, NODE_CLASS_OP_VECTOR);
node_add_con= node_add_sublevel(&menu1[TB_CMP_CONVERTORS].poin, snode->nodetree, NODE_CLASS_CONVERTOR);
- node_add_gen= node_add_sublevel(&menu1[TB_CMP_GENERATORS].poin, snode->nodetree, NODE_CLASS_GENERATOR);
node_add_group= node_add_sublevel(&menu1[TB_CMP_GROUPS].poin, snode->nodetree, NODE_CLASS_GROUP);
}
diff --git a/source/blender/src/usiblender.c b/source/blender/src/usiblender.c
index a638d003b63..5c244177e9f 100644
--- a/source/blender/src/usiblender.c
+++ b/source/blender/src/usiblender.c
@@ -286,9 +286,9 @@ static void init_userdef_file(void)
btheme->tnode= btheme->tv3d;
SETCOL(btheme->tnode.edge_select, 255, 255, 255, 255);
SETCOL(btheme->tnode.syntaxl, 150, 150, 150, 255); /* TH_NODE, backdrop */
- SETCOL(btheme->tnode.syntaxn, 95, 110, 145, 255); /* in/output */
- SETCOL(btheme->tnode.syntaxb, 135, 125, 120, 255); /* operator */
- SETCOL(btheme->tnode.syntaxv, 120, 120, 120, 255); /* generator */
+ SETCOL(btheme->tnode.syntaxn, 129, 131, 144, 255); /* in/output */
+ SETCOL(btheme->tnode.syntaxb, 127,127,127, 255); /* operator */
+ SETCOL(btheme->tnode.syntaxv, 142, 138, 145, 255); /* generator */
SETCOL(btheme->tnode.syntaxc, 120, 145, 120, 255); /* group */
}
if(btheme->tv3d.group[3]==0) {