Blender V5.0
rna_node_socket.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include "BLT_translation.hh"
10
11#include "DNA_node_types.h"
12
13#include "RNA_define.hh"
14#include "RNA_enum_types.hh"
15#include "RNA_types.hh"
16
17#include "rna_internal.hh"
18
19#include "WM_api.hh"
20
22 {SOCK_CUSTOM, "CUSTOM", 0, "Custom", ""},
23 {SOCK_FLOAT, "VALUE", ICON_NODE_SOCKET_FLOAT, "Value", ""},
24 {SOCK_INT, "INT", ICON_NODE_SOCKET_INT, "Integer", ""},
25 {SOCK_BOOLEAN, "BOOLEAN", ICON_NODE_SOCKET_BOOLEAN, "Boolean", ""},
26 {SOCK_VECTOR, "VECTOR", ICON_NODE_SOCKET_VECTOR, "Vector", ""},
27 {SOCK_ROTATION, "ROTATION", ICON_NODE_SOCKET_ROTATION, "Rotation", ""},
28 {SOCK_MATRIX, "MATRIX", ICON_NODE_SOCKET_MATRIX, "Matrix", ""},
29 {SOCK_STRING, "STRING", ICON_NODE_SOCKET_STRING, "String", ""},
30 {SOCK_RGBA, "RGBA", ICON_NODE_SOCKET_RGBA, "RGBA", ""},
31 {SOCK_SHADER, "SHADER", ICON_NODE_SOCKET_SHADER, "Shader", ""},
32 {SOCK_OBJECT, "OBJECT", ICON_NODE_SOCKET_OBJECT, "Object", ""},
33 {SOCK_IMAGE, "IMAGE", ICON_NODE_SOCKET_IMAGE, "Image", ""},
34 {SOCK_GEOMETRY, "GEOMETRY", ICON_NODE_SOCKET_GEOMETRY, "Geometry", ""},
35 {SOCK_COLLECTION, "COLLECTION", ICON_NODE_SOCKET_COLLECTION, "Collection", ""},
36 {SOCK_TEXTURE, "TEXTURE", ICON_NODE_SOCKET_TEXTURE, "Texture", ""},
37 {SOCK_MATERIAL, "MATERIAL", ICON_NODE_SOCKET_MATERIAL, "Material", ""},
38 {SOCK_MENU, "MENU", ICON_NODE_SOCKET_MENU, "Menu", ""},
39 {SOCK_BUNDLE, "BUNDLE", ICON_NODE_SOCKET_BUNDLE, "Bundle", ""},
40 {SOCK_CLOSURE, "CLOSURE", ICON_NODE_SOCKET_CLOSURE, "Closure", ""},
41 {0, nullptr, 0, nullptr, nullptr},
42};
43
44#ifdef RNA_RUNTIME
45
46# include <fmt/format.h>
47
48# include "DNA_material_types.h"
49
50# include "BLI_math_vector.h"
51# include "BLI_string_ref.hh"
52
53# include "BKE_main_invariants.hh"
54# include "BKE_node.hh"
55# include "BKE_node_enum.hh"
56# include "BKE_node_runtime.hh"
58
59# include "DEG_depsgraph_build.hh"
60
62
63# include "ED_node.hh"
64
65extern FunctionRNA rna_NodeSocket_draw_func;
66extern FunctionRNA rna_NodeSocket_draw_color_func;
67extern FunctionRNA rna_NodeSocket_draw_color_simple_func;
68
69/* ******** Node Socket ******** */
70
71static void rna_NodeSocket_draw(bContext *C,
72 uiLayout *layout,
74 PointerRNA *node_ptr,
75 const blender::StringRef text)
76{
77 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
78 ParameterList list;
79 FunctionRNA *func;
80
81 func = &rna_NodeSocket_draw_func; /* RNA_struct_find_function(&ptr, "draw"); */
82
83 RNA_parameter_list_create(&list, ptr, func);
84 RNA_parameter_set_lookup(&list, "context", &C);
85 RNA_parameter_set_lookup(&list, "layout", &layout);
86 RNA_parameter_set_lookup(&list, "node", node_ptr);
87 const std::string text_str = text;
88 const char *text_c_str = text_str.c_str();
89 RNA_parameter_set_lookup(&list, "text", &text_c_str);
90 sock->typeinfo->ext_socket.call(C, ptr, func, &list);
91
93}
94
95static void rna_NodeSocket_draw_color(bContext *C,
97 PointerRNA *node_ptr,
98 float *r_color)
99{
100 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
101 ParameterList list;
102 FunctionRNA *func;
103 void *ret;
104
105 func = &rna_NodeSocket_draw_color_func; /* RNA_struct_find_function(&ptr, "draw_color"); */
106
107 RNA_parameter_list_create(&list, ptr, func);
108 RNA_parameter_set_lookup(&list, "context", &C);
109 RNA_parameter_set_lookup(&list, "node", node_ptr);
110 sock->typeinfo->ext_socket.call(C, ptr, func, &list);
111
112 RNA_parameter_get_lookup(&list, "color", &ret);
113 copy_v4_v4(r_color, static_cast<float *>(ret));
114
116}
117
118static void rna_NodeSocket_draw_color_simple(const blender::bke::bNodeSocketType *socket_type,
119 float *r_color)
120{
121 ParameterList list;
122 FunctionRNA *func;
123 void *ret;
124
125 func = &rna_NodeSocket_draw_color_simple_func; /* RNA_struct_find_function(&ptr,
126 * "draw_color_simple"); */
127
128 PointerRNA ptr = RNA_pointer_create_discrete(nullptr, socket_type->ext_socket.srna, nullptr);
129 RNA_parameter_list_create(&list, &ptr, func);
130 RNA_parameter_set_lookup(&list, "type", socket_type);
131 socket_type->ext_socket.call(nullptr, &ptr, func, &list);
132
133 RNA_parameter_get_lookup(&list, "color", &ret);
134 copy_v4_v4(r_color, static_cast<float *>(ret));
135
137}
138
139static bool rna_NodeSocket_unregister(Main *bmain, StructRNA *type)
140{
143 if (!st) {
144 return false;
145 }
146
149
151
152 /* update while blender is running */
155 return true;
156}
157
158static StructRNA *rna_NodeSocket_register(Main *bmain,
159 ReportList *reports,
160 void *data,
161 const char *identifier,
162 StructValidateFunc validate,
165{
167 bNodeSocket dummy_sock = {};
168 bool have_function[3];
169
170 /* setup dummy socket & socket type to store static properties in */
171 blender::bke::bNodeSocketType dummy_st = {};
172 dummy_st.type = SOCK_CUSTOM;
173
174 dummy_sock.typeinfo = &dummy_st;
175 PointerRNA dummy_sock_ptr = RNA_pointer_create_discrete(nullptr, &RNA_NodeSocket, &dummy_sock);
176
177 /* validate the python class */
178 if (validate(&dummy_sock_ptr, data, have_function) != 0) {
179 return nullptr;
180 }
181
182 if (strlen(identifier) >= sizeof(dummy_sock.idname)) {
183 BKE_reportf(reports,
184 RPT_ERROR,
185 "Registering node socket class: '%s' is too long, maximum length is %d",
186 identifier,
187 int(sizeof(dummy_sock.idname)));
188 return nullptr;
189 }
190
191 /* check if we have registered this socket type before */
193 if (!st) {
194 /* create a new node socket type */
195 st = MEM_new<blender::bke::bNodeSocketType>(__func__, dummy_st);
197 }
198
199 st->free_self = [](blender::bke::bNodeSocketType *stype) { MEM_delete(stype); };
200
201 /* if RNA type is already registered, unregister first */
202 if (st->ext_socket.srna) {
203 StructRNA *srna = st->ext_socket.srna;
206 }
207 st->ext_socket.srna = RNA_def_struct_ptr(&BLENDER_RNA, st->idname.c_str(), &RNA_NodeSocket);
208 st->ext_socket.data = data;
209 st->ext_socket.call = call;
210 st->ext_socket.free = free;
212
213 /* XXX bad level call! needed to initialize the basic draw functions ... */
215
216 st->draw = (have_function[0]) ? rna_NodeSocket_draw : nullptr;
217 st->draw_color = (have_function[1]) ? rna_NodeSocket_draw_color : nullptr;
218 st->draw_color_simple = (have_function[2]) ? rna_NodeSocket_draw_color_simple : nullptr;
219
220 /* update while blender is running */
223 return st->ext_socket.srna;
224}
225
226static StructRNA *rna_NodeSocket_refine(PointerRNA *ptr)
227{
228 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
229
230 if (sock->typeinfo->ext_socket.srna) {
231 return sock->typeinfo->ext_socket.srna;
232 }
233 else {
234 return &RNA_NodeSocket;
235 }
236}
237
238static std::optional<std::string> rna_NodeSocket_path(const PointerRNA *ptr)
239{
240 const bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
241 const bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
242
243 const bNode &node = blender::bke::node_find_node(*ntree, *sock);
244 const ListBase *sockets = (sock->in_out == SOCK_IN) ? &node.inputs : &node.outputs;
245 const int socketindex = BLI_findindex(sockets, sock);
246
247 char name_esc[sizeof(node.name) * 2];
248 BLI_str_escape(name_esc, node.name, sizeof(name_esc));
249
250 if (sock->in_out == SOCK_IN) {
251 return fmt::format("nodes[\"{}\"].inputs[{}]", name_esc, socketindex);
252 }
253 return fmt::format("nodes[\"{}\"].outputs[{}]", name_esc, socketindex);
254}
255
256static IDProperty **rna_NodeSocket_idprops(PointerRNA *ptr)
257{
258 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
259 return &sock->prop;
260}
261
262static PointerRNA rna_NodeSocket_node_get(PointerRNA *ptr)
263{
264 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
265 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
266 bNode &node = blender::bke::node_find_node(*ntree, *sock);
267 return RNA_pointer_create_discrete(&ntree->id, &RNA_Node, &node);
268}
269
270static void rna_NodeSocket_type_set(PointerRNA *ptr, int value)
271{
272 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
273 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
274 bNode &node = blender::bke::node_find_node(*ntree, *sock);
275 if (node.type_legacy != NODE_CUSTOM) {
276 /* Can't change the socket type on built-in nodes like this. */
277 return;
278 }
279 blender::bke::node_modify_socket_type_static(ntree, &node, sock, value, 0);
280}
281
282static int rna_NodeSocket_inferred_structure_type_get(PointerRNA *ptr)
283{
284 bNodeSocket *socket = ptr->data_as<bNodeSocket>();
285 return int(socket->runtime->inferred_structure_type);
286}
287
288static void rna_NodeSocket_bl_idname_get(PointerRNA *ptr, char *value)
289{
290 const bNodeSocket *node = static_cast<const bNodeSocket *>(ptr->data);
291 const blender::bke::bNodeSocketType *ntype = node->typeinfo;
293}
294
295static int rna_NodeSocket_bl_idname_length(PointerRNA *ptr)
296{
297 const bNodeSocket *node = static_cast<const bNodeSocket *>(ptr->data);
298 const blender::bke::bNodeSocketType *ntype = node->typeinfo;
299 return ntype->idname.size();
300}
301
302static void rna_NodeSocket_bl_idname_set(PointerRNA *ptr, const char *value)
303{
304 bNodeSocket *node = static_cast<bNodeSocket *>(ptr->data);
306 ntype->idname = value;
307}
308
309static void rna_NodeSocket_bl_label_get(PointerRNA *ptr, char *value)
310{
311 const bNodeSocket *node = static_cast<const bNodeSocket *>(ptr->data);
312 const blender::bke::bNodeSocketType *ntype = node->typeinfo;
313 blender::StringRef(ntype->label).copy_unsafe(value);
314}
315
316static int rna_NodeSocket_bl_label_length(PointerRNA *ptr)
317{
318 const bNodeSocket *node = static_cast<const bNodeSocket *>(ptr->data);
319 const blender::bke::bNodeSocketType *ntype = node->typeinfo;
320 return ntype->label.size();
321}
322
323static void rna_NodeSocket_bl_label_set(PointerRNA *ptr, const char *value)
324{
325 bNodeSocket *node = static_cast<bNodeSocket *>(ptr->data);
327 ntype->label = value;
328}
329
330static void rna_NodeSocket_bl_subtype_label_get(PointerRNA *ptr, char *value)
331{
332 const bNodeSocket *node = static_cast<const bNodeSocket *>(ptr->data);
333 const blender::bke::bNodeSocketType *ntype = node->typeinfo;
335}
336
337static int rna_NodeSocket_bl_subtype_label_length(PointerRNA *ptr)
338{
339 const bNodeSocket *node = static_cast<const bNodeSocket *>(ptr->data);
340 const blender::bke::bNodeSocketType *ntype = node->typeinfo;
341 return ntype->subtype_label.size();
342}
343
344static void rna_NodeSocket_bl_subtype_label_set(PointerRNA *ptr, const char *value)
345{
346 bNodeSocket *node = static_cast<bNodeSocket *>(ptr->data);
348 ntype->subtype_label = value;
349}
350
351static bool rna_NodeSocket_is_linked_get(PointerRNA *ptr)
352{
353 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
354 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
355 ntree->ensure_topology_cache();
356 return sock->is_directly_linked();
357}
358
359static bool rna_NodeSocket_is_inactive_get(PointerRNA *ptr)
360{
361 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
362 bNodeSocket *sock = ptr->data_as<bNodeSocket>();
363 ntree->ensure_topology_cache();
364 return sock->is_inactive();
365}
366
367static bool rna_NodeSocket_is_icon_visible_get(PointerRNA *ptr)
368{
369 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
370 bNodeSocket *sock = ptr->data_as<bNodeSocket>();
371 ntree->ensure_topology_cache();
372 return sock->is_icon_visible();
373}
374
375static void rna_NodeSocket_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
376{
377 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
378 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
379
381 BKE_main_ensure_invariants(*bmain, ntree->id);
382}
383
384static void rna_NodeSocket_enabled_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
385{
386 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
387 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
388
390 BKE_main_ensure_invariants(*bmain, ntree->id);
391}
392
393static bool rna_NodeSocket_is_output_get(PointerRNA *ptr)
394{
395 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
396 return sock->in_out == SOCK_OUT;
397}
398
399static bool rna_NodeSocket_select_get(PointerRNA *ptr)
400{
401 const bNodeSocket *socket = ptr->data_as<bNodeSocket>();
402
403 return (socket->flag & SELECT) != 0;
404}
405
406static int rna_NodeSocket_link_limit_get(PointerRNA *ptr)
407{
408 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
410}
411
412static void rna_NodeSocket_link_limit_set(PointerRNA *ptr, int value)
413{
414 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
415 sock->limit = (value == 0 ? 0xFFF : value);
416}
417
418static void rna_NodeSocket_hide_set(PointerRNA *ptr, bool value)
419{
420 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
421
422 /* don't hide linked sockets */
423 if (sock->flag & SOCK_IS_LINKED) {
424 return;
425 }
426
427 bNodeTree *ntree = reinterpret_cast<bNodeTree *>(ptr->owner_id);
428 bNode &node = blender::bke::node_find_node(*ntree, *sock);
429
430 /* The Reroute node is the socket itself, do not hide this. */
431 if (node.is_reroute()) {
432 return;
433 }
434
435 if (value) {
436 sock->flag |= SOCK_HIDDEN;
437 }
438 else {
439 sock->flag &= ~SOCK_HIDDEN;
440 }
441}
442
443/* ******** Standard Node Socket Base Types ******** */
444
445static void rna_NodeSocketStandard_draw(ID *id,
446 bNodeSocket *sock,
447 bContext *C,
448 uiLayout *layout,
449 PointerRNA *nodeptr,
450 const char *text)
451{
452 PointerRNA ptr = RNA_pointer_create_discrete(id, &RNA_NodeSocket, sock);
453 sock->typeinfo->draw(C, layout, &ptr, nodeptr, text);
454}
455
456static void rna_NodeSocketStandard_draw_color(
457 ID *id, bNodeSocket *sock, bContext *C, PointerRNA *nodeptr, float r_color[4])
458{
459 PointerRNA ptr = RNA_pointer_create_discrete(id, &RNA_NodeSocket, sock);
460 sock->typeinfo->draw_color(C, &ptr, nodeptr, r_color);
461}
462
463static void rna_NodeSocketStandard_draw_color_simple(StructRNA *type, float r_color[4])
464{
465 const blender::bke::bNodeSocketType *typeinfo =
467 typeinfo->draw_color_simple(typeinfo, r_color);
468}
469
470static const char *rna_NodeSocketStandard_name_func(const PointerRNA *ptr,
471 const PropertyRNA * /*prop*/,
472 const bool do_translate)
473{
474 const bNodeSocket *socket = ptr->data_as<bNodeSocket>();
475 if (do_translate) {
477 }
478 return socket->name;
479}
480
481/* ******** Node Socket Subtypes ******** */
482
483void rna_NodeSocketStandard_float_range(
484 PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
485{
486 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
487 bNodeSocketValueFloat *dval = static_cast<bNodeSocketValueFloat *>(sock->default_value);
488 int subtype = sock->typeinfo->subtype;
489
490 if (dval->max < dval->min) {
491 dval->max = dval->min;
492 }
493
494 *min = (subtype == PROP_UNSIGNED ? 0.0f : -FLT_MAX);
495 *max = FLT_MAX;
496 *softmin = dval->min;
497 *softmax = dval->max;
498}
499
500void rna_NodeSocketStandard_int_range(
501 PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
502{
503 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
504 bNodeSocketValueInt *dval = static_cast<bNodeSocketValueInt *>(sock->default_value);
505 int subtype = sock->typeinfo->subtype;
506
507 if (dval->max < dval->min) {
508 dval->max = dval->min;
509 }
510
511 *min = (subtype == PROP_UNSIGNED ? 0 : INT_MIN);
512 *max = INT_MAX;
513 *softmin = dval->min;
514 *softmax = dval->max;
515}
516
517void rna_NodeSocketStandard_vector_range(
518 PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
519{
520 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
521 bNodeSocketValueVector *dval = static_cast<bNodeSocketValueVector *>(sock->default_value);
522
523 if (dval->max < dval->min) {
524 dval->max = dval->min;
525 }
526
527 *min = -FLT_MAX;
528 *max = FLT_MAX;
529 *softmin = dval->min;
530 *softmax = dval->max;
531}
532
533float rna_NodeSocketStandard_float_default(PointerRNA *ptr, PropertyRNA * /*prop*/)
534{
535 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
536 if (!sock->runtime->declaration) {
537 return 0.0f;
538 }
539 auto *decl = static_cast<const blender::nodes::decl::Float *>(sock->runtime->declaration);
540 return decl->default_value;
541}
542
543int rna_NodeSocketStandard_int_default(PointerRNA *ptr, PropertyRNA * /*prop*/)
544{
545 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
546 if (!sock->runtime->declaration) {
547 return 0;
548 }
549 auto *decl = static_cast<const blender::nodes::decl::Int *>(sock->runtime->declaration);
550 return decl->default_value;
551}
552
553bool rna_NodeSocketStandard_boolean_default(PointerRNA *ptr, PropertyRNA * /*prop*/)
554{
555 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
556 if (!sock->runtime->declaration) {
557 return false;
558 }
559 auto *decl = static_cast<const blender::nodes::decl::Bool *>(sock->runtime->declaration);
560 return decl->default_value;
561}
562
563void rna_NodeSocketStandard_vector_default(PointerRNA *ptr,
564 PropertyRNA * /*prop*/,
565 float *r_values)
566{
567 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
568 if (!sock->runtime->declaration) {
569 const int dimensions = sock->default_value_typed<bNodeSocketValueVector>()->dimensions;
570 std::fill_n(r_values, dimensions, 0.0f);
571 return;
572 }
573 auto *decl = static_cast<const blender::nodes::decl::Vector *>(sock->runtime->declaration);
574 std::copy_n(&decl->default_value[0], decl->dimensions, r_values);
575}
576
577void rna_NodeSocketStandard_color_default(PointerRNA *ptr, PropertyRNA * /*prop*/, float *r_values)
578{
579 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
580 if (!sock->runtime->declaration) {
581 std::fill_n(r_values, 4, 0.0f);
582 return;
583 }
584 auto *decl = static_cast<const blender::nodes::decl::Color *>(sock->runtime->declaration);
585
586# if defined(__GNUC__) && !defined(__clang__)
587# pragma GCC diagnostic push
588# pragma GCC diagnostic ignored "-Warray-bounds"
589# endif
590
591 std::copy_n(&decl->default_value[0], 4, r_values);
592
593# if defined(__GNUC__) && !defined(__clang__)
594# pragma GCC diagnostic pop
595# endif
596}
597
598int rna_NodeSocketStandard_menu_default(PointerRNA *ptr, PropertyRNA * /*prop*/)
599{
600 bNodeSocket *sock = static_cast<bNodeSocket *>(ptr->data);
601 if (!sock->runtime->declaration) {
602 return 0;
603 }
604 auto *decl = static_cast<const blender::nodes::decl::Menu *>(sock->runtime->declaration);
605 return decl->default_value.value;
606}
607
608/* using a context update function here, to avoid searching the node if possible */
609static void rna_NodeSocketStandard_value_update(bContext *C, PointerRNA *ptr)
610{
611 /* default update */
612 rna_NodeSocket_update(CTX_data_main(C), CTX_data_scene(C), ptr);
613}
614
615static void rna_NodeSocketStandard_value_and_relation_update(bContext *C, PointerRNA *ptr)
616{
617 rna_NodeSocketStandard_value_update(C, ptr);
618 Main *bmain = CTX_data_main(C);
620}
621
623 const blender::bke::RuntimeNodeEnumItems &enum_items, bool *r_free)
624{
625 EnumPropertyItem tmp = {0};
626 EnumPropertyItem *result = nullptr;
627 int totitem = 0;
628
629 for (const blender::bke::RuntimeNodeEnumItem &item : enum_items.items) {
630 tmp.value = item.identifier;
631 /* Item name is unique and used as the RNA identifier as well.
632 * The integer value is persistent and unique and should be used
633 * when storing the enum value. */
634 tmp.identifier = item.name.c_str();
635 /* TODO support icons in enum definition. */
636 tmp.icon = ICON_NONE;
637 tmp.name = item.name.c_str();
638 tmp.description = item.description.c_str();
639
640 RNA_enum_item_add(&result, &totitem, &tmp);
641 }
642
643 if (totitem == 0) {
644 *r_free = false;
646 }
647
648 RNA_enum_item_end(&result, &totitem);
649 *r_free = true;
650
651 return result;
652}
653
654const EnumPropertyItem *RNA_node_socket_menu_itemf(bContext * /*C*/,
656 PropertyRNA *prop,
657 bool *r_free)
658{
659 const bNodeSocket *socket = static_cast<bNodeSocket *>(ptr->data);
660 if (!socket) {
661 *r_free = false;
663 }
664 const bNodeSocketValueMenu *data = static_cast<bNodeSocketValueMenu *>(socket->default_value);
665 if (!data->enum_items) {
666 *r_free = false;
668 }
669 const char *socket_translation_context = blender::bke::node_socket_translation_context(*socket);
670 RNA_def_property_translation_context(prop, socket_translation_context);
671 return RNA_node_enum_definition_itemf(*data->enum_items, r_free);
672}
673
674std::optional<std::string> rna_NodeSocketString_filepath_filter(const bContext * /*C*/,
676 PropertyRNA * /*prop*/)
677{
678 bNodeSocket *socket = static_cast<bNodeSocket *>(ptr->data);
679 BLI_assert(socket->type == SOCK_STRING);
680 if (const auto *decl = dynamic_cast<const blender::nodes::decl::String *>(
681 socket->runtime->declaration))
682 {
683 return decl->path_filter;
684 }
685 return std::nullopt;
686}
687
688#else
689
691{
692 StructRNA *srna;
693 PropertyRNA *prop;
694 PropertyRNA *parm;
695 FunctionRNA *func;
696
697 static const EnumPropertyItem rna_enum_node_socket_display_shape_items[] = {
698 {SOCK_DISPLAY_SHAPE_CIRCLE, "CIRCLE", 0, "Circle", ""},
699 {SOCK_DISPLAY_SHAPE_SQUARE, "SQUARE", 0, "Square", ""},
700 {SOCK_DISPLAY_SHAPE_DIAMOND, "DIAMOND", 0, "Diamond", ""},
701 {SOCK_DISPLAY_SHAPE_CIRCLE_DOT, "CIRCLE_DOT", 0, "Circle with inner dot", ""},
702 {SOCK_DISPLAY_SHAPE_SQUARE_DOT, "SQUARE_DOT", 0, "Square with inner dot", ""},
703 {SOCK_DISPLAY_SHAPE_DIAMOND_DOT, "DIAMOND_DOT", 0, "Diamond with inner dot", ""},
704 {0, nullptr, 0, nullptr, nullptr}};
705
706 static const float default_draw_color[] = {0.0f, 0.0f, 0.0f, 1.0f};
707
708 srna = RNA_def_struct(brna, "NodeSocket", nullptr);
709 RNA_def_struct_ui_text(srna, "Node Socket", "Input or output socket of a node");
710 RNA_def_struct_sdna(srna, "bNodeSocket");
711 RNA_def_struct_refine_func(srna, "rna_NodeSocket_refine");
712 RNA_def_struct_ui_icon(srna, ICON_NONE);
713 RNA_def_struct_path_func(srna, "rna_NodeSocket_path");
715 srna, "rna_NodeSocket_register", "rna_NodeSocket_unregister", nullptr);
716 RNA_def_struct_system_idprops_func(srna, "rna_NodeSocket_idprops");
717
718 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
719 RNA_def_property_ui_text(prop, "Name", "Socket name");
721 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
722
723 prop = RNA_def_property(srna, "label", PROP_STRING, PROP_NONE);
724 RNA_def_property_string_sdna(prop, nullptr, "label");
726 RNA_def_property_ui_text(prop, "Label", "Custom dynamic defined socket label");
727
728 prop = RNA_def_property(srna, "identifier", PROP_STRING, PROP_NONE);
729 RNA_def_property_string_sdna(prop, nullptr, "identifier");
731 RNA_def_property_ui_text(prop, "Identifier", "Unique identifier for mapping sockets");
732
733 prop = RNA_def_property(srna, "description", PROP_STRING, PROP_NONE);
734 RNA_def_property_string_sdna(prop, nullptr, "description");
735 RNA_def_property_ui_text(prop, "Tooltip", "Socket tooltip");
736 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
737
738 prop = RNA_def_property(srna, "is_output", PROP_BOOLEAN, PROP_NONE);
739 RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_is_output_get", nullptr);
741 RNA_def_property_ui_text(prop, "Is Output", "True if the socket is an output, otherwise input");
742
743 prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
744 RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_select_get", nullptr);
746 RNA_def_property_ui_text(prop, "Select", "True if the socket is selected");
747
748 prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
749 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_HIDDEN);
750 RNA_def_property_boolean_funcs(prop, nullptr, "rna_NodeSocket_hide_set");
751 RNA_def_property_ui_text(prop, "Hide", "Hide the socket");
753
754 prop = RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
756 RNA_def_property_ui_text(prop, "Enabled", "Enable the socket");
757 RNA_def_property_update(prop, NC_NODE | ND_DISPLAY, "rna_NodeSocket_enabled_update");
758
759 prop = RNA_def_property(srna, "link_limit", PROP_INT, PROP_NONE);
760 RNA_def_property_int_sdna(prop, nullptr, "limit");
762 prop, "rna_NodeSocket_link_limit_get", "rna_NodeSocket_link_limit_set", nullptr);
763 RNA_def_property_range(prop, 1, 0xFFF);
764 RNA_def_property_ui_text(prop, "Link Limit", "Max number of links allowed for this socket");
765 RNA_def_property_update(prop, NC_NODE | NA_EDITED, nullptr);
766
767 prop = RNA_def_property(srna, "is_linked", PROP_BOOLEAN, PROP_NONE);
768 RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_is_linked_get", nullptr);
770 RNA_def_property_ui_text(prop, "Linked", "True if the socket is connected");
771
772 prop = RNA_def_property(srna, "is_unavailable", PROP_BOOLEAN, PROP_NONE);
773 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_UNAVAIL);
775 RNA_def_property_ui_text(prop, "Unavailable", "True if the socket is unavailable");
776
777 prop = RNA_def_property(srna, "is_multi_input", PROP_BOOLEAN, PROP_NONE);
778 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_MULTI_INPUT);
781 prop, "Multi Input", "True if the socket can accept multiple ordered input links");
782
783 prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
786 RNA_def_property_ui_text(prop, "Expanded", "Socket links are expanded in the user interface");
787 RNA_def_property_update(prop, NC_NODE | NA_EDITED, nullptr);
788
789 prop = RNA_def_property(srna, "is_inactive", PROP_BOOLEAN, PROP_NONE);
791 RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_is_inactive_get", nullptr);
793 prop,
794 "Inactive",
795 "Socket is grayed out because it has been detected to not have any effect on the output");
796
797 prop = RNA_def_property(srna, "is_icon_visible", PROP_BOOLEAN, PROP_NONE);
799 RNA_def_property_boolean_funcs(prop, "rna_NodeSocket_is_icon_visible_get", nullptr);
801 prop, "Icon Visible", "Socket is drawn as interactive icon in the node editor");
802
803 prop = RNA_def_property(srna, "hide_value", PROP_BOOLEAN, PROP_NONE);
804 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_HIDE_VALUE);
805 RNA_def_property_ui_text(prop, "Hide Value", "Hide the socket input value");
807
808 prop = RNA_def_property(srna, "pin_gizmo", PROP_BOOLEAN, PROP_NONE);
809 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SOCK_GIZMO_PIN);
812 prop, "Pin Gizmo", "Keep gizmo visible even when the node is not selected");
814
815 prop = RNA_def_property(srna, "node", PROP_POINTER, PROP_NONE);
816 RNA_def_property_pointer_funcs(prop, "rna_NodeSocket_node_get", nullptr, nullptr, nullptr);
817 RNA_def_property_struct_type(prop, "Node");
821 RNA_def_property_ui_text(prop, "Node", "Node owning this socket");
822
823 /* NOTE: The type property is used by standard sockets.
824 * Ideally should be defined only for the registered subclass,
825 * but to use the existing DNA is added in the base type here.
826 * Future socket types can ignore or override this if needed. */
827
828 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
829 RNA_def_property_enum_sdna(prop, nullptr, "type");
832 RNA_def_property_enum_funcs(prop, nullptr, "rna_NodeSocket_type_set", nullptr);
833 RNA_def_property_ui_text(prop, "Type", "Data type");
834 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
835
836 prop = RNA_def_property(srna, "display_shape", PROP_ENUM, PROP_NONE);
837 RNA_def_property_enum_sdna(prop, nullptr, "display_shape");
838 RNA_def_property_enum_items(prop, rna_enum_node_socket_display_shape_items);
840 RNA_def_property_ui_text(prop, "Shape", "Socket shape");
841 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
842
843 prop = RNA_def_property(srna, "inferred_structure_type", PROP_ENUM, PROP_NONE);
847 prop, "rna_NodeSocket_inferred_structure_type_get", nullptr, nullptr);
849 "Inferred Structure Type",
850 "Best known structure type of the socket. This may not match the "
851 "socket shape, e.g. for unlinked input sockets");
852
853 /* registration */
854 prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
856 "rna_NodeSocket_bl_idname_get",
857 "rna_NodeSocket_bl_idname_length",
858 "rna_NodeSocket_bl_idname_set");
860 RNA_def_property_ui_text(prop, "ID Name", "");
861
862 prop = RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE);
864 "rna_NodeSocket_bl_label_get",
865 "rna_NodeSocket_bl_label_length",
866 "rna_NodeSocket_bl_label_set");
868 RNA_def_property_ui_text(prop, "Type Label", "Label to display for the socket type in the UI");
869
870 prop = RNA_def_property(srna, "bl_subtype_label", PROP_STRING, PROP_NONE);
872 "rna_NodeSocket_bl_subtype_label_get",
873 "rna_NodeSocket_bl_subtype_label_length",
874 "rna_NodeSocket_bl_subtype_label_set");
877 prop, "Subtype Label", "Label to display for the socket subtype in the UI");
878
879 /* draw socket */
880 func = RNA_def_function(srna, "draw", nullptr);
881 RNA_def_function_ui_description(func, "Draw socket");
883 parm = RNA_def_pointer(func, "context", "Context", "", "");
885 parm = RNA_def_property(func, "layout", PROP_POINTER, PROP_NONE);
886 RNA_def_property_struct_type(parm, "UILayout");
887 RNA_def_property_ui_text(parm, "Layout", "Layout in the UI");
889 parm = RNA_def_property(func, "node", PROP_POINTER, PROP_NONE);
890 RNA_def_property_struct_type(parm, "Node");
891 RNA_def_property_ui_text(parm, "Node", "Node the socket belongs to");
893 parm = RNA_def_property(func, "text", PROP_STRING, PROP_NONE);
894 RNA_def_property_ui_text(parm, "Text", "Text label to draw alongside properties");
895 // RNA_def_property_string_default(parm, "");
897
898 func = RNA_def_function(srna, "draw_color", nullptr);
899 RNA_def_function_ui_description(func, "Color of the socket icon");
901 parm = RNA_def_pointer(func, "context", "Context", "", "");
903 parm = RNA_def_property(func, "node", PROP_POINTER, PROP_NONE);
904 RNA_def_property_struct_type(parm, "Node");
905 RNA_def_property_ui_text(parm, "Node", "Node the socket belongs to");
907 parm = RNA_def_float_array(
908 func, "color", 4, default_draw_color, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
909 RNA_def_function_output(func, parm);
910
911 func = RNA_def_function(srna, "draw_color_simple", nullptr);
913 func,
914 "Color of the socket icon. Used to draw sockets in places where the socket does not belong "
915 "to a node, like the node interface panel. Also used to draw node sockets if draw_color is "
916 "not defined.");
918 parm = RNA_def_float_array(
919 func, "color", 4, default_draw_color, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
920 RNA_def_function_output(func, parm);
921}
922
924{
925 /* XXX Workaround: Registered functions are not exposed in python by bpy,
926 * it expects them to be registered from python and use the native implementation.
927 * However, the standard socket types below are not registering these functions from python,
928 * so in order to call them in py scripts we need to overload and
929 * replace them with plain C callbacks.
930 * These types provide a usable basis for socket types defined in C.
931 */
932
933 StructRNA *srna;
934 PropertyRNA *parm;
935 FunctionRNA *func;
936
937 static const float default_draw_color[] = {0.0f, 0.0f, 0.0f, 1.0f};
938
939 srna = RNA_def_struct(brna, "NodeSocketStandard", "NodeSocket");
940 RNA_def_struct_sdna(srna, "bNodeSocket");
941
942 /* draw socket */
943 func = RNA_def_function(srna, "draw", "rna_NodeSocketStandard_draw");
945 RNA_def_function_ui_description(func, "Draw socket");
946 parm = RNA_def_pointer(func, "context", "Context", "", "");
948 parm = RNA_def_property(func, "layout", PROP_POINTER, PROP_NONE);
949 RNA_def_property_struct_type(parm, "UILayout");
950 RNA_def_property_ui_text(parm, "Layout", "Layout in the UI");
952 parm = RNA_def_property(func, "node", PROP_POINTER, PROP_NONE);
953 RNA_def_property_struct_type(parm, "Node");
954 RNA_def_property_ui_text(parm, "Node", "Node the socket belongs to");
956 parm = RNA_def_property(func, "text", PROP_STRING, PROP_NONE);
957 RNA_def_property_ui_text(parm, "Text", "Text label to draw alongside properties");
958 // RNA_def_property_string_default(parm, "");
960
961 func = RNA_def_function(srna, "draw_color", "rna_NodeSocketStandard_draw_color");
963 RNA_def_function_ui_description(func, "Color of the socket icon");
964 parm = RNA_def_pointer(func, "context", "Context", "", "");
966 parm = RNA_def_property(func, "node", PROP_POINTER, PROP_NONE);
967 RNA_def_property_struct_type(parm, "Node");
968 RNA_def_property_ui_text(parm, "Node", "Node the socket belongs to");
970 parm = RNA_def_float_array(
971 func, "color", 4, default_draw_color, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
972 RNA_def_function_output(func, parm);
973
974 func = RNA_def_function(srna, "draw_color_simple", "rna_NodeSocketStandard_draw_color_simple");
975 RNA_def_function_ui_description(func, "Color of the socket icon");
977 parm = RNA_def_float_array(
978 func, "color", 4, default_draw_color, 0.0f, 1.0f, "Color", "", 0.0f, 1.0f);
979 RNA_def_function_output(func, parm);
980}
981
982/* Common functions for all builtin socket interface types. */
984{
985 FunctionRNA *func;
986 PropertyRNA *parm;
987
988 /* Override for functions, invoking the typeinfo callback directly
989 * instead of expecting an existing RNA registered function implementation.
990 */
991
992 func = RNA_def_function(srna, "draw", "rna_NodeTreeInterfaceSocket_draw_builtin");
994 RNA_def_function_ui_description(func, "Draw interface socket settings");
995 parm = RNA_def_pointer(func, "context", "Context", "", "");
997 parm = RNA_def_property(func, "layout", PROP_POINTER, PROP_NONE);
998 RNA_def_property_struct_type(parm, "UILayout");
999 RNA_def_property_ui_text(parm, "Layout", "Layout in the UI");
1001
1002 func = RNA_def_function(srna, "init_socket", "rna_NodeTreeInterfaceSocket_init_socket_builtin");
1003 RNA_def_function_ui_description(func, "Initialize a node socket instance");
1005 parm = RNA_def_pointer(func, "node", "Node", "Node", "Node of the socket to initialize");
1007 parm = RNA_def_pointer(func, "socket", "NodeSocket", "Socket", "Socket to initialize");
1009 parm = RNA_def_string(
1010 func, "data_path", nullptr, 0, "Data Path", "Path to specialized socket data");
1012
1013 func = RNA_def_function(srna, "from_socket", "rna_NodeTreeInterfaceSocket_from_socket_builtin");
1014 RNA_def_function_ui_description(func, "Setup template parameters from an existing socket");
1016 parm = RNA_def_pointer(func, "node", "Node", "Node", "Node of the original socket");
1018 parm = RNA_def_pointer(func, "socket", "NodeSocket", "Socket", "Original socket");
1020}
1021
1023 const char *identifier,
1024 PropertySubType subtype)
1025{
1026 StructRNA *srna;
1027 PropertyRNA *prop;
1028
1029 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1030 RNA_def_struct_ui_text(srna, "Float Node Socket", "Floating-point number socket of a node");
1031 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_FLOAT);
1032 RNA_def_struct_sdna(srna, "bNodeSocket");
1033
1034 RNA_def_struct_sdna_from(srna, "bNodeSocketValueFloat", "default_value");
1035
1036 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
1037 RNA_def_property_float_sdna(prop, nullptr, "value");
1038 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_NodeSocketStandard_float_range");
1039 RNA_def_property_float_default_func(prop, "rna_NodeSocketStandard_float_default");
1040 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1041 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1042 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1044
1045 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1046}
1047
1049 const char *identifier,
1050 PropertySubType subtype)
1051{
1052 StructRNA *srna;
1053 PropertyRNA *prop;
1054 float value_default;
1055
1056 /* choose sensible common default based on subtype */
1057 switch (subtype) {
1058 case PROP_FACTOR:
1059 value_default = 1.0f;
1060 break;
1061 case PROP_PERCENTAGE:
1062 value_default = 100.0f;
1063 break;
1064 default:
1065 value_default = 0.0f;
1066 break;
1067 }
1068
1069 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1071 srna, "Float Node Socket Interface", "Floating-point number socket of a node");
1072 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1073
1074 RNA_def_struct_sdna_from(srna, "bNodeSocketValueFloat", "socket_data");
1075
1076 prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
1078 RNA_def_property_enum_sdna(prop, nullptr, "subtype");
1080 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketFloat_subtype_itemf");
1082 RNA_def_property_ui_text(prop, "Subtype", "Subtype of the default value");
1084 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1085
1086 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
1087 RNA_def_property_float_sdna(prop, nullptr, "value");
1088 RNA_def_property_float_default(prop, value_default);
1091 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketFloat_default_value_range");
1092 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1093 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1094
1095 prop = RNA_def_property(srna, "min_value", PROP_FLOAT, PROP_NONE);
1096 RNA_def_property_float_sdna(prop, nullptr, "min");
1098 RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
1099 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1100
1101 prop = RNA_def_property(srna, "max_value", PROP_FLOAT, PROP_NONE);
1102 RNA_def_property_float_sdna(prop, nullptr, "max");
1104 RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
1105 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1106
1107 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1108
1110}
1111
1113 const char *identifier,
1114 PropertySubType subtype)
1115{
1116 StructRNA *srna;
1117 PropertyRNA *prop;
1118 int value_default;
1119
1120 /* choose sensible common default based on subtype */
1121 switch (subtype) {
1122 case PROP_FACTOR:
1123 value_default = 1;
1124 break;
1125 case PROP_PERCENTAGE:
1126 value_default = 100;
1127 break;
1128 default:
1129 value_default = 0;
1130 break;
1131 }
1132
1133 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1134 RNA_def_struct_ui_text(srna, "Integer Node Socket", "Integer number socket of a node");
1135 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_INT);
1136 RNA_def_struct_sdna(srna, "bNodeSocket");
1137
1138 RNA_def_struct_sdna_from(srna, "bNodeSocketValueInt", "default_value");
1139
1140 prop = RNA_def_property(srna, "default_value", PROP_INT, subtype);
1141 RNA_def_property_int_sdna(prop, nullptr, "value");
1142 RNA_def_property_int_default(prop, value_default);
1143 RNA_def_property_int_funcs(prop, nullptr, nullptr, "rna_NodeSocketStandard_int_range");
1144 RNA_def_property_int_default_func(prop, "rna_NodeSocketStandard_int_default");
1145 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1146 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1147 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1149
1150 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1151}
1152
1154 const char *identifier,
1155 PropertySubType subtype)
1156{
1157 StructRNA *srna;
1158 PropertyRNA *prop;
1159
1160 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1161 RNA_def_struct_ui_text(srna, "Integer Node Socket Interface", "Integer number socket of a node");
1162 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1163
1164 RNA_def_struct_sdna_from(srna, "bNodeSocketValueInt", "socket_data");
1165
1166 prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
1168 RNA_def_property_enum_sdna(prop, nullptr, "subtype");
1170 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketInt_subtype_itemf");
1172 RNA_def_property_ui_text(prop, "Subtype", "Subtype of the default value");
1174 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1175
1176 prop = RNA_def_property(srna, "default_value", PROP_INT, subtype);
1177 RNA_def_property_int_sdna(prop, nullptr, "value");
1180 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketInt_default_value_range");
1181 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1182 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1183
1184 prop = RNA_def_property(srna, "min_value", PROP_INT, PROP_NONE);
1185 RNA_def_property_int_sdna(prop, nullptr, "min");
1187 RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
1188 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1189
1190 prop = RNA_def_property(srna, "max_value", PROP_INT, PROP_NONE);
1191 RNA_def_property_int_sdna(prop, nullptr, "max");
1193 RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
1194 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1195
1196 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1197
1199}
1200
1201static void rna_def_node_socket_bool(BlenderRNA *brna, const char *identifier)
1202{
1203 StructRNA *srna;
1204 PropertyRNA *prop;
1205
1206 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1207 RNA_def_struct_ui_text(srna, "Boolean Node Socket", "Boolean value socket of a node");
1208 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_BOOLEAN);
1209 RNA_def_struct_sdna(srna, "bNodeSocket");
1210
1211 RNA_def_struct_sdna_from(srna, "bNodeSocketValueBoolean", "default_value");
1212
1213 prop = RNA_def_property(srna, "default_value", PROP_BOOLEAN, PROP_NONE);
1214 RNA_def_property_boolean_sdna(prop, nullptr, "value", 1);
1215 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1216 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1217 RNA_def_property_boolean_default_func(prop, "rna_NodeSocketStandard_boolean_default");
1218 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1220
1221 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1222}
1223
1224static void rna_def_node_socket_interface_bool(BlenderRNA *brna, const char *identifier)
1225{
1226 StructRNA *srna;
1227 PropertyRNA *prop;
1228
1229 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1230 RNA_def_struct_ui_text(srna, "Boolean Node Socket Interface", "Boolean value socket of a node");
1231 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1232
1233 RNA_def_struct_sdna_from(srna, "bNodeSocketValueBoolean", "socket_data");
1234
1235 prop = RNA_def_property(srna, "default_value", PROP_BOOLEAN, PROP_NONE);
1236 RNA_def_property_boolean_sdna(prop, nullptr, "value", 1);
1238 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1239 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1240
1241 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1242
1244}
1245
1246static void rna_def_node_socket_rotation(BlenderRNA *brna, const char *identifier)
1247{
1248 StructRNA *srna;
1249 PropertyRNA *prop;
1250
1251 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1252 RNA_def_struct_ui_text(srna, "Rotation Node Socket", "Rotation value socket of a node");
1253 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_ROTATION);
1254 RNA_def_struct_sdna(srna, "bNodeSocket");
1255
1256 RNA_def_struct_sdna_from(srna, "bNodeSocketValueRotation", "default_value");
1257
1258 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_EULER);
1259 RNA_def_property_float_sdna(prop, nullptr, "value_euler");
1260 // RNA_def_property_array(prop, 3);
1261 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1262 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1263 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1265
1266 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1267}
1268
1269static void rna_def_node_socket_interface_rotation(BlenderRNA *brna, const char *identifier)
1270{
1271 StructRNA *srna;
1272 PropertyRNA *prop;
1273
1274 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1276 srna, "Rotation Node Socket Interface", "Rotation value socket of a node");
1277 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1278
1279 RNA_def_struct_sdna_from(srna, "bNodeSocketValueRotation", "socket_data");
1280
1281 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_EULER);
1282 RNA_def_property_float_sdna(prop, nullptr, "value_euler");
1284 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1285 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1286
1287 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1288
1290}
1291
1292static void rna_def_node_socket_matrix(BlenderRNA *brna, const char *identifier)
1293{
1294 StructRNA *srna;
1295
1296 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1297 RNA_def_struct_ui_text(srna, "Matrix Node Socket", "Matrix value socket of a node");
1298 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_MATRIX);
1299 RNA_def_struct_sdna(srna, "bNodeSocket");
1300
1301 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1302}
1303
1304static void rna_def_node_socket_interface_matrix(BlenderRNA *brna, const char *identifier)
1305{
1306 StructRNA *srna;
1307
1308 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1309 RNA_def_struct_ui_text(srna, "Matrix Node Socket Interface", "Matrix value socket of a node");
1310 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1311
1312 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1313
1315}
1316
1318 const char *identifier,
1319 PropertySubType subtype,
1320 int dimensions)
1321{
1322 StructRNA *srna;
1323 PropertyRNA *prop;
1324
1325 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1326 RNA_def_struct_ui_text(srna, "Vector Node Socket", "3D vector socket of a node");
1327 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_VECTOR);
1328 RNA_def_struct_sdna(srna, "bNodeSocket");
1329
1330 RNA_def_struct_sdna_from(srna, "bNodeSocketValueVector", "default_value");
1331
1332 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
1333 RNA_def_property_float_sdna(prop, nullptr, "value");
1334 RNA_def_property_array(prop, dimensions);
1335 RNA_def_property_float_default_func(prop, "rna_NodeSocketStandard_vector_default");
1336 RNA_def_property_float_funcs(prop, nullptr, nullptr, "rna_NodeSocketStandard_vector_range");
1337 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1338 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1339 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1341
1342 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1343}
1344
1346 const char *identifier,
1347 PropertySubType subtype,
1348 int dimensions)
1349{
1350 StructRNA *srna;
1351 PropertyRNA *prop;
1352
1353 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1354 RNA_def_struct_ui_text(srna, "Vector Node Socket Interface", "3D vector socket of a node");
1355 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1356
1357 RNA_def_struct_sdna_from(srna, "bNodeSocketValueVector", "socket_data");
1358
1359 prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
1361 RNA_def_property_enum_sdna(prop, nullptr, "subtype");
1363 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketVector_subtype_itemf");
1365 RNA_def_property_ui_text(prop, "Subtype", "Subtype of the default value");
1367 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1368
1369 prop = RNA_def_property(srna, "dimensions", PROP_INT, PROP_NONE);
1370 RNA_def_property_int_sdna(prop, nullptr, "dimensions");
1371 RNA_def_property_range(prop, 2, 4);
1373 RNA_def_property_ui_text(prop, "Dimensions", "Dimensions of the vector socket");
1375 prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceSocketVector_dimensions_update");
1376
1377 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, subtype);
1378 RNA_def_property_float_sdna(prop, nullptr, "value");
1379 RNA_def_property_array(prop, dimensions);
1382 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketVector_default_value_range");
1383 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1384 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1385
1386 prop = RNA_def_property(srna, "min_value", PROP_FLOAT, PROP_NONE);
1387 RNA_def_property_float_sdna(prop, nullptr, "min");
1389 RNA_def_property_ui_text(prop, "Minimum Value", "Minimum value");
1390 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1391
1392 prop = RNA_def_property(srna, "max_value", PROP_FLOAT, PROP_NONE);
1393 RNA_def_property_float_sdna(prop, nullptr, "max");
1395 RNA_def_property_ui_text(prop, "Maximum Value", "Maximum value");
1396 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1397
1398 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1399
1401}
1402
1403static void rna_def_node_socket_color(BlenderRNA *brna, const char *identifier)
1404{
1405 StructRNA *srna;
1406 PropertyRNA *prop;
1407
1408 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1409 RNA_def_struct_ui_text(srna, "Color Node Socket", "RGBA color socket of a node");
1410 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_RGBA);
1411 RNA_def_struct_sdna(srna, "bNodeSocket");
1412
1413 RNA_def_struct_sdna_from(srna, "bNodeSocketValueRGBA", "default_value");
1414
1415 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_COLOR);
1416 RNA_def_property_float_sdna(prop, nullptr, "value");
1417 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1418 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1419 RNA_def_property_float_default_func(prop, "rna_NodeSocketStandard_color_default");
1420 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1422
1423 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1424}
1425
1426static void rna_def_node_socket_interface_color(BlenderRNA *brna, const char *identifier)
1427{
1428 StructRNA *srna;
1429 PropertyRNA *prop;
1430
1431 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1432 RNA_def_struct_ui_text(srna, "Color Node Socket Interface", "RGBA color socket of a node");
1433 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1434
1435 RNA_def_struct_sdna_from(srna, "bNodeSocketValueRGBA", "socket_data");
1436
1437 prop = RNA_def_property(srna, "default_value", PROP_FLOAT, PROP_COLOR);
1438 RNA_def_property_float_sdna(prop, nullptr, "value");
1440 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1441 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1442
1443 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1444
1446}
1447
1449 const char *identifier,
1450 PropertySubType subtype)
1451{
1452 StructRNA *srna;
1453 PropertyRNA *prop;
1454
1455 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1456 RNA_def_struct_ui_text(srna, "String Node Socket", "String socket of a node");
1457 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_STRING);
1458 RNA_def_struct_sdna(srna, "bNodeSocket");
1459
1460 RNA_def_struct_sdna_from(srna, "bNodeSocketValueString", "default_value");
1461
1462 prop = RNA_def_property(srna, "default_value", PROP_STRING, subtype);
1463 RNA_def_property_string_sdna(prop, nullptr, "value");
1464 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1465 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1466 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1468
1469 if (subtype == PROP_FILEPATH) {
1471 RNA_def_property_string_filepath_filter_func(prop, "rna_NodeSocketString_filepath_filter");
1472 }
1473
1474 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1475}
1476
1478 const char *identifier,
1479 PropertySubType subtype)
1480{
1481 StructRNA *srna;
1482 PropertyRNA *prop;
1483
1484 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1485 RNA_def_struct_ui_text(srna, "String Node Socket Interface", "String socket of a node");
1486 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1487
1488 RNA_def_struct_sdna_from(srna, "bNodeSocketValueString", "socket_data");
1489
1490 prop = RNA_def_property(srna, "subtype", PROP_ENUM, PROP_NONE);
1492 RNA_def_property_enum_sdna(prop, nullptr, "subtype");
1494 prop, nullptr, nullptr, "rna_NodeTreeInterfaceSocketString_subtype_itemf");
1496 RNA_def_property_ui_text(prop, "Subtype", "Subtype of the default value");
1498 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1499
1500 prop = RNA_def_property(srna, "default_value", PROP_STRING, subtype);
1501 RNA_def_property_string_sdna(prop, nullptr, "value");
1503 // TODO: Do I need to call RNA_def_property_string_funcs() ?
1504 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1505 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1506
1507 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1508
1510}
1511
1512static void rna_def_node_socket_menu(BlenderRNA *brna, const char *identifier)
1513{
1514 StructRNA *srna;
1515 PropertyRNA *prop;
1516
1517 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1518 RNA_def_struct_ui_text(srna, "Menu Node Socket", "Menu socket of a node");
1519 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_MENU);
1520 RNA_def_struct_sdna(srna, "bNodeSocket");
1521
1522 RNA_def_struct_sdna_from(srna, "bNodeSocketValueMenu", "default_value");
1523
1524 prop = RNA_def_property(srna, "default_value", PROP_ENUM, PROP_NONE);
1525 RNA_def_property_enum_sdna(prop, nullptr, "value");
1527 RNA_def_property_enum_funcs(prop, nullptr, nullptr, "RNA_node_socket_menu_itemf");
1528 RNA_def_property_enum_default_func(prop, "rna_NodeSocketStandard_menu_default");
1529 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1530 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1531 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_update");
1534
1535 RNA_def_struct_sdna_from(srna, "bNodeSocket", nullptr);
1536}
1537
1538static void rna_def_node_socket_interface_menu(BlenderRNA *brna, const char *identifier)
1539{
1540 StructRNA *srna;
1541 PropertyRNA *prop;
1542
1543 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1544 RNA_def_struct_ui_text(srna, "Menu Node Socket Interface", "Menu socket of a node");
1545 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1546
1547 RNA_def_struct_sdna_from(srna, "bNodeSocketValueMenu", "socket_data");
1548
1549 prop = RNA_def_property(srna, "default_value", PROP_ENUM, PROP_NONE);
1550 RNA_def_property_enum_sdna(prop, nullptr, "value");
1552 RNA_def_property_enum_funcs(prop, nullptr, nullptr, "RNA_node_tree_interface_socket_menu_itemf");
1554 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1555 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1556
1557 RNA_def_struct_sdna_from(srna, "bNodeTreeInterfaceSocket", nullptr);
1558
1560}
1561
1562static void rna_def_node_socket_shader(BlenderRNA *brna, const char *identifier)
1563{
1564 StructRNA *srna;
1565
1566 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1567 RNA_def_struct_ui_text(srna, "Shader Node Socket", "Shader socket of a node");
1568 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_SHADER);
1569 RNA_def_struct_sdna(srna, "bNodeSocket");
1570}
1571
1572static void rna_def_node_socket_interface_shader(BlenderRNA *brna, const char *identifier)
1573{
1574 StructRNA *srna;
1575
1576 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1577 RNA_def_struct_ui_text(srna, "Shader Node Socket Interface", "Shader socket of a node");
1578 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1579
1581}
1582
1583static void rna_def_node_socket_object(BlenderRNA *brna, const char *identifier)
1584{
1585 StructRNA *srna;
1586 PropertyRNA *prop;
1587
1588 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1589 RNA_def_struct_ui_text(srna, "Object Node Socket", "Object socket of a node");
1590 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_OBJECT);
1591 RNA_def_struct_sdna(srna, "bNodeSocket");
1592
1593 RNA_def_struct_sdna_from(srna, "bNodeSocketValueObject", "default_value");
1594
1595 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1596 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1597 RNA_def_property_struct_type(prop, "Object");
1598 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1599 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1601 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1604}
1605
1606static void rna_def_node_socket_interface_object(BlenderRNA *brna, const char *identifier)
1607{
1608 StructRNA *srna;
1609 PropertyRNA *prop;
1610
1611 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1612 RNA_def_struct_ui_text(srna, "Object Node Socket Interface", "Object socket of a node");
1613 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1614
1615 RNA_def_struct_sdna_from(srna, "bNodeSocketValueObject", "socket_data");
1616
1617 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1618 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1619 RNA_def_property_struct_type(prop, "Object");
1620 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1621 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1624
1626}
1627
1628static void rna_def_node_socket_image(BlenderRNA *brna, const char *identifier)
1629{
1630 StructRNA *srna;
1631 PropertyRNA *prop;
1632
1633 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1634 RNA_def_struct_ui_text(srna, "Image Node Socket", "Image socket of a node");
1635 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_IMAGE);
1636 RNA_def_struct_sdna(srna, "bNodeSocket");
1637
1638 RNA_def_struct_sdna_from(srna, "bNodeSocketValueImage", "default_value");
1639
1640 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1641 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1642 RNA_def_property_struct_type(prop, "Image");
1643 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1644 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1646 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1649}
1650
1651static void rna_def_node_socket_interface_image(BlenderRNA *brna, const char *identifier)
1652{
1653 StructRNA *srna;
1654 PropertyRNA *prop;
1655
1656 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1657 RNA_def_struct_ui_text(srna, "Image Node Socket Interface", "Image socket of a node");
1658 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1659
1660 RNA_def_struct_sdna_from(srna, "bNodeSocketValueImage", "socket_data");
1661
1662 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1663 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1664 RNA_def_property_struct_type(prop, "Image");
1665 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1666 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1669
1671}
1672
1673static void rna_def_node_socket_geometry(BlenderRNA *brna, const char *identifier)
1674{
1675 StructRNA *srna;
1676
1677 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1678 RNA_def_struct_ui_text(srna, "Geometry Node Socket", "Geometry socket of a node");
1679 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_GEOMETRY);
1680 RNA_def_struct_sdna(srna, "bNodeSocket");
1681}
1682
1683static void rna_def_node_socket_interface_geometry(BlenderRNA *brna, const char *identifier)
1684{
1685 StructRNA *srna;
1686
1687 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1688 RNA_def_struct_ui_text(srna, "Geometry Node Socket Interface", "Geometry socket of a node");
1689 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1690
1692}
1693
1694static void rna_def_node_socket_bundle(BlenderRNA *brna, const char *identifier)
1695{
1696 StructRNA *srna;
1697
1698 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1699 RNA_def_struct_ui_text(srna, "Bundle Node Socket", "Bundle socket of a node");
1700 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_BUNDLE);
1701 RNA_def_struct_sdna(srna, "bNodeSocket");
1702}
1703
1704static void rna_def_node_socket_interface_bundle(BlenderRNA *brna, const char *identifier)
1705{
1706 StructRNA *srna;
1707
1708 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1709 RNA_def_struct_ui_text(srna, "Bundle Node Socket Interface", "Bundle socket of a node");
1710 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1711
1713}
1714
1715static void rna_def_node_socket_closure(BlenderRNA *brna, const char *identifier)
1716{
1717 StructRNA *srna;
1718
1719 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1720 RNA_def_struct_ui_text(srna, "Closure Node Socket", "Closure socket of a node");
1721 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_CLOSURE);
1722 RNA_def_struct_sdna(srna, "bNodeSocket");
1723}
1724
1725static void rna_def_node_socket_interface_closure(BlenderRNA *brna, const char *identifier)
1726{
1727 StructRNA *srna;
1728
1729 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1730 RNA_def_struct_ui_text(srna, "Closure Node Socket Interface", "Closure socket of a node");
1731 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1732
1734}
1735
1736static void rna_def_node_socket_collection(BlenderRNA *brna, const char *identifier)
1737{
1738 StructRNA *srna;
1739 PropertyRNA *prop;
1740
1741 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1742 RNA_def_struct_ui_text(srna, "Collection Node Socket", "Collection socket of a node");
1743 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_COLLECTION);
1744 RNA_def_struct_sdna(srna, "bNodeSocket");
1745
1746 RNA_def_struct_sdna_from(srna, "bNodeSocketValueCollection", "default_value");
1747
1748 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1749 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1750 RNA_def_property_struct_type(prop, "Collection");
1751 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1752 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1754 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1757}
1758
1759static void rna_def_node_socket_interface_collection(BlenderRNA *brna, const char *identifier)
1760{
1761 StructRNA *srna;
1762 PropertyRNA *prop;
1763
1764 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1765 RNA_def_struct_ui_text(srna, "Collection Node Socket Interface", "Collection socket of a node");
1766 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1767
1768 RNA_def_struct_sdna_from(srna, "bNodeSocketValueCollection", "socket_data");
1769
1770 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1771 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1772 RNA_def_property_struct_type(prop, "Collection");
1773 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1774 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1777
1779}
1780
1781static void rna_def_node_socket_texture(BlenderRNA *brna, const char *identifier)
1782{
1783 StructRNA *srna;
1784 PropertyRNA *prop;
1785
1786 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1787 RNA_def_struct_ui_text(srna, "Texture Node Socket", "Texture socket of a node");
1788 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_TEXTURE);
1789 RNA_def_struct_sdna(srna, "bNodeSocket");
1790
1791 RNA_def_struct_sdna_from(srna, "bNodeSocketValueTexture", "default_value");
1792
1793 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1794 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1795 RNA_def_property_struct_type(prop, "Texture");
1796 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1797 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1799 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1802}
1803
1804static void rna_def_node_socket_interface_texture(BlenderRNA *brna, const char *identifier)
1805{
1806 StructRNA *srna;
1807 PropertyRNA *prop;
1808
1809 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1810 RNA_def_struct_ui_text(srna, "Texture Node Socket Interface", "Texture socket of a node");
1811 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1812
1813 RNA_def_struct_sdna_from(srna, "bNodeSocketValueTexture", "socket_data");
1814
1815 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1816 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1817 RNA_def_property_struct_type(prop, "Texture");
1818 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1819 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1822
1824}
1825
1826static void rna_def_node_socket_material(BlenderRNA *brna, const char *identifier)
1827{
1828 StructRNA *srna;
1829 PropertyRNA *prop;
1830
1831 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1832 RNA_def_struct_ui_text(srna, "Material Node Socket", "Material socket of a node");
1833 RNA_def_struct_ui_icon(srna, ICON_NODE_SOCKET_MATERIAL);
1834 RNA_def_struct_sdna(srna, "bNodeSocket");
1835
1836 RNA_def_struct_sdna_from(srna, "bNodeSocketValueMaterial", "default_value");
1837
1838 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1839 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1840 RNA_def_property_struct_type(prop, "Material");
1841 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1842 RNA_def_property_ui_name_func(prop, "rna_NodeSocketStandard_name_func");
1844 prop, NC_NODE | NA_EDITED, "rna_NodeSocketStandard_value_and_relation_update");
1847}
1848
1849static void rna_def_node_socket_interface_material(BlenderRNA *brna, const char *identifier)
1850{
1851 StructRNA *srna;
1852 PropertyRNA *prop;
1853
1854 srna = RNA_def_struct(brna, identifier, "NodeTreeInterfaceSocket");
1855 RNA_def_struct_ui_text(srna, "Material Node Socket Interface", "Material socket of a node");
1856 RNA_def_struct_sdna(srna, "bNodeTreeInterfaceSocket");
1857
1858 RNA_def_struct_sdna_from(srna, "bNodeSocketValueMaterial", "socket_data");
1859
1860 prop = RNA_def_property(srna, "default_value", PROP_POINTER, PROP_NONE);
1861 RNA_def_property_pointer_sdna(prop, nullptr, "value");
1862 RNA_def_property_struct_type(prop, "Material");
1864 prop, nullptr, nullptr, nullptr, "rna_NodeTreeInterfaceSocketMaterial_default_value_poll");
1865 RNA_def_property_ui_text(prop, "Default Value", "Input value used for unconnected socket");
1866 RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeTreeInterfaceItem_update");
1869
1871}
1872
1873static void rna_def_node_socket_virtual(BlenderRNA *brna, const char *identifier)
1874{
1875 StructRNA *srna;
1876
1877 srna = RNA_def_struct(brna, identifier, "NodeSocketStandard");
1878 RNA_def_struct_ui_text(srna, "Virtual Node Socket", "Virtual socket of a node");
1879 RNA_def_struct_sdna(srna, "bNodeSocket");
1880}
1881
1882/* Info for generating static subtypes. */
1890
1891/* NOTE: Socket and interface subtypes could be defined from a single central list,
1892 * but makesrna cannot have a dependency on BKE, so this list would have to live in RNA itself,
1893 * with BKE etc. accessing the RNA API to get the subtypes info. */
1895 {"NodeSocketFloat", "NodeTreeInterfaceSocketFloat", SOCK_FLOAT, PROP_NONE},
1896 {"NodeSocketFloatUnsigned", "NodeTreeInterfaceSocketFloatUnsigned", SOCK_FLOAT, PROP_UNSIGNED},
1897 {"NodeSocketFloatPercentage",
1898 "NodeTreeInterfaceSocketFloatPercentage",
1899 SOCK_FLOAT,
1901 {"NodeSocketFloatFactor", "NodeTreeInterfaceSocketFloatFactor", SOCK_FLOAT, PROP_FACTOR},
1902 {"NodeSocketFloatAngle", "NodeTreeInterfaceSocketFloatAngle", SOCK_FLOAT, PROP_ANGLE},
1903 {"NodeSocketFloatTime", "NodeTreeInterfaceSocketFloatTime", SOCK_FLOAT, PROP_TIME},
1904 {"NodeSocketFloatTimeAbsolute",
1905 "NodeTreeInterfaceSocketFloatTimeAbsolute",
1906 SOCK_FLOAT,
1908 {"NodeSocketFloatDistance", "NodeTreeInterfaceSocketFloatDistance", SOCK_FLOAT, PROP_DISTANCE},
1909 {"NodeSocketFloatWavelength",
1910 "NodeTreeInterfaceSocketFloatWavelength",
1911 SOCK_FLOAT,
1913 {"NodeSocketFloatColorTemperature",
1914 "NodeTreeInterfaceSocketFloatColorTemperature",
1915 SOCK_FLOAT,
1917 {"NodeSocketFloatFrequency",
1918 "NodeTreeInterfaceSocketFloatFrequency",
1919 SOCK_FLOAT,
1921 {"NodeSocketInt", "NodeTreeInterfaceSocketInt", SOCK_INT, PROP_NONE},
1922 {"NodeSocketIntUnsigned", "NodeTreeInterfaceSocketIntUnsigned", SOCK_INT, PROP_UNSIGNED},
1923 {"NodeSocketIntPercentage", "NodeTreeInterfaceSocketIntPercentage", SOCK_INT, PROP_PERCENTAGE},
1924 {"NodeSocketIntFactor", "NodeTreeInterfaceSocketIntFactor", SOCK_INT, PROP_FACTOR},
1925 {"NodeSocketBool", "NodeTreeInterfaceSocketBool", SOCK_BOOLEAN, PROP_NONE},
1926
1927 {"NodeSocketVector", "NodeTreeInterfaceSocketVector", SOCK_VECTOR, PROP_NONE},
1928 {"NodeSocketVectorFactor", "NodeTreeInterfaceSocketVectorFactor", SOCK_VECTOR, PROP_FACTOR},
1929 {"NodeSocketVectorPercentage",
1930 "NodeTreeInterfaceSocketVectorPercentage",
1933 {"NodeSocketVectorTranslation",
1934 "NodeTreeInterfaceSocketVectorTranslation",
1937 {"NodeSocketVectorDirection",
1938 "NodeTreeInterfaceSocketVectorDirection",
1941 {"NodeSocketVectorVelocity",
1942 "NodeTreeInterfaceSocketVectorVelocity",
1945 {"NodeSocketVectorAcceleration",
1946 "NodeTreeInterfaceSocketVectorAcceleration",
1949 {"NodeSocketVectorEuler", "NodeTreeInterfaceSocketVectorEuler", SOCK_VECTOR, PROP_EULER},
1950 {"NodeSocketVectorXYZ", "NodeTreeInterfaceSocketVectorXYZ", SOCK_VECTOR, PROP_XYZ},
1951
1952 {"NodeSocketVector2D", "NodeTreeInterfaceSocketVector2D", SOCK_VECTOR, PROP_NONE},
1953 {"NodeSocketVectorFactor2D",
1954 "NodeTreeInterfaceSocketVectorFactor2D",
1956 PROP_FACTOR},
1957 {"NodeSocketVectorPercentage2D",
1958 "NodeTreeInterfaceSocketVectorPercentage2D",
1961 {"NodeSocketVectorTranslation2D",
1962 "NodeTreeInterfaceSocketVectorTranslation2D",
1965 {"NodeSocketVectorDirection2D",
1966 "NodeTreeInterfaceSocketVectorDirection2D",
1969 {"NodeSocketVectorVelocity2D",
1970 "NodeTreeInterfaceSocketVectorVelocity2D",
1973 {"NodeSocketVectorAcceleration2D",
1974 "NodeTreeInterfaceSocketVectorAcceleration2D",
1977 {"NodeSocketVectorEuler2D", "NodeTreeInterfaceSocketVectorEuler2D", SOCK_VECTOR, PROP_EULER},
1978 {"NodeSocketVectorXYZ2D", "NodeTreeInterfaceSocketVectorXYZ2D", SOCK_VECTOR, PROP_XYZ},
1979
1980 {"NodeSocketVector4D", "NodeTreeInterfaceSocketVector4D", SOCK_VECTOR, PROP_NONE},
1981 {"NodeSocketVectorFactor4D",
1982 "NodeTreeInterfaceSocketVectorFactor4D",
1984 PROP_FACTOR},
1985 {"NodeSocketVectorPercentage4D",
1986 "NodeTreeInterfaceSocketVectorPercentage4D",
1989 {"NodeSocketVectorTranslation4D",
1990 "NodeTreeInterfaceSocketVectorTranslation4D",
1993 {"NodeSocketVectorDirection4D",
1994 "NodeTreeInterfaceSocketVectorDirection4D",
1997 {"NodeSocketVectorVelocity4D",
1998 "NodeTreeInterfaceSocketVectorVelocity4D",
2001 {"NodeSocketVectorAcceleration4D",
2002 "NodeTreeInterfaceSocketVectorAcceleration4D",
2005 {"NodeSocketVectorEuler4D", "NodeTreeInterfaceSocketVectorEuler4D", SOCK_VECTOR, PROP_EULER},
2006 {"NodeSocketVectorXYZ4D", "NodeTreeInterfaceSocketVectorXYZ4D", SOCK_VECTOR, PROP_XYZ},
2007
2008 {"NodeSocketRotation", "NodeTreeInterfaceSocketRotation", SOCK_ROTATION, PROP_NONE},
2009 {"NodeSocketMatrix", "NodeTreeInterfaceSocketMatrix", SOCK_MATRIX, PROP_NONE},
2010
2011 {"NodeSocketColor", "NodeTreeInterfaceSocketColor", SOCK_RGBA, PROP_NONE},
2012 {"NodeSocketString", "NodeTreeInterfaceSocketString", SOCK_STRING, PROP_NONE},
2013 {"NodeSocketStringFilePath",
2014 "NodeTreeInterfaceSocketStringFilePath",
2017 {"NodeSocketShader", "NodeTreeInterfaceSocketShader", SOCK_SHADER, PROP_NONE},
2018 {"NodeSocketObject", "NodeTreeInterfaceSocketObject", SOCK_OBJECT, PROP_NONE},
2019 {"NodeSocketImage", "NodeTreeInterfaceSocketImage", SOCK_IMAGE, PROP_NONE},
2020 {"NodeSocketGeometry", "NodeTreeInterfaceSocketGeometry", SOCK_GEOMETRY, PROP_NONE},
2021 {"NodeSocketCollection", "NodeTreeInterfaceSocketCollection", SOCK_COLLECTION, PROP_NONE},
2022 {"NodeSocketTexture", "NodeTreeInterfaceSocketTexture", SOCK_TEXTURE, PROP_NONE},
2023 {"NodeSocketMaterial", "NodeTreeInterfaceSocketMaterial", SOCK_MATERIAL, PROP_NONE},
2024 {"NodeSocketMenu", "NodeTreeInterfaceSocketMenu", SOCK_MENU, PROP_NONE},
2025 {"NodeSocketBundle", "NodeTreeInterfaceSocketBundle", SOCK_BUNDLE, PROP_NONE},
2026 {"NodeSocketClosure", "NodeTreeInterfaceSocketClosure", SOCK_CLOSURE, PROP_NONE},
2027};
2028
2030{
2032 const char *identifier = info.socket_identifier;
2033
2034 switch (info.type) {
2035 case SOCK_FLOAT:
2036 rna_def_node_socket_float(brna, identifier, info.subtype);
2037 break;
2038 case SOCK_INT:
2039 rna_def_node_socket_int(brna, identifier, info.subtype);
2040 break;
2041 case SOCK_BOOLEAN:
2042 rna_def_node_socket_bool(brna, identifier);
2043 break;
2044 case SOCK_ROTATION:
2045 rna_def_node_socket_rotation(brna, identifier);
2046 break;
2047 case SOCK_MATRIX:
2048 rna_def_node_socket_matrix(brna, identifier);
2049 break;
2050 case SOCK_VECTOR:
2051 if (blender::StringRef(identifier).endswith("2D")) {
2052 rna_def_node_socket_vector(brna, identifier, info.subtype, 2);
2053 }
2054 else if (blender::StringRef(identifier).endswith("4D")) {
2055 rna_def_node_socket_vector(brna, identifier, info.subtype, 4);
2056 }
2057 else {
2058 rna_def_node_socket_vector(brna, identifier, info.subtype, 3);
2059 }
2060 break;
2061 case SOCK_RGBA:
2062 rna_def_node_socket_color(brna, identifier);
2063 break;
2064 case SOCK_STRING:
2065 rna_def_node_socket_string(brna, identifier, info.subtype);
2066 break;
2067 case SOCK_SHADER:
2068 rna_def_node_socket_shader(brna, identifier);
2069 break;
2070 case SOCK_OBJECT:
2071 rna_def_node_socket_object(brna, identifier);
2072 break;
2073 case SOCK_IMAGE:
2074 rna_def_node_socket_image(brna, identifier);
2075 break;
2076 case SOCK_GEOMETRY:
2077 rna_def_node_socket_geometry(brna, identifier);
2078 break;
2079 case SOCK_COLLECTION:
2080 rna_def_node_socket_collection(brna, identifier);
2081 break;
2082 case SOCK_TEXTURE:
2083 rna_def_node_socket_texture(brna, identifier);
2084 break;
2085 case SOCK_MATERIAL:
2086 rna_def_node_socket_material(brna, identifier);
2087 break;
2088 case SOCK_MENU:
2089 rna_def_node_socket_menu(brna, identifier);
2090 break;
2091 case SOCK_BUNDLE:
2092 rna_def_node_socket_bundle(brna, identifier);
2093 break;
2094 case SOCK_CLOSURE:
2095 rna_def_node_socket_closure(brna, identifier);
2096 break;
2097
2098 case SOCK_CUSTOM:
2099 break;
2100 }
2101 }
2102
2103 rna_def_node_socket_virtual(brna, "NodeSocketVirtual");
2104}
2105
2107{
2108 /* NOTE: interface items are defined outside this file.
2109 * The subtypes must be defined after the base type, so this function
2110 * is called from the interface rna file to ensure correct order. */
2111
2113 const char *identifier = info.interface_identifier;
2114
2115 switch (info.type) {
2116 case SOCK_FLOAT:
2117 rna_def_node_socket_interface_float(brna, identifier, info.subtype);
2118 break;
2119 case SOCK_INT:
2120 rna_def_node_socket_interface_int(brna, identifier, info.subtype);
2121 break;
2122 case SOCK_BOOLEAN:
2123 rna_def_node_socket_interface_bool(brna, identifier);
2124 break;
2125 case SOCK_ROTATION:
2127 break;
2128 case SOCK_MATRIX:
2129 rna_def_node_socket_interface_matrix(brna, identifier);
2130 break;
2131 case SOCK_VECTOR:
2132 if (blender::StringRef(identifier).endswith("2D")) {
2133 rna_def_node_socket_interface_vector(brna, identifier, info.subtype, 2);
2134 }
2135 else if (blender::StringRef(identifier).endswith("4D")) {
2136 rna_def_node_socket_interface_vector(brna, identifier, info.subtype, 4);
2137 }
2138 else {
2139 rna_def_node_socket_interface_vector(brna, identifier, info.subtype, 3);
2140 }
2141 break;
2142 case SOCK_RGBA:
2143 rna_def_node_socket_interface_color(brna, identifier);
2144 break;
2145 case SOCK_STRING:
2146 rna_def_node_socket_interface_string(brna, identifier, info.subtype);
2147 break;
2148 case SOCK_MENU:
2149 rna_def_node_socket_interface_menu(brna, identifier);
2150 break;
2151 case SOCK_SHADER:
2152 rna_def_node_socket_interface_shader(brna, identifier);
2153 break;
2154 case SOCK_OBJECT:
2155 rna_def_node_socket_interface_object(brna, identifier);
2156 break;
2157 case SOCK_IMAGE:
2158 rna_def_node_socket_interface_image(brna, identifier);
2159 break;
2160 case SOCK_GEOMETRY:
2162 break;
2163 case SOCK_COLLECTION:
2165 break;
2166 case SOCK_TEXTURE:
2167 rna_def_node_socket_interface_texture(brna, identifier);
2168 break;
2169 case SOCK_MATERIAL:
2171 break;
2172 case SOCK_BUNDLE:
2173 rna_def_node_socket_interface_bundle(brna, identifier);
2174 break;
2175 case SOCK_CLOSURE:
2176 rna_def_node_socket_interface_closure(brna, identifier);
2177 break;
2178
2179 case SOCK_CUSTOM:
2180 break;
2181 }
2182 }
2183}
2184
2192
2193#endif
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
void BKE_main_ensure_invariants(Main &bmain, std::optional< blender::Span< ID * > > modified_ids=std::nullopt)
#define NODE_CUSTOM
Definition BKE_node.hh:810
void BKE_ntree_update_tag_socket_property(bNodeTree *ntree, bNodeSocket *socket)
void BKE_ntree_update_tag_socket_availability(bNodeTree *ntree, bNodeSocket *socket)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
@ RPT_ERROR
Definition BKE_report.hh:39
#define BLI_assert(a)
Definition BLI_assert.h:46
void BLI_kdtree_nd_ free(KDTree *tree)
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:586
MINLINE void copy_v4_v4(float r[4], const float a[4])
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define BLT_I18NCONTEXT_UNIT
void DEG_relations_tag_update(Main *bmain)
@ SOCK_OUT
@ SOCK_IN
@ SOCK_HIDE_VALUE
@ SOCK_IS_LINKED
@ SOCK_MULTI_INPUT
@ SOCK_COLLAPSED
@ SOCK_GIZMO_PIN
@ SOCK_HIDDEN
@ SOCK_UNAVAIL
@ SOCK_DISPLAY_SHAPE_CIRCLE_DOT
@ SOCK_DISPLAY_SHAPE_CIRCLE
@ SOCK_DISPLAY_SHAPE_SQUARE_DOT
@ SOCK_DISPLAY_SHAPE_SQUARE
@ SOCK_DISPLAY_SHAPE_DIAMOND
@ SOCK_DISPLAY_SHAPE_DIAMOND_DOT
eNodeSocketDatatype
@ SOCK_INT
@ SOCK_TEXTURE
@ SOCK_VECTOR
@ SOCK_CLOSURE
@ SOCK_BOOLEAN
@ SOCK_MATERIAL
@ SOCK_SHADER
@ SOCK_MATRIX
@ SOCK_FLOAT
@ SOCK_IMAGE
@ SOCK_COLLECTION
@ SOCK_CUSTOM
@ SOCK_BUNDLE
@ SOCK_GEOMETRY
@ SOCK_ROTATION
@ SOCK_OBJECT
@ SOCK_STRING
@ SOCK_RGBA
@ SOCK_MENU
void ED_init_custom_node_socket_type(blender::bke::bNodeSocketType *stype)
Definition drawnode.cc:942
const EnumPropertyItem * RNA_node_enum_definition_itemf(const blender::bke::RuntimeNodeEnumItems &enum_items, bool *r_free)
@ PARM_RNAPTR
Definition RNA_types.hh:547
@ PARM_REQUIRED
Definition RNA_types.hh:545
@ FUNC_USE_SELF_TYPE
Definition RNA_types.hh:909
@ FUNC_NO_SELF
Definition RNA_types.hh:907
@ FUNC_REGISTER
Definition RNA_types.hh:921
@ FUNC_USE_SELF_ID
Definition RNA_types.hh:889
@ FUNC_REGISTER_OPTIONAL
Definition RNA_types.hh:923
@ FUNC_ALLOW_WRITE
Definition RNA_types.hh:929
int(*)(PointerRNA *ptr, void *data, bool *have_function) StructValidateFunc
Definition RNA_types.hh:985
@ PROP_FLOAT
Definition RNA_types.hh:164
@ PROP_BOOLEAN
Definition RNA_types.hh:162
@ PROP_ENUM
Definition RNA_types.hh:166
@ PROP_INT
Definition RNA_types.hh:163
@ PROP_STRING
Definition RNA_types.hh:165
@ PROP_POINTER
Definition RNA_types.hh:167
int(*)(bContext *C, PointerRNA *ptr, FunctionRNA *func, ParameterList *list) StructCallbackFunc
Definition RNA_types.hh:986
void(*)(void *data) StructFreeFunc
Definition RNA_types.hh:990
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
Definition RNA_types.hh:503
@ PROPOVERRIDE_NO_COMPARISON
Definition RNA_types.hh:511
PropertyFlag
Definition RNA_types.hh:300
@ PROP_CONTEXT_UPDATE
Definition RNA_types.hh:407
@ PROP_ANIMATABLE
Definition RNA_types.hh:319
@ PROP_PATH_SUPPORTS_BLEND_RELATIVE
Definition RNA_types.hh:456
@ PROP_EDITABLE
Definition RNA_types.hh:306
@ PROP_REGISTER_OPTIONAL
Definition RNA_types.hh:412
@ PROP_NEVER_NULL
Definition RNA_types.hh:377
@ PROP_NO_DEG_UPDATE
Definition RNA_types.hh:439
@ PROP_REGISTER
Definition RNA_types.hh:411
@ PROP_PTR_NO_OWNERSHIP
Definition RNA_types.hh:395
@ PROP_ID_REFCOUNT
Definition RNA_types.hh:364
PropertySubType
Definition RNA_types.hh:232
@ PROP_TIME
Definition RNA_types.hh:253
@ PROP_DIRECTION
Definition RNA_types.hh:262
@ PROP_XYZ
Definition RNA_types.hh:269
@ PROP_DISTANCE
Definition RNA_types.hh:256
@ PROP_ACCELERATION
Definition RNA_types.hh:264
@ PROP_COLOR
Definition RNA_types.hh:260
@ PROP_ANGLE
Definition RNA_types.hh:252
@ PROP_TIME_ABSOLUTE
Definition RNA_types.hh:254
@ PROP_EULER
Definition RNA_types.hh:266
@ PROP_COLOR_TEMPERATURE
Definition RNA_types.hh:290
@ PROP_NONE
Definition RNA_types.hh:233
@ PROP_PERCENTAGE
Definition RNA_types.hh:250
@ PROP_FREQUENCY
Definition RNA_types.hh:292
@ PROP_FACTOR
Definition RNA_types.hh:251
@ PROP_TRANSLATION
Definition RNA_types.hh:261
@ PROP_UNSIGNED
Definition RNA_types.hh:249
@ PROP_FILEPATH
Definition RNA_types.hh:236
@ PROP_VELOCITY
Definition RNA_types.hh:263
@ PROP_WAVELENGTH
Definition RNA_types.hh:287
#define C
Definition RandGen.cpp:29
#define NC_NODE
Definition WM_types.hh:394
#define ND_DISPLAY
Definition WM_types.hh:491
#define NA_EDITED
Definition WM_types.hh:584
#define ND_NODE_GIZMO
Definition WM_types.hh:516
BMesh const char void * data
void copy_unsafe(char *dst) const
#define SELECT
void node_unregister_socket_type(bNodeSocketType &stype)
Definition node.cc:2503
void node_modify_socket_type_static(bNodeTree *ntree, bNode *node, bNodeSocket *sock, int type, int subtype)
Definition node.cc:2791
const char * node_socket_translation_context(const bNodeSocket &sock)
Definition node.cc:5001
void node_register_socket_type(bNodeSocketType &stype)
Definition node.cc:2494
bNode & node_find_node(bNodeTree &ntree, bNodeSocket &socket)
Definition node.cc:3281
bNodeSocketType * node_socket_type_find(StringRef idname)
Definition node.cc:2462
int node_socket_link_limit(const bNodeSocket &sock)
Definition node.cc:4753
const char * node_socket_get_label(const bNodeSocket *socket, const char *panel_label=nullptr)
Definition node_draw.cc:453
static blender::bke::bNodeSocketTemplate outputs[]
return ret
void RNA_struct_blender_type_set(StructRNA *srna, void *blender_type)
void * RNA_struct_blender_type_get(StructRNA *srna)
void RNA_parameter_list_free(ParameterList *parms)
void RNA_parameter_set_lookup(ParameterList *parms, const char *identifier, const void *value)
ParameterList * RNA_parameter_list_create(ParameterList *parms, PointerRNA *, FunctionRNA *func)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
void RNA_parameter_get_lookup(ParameterList *parms, const char *identifier, void **r_value)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
void RNA_def_property_ui_name_func(PropertyRNA *prop, const char *name_func)
void RNA_def_struct_system_idprops_func(StructRNA *srna, const char *system_idproperties)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_property_float_default(PropertyRNA *prop, float value)
void RNA_def_property_enum_default(PropertyRNA *prop, int value)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_boolean_default_func(PropertyRNA *prop, const char *get_default)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
void RNA_def_struct_register_funcs(StructRNA *srna, const char *reg, const char *unreg, const char *instance)
void RNA_def_property_int_default(PropertyRNA *prop, int value)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_float_default_func(PropertyRNA *prop, const char *get_default)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
void RNA_def_struct_sdna_from(StructRNA *srna, const char *structname, const char *propname)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
StructRNA * RNA_def_struct_ptr(BlenderRNA *brna, const char *identifier, StructRNA *srnafrom)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_def_function_flag(FunctionRNA *func, int flag)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_struct_free_extension(StructRNA *srna, ExtensionRNA *rna_ext)
void RNA_def_property_enum_default_func(PropertyRNA *prop, const char *get_default)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
PropertyRNA * RNA_def_float_array(StructOrFunctionRNA *cont_, const char *identifier, const int len, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
void RNA_struct_free(BlenderRNA *brna, StructRNA *srna)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_function_output(FunctionRNA *, PropertyRNA *ret)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_string_filepath_filter_func(PropertyRNA *prop, const char *filter)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_int_default_func(PropertyRNA *prop, const char *get_default)
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
BlenderRNA BLENDER_RNA
static void rna_def_node_socket_interface_bundle(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_bool(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_virtual(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_object(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_int(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
static void rna_def_node_socket_matrix(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_matrix(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_bundle(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_string(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
static void rna_def_node_socket_interface_object(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_texture(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_rotation(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_vector(BlenderRNA *brna, const char *identifier, PropertySubType subtype, int dimensions)
static void rna_def_node_socket_geometry(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_int(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
static void rna_def_node_socket_interface_material(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_texture(BlenderRNA *brna, const char *identifier)
void rna_def_node_socket_interface_subtypes(BlenderRNA *brna)
void RNA_def_node_socket_subtypes(BlenderRNA *brna)
static void rna_def_node_socket_standard(BlenderRNA *brna)
static void rna_def_node_socket_bool(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket(BlenderRNA *brna)
static void rna_def_node_socket_subtypes(BlenderRNA *brna)
static void rna_def_node_socket_interface_float(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
static void rna_def_node_socket_shader(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_color(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_geometry(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_color(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_string(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
static const bNodeSocketStaticTypeInfo node_socket_subtypes[]
static void rna_def_node_socket_interface_menu(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_vector(BlenderRNA *brna, const char *identifier, PropertySubType subtype, int dimensions)
static void rna_def_node_socket_interface_closure(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_image(BlenderRNA *brna, const char *identifier)
static void rna_def_node_tree_interface_socket_builtin(StructRNA *srna)
static void rna_def_node_socket_rotation(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_menu(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_material(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_shader(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_float(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
const EnumPropertyItem rna_enum_node_socket_type_items[]
static void rna_def_node_socket_interface_image(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_collection(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_interface_collection(BlenderRNA *brna, const char *identifier)
static void rna_def_node_socket_closure(BlenderRNA *brna, const char *identifier)
const EnumPropertyItem rna_enum_node_socket_structure_type_items[]
const EnumPropertyItem rna_enum_dummy_NULL_items[]
Definition rna_rna.cc:26
const EnumPropertyItem rna_enum_dummy_DEFAULT_items[]
Definition rna_rna.cc:32
#define min(a, b)
Definition sort.cc:36
#define FLT_MAX
Definition stdcycles.h:14
const char * identifier
Definition RNA_types.hh:657
const char * name
Definition RNA_types.hh:661
const char * description
Definition RNA_types.hh:663
StructRNA * srna
StructCallbackFunc call
StructFreeFunc free
Definition DNA_ID.h:414
IDProperty * prop
bNodeSocketRuntimeHandle * runtime
bNodeSocketTypeHandle * typeinfo
void * default_value
char idname[64]
ListBase inputs
char name[64]
int16_t type_legacy
Vector< RuntimeNodeEnumItem > items
Defines a socket type.
Definition BKE_node.hh:158
void(* draw_color)(bContext *C, PointerRNA *ptr, PointerRNA *node_ptr, float *r_color)
Definition BKE_node.hh:171
void(* free_self)(bNodeSocketType *stype)
Definition BKE_node.hh:202
void(* draw_color_simple)(const bNodeSocketType *socket_type, float *r_color)
Definition BKE_node.hh:172
void(* draw)(bContext *C, uiLayout *layout, PointerRNA *ptr, PointerRNA *node_ptr, StringRef text)
Definition BKE_node.hh:166
eNodeSocketDatatype type
Definition BKE_node.hh:193
max
Definition text_draw.cc:251
void WM_main_add_notifier(uint type, void *reference)
PointerRNA * ptr
Definition wm_files.cc:4238