diff --git a/source/blender/depsgraph/DEG_depsgraph_query.hh b/source/blender/depsgraph/DEG_depsgraph_query.hh index 3b1d6dc6a32..3f756f0abb4 100644 --- a/source/blender/depsgraph/DEG_depsgraph_query.hh +++ b/source/blender/depsgraph/DEG_depsgraph_query.hh @@ -10,6 +10,7 @@ #pragma once +#include "BLI_function_ref.hh" #include "BLI_iterator.h" #include "BLI_utildefines.h" @@ -251,10 +252,9 @@ void DEG_iterator_ids_end(BLI_Iterator *iter); /** \name DEG traversal * \{ */ -using DEGForeachIDCallback = void (*)(ID *id, void *user_data); -using DEGForeachIDComponentCallback = void (*)(ID *id, - eDepsObjectComponentType component, - void *user_data); +using DEGForeachIDCallback = blender::FunctionRef; +using DEGForeachIDComponentCallback = + blender::FunctionRef; /** * \note Modifies runtime flags in depsgraph nodes, @@ -262,12 +262,10 @@ using DEGForeachIDComponentCallback = void (*)(ID *id, */ void DEG_foreach_ancestor_ID(const Depsgraph *depsgraph, const ID *id, - DEGForeachIDCallback callback, - void *user_data); + DEGForeachIDCallback callback); void DEG_foreach_dependent_ID(const Depsgraph *depsgraph, const ID *id, - DEGForeachIDCallback callback, - void *user_data); + DEGForeachIDCallback callback); /** * Starts traversal from given component of the given ID, invokes callback for every other @@ -288,9 +286,8 @@ void DEG_foreach_dependent_ID_component(const Depsgraph *depsgraph, const ID *id, eDepsObjectComponentType source_component_type, int flags, - DEGForeachIDComponentCallback callback, - void *user_data); + DEGForeachIDComponentCallback callback); -void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback, void *user_data); +void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback); /** \} */ diff --git a/source/blender/depsgraph/intern/depsgraph_query_foreach.cc b/source/blender/depsgraph/intern/depsgraph_query_foreach.cc index 32ad48597c3..4265eb6f818 100644 --- a/source/blender/depsgraph/intern/depsgraph_query_foreach.cc +++ b/source/blender/depsgraph/intern/depsgraph_query_foreach.cc @@ -115,7 +115,6 @@ void deg_foreach_dependent_operation(const Depsgraph * /*graph*/, struct ForeachIDComponentData { DEGForeachIDComponentCallback callback; - void *user_data; IDNode *target_id_node; Set visited; }; @@ -126,8 +125,7 @@ void deg_foreach_dependent_component_callback(OperationNode *op_node, void *user ComponentNode *comp_node = op_node->owner; IDNode *id_node = comp_node->owner; if (id_node != user_data->target_id_node && !user_data->visited.contains(comp_node)) { - user_data->callback( - id_node->id_orig, nodeTypeToObjectComponent(comp_node->type), user_data->user_data); + user_data->callback(id_node->id_orig, nodeTypeToObjectComponent(comp_node->type)); user_data->visited.add_new(comp_node); } } @@ -136,12 +134,10 @@ void deg_foreach_dependent_ID_component(const Depsgraph *graph, const ID *id, eDepsObjectComponentType source_component_type, int flags, - DEGForeachIDComponentCallback callback, - void *user_data) + DEGForeachIDComponentCallback callback) { ForeachIDComponentData data; data.callback = callback; - data.user_data = user_data; data.target_id_node = graph->find_id_node(id); deg_foreach_dependent_operation(graph, data.target_id_node, @@ -153,7 +149,6 @@ void deg_foreach_dependent_ID_component(const Depsgraph *graph, struct ForeachIDData { DEGForeachIDCallback callback; - void *user_data; IDNode *target_id_node; Set visited; }; @@ -164,28 +159,21 @@ void deg_foreach_dependent_ID_callback(OperationNode *op_node, void *user_data_v ComponentNode *comp_node = op_node->owner; IDNode *id_node = comp_node->owner; if (id_node != user_data->target_id_node && !user_data->visited.contains(id_node)) { - user_data->callback(id_node->id_orig, user_data->user_data); + user_data->callback(id_node->id_orig); user_data->visited.add_new(id_node); } } -void deg_foreach_dependent_ID(const Depsgraph *graph, - const ID *id, - DEGForeachIDCallback callback, - void *user_data) +void deg_foreach_dependent_ID(const Depsgraph *graph, const ID *id, DEGForeachIDCallback callback) { ForeachIDData data; data.callback = callback; - data.user_data = user_data; data.target_id_node = graph->find_id_node(id); deg_foreach_dependent_operation( graph, data.target_id_node, DEG_OB_COMP_ANY, 0, deg_foreach_dependent_ID_callback, &data); } -void deg_foreach_ancestor_ID(const Depsgraph *graph, - const ID *id, - DEGForeachIDCallback callback, - void *user_data) +void deg_foreach_ancestor_ID(const Depsgraph *graph, const ID *id, DEGForeachIDCallback callback) { /* Start with getting ID node from the graph. */ IDNode *target_id_node = graph->find_id_node(id); @@ -216,7 +204,7 @@ void deg_foreach_ancestor_ID(const Depsgraph *graph, IDNode *id_node = comp_node->owner; if (!visited.contains(id_node)) { /* TODO(sergey): Is it orig or CoW? */ - callback(id_node->id_orig, user_data); + callback(id_node->id_orig); visited.add_new(id_node); } /* Schedule incoming operation nodes. */ @@ -248,10 +236,10 @@ void deg_foreach_ancestor_ID(const Depsgraph *graph, } } -void deg_foreach_id(const Depsgraph *depsgraph, DEGForeachIDCallback callback, void *user_data) +void deg_foreach_id(const Depsgraph *depsgraph, DEGForeachIDCallback callback) { for (const IDNode *id_node : depsgraph->id_nodes) { - callback(id_node->id_orig, user_data); + callback(id_node->id_orig); } } @@ -260,32 +248,29 @@ void deg_foreach_id(const Depsgraph *depsgraph, DEGForeachIDCallback callback, v void DEG_foreach_dependent_ID(const Depsgraph *depsgraph, const ID *id, - DEGForeachIDCallback callback, - void *user_data) + DEGForeachIDCallback callback) { - deg::deg_foreach_dependent_ID((const deg::Depsgraph *)depsgraph, id, callback, user_data); + deg::deg_foreach_dependent_ID((const deg::Depsgraph *)depsgraph, id, callback); } void DEG_foreach_dependent_ID_component(const Depsgraph *depsgraph, const ID *id, eDepsObjectComponentType source_component_type, int flags, - DEGForeachIDComponentCallback callback, - void *user_data) + DEGForeachIDComponentCallback callback) { deg::deg_foreach_dependent_ID_component( - (const deg::Depsgraph *)depsgraph, id, source_component_type, flags, callback, user_data); + (const deg::Depsgraph *)depsgraph, id, source_component_type, flags, callback); } void DEG_foreach_ancestor_ID(const Depsgraph *depsgraph, const ID *id, - DEGForeachIDCallback callback, - void *user_data) + DEGForeachIDCallback callback) { - deg::deg_foreach_ancestor_ID((const deg::Depsgraph *)depsgraph, id, callback, user_data); + deg::deg_foreach_ancestor_ID((const deg::Depsgraph *)depsgraph, id, callback); } -void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback, void *user_data) +void DEG_foreach_ID(const Depsgraph *depsgraph, DEGForeachIDCallback callback) { - deg::deg_foreach_id((const deg::Depsgraph *)depsgraph, callback, user_data); + deg::deg_foreach_id((const deg::Depsgraph *)depsgraph, callback); } diff --git a/source/blender/editors/transform/transform_convert_object.cc b/source/blender/editors/transform/transform_convert_object.cc index 0935c311f1f..391a6bae2c2 100644 --- a/source/blender/editors/transform/transform_convert_object.cc +++ b/source/blender/editors/transform/transform_convert_object.cc @@ -303,9 +303,7 @@ static void trans_object_base_deps_flag_prepare(const Scene *scene, ViewLayer *v } } -static void set_trans_object_base_deps_flag_cb(ID *id, - eDepsObjectComponentType component, - void * /*user_data*/) +static void set_trans_object_base_deps_flag_cb(ID *id, eDepsObjectComponentType component) { /* Here we only handle object IDs. */ if (GS(id->name) != ID_OB) { @@ -324,8 +322,7 @@ static void flush_trans_object_base_deps_flag(Depsgraph *depsgraph, Object *obje &object->id, DEG_OB_COMP_TRANSFORM, DEG_FOREACH_COMPONENT_IGNORE_TRANSFORM_SOLVERS, - set_trans_object_base_deps_flag_cb, - nullptr); + set_trans_object_base_deps_flag_cb); } static void trans_object_base_deps_flag_finish(const TransInfo *t,