diff options
Diffstat (limited to 'source/blender/nodes/composite')
4 files changed, 40 insertions, 17 deletions
diff --git a/source/blender/nodes/composite/node_composite_util.c b/source/blender/nodes/composite/node_composite_util.c index b6cbffea413..6cc17d8c272 100644 --- a/source/blender/nodes/composite/node_composite_util.c +++ b/source/blender/nodes/composite/node_composite_util.c @@ -23,9 +23,15 @@ #include "node_composite_util.h" -bool cmp_node_poll_default(bNodeType *UNUSED(ntype), bNodeTree *ntree) +bool cmp_node_poll_default(bNodeType *UNUSED(ntype), + bNodeTree *ntree, + const char **r_disabled_hint) { - return STREQ(ntree->idname, "CompositorNodeTree"); + if (!STREQ(ntree->idname, "CompositorNodeTree")) { + *r_disabled_hint = "Not a compositor node tree"; + return false; + } + return true; } void cmp_node_update_default(bNodeTree *UNUSED(ntree), bNode *node) diff --git a/source/blender/nodes/composite/node_composite_util.h b/source/blender/nodes/composite/node_composite_util.h index 800c55df4d6..4fcccbb79f0 100644 --- a/source/blender/nodes/composite/node_composite_util.h +++ b/source/blender/nodes/composite/node_composite_util.h @@ -54,7 +54,9 @@ extern "C" { #define CMP_SCALE_MAX 12000 -bool cmp_node_poll_default(struct bNodeType *ntype, struct bNodeTree *ntree); +bool cmp_node_poll_default(struct bNodeType *ntype, + struct bNodeTree *ntree, + const char **r_disabled_info); void cmp_node_update_default(struct bNodeTree *ntree, struct bNode *node); void cmp_node_type_base( struct bNodeType *ntype, int type, const char *name, short nclass, short flag); diff --git a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc index c5135482ec2..d9b36924516 100644 --- a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc +++ b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc @@ -263,7 +263,9 @@ static void node_copy_cryptomatte(bNodeTree *UNUSED(dest_ntree), dest_node->storage = dest_nc; } -static bool node_poll_cryptomatte(bNodeType *UNUSED(ntype), bNodeTree *ntree) +static bool node_poll_cryptomatte(bNodeType *UNUSED(ntype), + bNodeTree *ntree, + const char **r_disabled_hint) { if (STREQ(ntree->idname, "CompositorNodeTree")) { Scene *scene; @@ -276,8 +278,13 @@ static bool node_poll_cryptomatte(bNodeType *UNUSED(ntype), bNodeTree *ntree) } } + if (scene == nullptr) { + *r_disabled_hint = + "The node tree must be the compositing node tree of any scene in the file"; + } return scene != nullptr; } + *r_disabled_hint = "Not a compositor node tree"; return false; } diff --git a/source/blender/nodes/composite/nodes/node_composite_image.c b/source/blender/nodes/composite/nodes/node_composite_image.c index 53ea02ff8a7..243300b0a44 100644 --- a/source/blender/nodes/composite/nodes/node_composite_image.c +++ b/source/blender/nodes/composite/nodes/node_composite_image.c @@ -526,24 +526,32 @@ static void node_composit_init_rlayers(const bContext *C, PointerRNA *ptr) } } -static bool node_composit_poll_rlayers(bNodeType *UNUSED(ntype), bNodeTree *ntree) +static bool node_composit_poll_rlayers(bNodeType *UNUSED(ntype), + bNodeTree *ntree, + const char **r_disabled_hint) { - if (STREQ(ntree->idname, "CompositorNodeTree")) { - Scene *scene; + if (!STREQ(ntree->idname, "CompositorNodeTree")) { + *r_disabled_hint = "Not a compositor node tree"; + return false; + } - /* XXX ugly: check if ntree is a local scene node tree. - * Render layers node can only be used in local scene->nodetree, - * since it directly links to the scene. - */ - for (scene = G.main->scenes.first; scene; scene = scene->id.next) { - if (scene->nodetree == ntree) { - break; - } + Scene *scene; + + /* XXX ugly: check if ntree is a local scene node tree. + * Render layers node can only be used in local scene->nodetree, + * since it directly links to the scene. + */ + for (scene = G.main->scenes.first; scene; scene = scene->id.next) { + if (scene->nodetree == ntree) { + break; } + } - return (scene != NULL); + if (scene == NULL) { + *r_disabled_hint = "The node tree must be the compositing node tree of any scene in the file"; + return false; } - return false; + return true; } static void node_composit_free_rlayers(bNode *node) |