39 {0,
nullptr, 0,
nullptr,
nullptr},
44# include <fmt/format.h>
61extern FunctionRNA rna_NodeSocket_draw_color_simple_func;
65static void rna_NodeSocket_draw(
72 func = &rna_NodeSocket_draw_func;
79 sock->
typeinfo->ext_socket.call(C,
ptr, func, &list);
84static void rna_NodeSocket_draw_color(
bContext *C,
94 func = &rna_NodeSocket_draw_color_func;
99 sock->
typeinfo->ext_socket.call(C,
ptr, func, &list);
114 func = &rna_NodeSocket_draw_color_simple_func;
128static bool rna_NodeSocket_unregister(
Main * ,
StructRNA *type)
149 const char *identifier,
156 bool have_function[3];
167 if (validate(&dummy_sock_ptr, data, have_function) != 0) {
171 if (strlen(identifier) >=
sizeof(dummy_st.
idname)) {
174 "Registering node socket class: '%s' is too long, maximum length is %d",
176 int(
sizeof(dummy_st.
idname)));
186 memcpy(st, &dummy_st,
sizeof(dummy_st));
208 st->
draw = (have_function[0]) ? rna_NodeSocket_draw : nullptr;
209 st->
draw_color = (have_function[1]) ? rna_NodeSocket_draw_color : nullptr;
210 st->
draw_color_simple = (have_function[2]) ? rna_NodeSocket_draw_color_simple : nullptr;
222 if (sock->
typeinfo->ext_socket.srna) {
223 return sock->
typeinfo->ext_socket.srna;
226 return &RNA_NodeSocket;
230static std::optional<std::string> rna_NodeSocket_path(
const PointerRNA *
ptr)
236 char name_esc[
sizeof(node->name) * 2];
243 return fmt::format(
"nodes[\"{}\"].inputs[{}]", name_esc, socketindex);
245 return fmt::format(
"nodes[\"{}\"].outputs[{}]", name_esc, socketindex);
266static void rna_NodeSocket_type_set(
PointerRNA *
ptr,
int value)
294static void rna_NodeSocket_link_limit_set(
PointerRNA *
ptr,
int value)
297 sock->
limit = (value == 0 ? 0xFFF : value);
300static void rna_NodeSocket_hide_set(
PointerRNA *
ptr,
bool value)
314 if (node->is_reroute()) {
322 sock->
flag &= ~SOCK_HIDDEN;
328static void rna_NodeSocketStandard_draw(
ID *
id,
336 sock->
typeinfo->draw(C, layout, &
ptr, nodeptr, text);
339static void rna_NodeSocketStandard_draw_color(
343 sock->
typeinfo->draw_color(C, &
ptr, nodeptr, r_color);
346static void rna_NodeSocketStandard_draw_color_simple(
StructRNA *type,
float r_color[4])
355void rna_NodeSocketStandard_float_range(
360 int subtype = sock->
typeinfo->subtype;
362 if (dval->
max < dval->
min) {
368 *softmin = dval->
min;
369 *softmax = dval->
max;
372void rna_NodeSocketStandard_int_range(
377 int subtype = sock->
typeinfo->subtype;
379 if (dval->
max < dval->
min) {
385 *softmin = dval->
min;
386 *softmax = dval->
max;
389void rna_NodeSocketStandard_vector_range(
395 if (dval->
max < dval->
min) {
401 *softmin = dval->
min;
402 *softmax = dval->
max;
408 if (!sock->
runtime->declaration) {
418 if (!sock->
runtime->declaration) {
428 if (!sock->
runtime->declaration) {
440 if (!sock->
runtime->declaration) {
441 std::fill_n(r_values, 3, 0.0f);
445 std::copy_n(&decl->default_value.x, 3, r_values);
451 if (!sock->
runtime->declaration) {
452 std::fill_n(r_values, 4, 0.0f);
456 std::copy_n(&decl->default_value.r, 4, r_values);
468 rna_NodeSocketStandard_value_update(C,
ptr);
481 tmp.
value = item.identifier;
487 tmp.
icon = ICON_NONE;
488 tmp.
name = item.name.c_str();
516 if (!data->enum_items) {
532 static const EnumPropertyItem rna_enum_node_socket_display_shape_items[] = {
539 {0,
nullptr, 0,
nullptr,
nullptr}};
541 static const float default_draw_color[] = {0.0f, 0.0f, 0.0f, 1.0f};
550 srna,
"rna_NodeSocket_register",
"rna_NodeSocket_unregister",
nullptr);
610 prop,
"Multi Input",
"True if the socket can accept multiple ordered input links");
627 prop,
"Pin Gizmo",
"Keep gizmo visible even when the node is not selected");
673 prop,
"Subtype Label",
"Label to display for the socket subtype in the UI");
704 func,
"color", 4, default_draw_color, 0.0f, 1.0f,
"Color",
"", 0.0f, 1.0f);
710 "Color of the socket icon. Used to draw sockets in places where the socket does not belong "
711 "to a node, like the node interface panel. Also used to draw node sockets if draw_color is "
715 func,
"color", 4, default_draw_color, 0.0f, 1.0f,
"Color",
"", 0.0f, 1.0f);
733 static const float default_draw_color[] = {0.0f, 0.0f, 0.0f, 1.0f};
757 func =
RNA_def_function(srna,
"draw_color",
"rna_NodeSocketStandard_draw_color");
767 func,
"color", 4, default_draw_color, 0.0f, 1.0f,
"Color",
"", 0.0f, 1.0f);
770 func =
RNA_def_function(srna,
"draw_color_simple",
"rna_NodeSocketStandard_draw_color_simple");
774 func,
"color", 4, default_draw_color, 0.0f, 1.0f,
"Color",
"", 0.0f, 1.0f);
788 func =
RNA_def_function(srna,
"draw",
"rna_NodeTreeInterfaceSocket_draw_builtin");
798 func =
RNA_def_function(srna,
"init_socket",
"rna_NodeTreeInterfaceSocket_init_socket_builtin");
801 parm =
RNA_def_pointer(func,
"node",
"Node",
"Node",
"Node of the socket to initialize");
803 parm =
RNA_def_pointer(func,
"socket",
"NodeSocket",
"Socket",
"Socket to initialize");
806 func,
"data_path",
nullptr, 0,
"Data Path",
"Path to specialized socket data");
809 func =
RNA_def_function(srna,
"from_socket",
"rna_NodeTreeInterfaceSocket_from_socket_builtin");
812 parm =
RNA_def_pointer(func,
"node",
"Node",
"Node",
"Node of the original socket");
814 parm =
RNA_def_pointer(func,
"socket",
"NodeSocket",
"Socket",
"Original socket");
819 const char *identifier,
843 const char *identifier,
853 value_default = 1.0f;
856 value_default = 100.0f;
859 value_default = 0.0f;
863 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
865 srna,
"Float Node Socket Interface",
"Floating-point number socket of a node");
874 prop,
nullptr,
nullptr,
"rna_NodeTreeInterfaceSocketFloat_subtype_itemf");
884 prop,
nullptr,
nullptr,
"rna_NodeTreeInterfaceSocketFloat_default_value_range");
906 const char *identifier,
945 const char *identifier,
951 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
961 prop,
nullptr,
nullptr,
"rna_NodeTreeInterfaceSocketInt_subtype_itemf");
970 prop,
nullptr,
nullptr,
"rna_NodeTreeInterfaceSocketInt_default_value_range");
1017 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1060 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1062 srna,
"Rotation Node Socket Interface",
"Rotation value socket of a node");
1093 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1103 const char *identifier,
1127 const char *identifier,
1133 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1143 prop,
nullptr,
nullptr,
"rna_NodeTreeInterfaceSocketVector_subtype_itemf");
1152 prop,
nullptr,
nullptr,
"rna_NodeTreeInterfaceSocketVector_default_value_range");
1199 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1217 const char *identifier,
1239 const char *identifier,
1245 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1255 prop,
nullptr,
nullptr,
"rna_NodeTreeInterfaceSocketString_subtype_itemf");
1299 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1331 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1354 prop,
NC_NODE |
NA_EDITED,
"rna_NodeSocketStandard_value_and_relation_update");
1364 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1397 prop,
NC_NODE |
NA_EDITED,
"rna_NodeSocketStandard_value_and_relation_update");
1407 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1437 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1460 prop,
NC_NODE |
NA_EDITED,
"rna_NodeSocketStandard_value_and_relation_update");
1470 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1503 prop,
NC_NODE |
NA_EDITED,
"rna_NodeSocketStandard_value_and_relation_update");
1513 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1546 prop,
NC_NODE |
NA_EDITED,
"rna_NodeSocketStandard_value_and_relation_update");
1556 srna =
RNA_def_struct(brna, identifier,
"NodeTreeInterfaceSocket");
1566 prop,
nullptr,
nullptr,
nullptr,
"rna_NodeTreeInterfaceSocketMaterial_default_value_poll");
1599 {
"NodeSocketFloatPercentage",
1600 "NodeTreeInterfaceSocketFloatPercentage",
1606 {
"NodeSocketFloatTimeAbsolute",
1607 "NodeTreeInterfaceSocketFloatTimeAbsolute",
1611 {
"NodeSocketFloatWavelength",
1612 "NodeTreeInterfaceSocketFloatWavelength",
1615 {
"NodeSocketFloatColorTemperature",
1616 "NodeTreeInterfaceSocketFloatColorTemperature",
1619 {
"NodeSocketFloatFrequency",
1620 "NodeTreeInterfaceSocketFloatFrequency",
1631 {
"NodeSocketVectorTranslation",
1632 "NodeTreeInterfaceSocketVectorTranslation",
1635 {
"NodeSocketVectorDirection",
1636 "NodeTreeInterfaceSocketVectorDirection",
1639 {
"NodeSocketVectorVelocity",
1640 "NodeTreeInterfaceSocketVectorVelocity",
1643 {
"NodeSocketVectorAcceleration",
1644 "NodeTreeInterfaceSocketVectorAcceleration",
1651 {
"NodeSocketStringFilePath",
1652 "NodeTreeInterfaceSocketStringFilePath",
1670 switch (info.type) {
1734 const char *identifier = info.interface_identifier;
1736 switch (info.type) {
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
void BKE_ntree_update_tag_socket_property(bNodeTree *ntree, bNodeSocket *socket)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BLI_kdtree_nd_ free(KDTree *tree)
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
void DEG_relations_tag_update(Main *bmain)
@ 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
void ED_node_tree_propagate_change(const bContext *C, Main *bmain, bNodeTree *ntree)
void ED_init_custom_node_socket_type(blender::bke::bNodeSocketType *stype)
const EnumPropertyItem * RNA_node_enum_definition_itemf(const blender::bke::RuntimeNodeEnumItems &enum_items, bool *r_free)
int(*)(PointerRNA *ptr, void *data, bool *have_function) StructValidateFunc
void(*)(void *data) StructFreeFunc
int(*)(bContext *C, PointerRNA *ptr, FunctionRNA *func, ParameterList *list) StructCallbackFunc
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
@ PROPOVERRIDE_NO_COMPARISON
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void node_modify_socket_type_static(bNodeTree *ntree, bNode *node, bNodeSocket *sock, int type, int subtype)
void node_unregister_socket_type(bNodeSocketType *stype)
bNodeSocketType * node_socket_type_find(const char *idname)
void node_find_node(bNodeTree *ntree, bNodeSocket *sock, bNode **r_node, int *r_sockindex)
void node_register_socket_type(bNodeSocketType *stype)
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(ID *id, StructRNA *type, void *data)
void RNA_parameter_get_lookup(ParameterList *parms, const char *identifier, void **r_value)
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_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
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_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_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_struct_idprops_func(StructRNA *srna, const char *idproperties)
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_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)
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_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_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)
static void rna_def_node_socket_interface_vector(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
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_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_vector(BlenderRNA *brna, const char *identifier, PropertySubType subtype)
const EnumPropertyItem rna_enum_dummy_NULL_items[]
const EnumPropertyItem rna_enum_dummy_DEFAULT_items[]
const char * socket_identifier
const char * interface_identifier
bNodeSocketRuntimeHandle * runtime
bNodeSocketTypeHandle * typeinfo
void(* draw_color)(bContext *C, PointerRNA *ptr, PointerRNA *node_ptr, float *r_color)
void(* free_self)(bNodeSocketType *stype)
void(* draw_color_simple)(const bNodeSocketType *socket_type, float *r_color)
void(* draw)(bContext *C, uiLayout *layout, PointerRNA *ptr, PointerRNA *node_ptr, const char *text)
void WM_main_add_notifier(uint type, void *reference)