From f7ef68514bc2ee1abf902807702effe04f2e0dff Mon Sep 17 00:00:00 2001 From: Charlie Jolly Date: Mon, 11 Oct 2021 23:02:17 +0100 Subject: Geometry Nodes: Add Color input node Adds a color input node with picker. Differential Revision: https://developer.blender.org/D12793 --- source/blender/blenkernel/BKE_node.h | 1 + source/blender/blenkernel/intern/node.cc | 1 + source/blender/makesdna/DNA_node_types.h | 4 ++ source/blender/makesrna/intern/rna_nodetree.c | 13 +++++ source/blender/nodes/CMakeLists.txt | 1 + source/blender/nodes/NOD_function.h | 1 + source/blender/nodes/NOD_static_types.h | 1 + .../nodes/function/nodes/node_fn_input_color.cc | 65 ++++++++++++++++++++++ 8 files changed, 87 insertions(+) create mode 100644 source/blender/nodes/function/nodes/node_fn_input_color.cc (limited to 'source') diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h index e0aeb6e875f..81cf1ed180f 100644 --- a/source/blender/blenkernel/BKE_node.h +++ b/source/blender/blenkernel/BKE_node.h @@ -1550,6 +1550,7 @@ int ntreeTexExecTree(struct bNodeTree *ntree, #define FN_NODE_RANDOM_VALUE 1214 #define FN_NODE_ROTATE_EULER 1215 #define FN_NODE_ALIGN_EULER_TO_VECTOR 1216 +#define FN_NODE_INPUT_COLOR 1217 /** \} */ diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 41f9bf46b81..3e577bc29a3 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -5841,6 +5841,7 @@ static void registerFunctionNodes() register_node_type_fn_input_special_characters(); register_node_type_fn_input_string(); register_node_type_fn_input_vector(); + register_node_type_fn_input_color(); register_node_type_fn_random_value(); register_node_type_fn_rotate_euler(); register_node_type_fn_string_length(); diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h index 74465c4bbe0..affe017feed 100644 --- a/source/blender/makesdna/DNA_node_types.h +++ b/source/blender/makesdna/DNA_node_types.h @@ -1295,6 +1295,10 @@ typedef struct NodeInputVector { float vector[3]; } NodeInputVector; +typedef struct NodeInputColor { + float color[4]; +} NodeInputColor; + typedef struct NodeInputString { char *string; } NodeInputString; diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 79fae204e34..f52173b45d4 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -4988,6 +4988,19 @@ static void def_texture(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } +static void def_fn_input_color(StructRNA *srna) +{ + PropertyRNA *prop; + + RNA_def_struct_sdna_from(srna, "NodeInputColor", "storage"); + + prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 4); + RNA_def_property_float_sdna(prop, NULL, "color"); + RNA_def_property_ui_text(prop, "Color", ""); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); +} + static void def_fn_input_vector(StructRNA *srna) { PropertyRNA *prop; diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt index a4e8df3164c..f22b890b243 100644 --- a/source/blender/nodes/CMakeLists.txt +++ b/source/blender/nodes/CMakeLists.txt @@ -142,6 +142,7 @@ set(SRC function/nodes/node_fn_input_special_characters.cc function/nodes/node_fn_input_string.cc function/nodes/node_fn_input_vector.cc + function/nodes/node_fn_input_color.cc function/nodes/node_fn_random_value.cc function/nodes/node_fn_rotate_euler.cc function/nodes/node_fn_string_length.cc diff --git a/source/blender/nodes/NOD_function.h b/source/blender/nodes/NOD_function.h index 395a2d68b53..999162b1803 100644 --- a/source/blender/nodes/NOD_function.h +++ b/source/blender/nodes/NOD_function.h @@ -29,6 +29,7 @@ void register_node_type_fn_float_to_int(void); void register_node_type_fn_input_special_characters(void); void register_node_type_fn_input_string(void); void register_node_type_fn_input_vector(void); +void register_node_type_fn_input_color(void); void register_node_type_fn_random_value(void); void register_node_type_fn_rotate_euler(void); void register_node_type_fn_string_length(void); diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h index e43f471d1e3..d4cc7b42292 100644 --- a/source/blender/nodes/NOD_static_types.h +++ b/source/blender/nodes/NOD_static_types.h @@ -269,6 +269,7 @@ DefNode(FunctionNode, FN_NODE_ALIGN_EULER_TO_VECTOR, def_fn_align_euler_to_vecto DefNode(FunctionNode, FN_NODE_BOOLEAN_MATH, def_boolean_math, "BOOLEAN_MATH", BooleanMath, "Boolean Math", "") DefNode(FunctionNode, FN_NODE_FLOAT_COMPARE, def_float_compare, "FLOAT_COMPARE", FloatCompare, "Compare Floats", "") DefNode(FunctionNode, FN_NODE_FLOAT_TO_INT, def_float_to_int, "FLOAT_TO_INT", FloatToInt, "Float to Integer", "") +DefNode(FunctionNode, FN_NODE_INPUT_COLOR, def_fn_input_color, "INPUT_COLOR", InputColor, "Color", "") DefNode(FunctionNode, FN_NODE_INPUT_SPECIAL_CHARACTERS, 0, "INPUT_SPECIAL_CHARACTERS", InputSpecialCharacters, "Special Characters", "") DefNode(FunctionNode, FN_NODE_INPUT_STRING, def_fn_input_string, "INPUT_STRING", InputString, "String", "") DefNode(FunctionNode, FN_NODE_INPUT_VECTOR, def_fn_input_vector, "INPUT_VECTOR", InputVector, "Vector", "") diff --git a/source/blender/nodes/function/nodes/node_fn_input_color.cc b/source/blender/nodes/function/nodes/node_fn_input_color.cc new file mode 100644 index 00000000000..5dc211da1b2 --- /dev/null +++ b/source/blender/nodes/function/nodes/node_fn_input_color.cc @@ -0,0 +1,65 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "node_function_util.hh" + +#include "UI_interface.h" +#include "UI_resources.h" + +namespace blender::nodes { + +static void fn_node_input_color_declare(NodeDeclarationBuilder &b) +{ + b.add_output("Color"); +}; + +static void fn_node_input_color_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) +{ + uiTemplateColorPicker(layout, ptr, "color", true, false, false, true); + uiItemR(layout, ptr, "color", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_NONE); +} + +static void fn_node_color_input_build_multi_function( + blender::nodes::NodeMultiFunctionBuilder &builder) +{ + bNode &bnode = builder.node(); + NodeInputColor *node_storage = static_cast(bnode.storage); + blender::ColorGeometry4f color = (ColorGeometry4f)node_storage->color; + builder.construct_and_set_matching_fn>(color); +} + +static void fn_node_input_color_init(bNodeTree *UNUSED(ntree), bNode *node) +{ + NodeInputColor *data = (NodeInputColor *)MEM_callocN(sizeof(NodeInputColor), __func__); + copy_v4_fl4(data->color, 0.5f, 0.5f, 0.5f, 1.0f); + node->storage = data; +} + +} // namespace blender::nodes + +void register_node_type_fn_input_color() +{ + static bNodeType ntype; + + fn_node_type_base(&ntype, FN_NODE_INPUT_COLOR, "Color", NODE_CLASS_INPUT, 0); + ntype.declare = blender::nodes::fn_node_input_color_declare; + node_type_init(&ntype, blender::nodes::fn_node_input_color_init); + node_type_storage( + &ntype, "NodeInputColor", node_free_standard_storage, node_copy_standard_storage); + ntype.build_multi_function = blender::nodes::fn_node_color_input_build_multi_function; + ntype.draw_buttons = blender::nodes::fn_node_input_color_layout; + nodeRegisterType(&ntype); +} -- cgit v1.2.3