diff options
Diffstat (limited to 'source/blender/blenkernel/intern/callbacks.c')
-rw-r--r-- | source/blender/blenkernel/intern/callbacks.c | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/callbacks.c b/source/blender/blenkernel/intern/callbacks.c index cbecba2efe1..367fed818af 100644 --- a/source/blender/blenkernel/intern/callbacks.c +++ b/source/blender/blenkernel/intern/callbacks.c @@ -25,18 +25,55 @@ #include "MEM_guardedalloc.h" +#include "RNA_types.h" +#include "RNA_access.h" + static ListBase callback_slots[BKE_CB_EVT_TOT] = {{NULL}}; -void BKE_callback_exec(struct Main *bmain, struct ID *self, eCbEvent evt) +void BKE_callback_exec(struct Main *bmain, + struct PointerRNA **pointers, + const int num_pointers, + eCbEvent evt) { ListBase *lb = &callback_slots[evt]; bCallbackFuncStore *funcstore; for (funcstore = lb->first; funcstore; funcstore = funcstore->next) { - funcstore->func(bmain, self, funcstore->arg); + funcstore->func(bmain, pointers, num_pointers, funcstore->arg); } } +void BKE_callback_exec_null(struct Main *bmain, eCbEvent evt) +{ + BKE_callback_exec(bmain, NULL, 0, evt); +} + +void BKE_callback_exec_id(struct Main *bmain, struct ID *id, eCbEvent evt) +{ + PointerRNA id_ptr; + RNA_id_pointer_create(id, &id_ptr); + + PointerRNA *pointers[1] = {&id_ptr}; + + BKE_callback_exec(bmain, pointers, 1, evt); +} + +void BKE_callback_exec_id_depsgraph(struct Main *bmain, + struct ID *id, + struct Depsgraph *depsgraph, + eCbEvent evt) +{ + PointerRNA id_ptr; + RNA_id_pointer_create(id, &id_ptr); + + PointerRNA depsgraph_ptr; + RNA_pointer_create(NULL, &RNA_Depsgraph, depsgraph, &depsgraph_ptr); + + PointerRNA *pointers[2] = {&id_ptr, &depsgraph_ptr}; + + BKE_callback_exec(bmain, pointers, 2, evt); +} + void BKE_callback_add(bCallbackFuncStore *funcstore, eCbEvent evt) { ListBase *lb = &callback_slots[evt]; |