diff options
4 files changed, 15 insertions, 13 deletions
diff --git a/source/blender/windowmanager/gizmo/WM_gizmo_api.h b/source/blender/windowmanager/gizmo/WM_gizmo_api.h index c2fbaaaa83c..e66243009f1 100644 --- a/source/blender/windowmanager/gizmo/WM_gizmo_api.h +++ b/source/blender/windowmanager/gizmo/WM_gizmo_api.h @@ -285,7 +285,8 @@ eWM_GizmoFlagMapDrawStep WM_gizmomap_drawstep_from_gizmo_group(const struct wmGi void WM_gizmomap_tag_refresh_drawstep(struct wmGizmoMap *gzmap, const eWM_GizmoFlagMapDrawStep drawstep); void WM_gizmomap_tag_refresh(struct wmGizmoMap *gzmap); -bool WM_gizmomap_tag_refresh_check(struct wmGizmoMap *gzmap); + +bool WM_gizmomap_tag_delay_refresh_for_tweak_check(struct wmGizmoMap *gzmap); void WM_gizmomap_draw(struct wmGizmoMap *gzmap, const struct bContext *C, diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c index c3dfdd9a419..59975080f49 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c @@ -333,13 +333,11 @@ void WM_gizmomap_tag_refresh(wmGizmoMap *gzmap) } } -bool WM_gizmomap_tag_refresh_check(wmGizmoMap *gzmap) +bool WM_gizmomap_tag_delay_refresh_for_tweak_check(wmGizmoMap *gzmap) { - if (gzmap) { - for (int i = 0; i < WM_GIZMOMAP_DRAWSTEP_MAX; i++) { - if (gzmap->update_flag[i] & (GIZMOMAP_IS_PREPARE_DRAW | GIZMOMAP_IS_REFRESH_CALLBACK)) { - return true; - } + for (wmGizmoGroup *gzgroup = gzmap->groups.first; gzgroup; gzgroup = gzgroup->next) { + if (gzgroup->hide.delay_refresh_for_tweak) { + return true; } } return false; diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 8eaba61fb5b..947babea24f 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -2811,12 +2811,6 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers BLI_assert(gzmap != NULL); wmGizmo *gz = wm_gizmomap_highlight_get(gzmap); - /* Special case, needed so postponed refresh can respond to events, - * see #WM_GIZMOGROUPTYPE_DELAY_REFRESH_FOR_TWEAK for details. */ - if (WM_gizmomap_tag_refresh_check(gzmap)) { - ED_region_tag_redraw(region); - } - if (region->gizmo_map != handler->gizmo_map) { WM_gizmomap_tag_refresh(handler->gizmo_map); } diff --git a/source/blender/windowmanager/intern/wm_gesture_ops.c b/source/blender/windowmanager/intern/wm_gesture_ops.c index 4bd87b33a23..a5f32b4ff1f 100644 --- a/source/blender/windowmanager/intern/wm_gesture_ops.c +++ b/source/blender/windowmanager/intern/wm_gesture_ops.c @@ -528,6 +528,15 @@ static void gesture_tweak_modal(bContext *C, const wmEvent *event) if (gesture_end) { /* Frees gesture itself, and unregisters from window. */ WM_gesture_end(C, gesture); + + /* This isn't very nice but needed to redraw gizmos which are hidden while tweaking, + * See #WM_GIZMOGROUPTYPE_DELAY_REFRESH_FOR_TWEAK for details. */ + ARegion *ar = CTX_wm_region(C); + if ((ar != NULL) && (ar->gizmo_map != NULL)) { + if (WM_gizmomap_tag_delay_refresh_for_tweak_check(ar->gizmo_map)) { + ED_region_tag_redraw(ar); + } + } } } |