Simplified base color for socket types #109288
|
@ -171,6 +171,7 @@ typedef struct bNodeSocketType {
|
|||
struct PointerRNA *ptr,
|
||||
struct PointerRNA *node_ptr,
|
||||
float *r_color);
|
||||
float base_color[4];
|
||||
|
||||
|
||||
void (*interface_draw)(struct bContext *C, struct uiLayout *layout, struct PointerRNA *ptr);
|
||||
void (*interface_draw_color)(struct bContext *C, struct PointerRNA *ptr, float *r_color);
|
||||
|
|
|
@ -1113,17 +1113,6 @@ static void node_socket_undefined_draw(bContext * /*C*/,
|
|||
uiItemL(layout, IFACE_("Undefined Socket Type"), ICON_ERROR);
|
||||
}
|
||||
|
||||
static void node_socket_undefined_draw_color(bContext * /*C*/,
|
||||
PointerRNA * /*ptr*/,
|
||||
PointerRNA * /*node_ptr*/,
|
||||
float *r_color)
|
||||
{
|
||||
r_color[0] = 1.0f;
|
||||
r_color[1] = 0.0f;
|
||||
r_color[2] = 0.0f;
|
||||
r_color[3] = 1.0f;
|
||||
}
|
||||
|
||||
static void node_socket_undefined_interface_draw(bContext * /*C*/,
|
||||
uiLayout *layout,
|
||||
PointerRNA * /*ptr*/)
|
||||
|
@ -1131,16 +1120,6 @@ static void node_socket_undefined_interface_draw(bContext * /*C*/,
|
|||
uiItemL(layout, IFACE_("Undefined Socket Type"), ICON_ERROR);
|
||||
}
|
||||
|
||||
static void node_socket_undefined_interface_draw_color(bContext * /*C*/,
|
||||
PointerRNA * /*ptr*/,
|
||||
float *r_color)
|
||||
{
|
||||
r_color[0] = 1.0f;
|
||||
r_color[1] = 0.0f;
|
||||
r_color[2] = 0.0f;
|
||||
r_color[3] = 1.0f;
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
} // namespace blender::ed::space_node
|
||||
|
@ -1156,13 +1135,14 @@ void ED_node_init_butfuncs()
|
|||
using blender::bke::NodeSocketTypeUndefined;
|
||||
using blender::bke::NodeTypeUndefined;
|
||||
|
||||
static const float default_color[] = {1.0f, 0.0f, 0.0f, 1.0f};
|
||||
|
||||
NodeTypeUndefined.draw_buttons = nullptr;
|
||||
NodeTypeUndefined.draw_buttons_ex = nullptr;
|
||||
|
||||
NodeSocketTypeUndefined.draw = node_socket_undefined_draw;
|
||||
NodeSocketTypeUndefined.draw_color = node_socket_undefined_draw_color;
|
||||
copy_v4_v4(NodeSocketTypeUndefined.base_color, default_color);
|
||||
NodeSocketTypeUndefined.interface_draw = node_socket_undefined_interface_draw;
|
||||
NodeSocketTypeUndefined.interface_draw_color = node_socket_undefined_interface_draw_color;
|
||||
|
||||
/* node type ui functions */
|
||||
NODE_TYPES_BEGIN (ntype) {
|
||||
|
@ -1208,23 +1188,6 @@ static const float std_node_socket_colors[][4] = {
|
|||
{0.92, 0.46, 0.7, 1.0}, /* SOCK_ROTATION */
|
||||
};
|
||||
|
||||
/* common color callbacks for standard types */
|
||||
static void std_node_socket_draw_color(bContext * /*C*/,
|
||||
PointerRNA *ptr,
|
||||
PointerRNA * /*node_ptr*/,
|
||||
float *r_color)
|
||||
{
|
||||
bNodeSocket *sock = (bNodeSocket *)ptr->data;
|
||||
int type = sock->typeinfo->type;
|
||||
copy_v4_v4(r_color, std_node_socket_colors[type]);
|
||||
}
|
||||
static void std_node_socket_interface_draw_color(bContext * /*C*/, PointerRNA *ptr, float *r_color)
|
||||
{
|
||||
bNodeSocket *sock = (bNodeSocket *)ptr->data;
|
||||
int type = sock->typeinfo->type;
|
||||
copy_v4_v4(r_color, std_node_socket_colors[type]);
|
||||
}
|
||||
|
||||
/* draw function for file output node sockets,
|
||||
* displays only sub-path and format, no value button */
|
||||
static void node_file_output_socket_draw(bContext *C,
|
||||
|
@ -1493,30 +1456,21 @@ static void std_node_socket_interface_draw(bContext * /*C*/, uiLayout *layout, P
|
|||
}
|
||||
}
|
||||
|
||||
static void node_socket_virtual_draw_color(bContext * /*C*/,
|
||||
PointerRNA * /*ptr*/,
|
||||
PointerRNA * /*node_ptr*/,
|
||||
float *r_color)
|
||||
{
|
||||
copy_v4_v4(r_color, virtual_node_socket_color);
|
||||
}
|
||||
|
||||
} // namespace blender::ed::space_node
|
||||
|
||||
void ED_init_standard_node_socket_type(bNodeSocketType *stype)
|
||||
{
|
||||
using namespace blender::ed::space_node;
|
||||
stype->draw = std_node_socket_draw;
|
||||
stype->draw_color = std_node_socket_draw_color;
|
||||
copy_v4_v4(stype->base_color, std_node_socket_colors[stype->type]);
|
||||
stype->interface_draw = std_node_socket_interface_draw;
|
||||
stype->interface_draw_color = std_node_socket_interface_draw_color;
|
||||
}
|
||||
|
||||
void ED_init_node_socket_type_virtual(bNodeSocketType *stype)
|
||||
{
|
||||
using namespace blender::ed::space_node;
|
||||
stype->draw = node_socket_button_label;
|
||||
stype->draw_color = node_socket_virtual_draw_color;
|
||||
copy_v4_v4(stype->base_color, virtual_node_socket_color);
|
||||
}
|
||||
|
||||
void ED_node_type_draw_color(const char *idname, float *r_color)
|
||||
|
@ -1524,7 +1478,7 @@ void ED_node_type_draw_color(const char *idname, float *r_color)
|
|||
using namespace blender::ed::space_node;
|
||||
|
||||
const bNodeSocketType *typeinfo = nodeSocketTypeFind(idname);
|
||||
if (!typeinfo || typeinfo->type == SOCK_CUSTOM) {
|
||||
if (!typeinfo) {
|
||||
r_color[0] = 0.0f;
|
||||
r_color[1] = 0.0f;
|
||||
r_color[2] = 0.0f;
|
||||
|
@ -1532,8 +1486,7 @@ void ED_node_type_draw_color(const char *idname, float *r_color)
|
|||
return;
|
||||
}
|
||||
|
||||
BLI_assert(typeinfo->type < ARRAY_SIZE(std_node_socket_colors));
|
||||
copy_v4_v4(r_color, std_node_socket_colors[typeinfo->type]);
|
||||
copy_v4_v4(r_color, typeinfo->base_color);
|
||||
}
|
||||
|
||||
namespace blender::ed::space_node {
|
||||
|
|
|
@ -816,12 +816,16 @@ void node_socket_color_get(const bContext &C,
|
|||
const bNodeSocket &sock,
|
||||
float r_color[4])
|
||||
{
|
||||
PointerRNA ptr;
|
||||
BLI_assert(RNA_struct_is_a(node_ptr.type, &RNA_Node));
|
||||
RNA_pointer_create(
|
||||
&const_cast<ID &>(ntree.id), &RNA_NodeSocket, &const_cast<bNodeSocket &>(sock), &ptr);
|
||||
|
||||
sock.typeinfo->draw_color((bContext *)&C, &ptr, &node_ptr, r_color);
|
||||
if (sock.typeinfo->draw_color) {
|
||||
PointerRNA ptr;
|
||||
BLI_assert(RNA_struct_is_a(node_ptr.type, &RNA_Node));
|
||||
RNA_pointer_create(
|
||||
&const_cast<ID &>(ntree.id), &RNA_NodeSocket, &const_cast<bNodeSocket &>(sock), &ptr);
|
||||
sock.typeinfo->draw_color((bContext *)&C, &ptr, &node_ptr, r_color);
|
||||
}
|
||||
else {
|
||||
copy_v4_v4(r_color, sock.typeinfo->base_color);
|
||||
}
|
||||
}
|
||||
|
||||
static void create_inspection_string_for_generic_value(const bNodeSocket &socket,
|
||||
|
|
|
@ -3217,9 +3217,14 @@ static void rna_NodeSocketStandard_draw(ID *id,
|
|||
static void rna_NodeSocketStandard_draw_color(
|
||||
ID *id, bNodeSocket *sock, struct bContext *C, PointerRNA *nodeptr, float r_color[4])
|
||||
{
|
||||
PointerRNA ptr;
|
||||
RNA_pointer_create(id, &RNA_NodeSocket, sock, &ptr);
|
||||
sock->typeinfo->draw_color(C, &ptr, nodeptr, r_color);
|
||||
if (sock->typeinfo->draw_color) {
|
||||
PointerRNA ptr;
|
||||
RNA_pointer_create(id, &RNA_NodeSocket, sock, &ptr);
|
||||
sock->typeinfo->draw_color(C, &ptr, nodeptr, r_color);
|
||||
}
|
||||
else {
|
||||
copy_v4_v4(r_color, sock->typeinfo->base_color);
|
||||
}
|
||||
}
|
||||
|
||||
static void rna_NodeSocketInterfaceStandard_draw(ID *id,
|
||||
|
@ -3237,9 +3242,14 @@ static void rna_NodeSocketInterfaceStandard_draw_color(ID *id,
|
|||
struct bContext *C,
|
||||
float r_color[4])
|
||||
{
|
||||
PointerRNA ptr;
|
||||
RNA_pointer_create(id, &RNA_NodeSocketInterface, sock, &ptr);
|
||||
sock->typeinfo->interface_draw_color(C, &ptr, r_color);
|
||||
if (sock->typeinfo->interface_draw_color) {
|
||||
PointerRNA ptr;
|
||||
RNA_pointer_create(id, &RNA_NodeSocketInterface, sock, &ptr);
|
||||
sock->typeinfo->interface_draw_color(C, &ptr, r_color);
|
||||
}
|
||||
else {
|
||||
copy_v4_v4(r_color, sock->typeinfo->base_color);
|
||||
}
|
||||
}
|
||||
|
||||
static void rna_NodeSocketStandard_float_range(
|
||||
|
@ -11688,10 +11698,18 @@ static void rna_def_node_socket(BlenderRNA *brna)
|
|||
RNA_def_property_ui_text(
|
||||
prop, "Subtype Label", "Label to display for the socket subtype in the UI");
|
||||
|
||||
prop = RNA_def_property(srna, "bl_base_color", PROP_FLOAT, PROP_COLOR);
|
||||
RNA_def_property_range(prop, 0.0, 1.0);
|
||||
RNA_def_property_float_sdna(prop, nullptr, "typeinfo->base_color");
|
||||
RNA_def_property_array(prop, 4);
|
||||
RNA_def_property_float_array_default(prop, default_draw_color);
|
||||
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
|
||||
RNA_def_property_ui_text(prop, "Base Color", "Color of the socket type");
|
||||
|
||||
/* draw socket */
|
||||
func = RNA_def_function(srna, "draw", nullptr);
|
||||
RNA_def_function_ui_description(func, "Draw socket");
|
||||
RNA_def_function_flag(func, FUNC_REGISTER);
|
||||
RNA_def_function_flag(func, PROP_REGISTER_OPTIONAL);
|
||||
parm = RNA_def_pointer(func, "context", "Context", "", "");
|
||||
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
|
||||
parm = RNA_def_property(func, "layout", PROP_POINTER, PROP_NONE);
|
||||
|
@ -11822,6 +11840,14 @@ static void rna_def_node_socket_interface(BlenderRNA *brna)
|
|||
RNA_def_property_ui_text(
|
||||
prop, "Subtype Label", "Label to display for the socket subtype in the UI");
|
||||
|
||||
prop = RNA_def_property(srna, "bl_base_color", PROP_FLOAT, PROP_COLOR);
|
||||
RNA_def_property_range(prop, 0.0, 1.0);
|
||||
RNA_def_property_float_sdna(prop, nullptr, "typeinfo->base_color");
|
||||
RNA_def_property_array(prop, 4);
|
||||
RNA_def_property_float_array_default(prop, default_draw_color);
|
||||
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
|
||||
RNA_def_property_ui_text(prop, "Base Color", "Color of the socket type");
|
||||
|
||||
func = RNA_def_function(srna, "draw", nullptr);
|
||||
RNA_def_function_ui_description(func, "Draw template settings");
|
||||
RNA_def_function_flag(func, FUNC_REGISTER_OPTIONAL);
|
||||
|
|
Loading…
Reference in New Issue
Add comment saying that this is only used when
draw_color
is null, or when the context is not available, or when there is no socket instance.Why
base
btw?I was thinking of how
base_cpp_type
andgeometry_nodes_cpp_type
works. It's implied that the complex type/color is a variation of the base type/color, even though they can be totally separate.No strong feelings about the name, could be
simple_color
or justcolor
. Will add more comments.Would use just
color
for now.