diff options
Diffstat (limited to 'source/blender/nodes/intern/node_socket.c')
-rw-r--r-- | source/blender/nodes/intern/node_socket.c | 56 |
1 files changed, 46 insertions, 10 deletions
diff --git a/source/blender/nodes/intern/node_socket.c b/source/blender/nodes/intern/node_socket.c index 8b393dd740a..0335d295fba 100644 --- a/source/blender/nodes/intern/node_socket.c +++ b/source/blender/nodes/intern/node_socket.c @@ -41,6 +41,7 @@ #include "BLI_listbase.h" #include "BLI_math.h" #include "BLI_utildefines.h" +#include "BLI_string.h" #include "BKE_DerivedMesh.h" #include "BKE_node.h" @@ -157,6 +158,20 @@ static bNodeSocketType node_socket_type_mesh = { /* buttonfunc */ NULL, }; +/****************** STRING ******************/ + +static bNodeSocketType node_socket_type_string = { + /* type */ SOCK_STRING, + /* ui_name */ "String", + /* ui_description */ "String", + /* ui_icon */ 0, + /* ui_color */ {255, 255, 255, 255}, + + /* value_structname */ "bNodeSocketValueString", + /* value_structsize */ sizeof(bNodeSocketValueString), + + /* buttonfunc */ NULL, +}; void node_socket_type_init(bNodeSocketType *types[]) { @@ -169,6 +184,7 @@ void node_socket_type_init(bNodeSocketType *types[]) INIT_TYPE(boolean); INIT_TYPE(shader); INIT_TYPE(mesh); + INIT_TYPE(string); #undef INIT_TYPE } @@ -218,6 +234,9 @@ void node_socket_init_default_value(int type, void *default_value) case SOCK_MESH: node_socket_set_default_value_mesh(default_value); break; + case SOCK_STRING: + node_socket_set_default_value_string(default_value, PROP_NONE, (char *)""); + break; } } @@ -265,6 +284,13 @@ void node_socket_set_default_value_rgba(void *default_value, float r, float g, f val->value[3] = a; } +void node_socket_set_default_value_string(void *default_value, PropertySubType subtype, const char *value) +{ + bNodeSocketValueString *val = default_value; + val->subtype = subtype; + BLI_strncpy(val->value, value, 1024);//FILE_MAX +} + void node_socket_set_default_value_shader(void *UNUSED(default_value)) { } @@ -282,12 +308,14 @@ void node_socket_copy_default_value(int type, void *to_default_value, void *from bNodeSocketValueBoolean *frombool= (bNodeSocketValueBoolean*)from_default_value; bNodeSocketValueVector *fromvector= (bNodeSocketValueVector*)from_default_value; bNodeSocketValueRGBA *fromrgba= (bNodeSocketValueRGBA*)from_default_value; + bNodeSocketValueString *fromstring= (bNodeSocketValueString*)from_default_value; bNodeSocketValueFloat *tofloat= (bNodeSocketValueFloat*)to_default_value; bNodeSocketValueInt *toint= (bNodeSocketValueInt*)to_default_value; bNodeSocketValueBoolean *tobool= (bNodeSocketValueBoolean*)to_default_value; bNodeSocketValueVector *tovector= (bNodeSocketValueVector*)to_default_value; bNodeSocketValueRGBA *torgba= (bNodeSocketValueRGBA*)to_default_value; + bNodeSocketValueString *tostring= (bNodeSocketValueString*)to_default_value; switch (type) { case SOCK_FLOAT: @@ -305,6 +333,9 @@ void node_socket_copy_default_value(int type, void *to_default_value, void *from case SOCK_RGBA: *torgba = *fromrgba; break; + case SOCK_STRING: + *tostring = *fromstring; + break; } } @@ -470,6 +501,9 @@ struct bNodeSocket *node_add_input_from_template(struct bNodeTree *ntree, struct case SOCK_MESH: node_socket_set_default_value_mesh(sock->default_value); break; + case SOCK_STRING: + node_socket_set_default_value_string(sock->default_value, stemp->subtype, (char *)""); + break; } return sock; @@ -490,39 +524,39 @@ static bNodeSocket *verify_socket_template(bNodeTree *ntree, bNode *node, int in break; } if (sock) { - sock->type= stemp->type; /* in future, read this from tydefs! */ - if (stemp->limit==0) sock->limit= 0xFFF; - else sock->limit= stemp->limit; + sock->type = stemp->type; /* in future, read this from tydefs! */ + if (stemp->limit == 0) sock->limit= 0xFFF; + else sock->limit = stemp->limit; sock->flag |= stemp->flag; /* Copy the property range and subtype parameters in case the template changed. * NOT copying the actual value here, only button behavior changes! */ switch (sock->type) { - case SOCK_FLOAT: + case SOCK_FLOAT: { bNodeSocketValueFloat *dval= sock->default_value; dval->min = stemp->min; dval->max = stemp->max; dval->subtype = stemp->subtype; + break; } - break; - case SOCK_INT: + case SOCK_INT: { bNodeSocketValueInt *dval= sock->default_value; dval->min = stemp->min; dval->max = stemp->max; dval->subtype = stemp->subtype; + break; } - break; - case SOCK_VECTOR: + case SOCK_VECTOR: { bNodeSocketValueVector *dval= sock->default_value; dval->min = stemp->min; dval->max = stemp->max; dval->subtype = stemp->subtype; + break; } - break; } BLI_remlink(socklist, sock); @@ -600,7 +634,9 @@ void node_verify_socket_templates(bNodeTree *ntree, bNode *node) * This also prevents group node sockets from being removed, without the need to explicitly * check the node type here. */ - if (ntype && ((ntype->inputs && ntype->inputs[0].type>=0) || (ntype->outputs && ntype->outputs[0].type>=0))) { + if (ntype && ((ntype->inputs && ntype->inputs[0].type >= 0) || + (ntype->outputs && ntype->outputs[0].type >= 0))) + { verify_socket_template_list(ntree, node, SOCK_IN, &node->inputs, ntype->inputs); verify_socket_template_list(ntree, node, SOCK_OUT, &node->outputs, ntype->outputs); } |