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
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/BKE_node.h2
-rw-r--r--source/blender/editors/space_node/node_header.c48
-rw-r--r--source/blender/nodes/composite/node_composite_tree.c15
-rw-r--r--source/blender/nodes/shader/node_shader_tree.c20
-rw-r--r--source/blender/nodes/texture/node_texture_tree.c14
5 files changed, 61 insertions, 38 deletions
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 6080981dc32..b94fffab714 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -245,6 +245,7 @@ typedef struct bNodeType {
struct bNodeTreeExec;
typedef void (*bNodeTreeCallback)(void *calldata, struct ID *owner_id, struct bNodeTree *ntree);
+typedef void (*bNodeClassCallback)(void *calldata, int nclass, const char *name);
typedef struct bNodeTreeType
{
int type; /* type identifier */
@@ -256,6 +257,7 @@ typedef struct bNodeTreeType
void (*free_cache)(struct bNodeTree *ntree);
void (*free_node_cache)(struct bNodeTree *ntree, struct bNode *node);
void (*foreach_nodetree)(struct Main *main, void *calldata, bNodeTreeCallback func); /* iteration over all node trees */
+ void (*foreach_nodeclass)(struct Scene *scene, void *calldata, bNodeClassCallback func); /* iteration over all node classes */
/* calls allowing threaded composite */
void (*localize)(struct bNodeTree *localtree, struct bNodeTree *ntree);
diff --git a/source/blender/editors/space_node/node_header.c b/source/blender/editors/space_node/node_header.c
index 42b5dafa3e1..d752dd79a19 100644
--- a/source/blender/editors/space_node/node_header.c
+++ b/source/blender/editors/space_node/node_header.c
@@ -226,52 +226,24 @@ static void node_add_menu(bContext *C, uiLayout *layout, void *arg_nodeclass)
}
}
+static void node_menu_add_foreach_cb(void *calldata, int nclass, const char *name)
+{
+ uiLayout *layout= calldata;
+ uiItemMenuF(layout, IFACE_(name), 0, node_add_menu, SET_INT_IN_POINTER(nclass));
+}
+
static void node_menu_add(const bContext *C, Menu *menu)
{
Scene *scene= CTX_data_scene(C);
SpaceNode *snode= CTX_wm_space_node(C);
uiLayout *layout= menu->layout;
+ bNodeTreeType *ntreetype= ntreeGetType(snode->treetype);
if(!snode->nodetree)
uiLayoutSetActive(layout, 0);
-
- if(snode->treetype==NTREE_SHADER) {
- uiItemMenuF(layout, IFACE_("Input"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT));
- uiItemMenuF(layout, IFACE_("Output"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT));
- if(scene_use_new_shading_nodes(scene)) {
- uiItemMenuF(layout, IFACE_("Shader"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_SHADER));
- uiItemMenuF(layout, IFACE_("Texture"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_TEXTURE));
- }
- uiItemMenuF(layout, IFACE_("Color"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR));
- uiItemMenuF(layout, IFACE_("Vector"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_VECTOR));
- uiItemMenuF(layout, IFACE_("Convertor"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR));
- uiItemMenuF(layout, IFACE_("Group"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP));
- //uiItemMenuF(layout, IFACE_("Dynamic"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_DYNAMIC));
- uiItemMenuF(layout, IFACE_("Layout"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_LAYOUT));
- }
- else if(snode->treetype==NTREE_COMPOSIT) {
- uiItemMenuF(layout, IFACE_("Input"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT));
- uiItemMenuF(layout, IFACE_("Output"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT));
- uiItemMenuF(layout, IFACE_("Color"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR));
- uiItemMenuF(layout, IFACE_("Vector"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_VECTOR));
- uiItemMenuF(layout, IFACE_("Filter"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_FILTER));
- uiItemMenuF(layout, IFACE_("Convertor"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR));
- uiItemMenuF(layout, IFACE_("Matte"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_MATTE));
- uiItemMenuF(layout, IFACE_("Distort"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_DISTORT));
- uiItemMenuF(layout, IFACE_("Group"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP));
- uiItemMenuF(layout, IFACE_("Layout"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_LAYOUT));
- }
- else if(snode->treetype==NTREE_TEXTURE) {
- uiItemMenuF(layout, IFACE_("Input"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_INPUT));
- uiItemMenuF(layout, IFACE_("Output"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OUTPUT));
- uiItemMenuF(layout, IFACE_("Color"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_OP_COLOR));
- uiItemMenuF(layout, IFACE_("Patterns"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_PATTERN));
- uiItemMenuF(layout, IFACE_("Textures"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_TEXTURE));
- uiItemMenuF(layout, IFACE_("Convertor"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_CONVERTOR));
- uiItemMenuF(layout, IFACE_("Distort"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_DISTORT));
- uiItemMenuF(layout, IFACE_("Group"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_GROUP));
- uiItemMenuF(layout, IFACE_("Layout"), 0, node_add_menu, SET_INT_IN_POINTER(NODE_CLASS_LAYOUT));
- }
+
+ if(ntreetype && ntreetype->foreach_nodeclass)
+ ntreetype->foreach_nodeclass(scene, layout, node_menu_add_foreach_cb);
}
void node_menus_register(void)
diff --git a/source/blender/nodes/composite/node_composite_tree.c b/source/blender/nodes/composite/node_composite_tree.c
index d3f4a5b2999..06f88002a70 100644
--- a/source/blender/nodes/composite/node_composite_tree.c
+++ b/source/blender/nodes/composite/node_composite_tree.c
@@ -68,6 +68,20 @@ static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func)
}
}
+static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCallback func)
+{
+ func(calldata, NODE_CLASS_INPUT, "Input");
+ func(calldata, NODE_CLASS_OUTPUT, "Output");
+ func(calldata, NODE_CLASS_OP_COLOR, "Color");
+ func(calldata, NODE_CLASS_OP_VECTOR, "Vector");
+ func(calldata, NODE_CLASS_OP_FILTER, "Filter");
+ func(calldata, NODE_CLASS_CONVERTOR, "Convertor");
+ func(calldata, NODE_CLASS_MATTE, "Matte");
+ func(calldata, NODE_CLASS_DISTORT, "Distort");
+ func(calldata, NODE_CLASS_GROUP, "Group");
+ func(calldata, NODE_CLASS_LAYOUT, "Layout");
+}
+
static void free_node_cache(bNodeTree *UNUSED(ntree), bNode *node)
{
bNodeSocket *sock;
@@ -207,6 +221,7 @@ bNodeTreeType ntreeType_Composite = {
/* free_cache */ free_cache,
/* free_node_cache */ free_node_cache,
/* foreach_nodetree */ foreach_nodetree,
+ /* foreach_nodeclass */ foreach_nodeclass,
/* localize */ localize,
/* local_sync */ local_sync,
/* local_merge */ local_merge,
diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c
index d0ae17914ca..aa8ba12f799 100644
--- a/source/blender/nodes/shader/node_shader_tree.c
+++ b/source/blender/nodes/shader/node_shader_tree.c
@@ -35,6 +35,7 @@
#include "DNA_lamp_types.h"
#include "DNA_material_types.h"
#include "DNA_node_types.h"
+#include "DNA_scene_types.h"
#include "DNA_world_types.h"
#include "BLI_listbase.h"
@@ -45,6 +46,7 @@
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_node.h"
+#include "BKE_scene.h"
#include "BKE_utildefines.h"
#include "GPU_material.h"
@@ -74,6 +76,23 @@ static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func)
func(calldata, &wo->id, wo->nodetree);
}
+static void foreach_nodeclass(Scene *scene, void *calldata, bNodeClassCallback func)
+{
+ func(calldata, NODE_CLASS_INPUT, "Input");
+ func(calldata, NODE_CLASS_OUTPUT, "Output");
+
+ if(scene_use_new_shading_nodes(scene)) {
+ func(calldata, NODE_CLASS_SHADER, "Shader");
+ func(calldata, NODE_CLASS_TEXTURE, "Texture");
+ }
+
+ func(calldata, NODE_CLASS_OP_COLOR, "Color");
+ func(calldata, NODE_CLASS_OP_VECTOR, "Vector");
+ func(calldata, NODE_CLASS_CONVERTOR, "Convertor");
+ func(calldata, NODE_CLASS_GROUP, "Group");
+ func(calldata, NODE_CLASS_LAYOUT, "Layout");
+}
+
static void local_sync(bNodeTree *localtree, bNodeTree *ntree)
{
bNode *lnode;
@@ -108,6 +127,7 @@ bNodeTreeType ntreeType_Shader = {
/* free_cache */ NULL,
/* free_node_cache */ NULL,
/* foreach_nodetree */ foreach_nodetree,
+ /* foreach_nodeclass */ foreach_nodeclass,
/* localize */ NULL,
/* local_sync */ local_sync,
/* local_merge */ NULL,
diff --git a/source/blender/nodes/texture/node_texture_tree.c b/source/blender/nodes/texture/node_texture_tree.c
index 5e5d44540dc..84bb53e2215 100644
--- a/source/blender/nodes/texture/node_texture_tree.c
+++ b/source/blender/nodes/texture/node_texture_tree.c
@@ -62,6 +62,19 @@ static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func)
}
}
+static void foreach_nodeclass(Scene *UNUSED(scene), void *calldata, bNodeClassCallback func)
+{
+ func(calldata, NODE_CLASS_INPUT, "Input");
+ func(calldata, NODE_CLASS_OUTPUT, "Output");
+ func(calldata, NODE_CLASS_OP_COLOR, "Color");
+ func(calldata, NODE_CLASS_PATTERN, "Patterns");
+ func(calldata, NODE_CLASS_TEXTURE, "Textures");
+ func(calldata, NODE_CLASS_CONVERTOR, "Convertor");
+ func(calldata, NODE_CLASS_DISTORT, "Distort");
+ func(calldata, NODE_CLASS_GROUP, "Group");
+ func(calldata, NODE_CLASS_LAYOUT, "Layout");
+}
+
static void local_sync(bNodeTree *localtree, bNodeTree *ntree)
{
bNode *lnode;
@@ -91,6 +104,7 @@ bNodeTreeType ntreeType_Texture = {
/* free_cache */ NULL,
/* free_node_cache */ NULL,
/* foreach_nodetree */ foreach_nodetree,
+ /* foreach_nodeclass */ foreach_nodeclass,
/* localize */ NULL,
/* local_sync */ local_sync,
/* local_merge */ NULL,