[Bf-blender-cvs] [08c4f134d29] blender-v3.0-release: Fix T92783: Light size controller doesn't update position

Campbell Barton noreply at git.blender.org
Thu Nov 4 08:09:34 CET 2021


Commit: 08c4f134d290be0229d4cc1cabcaa595efe93360
Author: Campbell Barton
Date:   Thu Nov 4 18:03:50 2021 +1100
Branches: blender-v3.0-release
https://developer.blender.org/rB08c4f134d290be0229d4cc1cabcaa595efe93360

Fix T92783: Light size controller doesn't update position

Resolve by tagging the gizmo group map for refresh
when the modal gizmo group changes.

Regression in fb27a9bb983ce74b8d8f5f871cf0706dd1e25051.

===================================================================

M	source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c

===================================================================

diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
index 18e1a8420a6..6f952bc9526 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
@@ -743,14 +743,7 @@ wmGizmo *wm_gizmomap_highlight_find(wmGizmoMap *gzmap,
     }
 
     if (WM_gizmo_group_type_poll(C, gzgroup->type)) {
-      eWM_GizmoFlagMapDrawStep step;
-      if (gzgroup->type->flag & WM_GIZMOGROUPTYPE_3D) {
-        step = WM_GIZMOMAP_DRAWSTEP_3D;
-      }
-      else {
-        step = WM_GIZMOMAP_DRAWSTEP_2D;
-      }
-
+      const eWM_GizmoFlagMapDrawStep step = WM_gizmomap_drawstep_from_gizmo_group(gzgroup);
       if (do_step[step]) {
         if (gzmap->update_flag[step] & GIZMOMAP_IS_REFRESH_CALLBACK) {
           WM_gizmo_group_refresh(C, gzgroup);
@@ -1050,6 +1043,8 @@ wmGizmo *wm_gizmomap_highlight_get(wmGizmoMap *gzmap)
 void wm_gizmomap_modal_set(
     wmGizmoMap *gzmap, bContext *C, wmGizmo *gz, const wmEvent *event, bool enable)
 {
+  bool do_refresh = false;
+
   if (enable) {
     BLI_assert(gzmap->gzmap_context.modal == NULL);
     wmWindow *win = CTX_wm_window(C);
@@ -1068,6 +1063,9 @@ void wm_gizmomap_modal_set(
       }
     }
 
+    if (gzmap->gzmap_context.modal != gz) {
+      do_refresh = true;
+    }
     gz->state |= WM_GIZMO_STATE_MODAL;
     gzmap->gzmap_context.modal = gz;
 
@@ -1092,7 +1090,6 @@ void wm_gizmomap_modal_set(
         gz->state &= ~WM_GIZMO_STATE_MODAL;
         MEM_SAFE_FREE(gz->interaction_data);
       }
-      return;
     }
   }
   else {
@@ -1103,6 +1100,10 @@ void wm_gizmomap_modal_set(
       gz->state &= ~WM_GIZMO_STATE_MODAL;
       MEM_SAFE_FREE(gz->interaction_data);
     }
+
+    if (gzmap->gzmap_context.modal != NULL) {
+      do_refresh = true;
+    }
     gzmap->gzmap_context.modal = NULL;
 
     if (C) {
@@ -1124,6 +1125,12 @@ void wm_gizmomap_modal_set(
 
     gzmap->gzmap_context.event_xy[0] = INT_MAX;
   }
+
+  if (do_refresh) {
+    const eWM_GizmoFlagMapDrawStep step = WM_gizmomap_drawstep_from_gizmo_group(
+        gz->parent_gzgroup);
+    gzmap->update_flag[step] |= GIZMOMAP_IS_REFRESH_CALLBACK;
+  }
 }
 
 wmGizmo *wm_gizmomap_modal_get(wmGizmoMap *gzmap)



More information about the Bf-blender-cvs mailing list