Commit: cfa48c84d06ca8197f86b6d3ceef8a2c7c311a82 Author: Hans Goudey Date: Mon Feb 8 15:09:49 2021 -0600 Branches: master https://developer.blender.org/rBcfa48c84d06ca8197f86b6d3ceef8a2c7c311a82
Cleanup: Register node property layout callbacks in files This commit moves the property layout callbacks for node types to their implementation files from `drawnode.c`. This was proposed a while ago in T75724. **Benefits** - Fewer files need to be changed when adding a new node. - Makes it possible to reuse functions from the node's implementation in the layout code. - Except for RNA, all of the node "inputs" are in the same place. - Code gets shorter overall, avoids the large switch statements. **Downsides** - Requires including two UI headers. - Requires adding an editors dependency to the nodes folder. This commit only changes function nodes and geometry nodes, more can be moved later. Differential Revision: https://developer.blender.org/D10352 =================================================================== M source/blender/editors/include/UI_interface_icons.h M source/blender/editors/space_node/drawnode.c M source/blender/nodes/CMakeLists.txt M source/blender/nodes/function/nodes/node_fn_boolean_math.cc M source/blender/nodes/function/nodes/node_fn_float_compare.cc M source/blender/nodes/function/nodes/node_fn_input_vector.cc M source/blender/nodes/function/nodes/node_fn_switch.cc M source/blender/nodes/geometry/nodes/node_geo_align_rotation_to_vector.cc M source/blender/nodes/geometry/nodes/node_geo_attribute_color_ramp.cc M source/blender/nodes/geometry/nodes/node_geo_attribute_compare.cc M source/blender/nodes/geometry/nodes/node_geo_attribute_fill.cc M source/blender/nodes/geometry/nodes/node_geo_attribute_math.cc M source/blender/nodes/geometry/nodes/node_geo_attribute_mix.cc M source/blender/nodes/geometry/nodes/node_geo_attribute_proximity.cc M source/blender/nodes/geometry/nodes/node_geo_attribute_randomize.cc M source/blender/nodes/geometry/nodes/node_geo_attribute_sample_texture.cc M source/blender/nodes/geometry/nodes/node_geo_attribute_vector_math.cc M source/blender/nodes/geometry/nodes/node_geo_boolean.cc M source/blender/nodes/geometry/nodes/node_geo_collection_info.cc M source/blender/nodes/geometry/nodes/node_geo_object_info.cc M source/blender/nodes/geometry/nodes/node_geo_point_distribute.cc M source/blender/nodes/geometry/nodes/node_geo_point_instance.cc M source/blender/nodes/geometry/nodes/node_geo_point_rotate.cc M source/blender/nodes/geometry/nodes/node_geo_point_scale.cc M source/blender/nodes/geometry/nodes/node_geo_point_translate.cc M source/blender/nodes/geometry/nodes/node_geo_points_to_volume.cc M source/blender/nodes/geometry/nodes/node_geo_subdivision_surface.cc M source/blender/nodes/geometry/nodes/node_geo_triangulate.cc M source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc =================================================================== diff --git a/source/blender/editors/include/UI_interface_icons.h b/source/blender/editors/include/UI_interface_icons.h index d77a87e7200..4d860be285d 100644 --- a/source/blender/editors/include/UI_interface_icons.h +++ b/source/blender/editors/include/UI_interface_icons.h @@ -23,6 +23,9 @@ #pragma once +/* Required for enum iconSizes which can't be forward declared if this file is included in C++. */ +#include "DNA_ID.h" + #ifdef __cplusplus extern "C" { #endif @@ -34,8 +37,6 @@ struct PreviewImage; struct Scene; struct bContext; -enum eIconSizes; - typedef struct IconFile { struct IconFile *next, *prev; char filename[256]; /* FILE_MAXFILE size */ diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 132dcd8a9fb..2d65302c656 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -3126,393 +3126,6 @@ static void node_texture_set_butfunc(bNodeType *ntype) } } -/* ****************** BUTTON CALLBACKS FOR GEOMETRY NODES ***************** */ - -static void node_geometry_buts_boolean_math(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) -{ - uiItemR(layout, ptr, "operation", DEFAULT_FLAGS, "", ICON_NONE); -} - -static void node_geometry_buts_attribute_compare(uiLayout *layout, - bContext *UNUSED(C), - PointerRNA *ptr) -{ - uiItemR(layout, ptr, "operation", DEFAULT_FLAGS, "", ICON_NONE); - uiItemR(layout, ptr, "input_type_a", DEFAULT_FLAGS, IFACE_("Type A"), ICON_NONE); - uiItemR(layout, ptr, "input_type_b", DEFAULT_FLAGS, IFACE_("Type B"), ICON_NONE); -} - -static void node_geometry_buts_subdivision_surface(uiLayout *layout, - bContext *UNUSED(C), - PointerRNA *UNUSED(ptr)) -{ -#ifndef WITH_OPENSUBDIV - uiItemL(layout, IFACE_("Disabled, built without OpenSubdiv"), ICON_ERROR); -#else - UNUSED_VARS(layout); -#endif -} - -static void node_geometry_buts_triangulate(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) -{ - uiItemR(layout, ptr, "quad_method", DEFAULT_FLAGS, "", ICON_NONE); - uiItemR(layout, ptr, "ngon_method", DEFAULT_FLAGS, "", ICON_NONE); -} - -static void node_geometry_buts_random_attribute(uiLayout *layout, - bContext *UNUSED(C), - PointerRNA *ptr) -{ - uiItemR(layout, ptr, "data_type", DEFAULT_FLAGS, "", ICON_NONE); -} - -static bool node_attribute_math_operation_use_input_b(const NodeMathOperation operation) -{ - switch (operation) { - case NODE_MATH_ADD: - case NODE_MATH_SUBTRACT: - case NODE_MATH_MULTIPLY: - case NODE_MATH_DIVIDE: - case NODE_MATH_POWER: - case NODE_MATH_LOGARITHM: - case NODE_MATH_MINIMUM: - case NODE_MATH_MAXIMUM: - case NODE_MATH_LESS_THAN: - case NODE_MATH_GREATER_THAN: - case NODE_MATH_MODULO: - case NODE_MATH_ARCTAN2: - case NODE_MATH_SNAP: - case NODE_MATH_WRAP: - case NODE_MATH_COMPARE: - case NODE_MATH_MULTIPLY_ADD: - case NODE_MATH_PINGPONG: - case NODE_MATH_SMOOTH_MIN: - case NODE_MATH_SMOOTH_MAX: - return true; - case NODE_MATH_SINE: - case NODE_MATH_COSINE: - case NODE_MATH_TANGENT: - case NODE_MATH_ARCSINE: - case NODE_MATH_ARCCOSINE: - case NODE_MATH_ARCTANGENT: - case NODE_MATH_ROUND: - case NODE_MATH_ABSOLUTE: - case NODE_MATH_FLOOR: - case NODE_MATH_CEIL: - case NODE_MATH_FRACTION: - case NODE_MATH_SQRT: - case NODE_MATH_INV_SQRT: - case NODE_MATH_SIGN: - case NODE_MATH_EXPONENT: - case NODE_MATH_RADIANS: - case NODE_MATH_DEGREES: - case NODE_MATH_SINH: - case NODE_MATH_COSH: - case NODE_MATH_TANH: - case NODE_MATH_TRUNC: - return false; - } - BLI_assert(false); - return false; -} - -static void node_geometry_buts_attribute_math(uiLayout *layout, - bContext *UNUSED(C), - PointerRNA *ptr) -{ - bNode *node = (bNode *)ptr->data; - NodeAttributeMath *node_storage = (NodeAttributeMath *)node->storage; - NodeMathOperation operation = (NodeMathOperation)node_storage->operation; - - uiItemR(layout, ptr, "operation", DEFAULT_FLAGS, "", ICON_NONE); - uiItemR(layout, ptr, "input_type_a", DEFAULT_FLAGS, IFACE_("Type A"), ICON_NONE); - - /* These "use input b / c" checks are copied from the node's code. - * They could be de-duplicated if the drawing code was moved to the node's file. */ - if (node_attribute_math_operation_use_input_b(operation)) { - uiItemR(layout, ptr, "input_type_b", DEFAULT_FLAGS, IFACE_("Type B"), ICON_NONE); - } - if (ELEM(operation, - NODE_MATH_MULTIPLY_ADD, - NODE_MATH_SMOOTH_MIN, - NODE_MATH_SMOOTH_MAX, - NODE_MATH_WRAP, - NODE_MATH_COMPARE)) { - uiItemR(layout, ptr, "input_type_c", DEFAULT_FLAGS, IFACE_("Type C"), ICON_NONE); - } -} - -static void node_geometry_buts_attribute_vector_math(uiLayout *layout, - bContext *UNUSED(C), - PointerRNA *ptr) -{ - bNode *node = (bNode *)ptr->data; - NodeAttributeVectorMath *node_storage = (NodeAttributeVectorMath *)node->storage; - - uiItemR(layout, ptr, "operation", DEFAULT_FLAGS, "", ICON_NONE); - uiItemR(layout, ptr, "input_type_a", DEFAULT_FLAGS, IFACE_("Type A"), ICON_NONE); - - /* These "use input b / c" checks are copied from the node's code. - * They could be de-duplicated if the drawing code was moved to the node's file. */ - if (!ELEM(node_storage->operation, - NODE_VECTOR_MATH_NORMALIZE, - NODE_VECTOR_MATH_FLOOR, - NODE_VECTOR_MATH_CEIL, - NODE_VECTOR_MATH_FRACTION, - NODE_VECTOR_MATH_ABSOLUTE, - NODE_VECTOR_MATH_SINE, - NODE_VECTOR_MATH_COSINE, - NODE_VECTOR_MATH_TANGENT, - NODE_VECTOR_MATH_LENGTH)) { - uiItemR(layout, ptr, "input_type_b", DEFAULT_FLAGS, IFACE_("Type B"), ICON_NONE); - } - if (ELEM(node_storage->operation, NODE_VECTOR_MATH_WRAP)) { - uiItemR(layout, ptr, "input_type_c", DEFAULT_FLAGS, IFACE_("Type C"), ICON_NONE); - } -} - -static void node_geometry_buts_point_instance(uiLayout *layout, - bContext *UNUSED(C), - PointerRNA *ptr) -{ - uiItemR(layout, ptr, "instance_type", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, NULL, ICON_NONE); - if (RNA_enum_get(ptr, "instance_type") == GEO_NODE_POINT_INSTANCE_TYPE_COLLECTION) { - uiItemR(layout, ptr, "use_whole_collection", DEFAULT_FLAGS, NULL, ICON_NONE); - } -} - -static void node_geometry_buts_attribute_fill(uiLayout *layout, - bContext *UNUSED(C), - PointerRNA *ptr) -{ - uiItemR(layout, ptr, "data_type", DEFAULT_FLAGS, "", ICON_NONE); - // uiItemR(layout, ptr, "domain", DEFAULT_FLAGS, "", ICON_NONE); -} - -static void node_geometry_buts_attribute_mix(uiLayout *layout, - bContext *UNUSED(C), - PointerRNA *ptr) -{ - uiItemR(layout, ptr, "blend_type", DEFAULT_FLAGS, "", ICON_NONE); - uiLayout *col = uiLayoutColumn(layout, false); - uiItemR(col, ptr, "input_type_factor", DEFAULT_FLAGS, IFACE_("Factor"), ICON_NONE); - uiItemR(col, ptr, "input_type_a", DEFAULT_FLAGS, IFACE_("A"), ICON_NONE); - uiItemR(col, ptr, "input_type_b", DEFAULT_FLAGS, IFACE_("B"), ICON_NONE); -} - -static void node_geometry_buts_attribute_point_distribute(uiLayout *layout, - bContext *UNUSED(C), - PointerRNA *ptr) -{ - uiItemR(layout, ptr, "distribute_method", DEFAULT_FLAGS, "", ICON_NONE); -} - -static void node_geometry_buts_attribute_color_ramp(uiLayout *layout, - bContext *UNUSED(C), - PointerRNA *ptr) -{ - uiTemplateColorRamp(layout, ptr, "color_ramp", 0); -} - -static void node_geometry_buts_point_rotate(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) -{ - NodeGeometryRotatePoints *storage = (NodeGeometryRotatePoints *)((bNode *)ptr->data)->storage; - - uiItemR(layout, ptr, "type", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, NULL, ICON_NONE); - uiItemR(layout, ptr, "space", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, NULL, ICON_NONE); - - uiLayout *col = uiLayoutColumn(layout, false); - if (storage->type == GEO_NODE_POINT_ROTATE_TYPE_AXIS_ANGLE) { - uiItemR(col, ptr, "input_type_axis", DEFAULT_FLAGS, IFACE_("Axis"), ICON_NONE); - uiItemR(col, ptr, "input_type_angle", DEFAULT_FLAGS, IFACE_("Angle"), ICON_NONE); - } - else { - uiItemR(col, ptr, "input_type_rotation", DEFAULT_FLAGS, IFACE_("Rotation"), ICON_NONE); - } -} - -static void node_geometry_buts_align_rotation_to_vector(uiLayout *layout, - bContext *UNUSED(C), - PointerRNA *ptr) -{ - uiItemR(layout, ptr, "axis", DEFAULT_FLAGS | UI_ITEM_R_EXPAND, NULL, ICON_NONE); - uiItemR(layout, ptr, "pivot_axis", DEFAULT_FLAGS, IFACE_("Pivot"), ICON_NONE); - uiLayout *col = uiLayoutColumn(layout, false); - uiItemR(col, ptr, "input_type_factor", DEFAULT_FLAGS, IFACE_("Factor"), ICON_NONE); - uiItemR(col, ptr, "input_type_vector", DEFAULT_FLAGS, IFACE_("Vector"), ICON_NONE); -} -static void node_geometry_buts_point_translate(uiLayout *layout, - bContext *UNUSED(C), - PointerRNA *ptr) -{ - uiItemR(layout, ptr, "input_type", DEFAULT_FLAGS, IFACE_("Type"), ICON_NONE); -} - -static void node_geometry_buts_point_scale(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) -{ - uiItemR(layout, ptr, "input_type", DEFAULT_FLAGS, IFACE_("Ty @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list [email protected] https://lists.blender.org/mailman/listinfo/bf-blender-cvs
