diff options
Diffstat (limited to 'source/blender/nodes/composite/nodes/node_composite_image.cc')
-rw-r--r-- | source/blender/nodes/composite/nodes/node_composite_image.cc | 68 |
1 files changed, 59 insertions, 9 deletions
diff --git a/source/blender/nodes/composite/nodes/node_composite_image.cc b/source/blender/nodes/composite/nodes/node_composite_image.cc index 40d4d4563c9..8e3cc9bcd95 100644 --- a/source/blender/nodes/composite/nodes/node_composite_image.cc +++ b/source/blender/nodes/composite/nodes/node_composite_image.cc @@ -26,16 +26,21 @@ #include "BLI_linklist.h" #include "BLI_utildefines.h" -#include "DNA_scene_types.h" - -#include "RE_engine.h" - #include "BKE_context.h" #include "BKE_global.h" #include "BKE_lib_id.h" #include "BKE_main.h" #include "BKE_scene.h" +#include "DNA_scene_types.h" + +#include "RE_engine.h" + +#include "RNA_access.h" + +#include "UI_interface.h" +#include "UI_resources.h" + /* **************** IMAGE (and RenderResult, multilayer image) ******************** */ static bNodeSocketTemplate cmp_node_rlayers_out[] = { @@ -443,7 +448,7 @@ static void node_composit_copy_image(bNodeTree *UNUSED(dest_ntree), } } -void register_node_type_cmp_image(void) +void register_node_type_cmp_image() { static bNodeType ntype; @@ -451,7 +456,7 @@ void register_node_type_cmp_image(void) node_type_init(&ntype, node_composit_init_image); node_type_storage(&ntype, "ImageUser", node_composit_free_image, node_composit_copy_image); node_type_update(&ntype, cmp_node_image_update); - node_type_label(&ntype, node_image_label); + ntype.labelfunc = node_image_label; nodeRegisterType(&ntype); } @@ -499,7 +504,7 @@ static bool node_composit_poll_rlayers(bNodeType *UNUSED(ntype), const char **r_disabled_hint) { if (!STREQ(ntree->idname, "CompositorNodeTree")) { - *r_disabled_hint = "Not a compositor node tree"; + *r_disabled_hint = TIP_("Not a compositor node tree"); return false; } @@ -516,7 +521,8 @@ static bool node_composit_poll_rlayers(bNodeType *UNUSED(ntype), } if (scene == nullptr) { - *r_disabled_hint = "The node tree must be the compositing node tree of any scene in the file"; + *r_disabled_hint = TIP_( + "The node tree must be the compositing node tree of any scene in the file"); return false; } return true; @@ -554,12 +560,56 @@ static void cmp_node_rlayers_update(bNodeTree *ntree, bNode *node) cmp_node_update_default(ntree, node); } -void register_node_type_cmp_rlayers(void) +static void node_composit_buts_viewlayers(uiLayout *layout, bContext *C, PointerRNA *ptr) +{ + bNode *node = (bNode *)ptr->data; + uiLayout *col, *row; + + uiTemplateID(layout, + C, + ptr, + "scene", + nullptr, + nullptr, + nullptr, + UI_TEMPLATE_ID_FILTER_ALL, + false, + nullptr); + + if (!node->id) { + return; + } + + col = uiLayoutColumn(layout, false); + row = uiLayoutRow(col, true); + uiItemR(row, ptr, "layer", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_NONE); + + PropertyRNA *prop = RNA_struct_find_property(ptr, "layer"); + const char *layer_name; + if (!(RNA_property_enum_identifier( + C, ptr, prop, RNA_property_enum_get(ptr, prop), &layer_name))) { + return; + } + + PointerRNA scn_ptr; + char scene_name[MAX_ID_NAME - 2]; + scn_ptr = RNA_pointer_get(ptr, "scene"); + RNA_string_get(&scn_ptr, "name", scene_name); + + PointerRNA op_ptr; + uiItemFullO( + row, "RENDER_OT_render", "", ICON_RENDER_STILL, nullptr, WM_OP_INVOKE_DEFAULT, 0, &op_ptr); + RNA_string_set(&op_ptr, "layer", layer_name); + RNA_string_set(&op_ptr, "scene", scene_name); +} + +void register_node_type_cmp_rlayers() { static bNodeType ntype; cmp_node_type_base(&ntype, CMP_NODE_R_LAYERS, "Render Layers", NODE_CLASS_INPUT, NODE_PREVIEW); node_type_socket_templates(&ntype, nullptr, cmp_node_rlayers_out); + ntype.draw_buttons = node_composit_buts_viewlayers; ntype.initfunc_api = node_composit_init_rlayers; ntype.poll = node_composit_poll_rlayers; node_type_storage(&ntype, nullptr, node_composit_free_rlayers, node_composit_copy_rlayers); |