diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-09-17 07:28:47 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-09-17 07:30:46 +0300 |
commit | b8592b656b124c43a41a7264411d134e5f2bd654 (patch) | |
tree | e5f54c58c7ec771f77eda390f7b17375e741b0c1 /source/blender/windowmanager/gizmo | |
parent | f409c1ec9398309dcc34fb0c5f8c4b447c2c3210 (diff) |
Gizmo: Functions to re-initialize a group type
Partially re-initializing a gizmo is often more trouble then removing
and re-adding.
Diffstat (limited to 'source/blender/windowmanager/gizmo')
-rw-r--r-- | source/blender/windowmanager/gizmo/WM_gizmo_api.h | 14 | ||||
-rw-r--r-- | source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c | 34 |
2 files changed, 40 insertions, 8 deletions
diff --git a/source/blender/windowmanager/gizmo/WM_gizmo_api.h b/source/blender/windowmanager/gizmo/WM_gizmo_api.h index 4a01e33cae7..153840986ef 100644 --- a/source/blender/windowmanager/gizmo/WM_gizmo_api.h +++ b/source/blender/windowmanager/gizmo/WM_gizmo_api.h @@ -314,12 +314,12 @@ void WM_gizmo_group_type_add_ptr( struct wmGizmoGroupType *gzgt); void WM_gizmo_group_type_add(const char *idname); -void WM_gizmo_group_type_ensure_ptr_ex( +bool WM_gizmo_group_type_ensure_ptr_ex( struct wmGizmoGroupType *gzgt, struct wmGizmoMapType *gzmap_type); -void WM_gizmo_group_type_ensure_ptr( +bool WM_gizmo_group_type_ensure_ptr( struct wmGizmoGroupType *gzgt); -void WM_gizmo_group_type_ensure(const char *idname); +bool WM_gizmo_group_type_ensure(const char *idname); void WM_gizmo_group_type_remove_ptr_ex( struct Main *bmain, struct wmGizmoGroupType *gzgt, @@ -335,6 +335,14 @@ void WM_gizmo_group_type_unlink_delayed_ptr( struct wmGizmoGroupType *gzgt); void WM_gizmo_group_type_unlink_delayed(const char *idname); +/* Has the result of unlinking and linking (re-initializes gizmo's). */ +void WM_gizmo_group_type_reinit_ptr_ex( + struct Main *bmain, struct wmGizmoGroupType *gzgt, + struct wmGizmoMapType *gzmap_type); +void WM_gizmo_group_type_reinit_ptr( + struct Main *bmain, struct wmGizmoGroupType *gzgt); +void WM_gizmo_group_type_reinit(struct Main *bmain, const char *idname); + /* Utilities */ bool WM_gizmo_context_check_drawstep(const struct bContext *C, eWM_GizmoFlagMapDrawStep step); diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c index e46cd9049a5..aa4058c95f4 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c @@ -879,26 +879,28 @@ void WM_gizmo_group_type_add(const char *idname) WM_gizmo_group_type_add_ptr(gzgt); } -void WM_gizmo_group_type_ensure_ptr_ex( +bool WM_gizmo_group_type_ensure_ptr_ex( wmGizmoGroupType *gzgt, wmGizmoMapType *gzmap_type) { wmGizmoGroupTypeRef *gzgt_ref = WM_gizmomaptype_group_find_ptr(gzmap_type, gzgt); if (gzgt_ref == NULL) { WM_gizmo_group_type_add_ptr_ex(gzgt, gzmap_type); + return true; } + return false; } -void WM_gizmo_group_type_ensure_ptr( +bool WM_gizmo_group_type_ensure_ptr( wmGizmoGroupType *gzgt) { wmGizmoMapType *gzmap_type = WM_gizmomaptype_ensure(&gzgt->gzmap_params); - WM_gizmo_group_type_ensure_ptr_ex(gzgt, gzmap_type); + return WM_gizmo_group_type_ensure_ptr_ex(gzgt, gzmap_type); } -void WM_gizmo_group_type_ensure(const char *idname) +bool WM_gizmo_group_type_ensure(const char *idname) { wmGizmoGroupType *gzgt = WM_gizmogrouptype_find(idname, false); BLI_assert(gzgt != NULL); - WM_gizmo_group_type_ensure_ptr(gzgt); + return WM_gizmo_group_type_ensure_ptr(gzgt); } void WM_gizmo_group_type_remove_ptr_ex( @@ -921,6 +923,28 @@ void WM_gizmo_group_type_remove(struct Main *bmain, const char *idname) WM_gizmo_group_type_remove_ptr(bmain, gzgt); } +void WM_gizmo_group_type_reinit_ptr_ex( + struct Main *bmain, wmGizmoGroupType *gzgt, + wmGizmoMapType *gzmap_type) +{ + wmGizmoGroupTypeRef *gzgt_ref = WM_gizmomaptype_group_find_ptr(gzmap_type, gzgt); + BLI_assert(gzgt_ref != NULL); + WM_gizmomaptype_group_unlink(NULL, bmain, gzmap_type, gzgt); + WM_gizmo_group_type_add_ptr_ex(gzgt, gzmap_type); +} +void WM_gizmo_group_type_reinit_ptr( + struct Main *bmain, wmGizmoGroupType *gzgt) +{ + wmGizmoMapType *gzmap_type = WM_gizmomaptype_ensure(&gzgt->gzmap_params); + WM_gizmo_group_type_reinit_ptr_ex(bmain, gzgt, gzmap_type); +} +void WM_gizmo_group_type_reinit(struct Main *bmain, const char *idname) +{ + wmGizmoGroupType *gzgt = WM_gizmogrouptype_find(idname, false); + BLI_assert(gzgt != NULL); + WM_gizmo_group_type_reinit_ptr(bmain, gzgt); +} + /* delayed versions */ void WM_gizmo_group_type_unlink_delayed_ptr_ex( |