63#include "RNA_prototypes.hh"
116 snode->
runtime->node_can_sync_states.clear();
156 snode->
runtime->node_can_sync_states.clear();
183 snode->
runtime->node_can_sync_states.clear();
210 length += strlen(path->display_name);
222 const char *value_orig = value;
226 const int len = strlen(path->display_name);
230 memcpy(value, path->display_name,
len);
270 if (path && path->
prev) {
277 const bNode &query_node)
282 snode, compute_context_cache, query_node);
283 if (!compute_context) {
294 for (
const ComputeContext *context = compute_context; context !=
nullptr;
295 context = context->parent())
315 std::reverse(node_ids.
begin(), node_ids.
end());
317 const bNestedNodeRef *nested_node_ref = root_tree.nested_node_ref_from_node_id_path(node_ids);
318 if (nested_node_ref ==
nullptr) {
321 found.
id = nested_node_ref->
id;
330 if (snode.
id ==
nullptr) {
363 if (used_modifier ==
nullptr) {
374 if (!object_and_modifier) {
378 if (object_and_modifier->object != object_orig) {
389 if (!output_node_ptr) {
392 const bNode &output_node = *output_node_ptr;
400 parent_compute_context, output_node, storage.inspection_index);
406 parent_compute_context, output_node, storage.inspection_index);
414 parent_compute_context->
hash() :
417 return compute_context_for_closure_evaluation(parent_compute_context,
418 output_node.output_socket(0),
419 compute_context_cache,
456 const char *group_node_name = tree_path[
i + 1]->node_name;
458 if (group_node ==
nullptr) {
462 if (tree_zones ==
nullptr) {
483 std::optional<ed::space_node::ObjectAndModifier> object_and_modifier =
485 if (!object_and_modifier) {
488 return &compute_context_cache.
for_modifier(
nullptr, *object_and_modifier->nmd);
512 compute_context_cache);
518 return edittree_context;
560 snode->
runtime = MEM_new<SpaceNode_Runtime>(__func__);
627 region->
v2d.
min[0] = 1.0f;
628 region->
v2d.
min[1] = 1.0f;
630 region->
v2d.
max[0] = 32000.0f;
631 region->
v2d.
max[1] = 32000.0f;
664 if (
ELEM(
nullptr, ntree,
id)) {
667 for (
const bNode *node : ntree->all_nodes()) {
668 if (node->id ==
id) {
863 snoden->
runtime = MEM_new<SpaceNode_Runtime>(__func__);
960 if (snode ==
nullptr) {
1043 if (path.endswith(
".csv") || path.endswith(
".obj") || path.endswith(
".ply") ||
1044 path.endswith(
".stl") || path.endswith(
".txt") || path.endswith(
".vdb"))
1067 const bNodeTree *source_ntree = drag_data->tree;
1068 if (target_ntree != source_ntree) {
1085 if (panel && panel->header_toggle_socket()) {
1107 const bNodeTree *source_ntree = drag_data->tree;
1108 if (target_ntree != source_ntree) {
1118 if (panel->header_toggle_socket()) {
1174 socket = panel->header_toggle_socket();
1216 socket = panel->header_toggle_socket();
1225 return "Error: Unsupported socket.";
1247 "NODE_OT_add_object",
1253 "NODE_OT_add_collection",
1259 "NODE_OT_add_group",
1265 "NODE_OT_add_image",
1277 "NODE_OT_add_material",
1285 "NODE_OT_add_import_node",
1291 "NODE_OT_add_group_input_node",
1297 "NODE_OT_add_group_input_node",
1330 switch (wmn->
data) {
1348 switch (wmn->
data) {
1407 "selected_nodes",
"active_node",
"light",
"material",
"world",
nullptr};
1446 &RNA_NodeInstanceHash,
1491 if (snode->
id == old_id) {
1499 snode->
from =
nullptr;
1504 if (snode->
from == old_id) {
1505 if (new_id ==
nullptr) {
1508 snode->
from = new_id;
1512 if ((
ID *)snode->
gpd == old_id) {
1543 for (; path; path = path_next) {
1544 path_next = path->
next;
1578 mappings.
iter([&](
ID *old_id,
ID *new_id) {
1589 bool is_embedded_nodetree = snode->
id !=
nullptr && allow_pointer_access &&
1598 if (is_embedded_nodetree) {
1600 if (path !=
nullptr) {
1609 if (path !=
nullptr) {
1617 if (path !=
nullptr) {
1635 if (!is_readonly && snode->
id && !snode->
nodetree) {
1636 is_embedded_nodetree =
true;
1638 if (path !=
nullptr) {
1643 if (path !=
nullptr) {
1644 for (path = path->
next; path !=
nullptr; path = path->
next) {
1646 if (allow_pointer_access) {
1657 path_next = path->
next;
1716 if (tree_type ==
nullptr) {
1717 return IFACE_(
"Node Editor");
1726 if (tree_type ==
nullptr) {
1727 return ICON_NODETREE;
1743 snode->
runtime = MEM_new<SpaceNode_Runtime>(__func__);
1773 std::unique_ptr<SpaceType> st = std::make_unique<SpaceType>();
1799 st->blend_read_after_liblink =
nullptr;
Main runtime representation of an asset.
IDProperty * BKE_asset_metadata_idprop_find(const AssetMetaData *asset_data, const char *name) ATTR_WARN_UNUSED_RESULT
void CTX_data_dir_set(bContextDataResult *result, const char **dir)
bool CTX_data_equals(const char *member, const char *str)
void CTX_data_pointer_set(bContextDataResult *result, ID *id, StructRNA *type, void *data)
bool CTX_data_dir(const char *member)
void CTX_data_id_pointer_set(bContextDataResult *result, ID *id)
void CTX_data_type_set(bContextDataResult *result, ContextDataType type)
SpaceNode * CTX_wm_space_node(const bContext *C)
@ CTX_RESULT_MEMBER_NOT_FOUND
Scene * CTX_data_scene(const bContext *C)
void CTX_data_list_add(bContextDataResult *result, ID *id, StructRNA *type, void *data)
void BKE_gpencil_blend_read_data(struct BlendDataReader *reader, struct bGPdata *gpd)
#define IDP_int_get(prop)
void id_us_ensure_real(ID *id)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_)
@ IDWALK_CB_EMBEDDED_NOT_OWNING
@ IDWALK_CB_DIRECT_WEAK_LINK
#define BKE_LIB_FOREACHID_PROCESS_ID(data_, id_, cb_flag_)
LibraryForeachIDFlag BKE_lib_query_foreachid_process_flags_get(const LibraryForeachIDData *data)
@ IDWALK_NO_ORIG_POINTERS_ACCESS
#define GEO_NODE_FOREACH_GEOMETRY_ELEMENT_OUTPUT
#define GEO_NODE_SIMULATION_OUTPUT
#define NODE_CLOSURE_OUTPUT
#define GEO_NODE_REPEAT_OUTPUT
void BKE_spacetype_register(std::unique_ptr< SpaceType > st)
ARegion * BKE_area_region_new()
ARegion * BKE_area_find_region_type(const ScrArea *area, int region_type)
#define BLI_assert_unreachable()
void BLI_kdtree_nd_ free(KDTree *tree)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var)
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_addhead(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void void void void void void BLI_duplicatelist(ListBase *dst, const ListBase *src) ATTR_NONNULL(1
MINLINE void copy_v2_v2(float r[2], const float a[2])
char * BLI_sprintfN(const char *__restrict format,...) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_PRINTF_FORMAT(1
#define STRNCPY_UTF8(dst, src)
#define BLO_write_struct(writer, struct_name, data_ptr)
#define BLO_read_struct_list(reader, struct_name, list)
#define BLO_read_struct(reader, struct_name, ptr_p)
void DEG_id_tag_update(ID *id, unsigned int flags)
bool DEG_is_original(const T *id)
T * DEG_get_original(T *id)
ID and Library types, which are fundamental for SDNA.
Object is a sort of wrapper for general info.
@ RGN_ALIGN_HIDE_WITH_PREV
@ RGN_TYPE_ASSET_SHELF_HEADER
@ SN_OVERLAY_SHOW_PREVIEWS
@ SN_OVERLAY_SHOW_WIRE_COLORS
@ SN_OVERLAY_SHOW_OVERLAYS
SpaceNodeGeometryNodesType
@ SNODE_GEOMETRY_MODIFIER
bool ED_node_is_geometry(const SpaceNode *snode)
void ED_node_set_tree_type(SpaceNode *snode, blender::bke::bNodeTreeType *typeinfo)
bool ED_node_is_compositor(const SpaceNode *snode)
void ED_node_set_active_viewer_key(SpaceNode *snode)
bool ED_node_is_shader(SpaceNode *snode)
void ED_node_composite_job(const bContext *C, bNodeTree *nodetree, Scene *scene_owner)
bool ED_node_is_texture(SpaceNode *snode)
void ED_area_tag_redraw(ScrArea *area)
void ED_area_do_mgs_subscribe_for_tool_ui(const wmRegionMessageSubscribeParams *params)
void ED_region_panels(const bContext *C, ARegion *region)
void ED_region_header(const bContext *C, ARegion *region)
void ED_region_header_init(ARegion *region)
int ED_region_generic_tools_region_snap_size(const ARegion *region, int size, int axis)
void ED_area_tag_refresh(ScrArea *area)
void ED_region_generic_tools_region_message_subscribe(const wmRegionMessageSubscribeParams *params)
int ED_region_generic_panel_region_snap_size(const ARegion *region, int size, int axis)
void ED_region_panels_init(wmWindowManager *wm, ARegion *region)
void ED_region_tag_redraw(ARegion *region)
Read Guarded memory(de)allocation.
blender::bke::bNodeTreeType * rna_node_tree_type_from_enum(int value)
int rna_node_tree_idname_to_enum(const char *idname)
const EnumPropertyItem * RNA_enum_node_tree_types_itemf_impl(bContext *C, bool *r_free)
#define UI_SIDEBAR_PANEL_WIDTH
bool UI_but_active_drop_name(const bContext *C)
void UI_drop_color_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
bool UI_but_active_drop_color(bContext *C)
void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
void UI_view2d_region_to_view(const View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
void UI_view2d_center_set(View2D *v2d, float x, float y)
#define ND_GPENCIL_EDITMODE
@ WM_DRAG_NODE_TREE_INTERFACE
#define ND_SPACE_NODE_VIEW
const ComputeContextHash & hash() const
constexpr IndexRange drop_back(int64_t n) const
void append(const T &value)
IndexRange index_range() const
AssetMetaData & get_metadata() const
const ModifierComputeContext & for_modifier(const ComputeContext *parent, const NodesModifierData &nmd)
const GroupNodeComputeContext & for_group_node(const ComputeContext *parent, int32_t node_id, const bNodeTree *tree=nullptr)
const ForeachGeometryElementZoneComputeContext & for_foreach_geometry_element_zone(const ComputeContext *parent, int32_t output_node_id, int index)
const RepeatZoneComputeContext & for_repeat_zone(const ComputeContext *parent, int32_t output_node_id, int iteration)
const ShaderComputeContext & for_shader(const ComputeContext *parent, const bNodeTree *tree)
const OperatorComputeContext & for_operator(const ComputeContext *parent)
const SimulationZoneComputeContext & for_simulation_zone(const ComputeContext *parent, int output_node_id)
const bNode * output_node() const
Vector< const bNodeTreeZone * > get_zones_to_enter_from_root(const bNodeTreeZone *zone) const
const bNodeTreeZone * get_zone_by_node(const int32_t node_id) const
const bNodeTreeZone * get_zone_by_socket(const bNodeSocket &socket) const
void iter(FunctionRef< void(ID *old_id, ID *new_id)> func) const
float length(VecOp< float, D >) RET
void * MEM_callocN(size_t len, const char *str)
void * MEM_dupallocN(const void *vmemh)
void MEM_freeN(void *vmemh)
T & get_item_as(bNodeTreeInterfaceItem &item)
bNode * node_find_node_by_name(bNodeTree &ntree, StringRefNull name)
bNodeTreeType * node_tree_type_find(StringRef idname)
bNode * node_get_active(bNodeTree &ntree)
const bNodeInstanceKey NODE_INSTANCE_KEY_BASE
bNodeInstanceKey node_instance_key(bNodeInstanceKey parent_key, const bNodeTree *ntree, const bNode *node)
Span< bNodeTreeType * > node_tree_types_get()
bNodeTree * node_tree_from_id(ID *id)
void header_region(const bContext *C, ARegion *region)
void region_init(wmWindowManager *wm, ARegion *region)
void types_register(ARegionType *region_type, const int space_type)
void region_listen(const wmRegionListenerParams *params)
void region_on_poll_success(const bContext *C, ARegion *region)
void header_region_listen(const wmRegionListenerParams *params)
void region_on_user_resize(const ARegion *region)
int context(const bContext *C, const char *member, bContextDataResult *result)
int region_snap(const ARegion *region, int size, int axis)
void * region_duplicate(void *regiondata)
bool regions_poll(const RegionPollParams *params)
void header_region_init(wmWindowManager *wm, ARegion *region)
void region_draw(const bContext *C, ARegion *region)
void region_message_subscribe(const wmRegionMessageSubscribeParams *params)
void region_layout(const bContext *C, ARegion *region)
void region_free(ARegion *region)
void paths_to_operator_properties(PointerRNA *ptr, const Span< std::string > paths)
static const ComputeContext * get_node_editor_root_compute_context(const SpaceNode &snode, bke::ComputeContextCache &compute_context_cache)
const ComputeContext * compute_context_for_edittree_socket(const SpaceNode &snode, bke::ComputeContextCache &compute_context_cache, const bNodeSocket &socket)
static void node_header_region_init(wmWindowManager *, ARegion *region)
static void node_widgets()
static void node_space_subtype_item_extend(bContext *C, EnumPropertyItem **item, int *totitem)
NodeLinkData data[NODELINK_GROUP_SIZE]
static std::string node_panel_drop_tooltip(bContext *, wmDrag *drag, const int[2], wmDropBox *)
static bool node_import_file_drop_poll(bContext *C, wmDrag *drag, const wmEvent *)
static int node_space_icon_get(const ScrArea *area)
static void node_toolbar_region_draw(const bContext *C, ARegion *region)
static void node_space_blend_read_data(BlendDataReader *reader, SpaceLink *sl)
static void node_group_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
static bool node_panel_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
static void node_header_region_draw(const bContext *C, ARegion *region)
static void node_asset_shelf_region_init(wmWindowManager *wm, ARegion *region)
MenuType swap_root_catalogs_menu_type()
static void node_foreach_id(SpaceLink *space_link, LibraryForeachIDData *data)
void free_previews(wmWindowManager &wm, SpaceNode &snode)
static SpaceLink * node_duplicate(SpaceLink *sl)
static void node_main_region_init(wmWindowManager *wm, ARegion *region)
static void node_id_remap(ID *old_id, ID *new_id, SpaceNode *snode)
void node_set_cursor(wmWindow &win, ARegion ®ion, SpaceNode &snode, const float2 &cursor)
static void node_import_file_drop_copy(bContext *, wmDrag *drag, wmDropBox *drop)
std::optional< nodes::FoundNestedNodeID > find_nested_node_id_in_root(const SpaceNode &snode, const bNode &node)
static void node_area_refresh(const bContext *C, ScrArea *area)
void NODE_GGT_backdrop_split(wmGizmoGroupType *gzgt)
static void node_panel_drop_copy(bContext *, wmDrag *drag, wmDropBox *drop)
static bool node_material_drop_poll(bContext *C, wmDrag *drag, const wmEvent *)
MenuType catalog_assets_menu_type()
static std::optional< const ComputeContext * > compute_context_for_tree_path(const SpaceNode &snode, bke::ComputeContextCache &compute_context_cache, const ComputeContext *parent_compute_context)
void NODE_GGT_backdrop_corner_pin(wmGizmoGroupType *gzgt)
void node_tree_interface_panel_register(ARegionType *art)
MenuType add_root_catalogs_menu_type()
const ComputeContext * compute_context_for_edittree(const SpaceNode &snode, bke::ComputeContextCache &compute_context_cache)
static bool node_color_drop_poll(bContext *C, wmDrag *drag, const wmEvent *)
static bool node_mask_drop_poll(bContext *, wmDrag *drag, const wmEvent *)
static int node_space_subtype_get(ScrArea *area)
void NODE_GGT_backdrop_crop(wmGizmoGroupType *gzgt)
static bool node_group_drop_poll(bContext *C, wmDrag *drag, const wmEvent *)
const ComputeContext * compute_context_for_zone(const bke::bNodeTreeZone &zone, bke::ComputeContextCache &compute_context_cache, const ComputeContext *parent_compute_context)
static void node_region_listener(const wmRegionListenerParams *params)
static bool node_id_im_drop_poll(bContext *, wmDrag *drag, const wmEvent *)
float2 space_node_group_offset(const SpaceNode &snode)
void NODE_GGT_backdrop_box_mask(wmGizmoGroupType *gzgt)
static void node_free(SpaceLink *sl)
static bool node_collection_drop_poll(bContext *C, wmDrag *drag, const wmEvent *)
std::optional< ObjectAndModifier > get_modifier_for_node_editor(const SpaceNode &snode)
static blender::StringRefNull node_space_name_get(const ScrArea *area)
void node_operatortypes()
static void node_dropboxes()
void NODE_GGT_backdrop_transform(wmGizmoGroupType *gzgt)
void snode_set_context(const bContext &C)
static void node_area_listener(const wmSpaceTypeListenerParams *params)
static void node_id_im_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
void node_keymap(wmKeyConfig *keyconf)
const ComputeContext * compute_context_for_zones(const Span< const bke::bNodeTreeZone * > zones, bke::ComputeContextCache &compute_context_cache, const ComputeContext *parent_compute_context)
static std::string node_socket_drop_tooltip(bContext *, wmDrag *drag, const int[2], wmDropBox *)
void NODE_GGT_backdrop_ellipse_mask(wmGizmoGroupType *gzgt)
static void node_init(wmWindowManager *, ScrArea *)
static int node_context(const bContext *C, const char *member, bContextDataResult *result)
static bool node_object_drop_poll(bContext *C, wmDrag *drag, const wmEvent *)
void node_draw_space(const bContext &C, ARegion ®ion)
static void node_cursor(wmWindow *win, ScrArea *area, ARegion *region)
static void node_buttons_region_draw(const bContext *C, ARegion *region)
static void node_socket_drop_copy(bContext *, wmDrag *drag, wmDropBox *drop)
static void node_id_drop_copy(bContext *C, wmDrag *drag, wmDropBox *drop)
bool node_editor_is_for_geometry_nodes_modifier(const SpaceNode &snode, const Object &object, const NodesModifierData &nmd)
static void node_toolbar_region_init(wmWindowManager *wm, ARegion *region)
static void node_exit(wmWindowManager *wm, ScrArea *area)
MenuType unassigned_assets_menu_type()
const ComputeContext * compute_context_for_edittree_node(const SpaceNode &snode, bke::ComputeContextCache &compute_context_cache, const bNode &node)
static void node_main_region_draw(const bContext *C, ARegion *region)
static bool any_node_uses_id(const bNodeTree *ntree, const ID *id)
void NODE_GGT_backdrop_glare(wmGizmoGroupType *gzgt)
static void node_buttons_region_init(wmWindowManager *wm, ARegion *region)
static void node_space_blend_write(BlendWriter *writer, SpaceLink *sl)
static void node_area_tag_tree_recalc(SpaceNode *snode, ScrArea *area)
static bool node_socket_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
static SpaceLink * node_create(const ScrArea *, const Scene *)
static void node_space_subtype_set(ScrArea *area, int value)
VecBase< float, 2 > float2
const char * node_context_dir[]
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
void RNA_struct_property_unset(PointerRNA *ptr, const char *identifier)
void RNA_property_unset(PointerRNA *ptr, PropertyRNA *prop)
void RNA_enum_items_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
bNodeTree * ED_node_tree_get(SpaceNode *snode, int level)
void ED_node_tree_start(ARegion *region, SpaceNode *snode, bNodeTree *ntree, ID *id, ID *from)
void ED_node_cursor_location_set(SpaceNode *snode, const float value[2])
void ED_node_tree_pop(ARegion *region, SpaceNode *snode)
void ED_node_tree_path_get(SpaceNode *snode, char *value)
void ED_node_tree_push(ARegion *region, SpaceNode *snode, bNodeTree *ntree, bNode *gnode)
int ED_node_tree_depth(SpaceNode *snode)
void ED_node_set_active_viewer_key(SpaceNode *snode)
int ED_node_tree_path_length(SpaceNode *snode)
void ED_node_cursor_location_get(const SpaceNode *snode, float value[2])
bool(* poll)(const RegionPollParams *params)
void(* on_poll_success)(const bContext *C, ARegion *region)
bool clip_gizmo_events_by_ui
void(* message_subscribe)(const wmRegionMessageSubscribeParams *params)
void(* cursor)(wmWindow *win, ScrArea *area, ARegion *region)
void(* listener)(const wmRegionListenerParams *params)
void *(* duplicate)(void *poin)
bContextDataCallback context
void(* draw)(const bContext *C, ARegion *region)
void(* layout)(const bContext *C, ARegion *region)
void(* on_user_resize)(const ARegion *region)
int(* snap_size)(const ARegion *region, int size, int axis)
void(* init)(wmWindowManager *wm, ARegion *region)
ARegionRuntimeHandle * runtime
struct bNodeTree * node_group
struct bNodeTree * compositing_node_group
struct bNodeTree * selected_node_group
SpaceNode_Runtime * runtime
struct bNodeTree * edittree
struct bNodeTree * nodetree
struct bNodeTree * nodetree
struct bNodeTreePath * next
struct bNodeTreePath * prev
bNodeInstanceKey parent_key
bNodeTreeRuntimeHandle * runtime
bNodeInstanceKey active_viewer_key
bool recalc_regular_compositing
const ComputeContext * compute_context
ComputeContextHash compute_context_hash
int closure_output_node_id
const AssetRepresentationHandle * asset
wmEventModifierFlag modifier
struct wmEvent * eventstate
wmDropBox * WM_dropbox_add(ListBase *lb, const char *idname, bool(*poll)(bContext *C, wmDrag *drag, const wmEvent *event), void(*copy)(bContext *C, wmDrag *drag, wmDropBox *drop), void(*cancel)(Main *bmain, wmDrag *drag, wmDropBox *drop), WMDropboxTooltipFunc tooltip)
void WM_drag_free_imported_drag_ID(Main *bmain, wmDrag *drag, wmDropBox *drop)
blender::Span< std::string > WM_drag_get_paths(const wmDrag *drag)
bool WM_drag_is_ID_type(const wmDrag *drag, int idcode)
ID * WM_drag_get_local_ID_or_import_from_asset(const bContext *C, const wmDrag *drag, int idcode)
ListBase * WM_dropboxmap_find(const char *idname, int spaceid, int regionid)
wmDragAsset * WM_drag_get_asset_data(const wmDrag *drag, int idcode)
ID * WM_drag_get_local_ID(const wmDrag *drag, short idcode)
wmEventHandler_Dropbox * WM_event_add_dropbox_handler(ListBase *handlers, ListBase *dropboxes)
wmEventHandler_Keymap * WM_event_add_keymap_handler(ListBase *handlers, wmKeyMap *keymap)
void WM_main_add_notifier(uint type, void *reference)
wmEventHandler_Keymap * WM_event_add_keymap_handler_v2d_mask(ListBase *handlers, wmKeyMap *keymap)
wmGizmoGroupTypeRef * WM_gizmogrouptype_append_and_link(wmGizmoMapType *gzmap_type, void(*wtfunc)(wmGizmoGroupType *))
void WM_gizmomap_tag_refresh(wmGizmoMap *gzmap)
wmGizmoMapType * WM_gizmomaptype_ensure(const wmGizmoMapType_Params *gzmap_params)
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)